#include <iostream>
#include <vector>
using namespace std;

bool isValidNum(const vector<vector<int>>& sudoku, int x, int y, int num) {
    //检查(x,y)所在的行和列有没有重复 
    for(int i = 0; i < 9; ++i) {
        if(sudoku[x][i] == num || sudoku[i][y] == num) {
            return false;
        }
    }

    //检查(x,y)所在的3x3方格里有没有重复
    int start_row = (x / 3) * 3;
    int start_col = (y / 3) * 3;
    for(int i = 0; i < 3; ++i) {
        for(int j = 0; j < 3; ++j) {
            if(sudoku[start_row + i][start_col + j] == num) {
                return false;
            }
        }
    }
    return true;
}

bool backTrack(vector<vector<int>>& sudoku) {
    for(int i = 0; i < 9; ++i) {
        for(int j = 0; j < 9; ++j) {
            if(sudoku[i][j] == 0) {
                for(int k = 1; k <= 9; ++k) {
                    if(isValidNum(sudoku, i, j, k)) {
                        sudoku[i][j] = k;
                        if(backTrack(sudoku)) {
                            return true;
                        }
                        sudoku[i][j] = 0; //撤销 回溯
                    }
                }
                return false;
            }
        }
    }
    return true;
}



int main() {
    vector<vector<int>> sudoku(9, vector<int>(9, 0));
    for(int i = 0; i < 9; ++i) {
        for(int j = 0; j < 9; ++j) {
            cin >> sudoku[i][j];
        }
    }
    backTrack(sudoku);
    for(int i = 0; i < 9; ++i) {
        for(const int& n: sudoku[i]) {
            cout << n << " ";
        }
        cout << endl;
    }
    return 0;
}