#include <iostream.h>

void prints(int s[9][9]) {
  for (int i=0; i<9; i++) {
    for (int j=0; j<8; j++)
      cout << s[i][j] << " ";
    cout << s[i][8] << "\n";
  }  
}

void fillin(bool a[9][9][10], int s[9][9], int i, int j, int entry) {
  // fill in an entry and adjust a to rule out having another of that same
  // number in the same row, column or 3x3 box.
  s[i][j] = entry;
  for (int k=0; k<9; k++) {
    a[i][k][entry] = (j==k);
    a[k][j][entry] = (i==k);
  }
  for (int k=i-i%3; k<i+3-i%3; k++)
    for (int l=j-j%3; l<j+3-j%3; l++)
      a[k][l][entry] = (k==i && l==j);
  for (int v=1; v<=9; v++)
    a[i][j][v] = (v==entry);
} 
  
bool solve(bool a[9][9][10], int s[9][9]) {
  bool done = false;

  // find a blank with minimum number of possibilities
  int m = 10;
  int besti, bestj;
  for (int i=0; i<9; i++) {
    for (int j=0; j<9; j++) {
      if (!s[i][j]) { // consider blanks only
	int x = 0;
	for (int v=1; v<=9; v++)
	  if (a[i][j][v]) x++;
	if (x<m) {
	  m = x;
	  besti = i;
	  bestj = j;
	}
      }
    }
  }
  if (m==10) { // no blanks left; print solution and stop
    prints(s);
    done = true;
  } 
  else { // try plugging different values into best location
    for (int v=1; v<=9; v++) {
      if (!done && a[besti][bestj][v]) {
	// make copies, fill in one value and try solving
	bool aTry[9][9][10];
	int sTry[9][9];
	for (int i=0; i<9; i++) {
	  for (int j=0; j<9; j++) {
	    sTry[i][j] = s[i][j];
	    for (int k=1; k<=9; k++)
	      aTry[i][j][k] = a[i][j][k];
	  }
	}
	fillin(aTry,sTry,besti,bestj,v);
	done = solve(aTry,sTry);
      }
    }
  }
  return done;
} 
      
main() {
  int num; // number of instances
  cin >> num;
  for (int instance = 1; instance <= num; instance++) {
    cout << "Instance " << instance << ":\n";
    bool a[9][9][10];   // a[i,j,v] stores true if v is a possible 
                        // value for cell i,j 
    int s[9][9]; // stores the puzzle
    
    for (int i=0; i<9; i++)  // start with a all true
      for (int j=0; j<9; j++) 
	for (int v=1; v<=9; v++)
	  a[i][j][v] = true;
    
    for (int i=0; i<9; i++)  // read input (0's indicate blanks) and 
                             // initialize array a
      for (int j=0; j<9; j++) {
	int entry;
	cin >> entry;
	if (entry) fillin(a,s,i,j,entry);
	else s[i][j]=0;
      }
    if (!solve(a,s)) cout << "No solution.\n";
  }
}
