https://www.acmicpc.net/problem/2580
import sys
read = sys.stdin.readline
# 입력이 너무 적으면 input()써라
n = 9
answer = [list(map(int, read().split())) for _ in range(n) ]
nxt = []
for r in range(n):
for c in range(n):
if answer[r][c] == 0:
nxt.append((r, c))
def check_row(k_r, k):
for c in range(n):
if answer[k_r][c] == k:
return False
return True
def check_col(k_c, k):
for r in range(n):
if answer[r][k_c] == k:
return False
return True
def check_around(r, c, k):
r = r // 3 * 3
c = c // 3 * 3
for x in range(r, r+3):
for y in range(c, c+3):
if answer[x][y] == k:
return False
return True
def solve(k):
if k == len(nxt):
for row in answer:
print(' '.join(map(str, row)))
sys.exit(0)
r, c = nxt[k]
for num in range(1, n+1):
if check_row(r, num) and check_col(c, num) and check_around(r, c, num):
answer[r][c] = num
solve(k+1)
answer[r][c] = 0
solve(0)