#z1047. 排列

排列

【问题描述】 有一个长度为 nn 的数组 aa,初始时按照 1,2,,n1,2,\ldots,n 排列,也就是 ai=ia_i = i。 假设你有一个 11nn 的排列 pp,也就是 pip_i 两两不同且恰好取尽 11nnnn 个数,定义一次变换为:对所有 11nn 之间的 ii,令 ai=paia_i = p_{a_i},那么在若干次变换之后,数组 aa 会变回原始的 1,2,,n1,2,\ldots,n,记最少需要的变换次数为 F(p)F(p)。请注意,至少需要进行一次变换,也就是对任意的 pp 都有 F(p)1F(p) \geq 1。 举例来说,设 n=6n = 6p=2,3,1,5,4,6p = { 2,3,1,5,4,6 },初始时 a=1,2,3,4,5,6a = { 1,2,3,4,5,6 },由于 p1=2p_1 = 2,所以每次变换会把 aa 数组中的数字 11 变为 22,其它数字类似。 第一次变换,11 变为 2222 变为 3333 变为 1144 变为 5555 变为 4466 不变,得到 a=2,3,1,5,4,6a = { 2,3,1,5,4,6 }。 类似地,第二次变换得到 a=3,1,2,4,5,6a = { 3,1,2,4,5,6 },第三次变换得到 a=1,2,3,5,4,6a = { 1,2,3,5,4,6 },第四次变换得到 a=2,3,1,4,5,6a = { 2,3,1,4,5,6 },第五次变换得到 a=3,1,2,5,4,6a = { 3,1,2,5,4,6 },第六次变换得到 a=1,2,3,4,5,6a = { 1,2,3,4,5,6 },因此对于这个排列 pp,最少的变换次数是 66,也就是 F(2,3,1,5,4,6)=6F( { 2,3,1,5,4,6 } ) = 6。 现在给定了 nn,你需要求出对于所有 n!n! 种可能的排列 ppF(p)F(p) 有多少种不同值。 【输入格式】 一行一个正整数 nn,表示数组的长度。 【输出格式】 一行一个正整数表示答案。 【输入样例】 3 【输出样例】 3 【样例解释】 三种可能性,变换 11 次,22 次或 33 次。 【数据规模和约定】 对于 30% 的数据,保证 1n101 \leq n \leq 10。 对于 100% 的数据,保证 1n10001 \leq n \leq 1000