#include<iostream> #include<unordered_set> using namespace std; bool flag=false; void dfs(int vec[][9],int i=0,int j=0){ if(i==9){ flag=true; return; } if(vec[i][j]==0){ unordered_set<int> st; for(int m=0;m<9;m++){ st.insert(vec[i][m]); st.insert(vec[m][j]); } for(int m=i/3*3;m<i/3*3+3;m++) for(int n=j/3*3;n<j/3*3+3;n++) st.insert(vec[m][n]); for(int m=1;m<=9;m++){ if(!flag&&st.find(m)==st.end()){ vec[i][j]=m; dfs(vec,i+j/8,(j+1)%9); } } if(!flag){ vec[i][j]=0; return; } }else dfs(vec,i+j/8,(j+1)%9); } int main(){ int vec[9][9]{}; for(int i=0;i<9;i++) for(int j=0;j<9;j++) cin>>vec[i][j]; dfs(vec); for(int i=0;i<9;i++){ for(int j=0;j<8;j++) cout<<vec[i][j]<<" "; cout<<vec[i][8]<<endl; } return 0; }