#include
#define N 9
#define N_BOX 3
int mat[N][N] = {0};
int mat_set[N][N] = {0};
int Judge(int x, int y)
{
//Line & Cols
//if(0)
{
int i;
int s = mat[y][x];
for(i=0;i
{
if( (i!=x && s==mat[y][i])
|| (i!=y && s==mat[i][x]) )
{
//printf("y=%d,x=%d\n",y,x);
return 0;
}
}
}
//Box
//if(0)
{
int x_start = x / N_BOX * N_BOX;
int x_stop = x_start N_BOX;
int y_start = y / N_BOX * N_BOX;
int y_stop = y_start N_BOX;
int ix,iy;
for(iy=y_start; iy
{
for(ix=x_start; ix
{
//printf("ix=%d,iy=%d\n",ix,iy);
if( (ix!=x && iy!=y)
&& mat[iy][ix]==mat[y][x]
)
{
return 0;
}
}
}
}
return 1;
}
int Input()
{
int ix,iy;
for(iy=0;iy
{
for(ix=0;ix
{
int s;
fscanf(stdin,"%d",&s);
mat[iy][ix] = mat_set[iy][ix] = s;
}
}
return 0;
}
int Output()
{
int ix,iy;
for(iy=0;iy
{
for(ix=0;ix
{
printf("%d ",mat[iy][ix]);
}
printf("\n");
}
return 0;
}
int Check()
{
int i=0;
while(0<=i && i
{
//printf("%d\n",i);
if(mat_set[i/N][i%N]!=0)//Is Set
{
i;
continue;
}
for( mat[i/N][i%N];mat[i/N][i%N]<=N; mat[i/N][i%N])
{
if(Judge(i%N,i/N))
{
break;
}
}
if(mat[i/N][i%N]>N) //Not Found
{
mat[i/N][i%N] = 0;
--i;
while(0<=i && mat_set[i/N][i%N]!=0)--i;
}
else
{
i;
}
}
if(i==N*N)
return 1;
return 0;
}
int main()
{
Input();
if(Check())
{
Output();
}
else
{
printf("Not Found\n");
}
return 0;
}
#define N 9
#define N_BOX 3
int mat[N][N] = {0};
int mat_set[N][N] = {0};
int Judge(int x, int y)
{
//Line & Cols
//if(0)
{
int i;
int s = mat[y][x];
for(i=0;i
{
if( (i!=x && s==mat[y][i])
||
{
//printf("y=%d,x=%d\n",y,x);
return 0;
}
}
}
//Box
//if(0)
{
int x_start = x / N_BOX * N_BOX;
int x_stop = x_start N_BOX;
int y_start = y / N_BOX * N_BOX;
int y_stop = y_start N_BOX;
int ix,iy;
for(iy=y_start; iy
{
for(ix=x_start; ix
{
//printf("ix=%d,iy=%d\n",ix,iy);
if(
&&
)
{
return 0;
}
}
}
}
return 1;
}
int Input()
{
int ix,iy;
for(iy=0;iy
{
for(ix=0;ix
{
int s;
fscanf(stdin,"%d",&s);
mat[iy][ix] = mat_set[iy][ix] = s;
}
}
return 0;
}
int Output()
{
int ix,iy;
for(iy=0;iy
{
for(ix=0;ix
{
printf("%d ",mat[iy][ix]);
}
printf("\n");
}
return 0;
}
int Check()
{
int i=0;
while(0<=i && i
{
//printf("%d\n",i);
if(mat_set[i/N][i%N]!=0)//Is Set
{
i;
continue;
}
for( mat[i/N][i%N];mat[i/N][i%N]<=N; mat[i/N][i%N])
{
if(Judge(i%N,i/N))
{
break;
}
}
if(mat[i/N][i%N]>N) //Not Found
{
mat[i/N][i%N] = 0;
--i;
while(0<=i && mat_set[i/N][i%N]!=0)--i;
}
else
{
i;
}
}
if(i==N*N)
return 1;
return 0;
}
int main()
{
Input();
if(Check())
{
Output();
}
else
{
printf("Not Found\n");
}
return 0;
}