input: Write a python function to solve a Sudoku puzzle.
  assert solve([[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([[5, 1, 6, 8, 4, 9, 7, 3, 2],
                [3, 0, 7, 6, 0, 5, 0, 0, 0],
                [8, 0, 9, 7, 0, 0, 0, 6, 5],
                [1, 3, 5, 0, 6, 0, 9, 0, 7],
                [4, 7, 2, 5, 9, 1, 0, 0, 6],
                [9, 6, 8, 3, 7, 2, 5, 0, 0],
                [2, 5, 3, 1, 8, 6, 0, 7, 4],
                [6, 8, 4, 2, 0, 7, 0, 5, 3],
                [7, 9, 1, 0, 5, 3, 6, 0, 8]]) == False
output: def solve(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 // 3 * 3 + i // 3][col // 3 * 3 + i % 3] == num:
                  return False
          return True
  
      def solve_sudoku(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_sudoku(board):
                                  return True
                              board[row][col] = 0
                      return False
          return True
  
      return solve_sudoku(board)