https://llego.dev/posts/solving-valid-sudoku-puzzles-python/