input: Write a python function to solve a Sudoku puzzle.
  assert solve_sudoku([[5, 3, 0, 0, 7, 0, 0, 0, 0],
                       [6, 0, 0, 1, 9, 5, 0, 0, 0],
                       [0, 9, 8, 0, 0, 0, 0, 6, 0],
                       [8, 0, 0, 0, 6, 0, 0, 0, 3],
                       [4, 0, 0, 8, 0, 3, 0, 0, 1],
                       [7, 0, 0, 0, 2, 0, 0, 0, 6],
                       [0, 6, 0, 0, 0, 0, 2, 8, 0],
                       [0, 0, 0, 4, 1, 9, 0, 0, 5],
                       [0, 0, 0, 0, 8, 0, 0, 7, 9]]) == True
  assert solve_sudoku([[1, 0, 0, 0, 0, 7, 0, 9, 0],
                       [0, 3, 0, 0, 2, 0, 0, 0, 8],
                       [0, 0, 9, 6, 0, 0, 5, 0, 0],
                       [0, 0, 5, 3, 0, 0, 9, 0, 0],
                       [0, 1, 0, 0, 8, 0, 0, 0, 2],
                       [6, 0, 0, 0, 0, 4, 0, 0, 0],
                       [3, 0, 0, 0, 0, 0, 0, 1, 0],
                       [0, 4, 1, 0, 0, 0, 0, 0, 7],
                       [0, 0, 7, 0, 0, 0, 3, 0, 0]]) == True
output: def solve_sudoku(board):
      def is_valid(board, row, col, num):
          for i in range(9):
              if board[row][i] == num or board[i][col] == num:
                  return False
              if board[row - row % 3 + i // 3][col - col % 3 + i % 3] == num:
                  return False
          return True
  
      def solve(board):
          for row in range(9):
              for col in range(9):
                  if board[row][col] == 0:
                      for num in range(1, 10):
                          if is_valid(board, row, col, num):
                              board[row][col] = num
                              if solve(board):
                                  return True
                              board[row][col] = 0
                      return False
          return True
  
      return solve(board)