/*
题意:数独
题解:DFS,爆搜;
据闻可用跳跃表做。。。。。
*/
#include <cstdio>
#include <cstring>
int m[10][10];
bool flag;
void dfs(int pos)
{
if (pos == 81)
{
for(int i=0; i<9; i++)
{
char s[10];
for(int j=0; j<9; j++)
{
s[j] = m[i][j] + '0';
printf("%c",s[j]);
}
printf("\n");
}
flag = true;
return ;
}
if (flag)
return ;
if (m[pos/9][pos%9])
{
dfs(pos+1);
}
else
{
int x=pos/9,y=pos%9;
bool vis[10];
memset(vis,false,sizeof(vis));
for(int i=0; i<9; i++)
{
if (x != i)
vis[m[i][y]] = true;
if (y != i)
vis[m[x][i]] = true;
}
int tx = x/3*3;
int ty = y/3*3;
for(int i=0; i<3; i++)
{
for(int j=0; j<3; j++)
{
if (tx+i==x && ty+j==y)
continue;
vis[m[tx+i][ty+j]] = true;
}
}
for(int i=1; i<=9; i++)
{
if (!vis[i])
{
m[x][y] = i;
dfs(pos+1);
if (flag)
return ;
m[x][y] = 0;
}
}
}
}
int main(void)
{
int t;
char s[15];
scanf("%d",&t);
while (t--)
{
for(int i=0; i<9; i++)
{
scanf("%s",s);
for(int j=0; j<9; j++)
{
m[i][j] = s[j] - '0';
}
}
flag = false;
dfs(0);
}
return 0;
}