#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int row, col, k, mask, level, size, n, j;
double t;
int **Latin;

int main(void)
{
	printf("input mod:");
	scanf("%d",&size);
	t= ceil(log(size+1.0)/log(2.0));  //取上整
	//printf("t= %f",t);
	n= (int)pow(2,t); //實驗次數
	printf("實驗次數 %d \n",n);
	Latin = (int **)malloc(n * sizeof(int*));
	for(j=0;j<n;j++){Latin[j]= (int *)malloc(size * sizeof(int));}

	for(row = 0 ; row < n ; row++) 
		for(col = 0 ; col < size  ; col++) { 
			level = 0;
			k = col + 1;
            mask = n / 2;
			while (k > 0) {
				if ((k % 2) && ((row) & (mask)))
					level = (level + 1) %2;
				k /= 2;
				mask /= 2;
				Latin[row][col] = level + 1;
			}
		}

		for(row = 0 ; row < n ; row++) 
		{
		for(col = 0 ; col < size ; col++) 
		{
			//printf("[%d%d] ",row,col);
			printf("%d ",Latin[row][col]); //欣賞一下所產生的拉丁方陣
		}
		printf("\n");
		}
		
		printf("OK!");
		system("PAUSE");


}