input: Write a python function to solve a given 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([[5, 3, 4, 6, 7, 8, 9, 1, 2], 
                       [6, 7, 2, 1, 9, 5, 3, 4, 8], 
                       [1, 9, 8, 3, 4, 2, 5, 6, 7], 
                       [8, 5, 9, 7, 6, 1, 4, 2, 3], 
                       [4, 2, 6, 8, 5, 3, 7, 9, 1], 
                       [7, 1, 3, 9, 2, 4, 8, 5, 6], 
                       [9, 6, 1, 5, 3, 7, 2, 8, 4], 
                       [2, 8, 7, 4, 1, 9, 6, 3, 5], 
                       [3, 4, 5, 2, 8, 6, 1, 7, 9]]) == 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
          box_start_row, box_start_col = 3 * (row // 3), 3 * (col // 3)
          for i in range(3):
              for j in range(3):
                  if board[box_start_row + i][box_start_col + j] == 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)