import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        while (in.hasNextInt()){
            int[][] nums = new int[9][9];
            int toFillCount = 0;
            for (int i=0;i<9;i++){
                for(int j=0;j<9;j++){
                    nums[i][j] = in.nextInt();
                    if(nums[i][j] == 0){
                        toFillCount++;
                    }
                }
            }
            //包含已知数字的9X9盘面数组[空缺位以数字0表示]
            fill(nums,0,0,toFillCount);

            //很坑 这个题目输出多种解法算答错了 只能输出一个答案
            int[][] ares = res.get(0);
            for(int i=0;i<9;i++){
                for (int j=0;j<9;j++){
                    System.out.print(ares[i][j]);
                    System.out.print(" ");
                }
                System.out.println();
            }
        }
    }


    /**
     *
     * @param nums
     * @param row 当前要填的行号
     * @param line 当前要填的列号
     */
    private static void fill(int[][] nums,int row,int line,int toFillCount){
        //结束条件:没有需要填的空格
        if(toFillCount == 0){
            int[][] ares = new int[9][9];
            for(int i=0;i<9;i++){
                ares[i] = Arrays.copyOf(nums[i],9);
            }
            res.add(ares);
            return;
        }

        //找到要填的格
        boolean found = false;
        while(line < 9){
            while (row < 9){
                if(nums[line][row] == 0){
                    found = true;
                    break;
                }
                row++;
            }
            if(found){
                break;
            }
            line++;
            row = 0;
        }

        //遍历选择
        for(int i : getAvailableNum(nums,row,line)){
            //做出选择
            nums[line][row] = i;
            toFillCount--;

            fill(nums,row,line,toFillCount);

            //撤销选择
            nums[line][row] = 0;
            toFillCount++;
        }
    }

    static List<int[][]> res = new ArrayList<>();

    /**
     * 找出这个位置可以填的数字
     * @param nums
     * @param row
     * @param line
     * @return
     */
    private static List<Integer> getAvailableNum(int[][] nums , int row, int line){
        int[] used = new int[10];//used[0]空着不用

        for(int i=0;i<9;i++){
            //同一行已经出现过的数字
            int numInRow = nums[i][row];
            used[numInRow] = numInRow;

            //同一列出现过的
            int numInLine = nums[line][i];
            used[numInLine] = numInLine;

            //3*3小格里出现过的
            int xBegin = line - line%3;
            int rowBegin = row - row%3;
            for(int j=0;j<3;j++){
                for(int k=0;k<3;k++){
                    int numInBoard = nums[xBegin+j][rowBegin+k];
                    used[numInBoard] = numInBoard;
                }
            }
        }

        List<Integer> res = new LinkedList<>();
        for(int i=1;i<10;i++){
            if(used[i] == 0){
                res.add(i);
            }
        }
        return res;
    }
}