code:
#include<bits/stdc++.h>
using namespace std;
int a[10][10],b[10][10];
const int c[10][10]=
{
0,0,0,0,0,0,0,0,0,0,
0,0,0,0,1,1,1,2,2,2,
0,0,0,0,1,1,1,2,2,2,
0,0,0,0,1,1,1,2,2,2,
0,3,3,3,4,4,4,5,5,5,
0,3,3,3,4,4,4,5,5,5,
0,3,3,3,4,4,4,5,5,5,
0,6,6,6,7,7,7,8,8,8,
0,6,6,6,7,7,7,8,8,8,
0,6,6,6,7,7,7,8,8,8
};
bool f1[10][10],f2[10][10],f3[10][10],flag;
void dfs(int x,int y){
if(flag==1) return ;
for(int i=1;i<=9;i++){
for(int j=1;j<=9;j++){
cout<<b[i][j]<<" ";
}
cout<<"\n";
}
if(y==10){
for(int i=1;i<=9;i++){
for(int j=1;j<=9;j++){
cout<<b[i][j]<<" ";
}
cout<<"\n";
}
flag=1;
return ;
}
if(a[x][y]!=0){
if(f1[y][a[x][y]]==1||f2[c[x][y]][a[x][y]]==1||f3[x][a[x][y]]==1) return ;
b[x][y]=a[x][y];
f1[y][a[x][y]]=1;
f2[c[x][y]][a[x][y]]=1;
f3[x][a[x][y]]=1;
dfs(x%9+1,y+(x+1)/10);
f1[y][a[x][y]]=0;
f2[c[x][y]][a[x][y]]=0;
f3[x][a[x][y]]=0;
}
else{
for(int i=1;i<=9;i++){
if(f1[y][i]==1||f2[c[x][y]][i]==1||f3[x][i]==1) continue;
b[x][y]=i;
f1[y][i]=1;
f2[c[x][y]][i]=1;
f3[x][i]=1;
dfs(x%9+1,y+(x+1)/10);
f1[y][i]=0;
f2[c[x][y]][i]=0;
f3[x][i]=0;
}
}
}
signed main(){
cin.tie(0)->sync_with_stdio(0);
for(int i=1;i<=9;i++){
for(int j=1;j<=9;j++){
cin>>a[i][j];
// cout<<c[i][<<" ";
}
// cout<<"\n";
}
dfs(1,1);
return 0;
}