
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int a[81] = {0};
int test(int *a, int cur)
{
int row, column;
int tmp;
row = cur / 9;
column = cur % 9;
for(tmp=0; tmp<column; tmp++)
{
if(a[9*row+tmp] == a[cur])
{
return -1;
}
}
for(tmp=column+1; tmp<9; tmp++)
{
if(a[9*row+tmp] == a[cur])
{
return -1;
}
}
for(tmp=0; tmp<row; tmp++)
{
if(a[9*tmp+column] == a[cur])
{
return -1;
}
}
for(tmp=row+1; tmp<9; tmp++)
{
if(a[9*tmp+column] == a[cur])
{
return -1;
}
}
return 0;
}
int test_3x3(int *a)
{
int flag;
int row, column;
int tmp;
int i, j;
for(tmp=1; tmp<10; tmp++)
{
for(row=0; row<3; row++)
{
for(column=0; column<3; column++)
{
flag = 0;
for(i=3*row; i<3*row+3; i++)
{
for(j=3*column; j<3*column+3; j++)
{
if(a[9*i+j] == tmp)
{
flag = 1;
}
}
}
if(flag == 0)
{
return -1;
}
}
}
}
return 0;
}
int set(int *a, int cur)
{
int i;
if(a[cur] == 0)
{
for(i=1; i<10; i++)
{
a[cur] = i;
if(test(a, cur)==0)
{
if(cur < 80)
{
if(set(a, cur+1) == 0)
{
return 0;
}
}
else
{
if(test_3x3(a)<0)
{
a[cur] = 0;
return -1;
}
return 0;
}
}
}
a[cur] = 0;
return -1;
}
else
{
if(cur<80)
return set(a, cur+1);
else
return test_3x3(a);
}
}
int main(int argc, char** argv)
{
int i, j;
for(i=0; i<9; i++)
{
scanf("%d %d %d %d %d %d %d %d %d", a+9*i, a+9*i+1, a+9*i+2, a+9*i+3, a+9*i+4, a+9*i+5, a+9*i+6, a+9*i+7, a+9*i+8);
}
set(a, 0);
for(i=0; i<9; i++)
{
for(j=0; j<9; j++)
{
printf("%d ", a[i*9+j]);
}
printf("\n");
}
return 0;
}