Idxs = tuple[int, int, int] zeros = set[Idxs]() boxs = dict[int, list[Idxs]]() rows = list[list[str]]() for r in range(9): row = [] for c, v in enumerate(input().split()): b = r // 3 * 3 + c // 3 idxs = (r, c, b) if v == "0": zeros.add(idxs) boxs.setdefault(b, []).append(idxs) row.append(v) rows.append(row) def valid(p: Idxs): r, c, b = p v = rows[r][c] for x in range(9): if x != r and v == rows[x][c]: return False if x != c and v == rows[r][x]: return False br, bc, _ = boxs[b][x] if br != r and bc != c and v == rows[br][bc]: return False return True def dfs(): for p in zeros.copy(): zeros.remove(p) for x in "123456789": rows[p[0]][p[1]] = x if valid(p) and dfs(): return True rows[p[0]][p[1]] = "0" zeros.add(p) return False return True if not dfs(): print("no answer") print("\n".join(" ".join(row) for row in rows))