# 输出函数
def output():
    for i in range(9):
        for j in sudu[i]:
            print(j, end=" ")
        print()
# 检查函数
def check(r, c):  # 参数为当前行列数
    # 检查行内重复,注意检查的时候不要检查自己所处的位置
    for i in range(9):
        if i == c:  # 跳过自己这个位置,不然肯定重复呀
            continue
        else:
            if sudu[r][c] == sudu[r][i]:  # 有重复的
                return False
    # 检查列内重复
    for i in range(9):
        if i == r:  # 跳过自己
            continue
        else:
            if sudu[r][c] == sudu[i][c]:
                return False
    # 检查九宫格
    shang = r // 3 * 3  # 本点所处九宫格最上边的行数
    zuo = c // 3 * 3  # 本点所处九宫格最左边的列数
    for i in range(shang, shang + 3):  # 遍历行
        for j in range(zuo, zuo + 3):  # 遍历列
            if i == r and j == c:  # 跳过自己
                continue
            else:
                if sudu[r][c] == sudu[i][j]:
                    return False
    return True  # 都不重复
# 深搜函数,填写sudu
def dfs():  # 参数为当前行列数
    for i in range(9):
        for j in range(9):
            if sudu[i][j]==0:
                for k in range(1,10):
                    sudu[i][j]=k
                    if check(i,j) and dfs():
                        return True#如果深层有正确结果则不需要继续搜索,返回即可
                    sudu[i][j]=0
                return False#都不行,回溯
    return True#遍历完成即填写成功,返回真
# 输入
sudu = []
for i in range(9):
    sudu.append(list(map(int, input().split())))
# 填空
dfs()
output()