# 参考题解中大佬们的做法后,编写的
shudu=[[0]*9 for _ in range(9)]
# 接收数据
for i in range(9):
    shudu[i]=list(map(int,input().split()))

#判断当前填写的数,是否满足要求
def check(shudu,x,y):
    #检查第x行新填写的数,在本行是否有重复的情况。
    if shudu[x].count(shudu[x][y])>1:
        return False

    # 检查第y列填写的数,在本列是否有重复的情况。
    for i in range(9):
        if shudu[x][y]==shudu[i][y] and x !=i:
            return False

    # 检查没个3*3的方格中是否有重复的情况。
    mi=3*(x//3)         #mi,ni表示每个方格开始的位置
    ni=3*(y//3)          
    for i in range(mi,mi+3):
        for j in range(ni,ni+3):
            if shudu[x][y]==shudu[i][j] and x!=i and y!=j:
                return False
    
    return True  #如果都没问题,返回Ture

#开始尝试找到0的位置,然后开始填写一个数,然后再继续递归的填写
def fillshudu(shudu):
    for i in range(9):
        for j in range(9):
            if shudu[i][j]==0:   # 查找等与0 的情况。
                for k in range(1,10):
                    shudu[i][j]=k
                    if check(shudu,i,j) and fillshudu(shudu):   #检查并且递归调用继续填写
                        return True
                    else:
                        shudu[i][j]=0
                return False      # 这个位置的返回很重要,如果1-9都填写了一次,都不满足要求,就需要返回False
    return True     #全部遍历了,都没等与0的情况了,也返回True

# 开始调用函数
fillshudu(shudu)

#打印输出
for i in range(9):
    print(' '.join(map(str,shudu[i])))