#include <stdio.h>
// #define COMPILING_CORE 1
#define STRINGIFY_2(core) (#core)
#define CONCAT_TOKENS(x, y) STRINGIFY_2(x ## y)
#define STRINGIFY(core) (STRINGIFY_2(core))
#define TOKENPASTE3(x, y) #x #y
// #define STRINGIFY()
/*
* Concatenate preprocessor tokens A and B without expanding macro definitions
* (however, if invoked from a macro, macro arguments are expanded).
*/
#define PPCAT_NX(A, B) (A ## B)
/*
* Concatenate preprocessor tokens A and B after macro-expanding them.
*/
#define PPCAT(A, B) (PPCAT_NX(A, B))
/*
* Turn A into a string literal without expanding macro definitions
* (however, if invoked from a macro, macro arguments are expanded).
*/
#define STRINGIZE_NX(A) (#A)
/*
* Turn A into a string literal after macro-expanding it.
*/
#define STRINGIZE(A) (STRINGIZE_NX(A))
#define T1 T
#define T2 1
#define COMPILING_CORE 1
// #define T2 1
// STRINGIZE(PPCAT(T1, COMPILING_CORE)) // produces "s1"
int main(void) {
// your code goes here
printf(STRINGIZE
(PPCAT
(T1
, T2
))); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgovLyAjZGVmaW5lIENPTVBJTElOR19DT1JFIDEKI2RlZmluZSBTVFJJTkdJRllfMihjb3JlKSAoI2NvcmUpCiNkZWZpbmUgQ09OQ0FUX1RPS0VOUyh4LCB5KSBTVFJJTkdJRllfMih4ICMjIHkpCiNkZWZpbmUgU1RSSU5HSUZZKGNvcmUpIChTVFJJTkdJRllfMihjb3JlKSkKI2RlZmluZSBUT0tFTlBBU1RFMyh4LCB5KSAjeCAjeQovLyAjZGVmaW5lIFNUUklOR0lGWSgpCgovKgogKiBDb25jYXRlbmF0ZSBwcmVwcm9jZXNzb3IgdG9rZW5zIEEgYW5kIEIgd2l0aG91dCBleHBhbmRpbmcgbWFjcm8gZGVmaW5pdGlvbnMKICogKGhvd2V2ZXIsIGlmIGludm9rZWQgZnJvbSBhIG1hY3JvLCBtYWNybyBhcmd1bWVudHMgYXJlIGV4cGFuZGVkKS4KICovCiNkZWZpbmUgUFBDQVRfTlgoQSwgQikgKEEgIyMgQikKCi8qCiAqIENvbmNhdGVuYXRlIHByZXByb2Nlc3NvciB0b2tlbnMgQSBhbmQgQiBhZnRlciBtYWNyby1leHBhbmRpbmcgdGhlbS4KICovCiNkZWZpbmUgUFBDQVQoQSwgQikgKFBQQ0FUX05YKEEsIEIpKQoKLyoKICogVHVybiBBIGludG8gYSBzdHJpbmcgbGl0ZXJhbCB3aXRob3V0IGV4cGFuZGluZyBtYWNybyBkZWZpbml0aW9ucwogKiAoaG93ZXZlciwgaWYgaW52b2tlZCBmcm9tIGEgbWFjcm8sIG1hY3JvIGFyZ3VtZW50cyBhcmUgZXhwYW5kZWQpLgogKi8KI2RlZmluZSBTVFJJTkdJWkVfTlgoQSkgKCNBKQoKLyoKICogVHVybiBBIGludG8gYSBzdHJpbmcgbGl0ZXJhbCBhZnRlciBtYWNyby1leHBhbmRpbmcgaXQuCiAqLwojZGVmaW5lIFNUUklOR0laRShBKSAoU1RSSU5HSVpFX05YKEEpKQoKI2RlZmluZSBUMSBUCiNkZWZpbmUgVDIgMQojZGVmaW5lIENPTVBJTElOR19DT1JFIDEKLy8gI2RlZmluZSBUMiAxCi8vIFNUUklOR0laRShQUENBVChUMSwgQ09NUElMSU5HX0NPUkUpKSAvLyBwcm9kdWNlcyAiczEiCgoKaW50IG1haW4odm9pZCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJcHJpbnRmKFNUUklOR0laRShQUENBVChUMSwgVDIpKSk7CglyZXR1cm4gMDsKfQo=