#include <iostream>
using namespace std;
int matrica[9][9];
bool moze_broj(int red, int kolona, int broj)
{
for (int x = 0; x < 9; x++)
if (matrica[red][x] == broj or matrica[x][kolona] == broj)
return false;
int pocetak_i = red - red % 3;
int pocetak_j = kolona - kolona % 3;
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
if (matrica[pocetak_i + i][pocetak_j + j] == broj)
return false;
return true;
}
bool sudoku()
{
for (int i = 0; i < 9; i++)
for (int j = 0; j < 9; j++)
if (matrica[i][j] == 0)
{
for (int broj = 1; broj < 10; broj ++)
if (moze_broj(i, j, broj))
{
matrica[i][j] = broj;
if (sudoku())
return true;
matrica[i][j] = 0;
}
//return false;
}
return true;
}
int main()
{
for (int i = 0; i < 9; i++)
{
string linija;
cin >> linija;
for (int j = 0; j < 9; j++)
matrica[i][j] = linija[j] - '0';
}
if (sudoku())
for (int i = 0; i < 9; i++)
{
for (int j = 0; j < 9; j++)
cout << matrica[i][j];
cout << endl;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBtYXRyaWNhWzldWzldOwoKYm9vbCBtb3plX2Jyb2ooaW50IHJlZCwgaW50IGtvbG9uYSwgaW50IGJyb2opCnsKICAgIGZvciAoaW50IHggPSAwOyB4IDwgOTsgeCsrKQogICAgICAgIGlmIChtYXRyaWNhW3JlZF1beF0gPT0gYnJvaiBvciBtYXRyaWNhW3hdW2tvbG9uYV0gPT0gYnJvaikKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgaW50IHBvY2V0YWtfaSA9IHJlZCAtIHJlZCAlIDM7CiAgICBpbnQgcG9jZXRha19qID0ga29sb25hIC0ga29sb25hICUgMzsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMzsgaSsrKQogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgMzsgaisrKQogICAgICAgICAgICBpZiAobWF0cmljYVtwb2NldGFrX2kgKyBpXVtwb2NldGFrX2ogKyBqXSA9PSBicm9qKQogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgcmV0dXJuIHRydWU7Cn0KCmJvb2wgc3Vkb2t1KCkKewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCA5OyBpKyspCiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA5OyBqKyspCiAgICAgICAgICAgIGlmIChtYXRyaWNhW2ldW2pdID09IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGZvciAoaW50IGJyb2ogPSAxOyBicm9qIDwgMTA7IGJyb2ogKyspCiAgICAgICAgICAgICAgICAgICAgaWYgKG1vemVfYnJvaihpLCBqLCBicm9qKSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpY2FbaV1bal0gPSBicm9qOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3Vkb2t1KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgbWF0cmljYVtpXVtqXSA9IDA7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgLy9yZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgIHJldHVybiB0cnVlOwp9CgppbnQgbWFpbigpCnsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTsgaSsrKQogICAgewogICAgCXN0cmluZyBsaW5pamE7CiAgICAJY2luID4+IGxpbmlqYTsKICAgIAlmb3IgKGludCBqID0gMDsgaiA8IDk7IGorKykKICAgIAkJbWF0cmljYVtpXVtqXSA9IGxpbmlqYVtqXSAtICcwJzsKICAgIH0KICAgIGlmIChzdWRva3UoKSkKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IDk7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgOTsgaisrKQogICAgICAgICAgICAgICAgY291dCA8PCBtYXRyaWNhW2ldW2pdOwogICAgICAgICAgICBjb3V0IDw8IGVuZGw7CiAgICAgICAgfQogICAgcmV0dXJuIDA7Cn0=