#include<iostream>#include<array>usingnamespace std;
array<array<int,9>,9>a;intsudofind(int m,int n, array<int,9>& b){
array<int,10>c;
b.fill(0);
c.fill(0);for(int i =0; i <9; i++){
c[a[i][n]]++;
c[a[m][i]]++;}for(int i = m - m %3; i <= m +2- m %3; i++)for(int j = n - n %3; j <= n +2- n %3; j++)
c[a[i][j]]++;int k =0;for(int i =1; i <10; i++)if(0== c[i]){
b[k]= i;
k++;}return k;}boolsudoku(int m,int n){if(8== m &&8== n){if(0!= a[m][n])returntrue;else{
array<int,9>b;sudofind(m, n, b);if(0!= b[0]){
a[m][n]= b[0];returntrue;}elsereturnfalse;}}elseif(0== a[m][n]){
array<int,9>b;int end =sudofind(m, n, b);if(0== b[0])returnfalse;else{for(int k =0; k < end; k++){
a[m][n]= b[k];if(8!= n){if(true==sudoku(m, n +1))returntrue;}elseif(8!= m)if(true==sudoku(m +1,0))returntrue;
a[m][n]=0;}returnfalse;}}elseif(8!= n){if(true==sudoku(m, n +1))returntrue;}elseif(8!= m)if(true==sudoku(m +1,0))returntrue;}intmain(){for(int i =0; i <9; i++)for(int j =0; j <9; j++)
cin >> a[i][j];if(true==sudoku(0,0))for(int i =0; i <9; i++){for(int j =0; j <9; j++)
cout << a[i][j]<<' ';
cout << endl;}return0;}