def check(point, i, sudoku): x, y = point[0], point[1] # 同行/同列 #print(x, y) for z in range(9): ##print(z!=x,sudoku[x][z] == i) #print(x,y,z) if z != x and sudoku[x][z] == i: #print('行') return False if z != y and sudoku[z][y] == i: #print('行') return False

# 同九宫格
m, n = 3 * (x // 3), 3 * (y // 3)
for a in range(m, m + 3):
    for b in range(n, n + 3):
        if sudoku[a][b] == i:
            #print('jiu')
            return False

return True

def dfs(point, sudoku): x, y = point[0], point[1] global res,flag #print(x,y) # 结束条件 if flag == 1: return

if x == 8 and y == 9:
    #print('1')
    res = sudoku[:]
    for i in res:
        print(*i)
    flag = 1
   # print(res)


if y == 9:
    #print('y=9')
    y = 0
    x += 1
#print('改之后',x,y)

if (sudoku[x][y] == 0):
    #print('为0,填数字', x, y, sudoku[x][y])
    # 填数字
    #print('改',x,y)
    for i in range(1, 10):
        # 可以填
        # print('check:',i,check(point, i, sudoku))
        if (check([x,y], i, sudoku)):
            sudoku[x][y] = i
            dfs([x, y + 1], sudoku)
            sudoku[x][y] = 0
        # 不可以,结束
        else:
            continue
    # 这个格子填不了任何数字
else:
    dfs([x, y + 1], sudoku)

while True: try: result=[] res = [] flag = 0 for i in range(9): result.append(list(map(int,input().split()))) dfs([0,0],result) except: break