题目描述
Farmer John(又)想到了一个新的奶牛晨练方案!
如同之前,Farmer John 的 NNN 头奶牛站成一排。对于 1≤i≤N1\le i\le N1≤i≤N 的每一个 iii,从左往右第 iii 头奶牛的编号为 iii。他告诉她们重复以下步骤,直到奶牛们与她们开始时的顺序相同。
给定长为 NNN 的一个排列 AAA,奶牛们改变她们的顺序,使得在改变之前从左往右第 iii 头奶牛在改变之后为从左往右第 AiA_iAi 头。
例如,如果 A=(1,2,3,4,5)A=(1,2,3,4,5)A=(1,2,3,4,5),那么奶牛们总共进行一步就回到了同样的顺序。如果 A=(2,3,1,5,4)A=(2,3,1,5,4)A=(2,3,1,5,4),那么奶牛们总共进行六步之后回到起始的顺序。每步之后奶牛们从左往右的顺序如下:
0 步:(1,2,3,4,5)(1,2,3,4,5)(1,2,3,4,5)
1 步:(3,1,2,5,4)(3,1,2,5,4)(3,1,2,5,4)
2 步:(2,3,1,4,5)(2,3,1,4,5)(2,3,1,4,5)
3 步:(1,2,3,5,4)(1,2,3,5,4)(1,2,3,5,4)
4 步:(3,1,2,4,5)(3,1,2,4,5)(3,1,2,4,5)
5 步:(2,3,1,5,4)(2,3,1,5,4)(2,3,1,5,4)
6 步:(1,2,3,4,5)(1,2,3,4,5)(1,2,3,4,5)
请你计算出所有可能的 N!N!N! 种长为 NNN 的排列 AAA 回到起始顺序需要的步数的乘积。
由于这个数字可能非常大,输出答案模 MMM 的余数(108≤M≤109+710^8\le M\le 10^9+7108≤M≤109+7,MMM 是质数)。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
使用 C++ 的选手可以使用 KACTL 中的这一代码。这一名为 Barrett 模乘 的算法可以以比通常计算快上数倍的速度计算 a%ba \% ba%b,其中 b>1b>1b>1 为一个编译时未知的常数。(不幸的是,我们没有找到对于 Java 的这样的优化)。(译注:中文选手可以参考 几种取模优化方法(译自 min-25 的博客))
输入格式
输入一行包含 NNN 和 MMM。
输出格式
输出一个整数。
输入输出样例 #1
输入 #1
输出 #1
说明/提示
样例解释:
对于每一个 1≤i≤N1\le i\le N1≤i≤N,以下序列的第 iii 个元素等于奶牛需要使用 iii 步的排列数量:[1,25,20,30,24,20][1,25,20,30,24,20][1,25,20,30,24,20]。所以答案等于 11⋅225⋅320⋅430⋅524⋅620≡369329541(mod109+7)1^1\cdot 2^{25}\cdot 3^{20}\cdot 4^{30}\cdot 5^{24}\cdot 6^{20}\equiv
369329541\pmod{10^9+7}11⋅225⋅320⋅430⋅524⋅620≡369329541(mod109+7)。
注意:这个问题的内存限制增加为 512 MB。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
对于 100%100\%100% 的数据,满足 1≤N≤75001\le N\le 75001≤N≤7500。
共 161616 个测试点,其中 111 为样例,其余性质如下:
测试点 222 满足 N=8N=8N=8。
测试点 3∼53\sim 53∼5 满足 N≤50N\le 50N≤50。
测试点 6∼86\sim 86∼8 满足 N≤500N\le 500N≤500。
测试点 9∼129\sim 129∼12 满足 N≤3000N\le 3000N≤3000。
测试点 13∼1613\sim 1613∼16 没有额外限制。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
出题人:Benjamin Qi