#include<stdio.h>
#include<stdio.h>
#include<string>
#include<mem.h>
#include<iostream>
#include<queue>
using namespace std;
int map[10][10];
bool vis[10][10];
//char c[2];
char c;
int val[10];
int x[]={0,1,4,7};
int k=1;
int num=0;
bool flag;
struct node
{
int a,b;
}temp;
queue<node> nodes;
void DFS(node fuck)
{
int px=fuck.a;
int py=fuck.b;
if(px==9&&py==9&&flag==false)
{
flag=true;
if(k>1){printf("\n");}
for(int ii=1;ii<=9;ii++)
{
for(int jj=1;jj<=8;jj++)
{
printf("%d ",map[ii][jj]);
}
printf("%d\n",map[ii][9]);
}
return;
}
// if(map[px][py]==0)
// {
int i,fa,fb,j;
memset(val,false,sizeof(val));
for(i=1;i<=9;i++)
{
val[map[px][i]]=true;
val[map[i][py]]=true;
}
fa=(px+2)/3;
fb=(py+2)/3;
for(i=x[fa];i<x[fa]+3;i++)
{
for(j=x[fb];j<x[fb]+3;j++)
{
val[map[i][j]]=true;
}
}
for(i=1;i<=9;i++)
{
if(val[i]==false)
{
map[px][py]=i;
nodes.pop();
DFS(nodes.front());
map[px][py]=0;
}
}
// }
// else
// {
// if(py<9){py++;}
// else{px++;py=1;}
// DFS(px,py);
//}
}
int main()
{
int p,t;
int xx;
// while(~scanf("%s",c))
while(cin>>c)
{
while(nodes.empty()!=true)
{
nodes.pop();
}
xx=0;
for(p=1;p<=9;p++)
{
for(t=1;t<=9;t++)
{
// if(p!=1||t!=1){scanf("%s",c);}
if(p!=1||t!=1){cin>>c;}
if(c>='1'&&c<='9')
{
map[p][t]=c-'0';
}
else
{
map[p][t]=0;
temp.a=p;
temp.b=t;
nodes.push(temp);
}
}
}
temp.a=9;
temp.b=9;
nodes.push(temp);
flag=false;
DFS(nodes.front());
k++;
}
}
|