input: 
  def solve_sudoku(board):
      """ Solve a given Sudoku puzzle.
      The function uses backtracking to find the solution.
      It first searches for the next vacant cell in the grid. If there
      are no vacant cells left, it indicates that the puzzle is solved.
      For every vacant cell, it tries numbers from 1 to 9. It checks if
      placing any of these numbers is safe (i.e., it does not violate
      the Sudoku rules). If a number is safe, it tries to solve the
      modified board. If that leads to a solution, it returns True.
      Otherwise, it backtracks and tries the next number.
      If no solution is found after trying all numbers, it returns False.
      >>> 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]
      ... ])
      True
      >>> 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
      >>> solve_sudoku([
      ...     [5,3,0,0,8,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]
      ... ])
      False
      """
      def find_vacant_cell(board, l): 
          for row in range(9): 
              for col in range(9): 
                  if board[row][col] == 0: 
                      l[0] = row 
                      l[1] = col 
                      return True
          return False
  
      def is_safe(board, row, col, num): 
          for i in range(9): 
              if board[row][i] == num or board[i][col] == num or board[(row//3)*3 + i//3][(col//3)*3 + i%3] == num: 
                  return False
          return True
  
      def solve(board): 
          l = [0, 0] 
          if not find_vacant_cell(board, l): 
              return True
          row, col = l
          for num in range(1, 10): 
              if is_safe(board, row, col, num): 
                  board[row][col] = num 
                  if solve(board): 
                      return True
                  board[row][col] = 0
          return False
  
      return solve(board)
  
output:     def solve_sudoku(board):
          def find_vacant_cell(board, l): 
              for row in range(9): 
                  for col in range(9): 
                      if board[row][col] == 0: 
                          l[0] = row 
                          l[1] = col 
                          return True
              return False
  
          def is_safe(board, row, col, num): 
              for i in range(9): 
                  if board[row][i] == num or board[i][col] == num or board[(row//3)*3 + i//3][(col//3)*3 + i%3] == num: 
                      return False
              return True
  
          def solve(board): 
              l = [0, 0] 
              if not find_vacant_cell(board, l): 
                  return True
              row, col = l
              for num in range(1, 10): 
                  if is_safe(board, row, col, num): 
                      board[row][col] = num 
                      if solve(board): 
                          return True
                      board[row][col] = 0
              return False
  
          return solve(board)