input: Write a python function to solve a 9x9 sudoku grid.
  assert solve([[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]]) == True
  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([[1,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]]) == False
output: def solve(board):
      def is_valid(board, num, pos):
          for i in range(9):
              if board[pos[0]][i] == num or board[i][pos[1]] == num:
                  return False
          
          box_x, box_y = pos[1] // 3, pos[0] // 3
          
          for i in range(box_y * 3, box_y * 3 + 3):
              for j in range(box_x * 3, box_x * 3 + 3):
                  if board[i][j] == num:
                      return False
          
          return True
  
      def find_empty(board):
          for i in range(9):
              for j in range(9):
                  if board[i][j] == 0:
                      return (i, j)
          return None
  
      def solve_sudoku(board):
          empty = find_empty(board)
          if not empty:
              return True
          else:
              row, col = empty
          
          for num in range(1, 10):
              if is_valid(board, num, (row, col)):
                  board[row][col] = num
                  if solve_sudoku(board):
                      return True
                  board[row][col] = 0
          
          return False
  
      return solve_sudoku(board)