input: Write a function to solve any Sudoku puzzle. The function should take a 9x9 board as input and return the solved board. If the board is empty or unsolvable, the function should return the input board unchanged.
  assert solve_sudoku([    [7,8,0,4,0,0,1,2,0],    [6,0,0,0,7,5,0,0,9],    [0,0,0,6,0,1,0,7,8],    [0,0,7,0,4,0,2,6,0],    [0,0,1,0,5,0,9,3,0],    [9,0,4,0,6,0,0,0,5],    [0,7,0,3,0,0,0,1,2],    [1,2,0,0,0,7,4,0,0],    [0,4,9,2,0,6,0,0,7]])==[    [7,8,5,4,3,9,1,2,6],    [6,1,2,8,7,5,3,4,9],    [4,9,3,6,2,1,5,7,8],    [8,5,7,9,4,3,2,6,1],    [2,6,1,7,5,8,9,3,4],    [9,3,4,1,6,2,7,8,5],    [5,7,8,3,9,4,6,1,2],    [1,2,6,5,8,7,4,9,3],    [3,4,9,2,1,6,8,5,7]]
  assert solve_sudoku([    [0,0,0,0,0,0,0,0,0],    [0,0,0,0,0,0,0,0,0],    [0,0,0,0,0,0,0,0,0],    [0,0,0,0,0,0,0,0,0],    [0,0,0,0,0,0,0,0,0],    [0,0,0,0,0,0,0,0,0],    [0,0,0,0,0,0,0,0,0],    [0,0,0,0,0,0,0,0,0],    [0,0,0,0,0,0,0,0,0]])==[    [1,2,3,4,5,6,7,8,9],    [4,5,6,7,8,9,1,2,3],    [7,8,9,1,2,3,4,5,6],    [2,1,4,3,6,5,8,9,7],    [3,6,5,8,9,7,2,1,4],    [8,9,7,2,1,4,3,6,5],    [5,3,1,6,4,2,9,7,8],    [6,4,2,9,7,8,5,3,1],    [9,7,8,5,3,1,6,4,2]]
  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]])==[    [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]]
  assert solve_sudoku([    [1,2,3,0,0,0,0,0,0],    [4,5,6,0,0,0,0,0,0],    [7,8,9,0,0,0,0,0,0],    [0,0,0,1,2,3,0,0,0],    [0,0,0,4,5,6,0,0,0],    [0,0,0,7,8,9,0,0,0],    [0,0,0,0,0,0,1,2,3],    [0,0,0,0,0,0,4,5,6],    [0,0,0,0,0,0,7,8,9]])==[    [1,2,3,5,6,8,9,7,4],    [4,5,6,9,7,1,3,2,8],    [7,8,9,2,3,4,6,1,5],    [8,9,1,7,2,5,4,6,3],    [6,7,4,8,9,3,5,1,2],    [5,3,2,4,1,6,8,9,7],    [9,4,7,3,8,2,1,5,6],    [3,1,8,6,5,7,2,4,9],    [2,6,5,1,4,9,7,3,8]]
  assert solve_sudoku([])==[]
  assert solve_sudoku([    [1,2,3,4,5,6,7,8,9],    [4,5,6,7,8,9,1,2,3],    [7,8,9,1,2,3,4,5,6],    [2,1,4,3,6,5,8,9,7],    [3,6,5,8,9,7,2,1,0],    [8,9,7,2,1,4,3,6,5],    [5,3,1,6,4,2,9,7,8],    [6,4,2,9,7,8,5,3,1],    [9,7,8,5,3,1,6,4,2]])==[    [1,2,3,4,5,6,7,8,9],    [4,5,6,7,8,9,1,2,3],    [7,8,9,1,2,3,4,5,6],    [2,1,4,3,6,5,8,9,7],    [3,6,5,8,9,7,2,1,8],    [8,9,7,2,1,4,3,6,5],    [5,3,1,6,4,2,9,7,8],    [6,4,2,9,7,8,5,3,1],    [9,7,8,5,3,1,6,4,2]]
output: def solve_sudoku(board):
      def is_valid(board, row, col, num):
          for x in range(9):
              if board[row][x] == num:
                  return False
              if board[x][col] == num:
                  return False
              if board[row//3 * 3 + x//3][col//3 * 3 + x%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
  
      if len(board) != 9 or any(len(row) != 9 for row in board):
          return board
  
      solve(board)
      return board