#include <bits/stdc++.h>
using namespace std;
constexpr int maksN = 9;
int plansza[maksN + 10][maksN + 10];
int podstawa[maksN + 10][maksN + 10][maksN + 10];
int odwiedzone[maksN + 10][maksN + 10][maksN + 10];
void krzyz(pair<int, int> biezaca, int i) {
int kolumna = (biezaca.second - 1) / 3, wiersz = (biezaca.first - 1) / 3;
kolumna *= 3, wiersz = 3 * wiersz + 1;
for (int j = kolumna + 1; j <= kolumna + 3; j++)
odwiedzone[wiersz][j][i] = true;
wiersz++;
for (int j = kolumna + 1; j <= kolumna + 3; j++)
odwiedzone[wiersz][j][i] = true;
wiersz++;
for (int j = kolumna + 1; j <= kolumna + 3; j++)
odwiedzone[wiersz][j][i] = true;
for (int j = 1; j <= 9; j++)
odwiedzone[j][biezaca.second][i] = true;
for (int j = 1; j <= 9; j++)
odwiedzone[biezaca.first][j][i] = true;
}
void przywroc(pair<int, int> biezaca, int i) {
int kolumna = (biezaca.second - 1) / 3, wiersz = (biezaca.first - 1) / 3;
kolumna *= 3, wiersz = 3 * wiersz + 1;
for (int j = kolumna + 1; j <= kolumna + 3; j++)
odwiedzone[wiersz][j][i] = false;
wiersz++;
for (int j = kolumna + 1; j <= kolumna + 3; j++)
odwiedzone[wiersz][j][i] = false;
wiersz++;
for (int j = kolumna + 1; j <= kolumna + 3; j++)
odwiedzone[wiersz][j][i] = false;
for (int j = 1; j <= 9; j++)
if (j != biezaca.first)
odwiedzone[j][biezaca.second][i] = false;
for (int j = 1; j <= 9; j++)
odwiedzone[biezaca.first][j][i] = false;
}
bool sudoku() {
pair<int, int> biezaca = {-1, -1};
int maks_mozliwosci = 0;
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
if (plansza[i][j] < 1)
{
int mozliwosci = 0;
for (int k = 1; k <= 9; k++)
if (podstawa[i][j][k] || odwiedzone[i][j][k]) mozliwosci++;
if (maks_mozliwosci < mozliwosci)
{
maks_mozliwosci = mozliwosci;
biezaca = {i, j};
}
}
}
}
if (biezaca.first < 0)
return true;
for (int i = 1; i <= 9; i++) {
if (odwiedzone[biezaca.first][biezaca.second][i] || podstawa[biezaca.first][biezaca.second][i])
continue;
bool warunek = true;
int kolumna = (biezaca.second - 1) / 3, wiersz = (biezaca.first - 1) / 3;
kolumna *= 3, wiersz = 3 * wiersz + 1;
for (int j = kolumna + 1; j <= kolumna + 3; j++)
if ((biezaca != make_pair(wiersz, j)) && plansza[wiersz][j] == i)
warunek = false;
wiersz++;
for (int j = kolumna + 1; j <= kolumna + 3; j++)
if ((biezaca != make_pair(wiersz, j)) && plansza[wiersz][j] == i) warunek = false;
wiersz++;
for (int j = kolumna + 1; j <= kolumna + 3; j++)
if ((biezaca != make_pair(wiersz, j)) && plansza[wiersz][j] == i) warunek = false;
for (int j = 1; j <= 9; j++)
if (j != biezaca.first && plansza[j][biezaca.second] == i) warunek = false;
for (int j = 1; j <= 9; j++)
if (j != biezaca.second && plansza[biezaca.first][j] == i)
warunek = false;
if (!warunek) continue;
plansza[biezaca.first][biezaca.second] = i;
krzyz(biezaca, i);
if (sudoku()) return true;
plansza[biezaca.first][biezaca.second] = 0; przywroc(biezaca, i);
}
return false;
}
void przygotuj(pair<int, int> biezaca, int i) {
int kolumna = (biezaca.second - 1) / 3, wiersz = (biezaca.first - 1) / 3;
kolumna *= 3, wiersz = 3 * wiersz + 1;
for (int j = kolumna + 1; j <= kolumna + 3; j++)
podstawa[wiersz][j][i] = true;
wiersz++;
for (int j = kolumna + 1; j <= kolumna + 3; j++)
podstawa[wiersz][j][i] = true;
wiersz++;
for (int j = kolumna + 1; j <= kolumna + 3; j++) podstawa[wiersz][j][i] = true;
for (int j = 1; j <= 9; j++) podstawa[j][biezaca.second][i] = true;
for (int j = 1; j <= 9; j++) podstawa[biezaca.first][j][i] = true;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
string s;
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++)
{
cin >> s;
if (s[0] == '*')
plansza[i][j] = 0;
else
plansza[i][j] = s[0] - '0';
}
}
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++)
if (plansza[i][j] > 0)
przygotuj(make_pair(i, j), plansza[i][j]);
}
sudoku();
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++)
cout << plansza[i][j] << ' ';
cout << endl;
}
return 0;
}