#include <stdio.h>

inline void logMsg(const char*fmt, int n1,int n2,int n3,int n4,int n5,int n6)
{
	printf(fmt,n1,n2,n3,n4,n5,n6);
}

#define LOGMSG1(fmt,n1)                logMsg(fmt,(int)n1,0,0,0,0,0)
#define LOGMSG2(fmt,n1,n2)             logMsg(fmt,(int)n1,(int)n2,0,0,0,0)
#define LOGMSG3(fmt,n1,n2,n3)          logMsg(fmt,(int)n1,(int)n2,(int)n3,0,0,0)
#define LOGMSG4(fmt,n1,n2,n3,n4)       logMsg(fmt,(int)n1,(int)n2,(int)n3,(int)n4,0,0)
#define LOGMSG5(fmt,n1,n2,n3,n4,n5)    logMsg(fmt,(int)n1,(int)n2,(int)n3,(int)n4,(int)n5,0)
#define LOGMSG6(fmt,n1,n2,n3,n4,n5,n6) logMsg(fmt,(int)n1,(int)n2,(int)n3,(int)n4,(int)n5,(int)n6)
#define GET_NAME(_1,_2,_3,_4,_5,_6,NAME,...) NAME
#define TRACE(fmt, ...) GET_NAME(__VA_ARGS__,LOGMSG6,LOGMSG5,LOGMSG4,LOGMSG3,LOGMSG2,LOGMSG1)(fmt,__VA_ARGS__)

int main(void) {
	logMsg("%d,%d,%d,%d,%d,%d\n",1,2,3,4,5,6);
	logMsg("%d,%d,%d,%d,%d\n",   1,2,3,4,5,0);
	logMsg("%d,%d,%d,%d\n",      1,2,3,4,0,0);
	logMsg("%d,%d,%d\n",         1,2,3,0,0,0);
	logMsg("%d,%d\n",            1,2,0,0,0,0);
	logMsg("%d\n",               1,0,0,0,0,0);

	TRACE("%d,%d,%d,%d,%d,%d\n", 1,2,3,4,5,6);
	TRACE("%d,%d,%d,%d,%d\n",    1,2,3,4,5);
	TRACE("%d,%d,%d,%d\n",       1,2,3,4);
	TRACE("%d,%d,%d\n",          1,2,3);
	TRACE("%d,%d\n",             1,2);
	TRACE("%d\n",                1);
	return 0;
}
