#include <bits/stdc++.h>

using namespace std;

const int NMax = 15;

int Map[NMax][NMax];
bool row[NMax][NMax];
bool col[NMax][NMax];
bool box[NMax][NMax];
int wbx[NMax][NMax];

bool getState(int x, int y, int value) {
    if((Map[x][y] != 0) || row[x][value] || col[y][value] || box[wbx[x][y]][value]) return false;
    return true;
}

struct var{
    int x, y, ways, value;

    bool operator < (const var &a) {
        return ways < a.ways;
    }
};

vector < var > getRoute(const int &n) {
    vector < var > ret;

    for(int i = 1; i <= n; i++) {
        for(int pick = 1; pick <= n; pick++) {
            int ways = 0;
            vector < pair < int, int > > aux;

            for(int j = 1; j <= n; j++) {
                if(getState(i, j, pick) == true) {
                    ways++;
                    aux.push_back({i, j});
                }
            }

            if(ways != 0) {
                for(auto const &it: aux) {
                    ret.push_back({it.first, it.second, ways, pick});
                }
            }
        }
    }
    for(int i = 1; i <= n; i++) {
        for(int pick = 1; pick <= n; pick++) {
            int ways = 0;
            vector < pair < int, int > > aux;

            for(int j = 1; j <= n; j++) {
                if(getState(j, i, pick) == true) {
                    ways++;
                    aux.push_back({j, i});
                }
            }

            if(ways != 0) {
                for(auto const &it: aux) {
                    ret.push_back({it.first, it.second, ways, pick});
                }
            }
        }
    }
    for(int bx = 1; bx <= n; bx++) {
        for(int pick = 1; pick <= n; pick++) {
            int ways = 0;
            vector < pair < int, int > > aux;

            for(int i = 1; i <= n; i++) {
                for(int j = 1; j <= n; j++) {
                    if(wbx[i][j] == bx && getState(i, j, pick)) {
                        ways++;
                        aux.push_back({i, j});
                    }
                }
            }

            if(ways != 0) {
                for(auto const &it: aux) {
                    ret.push_back({it.first, it.second, ways, pick});
                }
            }
        }
    }

    sort(ret.begin(), ret.end());
    return ret;
}

void Update(int x, int y, int value, bool place) {
    row[x][value] = place;
    col[y][value] = place;
    box[wbx[x][y]][value] = place;
    if(place == true) {
        Map[x][y] = value;
    } else {
        Map[x][y] = 0;
    }
}

bool solved = false;
void Back(int zero) {
    if(zero == 0) {
        solved = true;
        return;
    }

    vector < var > now = getRoute(9);
    for(auto const &it: now) {
        int x, y, value;
        x = it.x; y = it.y; value = it.value;

        Update(x, y, value, true);
        Back(zero - 1);

        if(solved == true) return;
        Update(x, y, value, false);
    }
}

int main() {

    int n = 9;

    int zaz;
    cin >> zaz;

    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= n; j++) {
            cin >> Map[i][j];
        }
    }

    int actBox = 0;
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= n; j++) {
            if(wbx[i][j] == 0) {
                actBox++;
                for(int x = i; x < i + 3; x++) {
                    for(int y = j; y < j + 3; y++) {
                        wbx[x][y] = actBox;
                    }
                }
            }
        }
    }

    int zero = 0;
    for(int i = 1; i <= n; i++) {
        for(int j = 1; j <= n; j++) {
            if(Map[i][j] != 0) {
                Update(i, j, Map[i][j], true);
            } else {
                zero++;
            }
        }
    }

    Back(zero);

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

    /*
    for(auto const &it: test) {
        fout << it.x << " " << it.y << " " << it.ways << " " << it.value << "\n";
    }
    */

    return 0;
}