#include <bits/stdc++.h>

using namespace std;

const int NMax = 30;

int mat[NMax][NMax];
int whatBox[NMax][NMax];
bool row[NMax][NMax];
bool col[NMax][NMax];
bool inBox[NMax][NMax];

inline void MakeBoxes(const int &sz, const int &n) {
    int box = 0;

    for(int i = 1; i <= sz; i++) {
        for(int j = 1; j <= sz; j++) {
            if(whatBox[i][j] == 0) {
                box++;

                for(int k = i; k < i + n; k++) {
                    for(int p = j; p < j + n; p++) {
                        whatBox[k][p] = box;
                    }
                }
            }
        }
    }
}

inline bool onRow(const int &x, const int &sz, const int &pick) {
    int ways = 0;

    for(int i = 1; i <= sz; i++) {
        if(mat[x][i] == 0 && col[i][pick] == false && inBox[whatBox[x][i]][pick] == false) {
            ways++;
        }
    }

    if(ways == 1) return true;
    return false;
}

inline bool onCol(const int &y, const int &sz, const int &pick) {
    int ways = 0;

    for(int i = 1; i <= sz; i++) {
        if(mat[i][y] == 0 && row[i][pick] == false && inBox[whatBox[i][y]][pick] == false) {
            ways++;
        }
    }

    if(ways == 1) return true;
    return false;
}

inline bool onBox(const int &box, const int &sz, const int &pick) {
    int ways = 0;

    for(int i = 1; i <= sz; i++) {
        for(int j = 1; j <= sz; j++) {
            if(whatBox[i][j] == box && mat[i][j] == 0) {
                if(row[i][pick] == false && col[j][pick] == false) {
                    ways++;
                }
            }
        }
    }

    if(ways == 1) return true;
    return false;
}

inline bool Solve(const int &sz, const int &n) {
    for(int i = 1; i <= sz; i++) {
        for(int j = 1; j <= sz; j++) {
            if(mat[i][j] == 0) {
                for(int pick = 1; pick <= sz; pick++) {
                    if(row[i][pick] == false && col[j][pick] == false && inBox[whatBox[i][j]][pick] == false) {
                        if(onRow(i, sz, pick) || onCol(j, sz, pick) || onBox(whatBox[i][j], sz, pick)) {
                            row[i][pick] = true;
                            col[j][pick] = true;
                            inBox[whatBox[i][j]][pick] = true;
                            mat[i][j] = pick;

                            return true;
                        }
                    }
                }
            }
        }
    }

    return false;
}

int main() {
    ios::sync_with_stdio(false);
    freopen("in.txt", "r", stdin);

    int n;
    cin >> n;

    int sz = n * n;
    MakeBoxes(sz, n);
    for(int i = 1; i <= sz; i++) {
        for(int j = 1; j <= sz; j++) {
            cin >> mat[i][j];

            if(mat[i][j] != 0) {
                row[i][mat[i][j]] = true;
                col[j][mat[i][j]] = true;
                inBox[whatBox[i][j]][mat[i][j]] = true;
            }
        }
    }

    while(Solve(sz, n));

    for(int i = 1; i <= sz; i++) {
        for(int j = 1; j <= sz; j++) {
            cout << mat[i][j] << " ";
        }
        cout << "\n";
    }

    return 0;
}