おれはいったいなにを...w

#include "stdio.h"
#include "stdlib.h"
#include "string.h"

const char kwd[]=   "アイウエオ"
                    "カキクケコ"
                    "サシスセソ"
                    "タチツテト"
                    "ナニヌネノ"
                    "ハヒフヘホ"
                    "マミムメモ"
                    "ヤヰユヱヨ"
                    "ラリルレロ"
                    "ガギグゲゴ"
                    "ザジズゼゾ"
                    "ダジヅデド"
                    "バビブベボ"
                    "パピプペポ"
                    "ヴー"
                    "ワヲン。、"
                    "ァィゥェォ"
                    "ャュョヮッ"

                    "\0\0\0\0\0\0\0\0\0\0" /* term */
                    ;

#define KWD_HI(x) kwd[(x)*2]
#define KWD_LO(x) kwd[(x)*2+1]
#define KWD_NUM   sizeof(kwd)/(sizeof(char) * 2)

#define COMPUTED_SIZE 1024


int
reflex( char *computed, int start, int rest)
{
	int i;
	int len;
	len = strlen(computed);
	
	rest--;
	
	for(i = start;;i++){
		
		/* end ? */
		if( KWD_HI(i) == '\0' ||
		    KWD_LO(i) == '\0' ) break;
		
		/* */
		computed[len + 0] = KWD_HI(i);
		computed[len + 1] = KWD_LO(i);
		computed[len + 2] = '\0';

		if(rest == 0) {
			/* out */
			puts(computed);
		}
		else {
			reflex(computed, 0, rest);
		}
		
		computed[len + 0] = '\0';

	}
	
	return 0;
}


int
main(void)
{
	char computed[COMPUTED_SIZE];
	int length;
	int rest;
	
	length = 2;  /* XXX */

	for(rest = 1; rest <= length; rest++){
		memset( computed, 0 , COMPUTED_SIZE);
		reflex( computed, 0, rest);
	}
	
	return 0;
}

ref: http://q.hatena.ne.jp/1219596994
-