#include<bits/stdc++.h>
using namespace std;
mt19937 gen(time(0));
uniform_int_distribution<int> dist(0, 1);
#define Rb() dist(gen)
const int dx[16] = {-1, -1, -1, 0, 0, 1, 1, 1, -2, -2, -1, -1, 1, 1, 2, 2}, dy[16] = {-1, 0, 1, -1, 1, -1, 0, 1, -1, 1, -2, 2, -2, 2, -1, 1};
#define mp(i, j) make_pair(i, j)

bool ti[2][9][9] = {
	{
		{0, 0, 0, 0, 0, 0, 0, 0},
		{0, 1, 0, 0, 0, 0, 0, 1},
		{0, 0, 0, 0, 0, 0, 0, 0},
		{0, 0, 0, 0, 1, 0, 0, 0},
		{1, 0, 0, 0, 0, 1, 0, 0},
		{0, 1, 0, 0, 0, 0, 0, 1},
		{1, 1, 0, 0, 0, 0, 0, 1},
		{0, 0, 0, 1, 1, 1, 0, 0},
		{0, 0, 0, 0, 0, 0, 1, 1}
	},
	{
		{0, 0, 0, 0, 0, 0, 0, 0, 0},
		{0, 0, 1, 0, 1, 0, 0, 1, 0},
		{0, 0, 1, 0, 0, 0, 1, 0, 0},
		{0, 0, 0, 0, 1, 0, 0, 0, 0},
		{0, 0, 0, 1, 0, 0, 1, 0, 0},
		{0, 1, 0, 1, 0, 0, 0, 1, 1},
		{0, 0, 0, 0, 0, 0, 0, 0, 0},
		{0, 0, 0, 0, 0, 0, 0, 0, 0}
	}
};

struct state{
	int p[9][9];
	bool q[9][9][10];

	bool totalcheck() const {
		// 这里写变形数独条件
		for (int i = 0;i < 9;++i)
			for (int j = 0;j < 8;++j)
				if (p[i][j] and p[i][j + 1]){
					bool f = 1;
					if (p[i][j] == 1) f = 0;
					if (p[i][j + 1] == 1) f = 0;
					if ((p[i][j] % p[i][j + 1]) and (p[i][j + 1] % p[i][j])) f = 0;
					if (f xor ti[0][i][j]) return 0;
				}
		for (int i = 0;i < 8;++i)
			for (int j = 0;j < 9;++j)
				if (p[i][j] and p[i + 1][j]){
					bool f = 1;
					if (p[i][j] == 1) f = 0;
					if (p[i + 1][j] == 1) f = 0;
					if ((p[i][j] % p[i + 1][j]) and (p[i + 1][j] % p[i][j])) f = 0;
					if (f xor ti[1][i][j]) return 0;
				}
		return 1;
	}
	
	int check(int &x, int &y) const {
		int mcnt = 10;
		for (int i = 0;i < 9;++i)
			for (int j = 0;j < 9;++j)
				if (!p[i][j]){
					int cnt = 0;
					for (int k = 1;k <= 9;++k)
						cnt += q[i][j][k];
					if (cnt == 0) return -1; // invalid
					if (cnt < mcnt || (cnt == mcnt && Rb())) mcnt = cnt, x = i, y = j;
				}
		if (totalcheck()) return (mcnt == 10); // unfinished | finished
		return -1;
	}
	void modify(int x, int y, int k){
		p[x][y] = k;
		int x_ = x / 3 * 3, y_ = y / 3 * 3;
		for (int i = 0;i < 9;++i)
			q[i][y][k] = q[x][i][k] = q[x_ + i / 3][y_ + i % 3][k] = 0;
		// 无士,无马 : 
//		for (int i = 0;i < 8;++i)
//			if (x + dx[i] >= 0 && x + dx[i] < 9 && y + dy[i] >= 0 && y + dy[i] < 9)
//				q[x + dx[i]][y + dy[i]][k] = 0;
		// 配对:
//		for (int i = 0;i < cplen;++i)
//			for (int j = 0;j < 2;++j)
//				if (p[cp[i][j].first][cp[i][j].second])
//					for (int k = 1;k <= 9;++k)
//						if (p[cp[i][j].first][cp[i][j].second] != k)
//							q[cp[i][1-j].first][cp[i][1-j].second][k] = 0;
	}
	void init(){
		memset(p, 0, sizeof(p));
		memset(q, 1, sizeof(q));
	}
	void input(){
		memset(p, 0, sizeof(p));
		memset(q, 0, sizeof(q));
		for (int i = 0;i < 9;++i)
			for (int j = 0;j < 9;++j){
				string st;
				cin >> st;
				if (st[0] == '`'){
					for (int k = 1;k <= 9;++k)
						q[i][j][k] = 1;
					for (int i = 1;i < (int)st.length();++i)
						q[i][j][st[i] - '0'] = 0;
				}
				else {
					if (st.length() == 1) p[i][j] = st[0] - '0';
					for (char ch : st)
						q[i][j][ch - '0'] = 1;
				}
			}
		for (int i = 0;i < 9;++i)
			for (int j = 0;j < 9;++j)
				if (p[i][j])
					modify(i, j, p[i][j]);
	}
	void output() const {
		for (int i = 0;i < 9;++i){
			for (int j = 0;j < 9;++j){
				printf ("%d", p[i][j]);
			}
			puts("");
		}
		puts("");
	}
};
long long cnt = 0;
state cov;
void dfs(const state &st){
//	if ((cnt & 1048575) == 0)
//		printf ("cnt: %lld\n", cnt);
//	++cnt;
	st.output();
	system("cls");
	
	int x, y;
	int f = st.check(x, y);
	if (f == -1) return ;
	if (f == 1){
		st.output();
		for (int i = 0;i < 9;++i)
			for (int j = 0;j < 9;++j)
				cov.q[i][j][st.p[i][j]] = 1;
		return ;
	}
	for (int k = 1;k <= 9;++k)
		if (st.q[x][y][k]){
			state temp = st;
			temp.modify(x, y, k);
			dfs(temp);
		}
}
int main(){
//	freopen("sudoku1.txt", "w", stdout);
	state st;
	st.input();
//	st.init();
	dfs(st);
	printf ("cov:\n");
	for (int i = 0;i < 9;++i){
		for (int j = 0;j < 9;++j){
			for (int k = 1;k <= 9;++k)
				if (cov.q[i][j][k])
					printf ("%d", k);
			printf (" ");
		}
		printf ("\n");
	}
	return 0;
}