



"""simple docstring"""





from __future__ import annotations

__lowerCAmelCase       :					str      					=					list[list[int]]

# assigning initial values to the grid
__lowerCAmelCase       :					str      					=					[
    [3, 0, 6, 5, 0, 8, 4, 0, 0],
    [5, 2, 0, 0, 0, 0, 0, 0, 0],
    [0, 8, 7, 0, 0, 0, 0, 3, 1],
    [0, 0, 3, 0, 1, 0, 0, 8, 0],
    [9, 0, 0, 8, 6, 3, 0, 0, 5],
    [0, 5, 0, 0, 9, 0, 6, 0, 0],
    [1, 3, 0, 0, 0, 0, 2, 5, 0],
    [0, 0, 0, 0, 0, 0, 0, 7, 4],
    [0, 0, 5, 2, 0, 6, 3, 0, 0],
]

# a grid with no solution
__lowerCAmelCase       :					str      					=					[
    [5, 0, 6, 5, 0, 8, 4, 0, 3],
    [5, 2, 0, 0, 0, 0, 0, 0, 2],
    [1, 8, 7, 0, 0, 0, 0, 3, 1],
    [0, 0, 3, 0, 1, 0, 0, 8, 0],
    [9, 0, 0, 8, 6, 3, 0, 0, 5],
    [0, 5, 0, 0, 9, 0, 6, 0, 0],
    [1, 3, 0, 0, 0, 0, 2, 5, 0],
    [0, 0, 0, 0, 0, 0, 0, 7, 4],
    [0, 0, 5, 2, 0, 6, 3, 0, 0],
]
def 	__lowerCAmelCase						(		__UpperCamelCase      :			Optional[Any]					, __UpperCamelCase      :			List[str]					, __UpperCamelCase      :			List[str]					, __UpperCamelCase      :			Dict    ):


						'''simple docstring'''






						for i in range(9    ):
												if grid[row][i] == n or grid[i][column] == n:
																		return False

						for i in range(3    ):
												for j in range(3    ):
																		if grid[(row - row % 3) + i][(column - column % 3) + j] == n:
																								return False

						return True
def 	__lowerCAmelCase						(		__UpperCamelCase      :			int    ):


						'''simple docstring'''






						for i in range(9    ):
												for j in range(9    ):
																		if grid[i][j] == 0:
																								return i, j
						return None
def 	__lowerCAmelCase						(		__UpperCamelCase      :			Union[str, Any]    ):


						'''simple docstring'''






						if location := find_empty_location(__SCREAMING_SNAKE_CASE    ):
												snake_case_			,		snake_case_   : Tuple						=			location
						else:
												# If the location is ``None``, then the grid is solved.
												return grid

						for digit in range(1					, 1_0    ):
												if is_safe(__SCREAMING_SNAKE_CASE					, __SCREAMING_SNAKE_CASE					, __SCREAMING_SNAKE_CASE					, __SCREAMING_SNAKE_CASE    ):
																		snake_case_   : Optional[Any]						=			digit

																		if sudoku(__SCREAMING_SNAKE_CASE    ) is not None:
																								return grid

																		snake_case_   : Optional[Any]						=			0

						return None
def 	__lowerCAmelCase						(		__UpperCamelCase      :			Any    ):


						'''simple docstring'''






						for row in grid:
												for cell in row:
																		print(__SCREAMING_SNAKE_CASE					, end=""" """    )
												print()


if __name__ == "__main__":
						# make a copy of grid so that you can compare with the unmodified grid
						for example_grid in (initial_grid, no_solution):
												print('''\nExample grid:\n''' + '''=''' * 20)
												print_solution(example_grid)
												print('''\nExample grid solution:''')
												__lowerCAmelCase       :					List[Any]      					=					sudoku(example_grid)
												if solution is not None:
																		print_solution(solution)
												else:
																		print('''Cannot find a solution.''')






"""simple docstring"""





def 	__lowerCAmelCase						(		__UpperCamelCase      :			str    ):


						'''simple docstring'''






						return " ".join(input_str.split()[::-1]    )


if __name__ == "__main__":
					import doctest

					doctest.testmod()

