(defun leap-year-p (y) (cond ((zerop (mod y 400)) t) ((zerop (mod y 100)) nil) ((zerop (mod y 4)) t) (t nil))) (defun days (y m) (case m (1 31) (2 (if (leap-year-p y) 29 28)) (3 31) (4 30) (5 31) (6 30) (7 31) (8 31) (9 30) (10 31) (11 30) (12 31) (otherwise 31))) (defun normalize (y m d) (let ((ld (days y m))) (cond ((= m 13) `(,(1+ y) 1 ,d)) ((< ld d) (normalize y (1+ m) (- d ld))) (t `(,y ,m ,d))))) (defun main () (let* ((s (read-line)) (y (read-from-string s t nil :end 4)) (m (read-from-string s t nil :start 5 :end 7)) (d (+ 2 (read-from-string s t nil :start 8))) (x (normalize y m d))) (format t "~4,'0d/~2,'0d/~2,'0d~%" (nth 0 x) (nth 1 x) (nth 2 x)))) (main)