while boards:
board = boards.pop()
for f in (rows, cols, boxs):
board = prune(f(board))
board = f(fill(board))
if complete(board): return show(board)
if valid(board):
boards.extend(next_boards(board))
for f in (rows, cols, boxs):
board = prune(f(board))
board = f(fill(board))
# a necessary unnecessary identify function
rows(rows(cols(cols(boxs(boxs(board)))))) == board