input: Write a function to solve any Sudoku puzzle given a board in a 9x9 list format where 0 represents an empty cell. The function should return True if a solution exists and print the solution, otherwise return False and print "No solution".
  
  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):
                  return False
              if(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(board):
          l = [0, 0]
          if (not find_vacant_cell(board, l)):
              return True
          row = l[0]
          col = l[1]
          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
  
      if (solve(board)):
          for row in board:
              print(row)
      else:
          print("No solution")
  
  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]
  ])==None
  
  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]
  ])==None
  
  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, 6, 0, 8, 0, 0, 7, 0]
  ])==None
  
  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, 6, 0, 8, 0, 0, 7, 9]
  ])==None
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):
                  return False
              if(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(board):
          l = [0, 0]
          if (not find_vacant_cell(board, l)):
              return True
          row = l[0]
          col = l[1]
          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
  
      if (solve(board)):
          for row in board:
              print(row)
      else:
          print("No solution")