(defun calculate-kaprekar (index expt-number)
   (cond 
          ((= (length (prin1-to-string expt-number)) index) 0)
          ((= (parse-integer (subseq (prin1-to-string expt-number) index)) 0 ) 0)

          (t (+ (parse-integer (subseq (prin1-to-string expt-number) 0 index))
               (parse-integer (subseq (prin1-to-string expt-number) index)))
          ))

)

;Calculate if the input is a kaprekar number
(defun kaprekar (num &optional index expt-number)
    (cond ( (and (numberp expt-number) (numberp index))
             (let ((sum (calculate-kaprekar index expt-number)))
                (cond 
                       ((= num 1)   "S")
                       ((= num sum) "S")
                       ((zerop sum) "N")
                       (t (kaprekar num (+ 1 index) expt-number))
                      
                )
              

             )
           )
              

             (t 
                (let ((x (expt num 2)))
                   (kaprekar num 1 x)
                )
               
             )
               
               
    )

)

(defun main ()
  (let ((kaprekar-values '()))
    (loop
       (let ((line (read-line)))
        (when (string= line "0")  
          ;(format t "~%~%Saida:~%")
          (mapcar #'(lambda (x) (format t "~a: ~a~%" (car x) (cadr x))) (reverse kaprekar-values))
          ;(format t "~%~%bye~%") 
          (return))


        (push (list line (kaprekar (parse-integer line))) kaprekar-values)
        )

    )
  )
)