// Sudoku
#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;
}
Ly8gU3Vkb2t1CiNpbmNsdWRlIDxpb3N0cmVhbT4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWF0cmljYVs5XVs5XTsKCmJvb2wgbW96ZV9icm9qKGludCByZWQsIGludCBrb2xvbmEsIGludCBicm9qKQp7CiAgICBmb3IgKGludCB4ID0gMDsgeCA8IDk7IHgrKykKICAgICAgICBpZiAobWF0cmljYVtyZWRdW3hdID09IGJyb2ogb3IgbWF0cmljYVt4XVtrb2xvbmFdID09IGJyb2opCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgIGludCBwb2NldGFrX2kgPSByZWQgLSByZWQgJSAzOwogICAgaW50IHBvY2V0YWtfaiA9IGtvbG9uYSAtIGtvbG9uYSAlIDM7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IDM7IGkrKykKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IDM7IGorKykKICAgICAgICAgICAgaWYgKG1hdHJpY2FbcG9jZXRha19pICsgaV1bcG9jZXRha19qICsgal0gPT0gYnJvaikKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0cnVlOwp9Cgpib29sIHN1ZG9rdSgpCnsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTsgaSsrKQogICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgOTsgaisrKQogICAgICAgICAgICBpZiAobWF0cmljYVtpXVtqXSA9PSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKGludCBicm9qID0gMTsgYnJvaiA8IDEwOyBicm9qICsrKQogICAgICAgICAgICAgICAgICAgIGlmIChtb3plX2Jyb2ooaSwgaiwgYnJvaikpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBtYXRyaWNhW2ldW2pdID0gYnJvajsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1ZG9rdSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpY2FbaV1bal0gPSAwOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgcmV0dXJuIHRydWU7Cn0KCmludCBtYWluKCkKewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCA5OyBpKyspCiAgICB7CiAgICAJc3RyaW5nIGxpbmlqYTsKICAgIAljaW4gPj4gbGluaWphOwogICAgCWZvciAoaW50IGogPSAwOyBqIDwgOTsgaisrKQogICAgCQltYXRyaWNhW2ldW2pdID0gbGluaWphW2pdIC0gJzAnOwogICAgfQogICAgaWYgKHN1ZG9rdSgpKQogICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgOTsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA5OyBqKyspCiAgICAgICAgICAgICAgICBjb3V0IDw8IG1hdHJpY2FbaV1bal07CiAgICAgICAgICAgIGNvdXQgPDwgZW5kbDsKICAgICAgICB9CiAgICByZXR1cm4gMDsKfQ==