#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
int n,nn,i,j,tot,ntot,a[44][44],b[(1<<25)+5],r[44],c[44],s[7][7];
void inc(int i, int j) {
  int msk=(1<<(a[i][j]-1));
  r[i]^=msk;
  c[j]^=msk;
  s[i/n][j/n]^=msk;
  tot++;
}
void dec(int i, int j) {
  if (a[i][j]==0) return;
  int msk=(1<<(a[i][j]-1));
  r[i]^=msk;
  c[j]^=msk;
  s[i/n][j/n]^=msk;
  tot--;
  a[i][j]=0;
}
void rev(const vector<pii>& v) {
  for (int i=0; i<v.size(); i++) dec(v[i].first,v[i].second);
}
bool rec() {
  vector<pii> v;
  while (tot<ntot) {
    int best=100,wi=0,wj=0;
    for (int i=0; i<nn; i++) for (int j=0; j<nn; j++) if (a[i][j]==0) {
      int msk=(r[i]&c[j]&s[i/n][j/n]);
      if (b[msk]==0) {
        rev(v);
        return false;
      }
      if (b[msk]==1) {
        for (int e=0; e<nn; e++) if (msk&(1<<e)) {
          a[i][j]=e+1;
          inc(i,j);
          v.push_back({i,j});
          break;
        }
      }
      if (b[msk]<best) {
        best=b[msk]; wi=i; wj=j;
      }
    }
    if (best==100) break;
    if (best>=2) {
      int msk=(r[wi]&c[wj]&s[wi/n][wj/n]);
      v.push_back({wi,wj});
      for (int e=0; e<nn; e++) if (msk&(1<<e)) {
        a[wi][wj]=e+1;
        inc(wi,wj);
        if (rec()) return true;
        dec(wi,wj);
      }
      break;
    }
  }
  if (tot==ntot) return true;
  rev(v);
  return false;
}
int main() {
  for (i=0; i<(1<<25); i++) b[i]=b[i/2]+(i&1);
  scanf("%d",&n); nn=n*n; ntot=nn*nn;
  for (i=0; i<nn; i++) r[i]=c[i]=(1<<nn)-1;
  for (i=0; i<n; i++) for (j=0; j<n; j++) s[i][j]=(1<<nn)-1;
  for (i=0; i<nn; i++) for (j=0; j<nn; j++) {
    scanf("%d",&a[i][j]);
    if (a[i][j]!=0) inc(i,j);
  }
  rec();
  for (i=0; i<nn; i++) for (j=0; j<nn; j++) printf("%d%c",a[i][j],(j+1==nn)?'\n':' ');
  return 0;
}