(defun facd (n p) (if (= n 1) 0 (prog (c) (setq a (* a n)) (setq c 0) loop (if (not (equal (mod a p) 0)) (return (mod (+ (facd (- n 1) p) c) 1000000007))) (setq a (/ a p)) (setq c (+ c 1)) (go loop) ) ) ) (defun factorial (n) (if (= n 1) 1 (mod (* n (factorial (- n 1))) 1000000007) ) ) (defun rui (n p) (if (= n 1) p (mod (* p (rui (- n 1) p)) 1000000007) ) ) (defun solve (n p) (setq a 1) (setq f (factorial n)) (mod (* (facd n p) (rui f f)) 1000000007) ) (princ (solve (read) (read)))