#include <stdio.h>

#define ROW 2
#define COLUMN 100

int FLAG(int new4,int new3,int i);

int a[ROW][COLUMN]={0};

int main(void)
{
	int new4=0,new3=0;
	int i,pre4,pre3;
	int g=a[0][0]+a[1][0];

	printf("水差し問題\n");
	printf("4L=%d,3L=%d,Goukei=%d\n",a[0][0],a[1][0],g);

	for(i=1;i<100;i++){	//
		pre4=a[0][i-1];
		pre3=a[1][i-1];
		g=pre4+pre3;
		if(pre4==2 && pre3==0){
			printf("-終了-\n"); // [2] [0]の状態で終了 を表示
			return 0;
		}
		while (1) {
			if(pre4<4){	// 4Lが4未満なら、4L=4、3L=そのまま
				new4=4;
				new3=pre3;
				if (FLAG(new4,new3,i)) break;
			}
			if(pre3<3){	// 3Lが3未満なら、4L=そのまま、3L=3
				new4=pre4;
				new3=3;
				if (FLAG(new4,new3,i)) break;
			}
			if(pre4>0){	// 4Lが0超えなら、4L=0、3L=そのまま
				new4=0;
				new3=pre3;
				if (FLAG(new4,new3,i)) break;
			}
			if(pre3>0){	// 3Lが0超えなら、4L=そのまま、3L=0
				new4=pre4;
				new3=0;
				if (FLAG(new4,new3,i)) break;
			}
			// 合計が3以上、4Lが0超え、3Lが3未満なら、4L=合計-3、3L=3
			if(g>=3 && pre4>0 && pre3<3){
				new4=pre4+pre3-3;
				new3=3;
				if (FLAG(new4,new3,i)) break;
			}
			// 合計が4以上、4Lが4未満、3Lが0超えなら、4L=4、3L=合計-4
			if(g>=4 && pre4<4 && pre3>0){
				new3=pre4+pre3-4;
				new4=4;
				if (FLAG(new4,new3,i)) break;
			}
			// 合計が4未満、4Lが4未満、3Lが0超えなら、4L=全部、3L=0
			if(g<4 && pre4<4 && pre3>0){
				new4=pre4+pre3;
				new3=0;
				if (FLAG(new4,new3,i)) break;
			}
			// 合計が3未満、4Lが0超え、3Lが3未満なら、4L=0、3L=全部
			if(g<3 && pre4>0 && pre3<3){
				new3=pre4+pre3;
				new4=0;
				if (FLAG(new4,new3,i)) break;
			}
			printf("-解なし-\n");
			return 1;
		}
		a[0][i]=new4;
		a[1][i]=new3;
		g=a[0][i]+a[1][i];
		printf("4L=%d,3L=%d,Goukei=%d\n",a[0][i],a[1][i],g);
	}
}

// 戻り値：0=履歴にあり（試行未決定）1=履歴になし（試行決定）
int FLAG(int new4,int new3,int i)
{
	int j;

	for(j=0;j<i;j++){
		if(new4==a[0][j] && new3==a[1][j]){
			return 0;
		}
	}
	return 1;
}
