|
#include <iostream> using namespace std; const int M=10; bool userow[M][M],usecol[M][M],useblock[M][M]; int map[M][M];
struct node{ int x,y; int num; }sudu[M*M];
int find(int x,int y) { int row=x/3; int col=y/3; return 3*row+col; }
bool dfs(int n,int cnt) { if(n==cnt)return 1; int i; for(i=1;i<M;i++) { if(!userow[sudu[n].x][i]&&!usecol[sudu[n].y][i]&&!useblock[find(sudu[n].x,sudu[n].y)][i]) { userow[sudu[n].x][i]=true; usecol[sudu[n].y][i]=true; useblock[find(sudu[n].x,sudu[n].y)][i]=true; sudu[n].num=i; if(dfs(n+1,cnt)) return 1; userow[sudu[n].x][i]=false; usecol[sudu[n].y][i]=false; useblock[find(sudu[n].x,sudu[n].y)][i]=false; sudu[n].num=0;
} } return 0;
}
int main() { int T; scanf("%d",&T); while(T--) { memset(userow,false,sizeof(userow)); memset(usecol,false,sizeof(usecol)); memset(useblock,false,sizeof(useblock));
int i,j; int cnt=0; for(i=0;i<M-1;i++) { char mess[M]; scanf("%s",&mess); for(j=0;j<M-1;j++) { map[i][j]=mess[j]-'0'; if(map[i][j]) { userow[i][map[i][j]]=true; usecol[j][map[i][j]]=true; useblock[find(i,j)][map[i][j]]=true; } else { sudu[cnt].x=i; sudu[cnt].y=j; sudu[cnt].num=0; cnt++; } }
}
dfs(0,cnt);
for(i=0;i<cnt;i++) map[sudu[i].x][sudu[i].y]=sudu[i].num; for(i=0;i<M-1;i++){ for(j=0;j<M-1;j++) printf("%d",map[i][j]); printf("\n"); } }
return 0; }
|