#include<iostream>
#include<algorithm>
using namespace std;
const int N=9;
int mp[N][N];
bool findAll=false;
bool check(int row,int col,int num)
{
for(int i=0;i<N;i++)
{
if(mp[row][i]==num) return false;
}
for(int i=0;i<N;i++)
{
if(mp[i][col]==num) return false;
}
int row_start=row/3*3;
int col_start=col/3*3;
for(int i=row_start;i<row_start+3;i++)
{
for(int j=col_start;j<col_start+1;j++)
{
if(mp[i][j]==num) return false;
}
}
return true;
}
void dfs(int row,int col)
{
if(col==9)
{
row++;
col=0;
}
if(row==9)
{
findAll=true;
return ;
}
if(mp[row][col]==0)
{
for(int i=1;i<=N;i++)
{
if(check(row,col,i))
{
mp[row][col]=i;
dfs(row,col+1);
if(findAll) return;
mp[row][col]=0;
}
}
}else dfs(row,col+1);
}
int main(int argc,char* argv[])
{
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
cin>>mp[i][j];
}
}
dfs(0,0);
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
cout<< mp[i][j]<<" ";
}
cout<<endl;
}
return 0;
}
#include<algorithm>
using namespace std;
const int N=9;
int mp[N][N];
bool findAll=false;
bool check(int row,int col,int num)
{
for(int i=0;i<N;i++)
{
if(mp[row][i]==num) return false;
}
for(int i=0;i<N;i++)
{
if(mp[i][col]==num) return false;
}
int row_start=row/3*3;
int col_start=col/3*3;
for(int i=row_start;i<row_start+3;i++)
{
for(int j=col_start;j<col_start+1;j++)
{
if(mp[i][j]==num) return false;
}
}
return true;
}
void dfs(int row,int col)
{
if(col==9)
{
row++;
col=0;
}
if(row==9)
{
findAll=true;
return ;
}
if(mp[row][col]==0)
{
for(int i=1;i<=N;i++)
{
if(check(row,col,i))
{
mp[row][col]=i;
dfs(row,col+1);
if(findAll) return;
mp[row][col]=0;
}
}
}else dfs(row,col+1);
}
int main(int argc,char* argv[])
{
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
cin>>mp[i][j];
}
}
dfs(0,0);
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
cout<< mp[i][j]<<" ";
}
cout<<endl;
}
return 0;
}