#include <stdio.h>
#define __NARG(unused, _1, _2, _3, _4, _5, VAL, ...) VAL
#define NARG(...) __NARG(unused, ##__VA_ARGS__, 5, 4, 3, 2, 1, 0)
#define __STRINGIFY(...) #__VA_ARGS__
#define _STRINGIFY(...) __STRINGIFY(__VA_ARGS__)
#define STRINGIFY(...) _STRINGIFY(__VA_ARGS__)
#define DO_SOMETHING_0(...) ZERO
#define DO_SOMETHING_1(...) ONE
#define DO_SOMETHING_2(...) TWO
#define DO_SOMETHING_3(...) THREE
#define DO_SOMETHING_4(...) FOUR
#define __DO_SOMETHING(narg, ...) STRINGIFY(DO_SOMETHING_ ## narg (__VA_ARGS__))
#define _DO_SOMETHING(narg, ...) __DO_SOMETHING(narg, __VA_ARGS__)
#define DO_SOMETHING(...) _DO_SOMETHING(NARG(__VA_ARGS__), __VA_ARGS__)
int main()
{
puts(DO_SOMETHING
(Hello
)); puts(DO_SOMETHING
(Hello
, World
)); puts(DO_SOMETHING
(Hello
, World
, This
)); puts(DO_SOMETHING
(Hello
, World
, This
, Is
)); }
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIF9fTkFSRyh1bnVzZWQsIF8xLCBfMiwgXzMsIF80LCBfNSwgVkFMLCAuLi4pIFZBTAojZGVmaW5lIE5BUkcoLi4uKSBfX05BUkcodW51c2VkLCAjI19fVkFfQVJHU19fLCA1LCA0LCAzLCAyLCAxLCAwKQoKI2RlZmluZSBfX1NUUklOR0lGWSguLi4pICNfX1ZBX0FSR1NfXwojZGVmaW5lIF9TVFJJTkdJRlkoLi4uKSBfX1NUUklOR0lGWShfX1ZBX0FSR1NfXykKI2RlZmluZSBTVFJJTkdJRlkoLi4uKSBfU1RSSU5HSUZZKF9fVkFfQVJHU19fKQoKI2RlZmluZSBET19TT01FVEhJTkdfMCguLi4pIFpFUk8KI2RlZmluZSBET19TT01FVEhJTkdfMSguLi4pIE9ORQojZGVmaW5lIERPX1NPTUVUSElOR18yKC4uLikgVFdPCiNkZWZpbmUgRE9fU09NRVRISU5HXzMoLi4uKSBUSFJFRQojZGVmaW5lIERPX1NPTUVUSElOR180KC4uLikgRk9VUgoKI2RlZmluZSBfX0RPX1NPTUVUSElORyhuYXJnLCAuLi4pIFNUUklOR0lGWShET19TT01FVEhJTkdfICMjIG5hcmcgKF9fVkFfQVJHU19fKSkKI2RlZmluZSBfRE9fU09NRVRISU5HKG5hcmcsIC4uLikgX19ET19TT01FVEhJTkcobmFyZywgX19WQV9BUkdTX18pCiNkZWZpbmUgRE9fU09NRVRISU5HKC4uLikgX0RPX1NPTUVUSElORyhOQVJHKF9fVkFfQVJHU19fKSwgX19WQV9BUkdTX18pCgppbnQgbWFpbigpCnsKICAgIHB1dHMoRE9fU09NRVRISU5HKCkpOwogICAgcHV0cyhET19TT01FVEhJTkcoSGVsbG8pKTsKICAgIHB1dHMoRE9fU09NRVRISU5HKEhlbGxvLCBXb3JsZCkpOwogICAgcHV0cyhET19TT01FVEhJTkcoSGVsbG8sIFdvcmxkLCBUaGlzKSk7CiAgICBwdXRzKERPX1NPTUVUSElORyhIZWxsbywgV29ybGQsIFRoaXMsIElzKSk7Cn0=