#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <string.h>
#include <cstdlib>
const int maxn = 10 + 2;
int map[maxn][maxn];
int flag;
void Init()
{
for(int i = 1;i <= 9; i++)
{
for(int j = 1;j <= 9; j++)
scanf("%d", &map[i][j]);
}
}
void print()
{
int i, j;
for(i = 1;i <= 9; i++)
{
for(j = 1;j <= 9; j++)
{
if(j != 9)
{
printf("%d ", map[i][j]);
}
else
{
printf("%d\n", map[i][j]);
}
}
}
}
bool check1(int row, int col, int num)
{
for(int i = 1;i <= 9;i++){
if(map[row][i] == num || map[i][col] == num)
{
//检查第row行和第col列是否存在重复数字num
return false;
}
}
return true;
}
bool check2(int row, int col, int num)
{
//一组row和col确定了一个九宫格,只要判断该九宫格是否存在重复的num即可
int r = (row + 2) / 3;
//把9*9的格子看成9个3*3的格子
int c = (col + 2) / 3;
for(int i = 3*r-2; i <= 3*r; i++)
{
//对某一个3*3的格子检查是否存在重复数字
for(int j = 3*c-2; j <= 3*c; j++)
{
if(map[i][j] == num)
{
return false;
}
}
}
return true;
}
void dfs(int row, int col)
{
if(row == 10)
{
print();
flag = true;
return ;
}
else
{
if(map[row][col] == 0)
{
//如果该位置没有填过数字
for(int i = 1;i <= 9; i++)
{
if(check1(row, col, i) && check2(row, col, i))
{
//要填的i是否同时满足两个条件
map[row][col] = i;
dfs(row + (col+1)/10, (col+1) % 10);
//当每一行都遍历过,再进入下一行
if (flag) return;
map[row][col] = 0;
}
}
}
else //如果该位置填过数字则继续搜索
dfs(row+(col+1)/10, (col+1)%10);
}
}
}
void solve()
{
int n;
memset(map, -1, sizeof(map));
scanf("%d", &n);
while (n--)
{
flag = false;
Init();
dfs(1, 1);
}
}
int main()
{
solve();
return 0;
}