#include <iostream>
#include <stdio.h>
using namespace std;
int sudoku[10][10], satir[9][10], sutun[9][10], kareler[3][3][10];
void isaretle(int a, int b, int gelenSayi, int sil) {
if (!sil) {
sudoku[a][b] = gelenSayi;
satir[a][gelenSayi] = 1;
sutun[b][gelenSayi] = 1;
kareler[a/3][b/3][gelenSayi] = 1;
return;
}
satir[a][gelenSayi] = 0;
sutun[b][gelenSayi] = 0;
kareler[a/3][b/3][gelenSayi] = 0;
sudoku[a][b] = 0;
}
void sayiYerlestir (int i, int j) {
if (i==9 && j==0) {
for (int m = 0; m < 9; m++) {
for (int n = 0; n < 9; n++) {
cout << sudoku[m][n] << " ";
} cout << endl;
}
exit(0);
}
if (sudoku[i][j]) {
if (j<=7) sayiYerlestir(i, j+1);
else sayiYerlestir(i+1, 0);
return;
}
for (int x = 1; x<=9; x++)
if (!satir[i][x] && !sutun[j][x] && !kareler[i/3][j/3][x]){
isaretle(i, j, x, 0);
sayiYerlestir(i, j);
isaretle(i, j, x, 1);
}
}
int main(int argc, const char * argv[]) {
printf("Sudokuyu bos olan yerlerin yerine 0 gelecek şekilde, her bir sayı arasında boşluk olacak şekilde yazınız.\n");
for (int i = 0; i < 9; i++)
for (int j = 0; j < 9; j++) {
cin >> sudoku[i][j];
if (sudoku[i][j]) isaretle(i, j, sudoku[i][j], 0);
}
cout << endl;
sayiYerlestir(0, 0);
return 0;
}