#include<iostream>
#include<vector>
#include<map>
using namespace std;
void printGrid(int grid[9][9]) {
for(int i = 0; i < 9; i++) {
for(int j = 0; j < 9; j++) {
cout<<grid[i][j]<<" ";
}
cout<<"\n";
}
}
int getLocalBlockStart(int i) {
if(i >= 0 && i <= 2) {
return 0;
} else if(i >= 3 && i <= 5) {
return 3;
} else {
return 6;
}
}
bool checkValueInSameRow(int output[9][9], int row, int col) {
int num = output[row][col];
for(int j = 0; j < 9 && j != col; j++) {
if(output[row][j] == num) {
return false;
}
}
return true;
}
bool checkValueInSameCol(int output[9][9], int row, int col) {
int num = output[row][col];
for(int i = 0; i < 9 && i != row; i++) {
if(output[i][col] == num) {
return false;
}
}
return true;
}
bool checkValueIn3X3Block(int output[9][9], int row, int col) {
int num = output[row][col];
int startRow = getLocalBlockStart(row);
int startCol = getLocalBlockStart(col);
int endRow = startRow + 3;
int endCol = startCol + 3;
for(int i = startRow; i < endRow; i++) {
for(int j = startCol; j < endCol; j++) {
if(i != row && j != col && output[i][j] == num) {
return false;
}
}
}
return true;
}
bool isSudokuConditionSatisfied(int output[9][9]) {
bool satisfied = true;
for(int i = 0; i < 9; i++) {
for(int j = 0; j < 9; j++) {
if(output[i][j] != 0) {
if(!checkValueInSameRow(output, i, j) || !checkValueInSameCol(output, i, j) || !checkValueIn3X3Block(output, i, j)) {
satisfied = false;
}
}
}
}
return satisfied;
}
void sudoku_solve(int grid[9][9]) {
for(int i = 0; i < 9; i++) {
for(int j = 0; j < 9; j++) {
if(grid[i][j] == 0) {
for(int num = 1; num <= 9; num++) {
grid[i][j] = num;
cout<<"Trying "<<i<<" "<<j<<" with "<<num<<"\n";
if(isSudokuConditionSatisfied(grid)) {
cout<<"Soduku condition satisfied for "<<i<<" "<<j<<"\n";
printGrid(grid);
sudoku_solve(grid);
}
}
grid[i][j] = 0;
return;
}
}
}
}
int main(void) {
int n, board[9][9];
cin >> n;
for(int i=0;i<n;i++) {
for(int j=0;j<9;j++) {
for(int k=0;k<9;k++) {
board[j][k] = 0;
cin >> board[j][k];
}
}
sudoku_solve(board);
}
return 0;
}