input: def solve_sudoku(board):
      """Solve any Sudoku puzzle using backtracking. The function will attempt to fill vacant cells, if any,
      by checking all possible numbers for safety and recursively solving the puzzle. If the puzzle has a solution, 
      the function will print the solved board. If not, it will print "No solution".
      
      >>> 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]
      ])
      same as input
      
      >>> 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]
      """
output:     def is_safe(board, row, col, num):
          for x in range(9):
              if board[row][x] == num or board[x][col] == num:
                  return False
          start_row, start_col = 3 * (row // 3), 3 * (col // 3)
          for i in range(3):
              for j in range(3):
                  if board[i + start_row][j + start_col] == 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_safe(board, row, col, num):
                              board[row][col] = num
                              if solve(board):
                                  return True
                              board[row][col] = 0
                      return False
          return True
  
      if solve(board):
          for row in board:
              print(row)
      else:
          print("No solution")