(defun f (n m)
  (let* ((result (* n m))
	 (length (1+ (length (princ-to-string result))))
	 (kugiri (make-string length :initial-element #\-)))
    (format t "~@?~%x~@?~%~a~%~@?~a~% ~d~%"
	    (format nil "~~~dd" length) n
	    (format nil "~~~dd" (1- length)) m
	    kugiri
	    (format nil "~~{~~~d@a~%~~}" length)
	    (loop for c across (nreverse (princ-to-string m))
		  for space = 0 then (if (zerop i) space (+ space zero 1))
		  for zero = 0 then (if (zerop i) (1+ zero) 0)
		  for i = (* n (parse-integer (string c)))
		  unless (zerop i)
		  collect
		 (concatenate 'string
			      (princ-to-string i)
			      (make-string zero :initial-element #\0)
			      (make-string space :initial-element #\ )))
	    kugiri
	    result)))

(f 1234 1001)
(f 12 1999808070605040302010)