【题目描述】
第二道是“立方招兵支银给米题”,ynycoding 见题目名这九个大字张牙舞爪,形状
可怖,想到联考同学们将要惨遭横祸,这笔帐却要算到张老祖师爷头上,戚然有忧道:小
哥尚有一事不明,要请大神您指教——
设 S 为所有长度为 n,元素为 [1, n] 间正整数且每种数出现不超过 m 次的序列所
构成的集合。对于序列 s ∈ S,我们定义一次变换操作为,选择两个 [1, n] 间的不同整数
a, b,并对序列 s 依次执行如下两个操作:
1. 交换 sa, sb。
2. 考虑序列中的每个位置,如果这个位置上的数在 .第 .一 .步 .操 .作 .后为 a,则将其变为 b,
与此 .同 .时,如果这个位置在第一步操作后为 b,则将其变为 a。
找到一个 S 的子集 T ,使得对于 S 中的任意一个序列 s,都存在一个 T 中序列 t,
使得 t 可以通过若干次变换操作变为 s。
larryzhong 道:“出题人用心恶毒,单是能构造个答案,未必有用。”这次 ynycoding
觉他说得有理,不再跟他斗口,只问:“那怎么办?”larryzhong 道:“咱们找到一个 T 的
大小尽量小的答案,拿它来与这九个字对质。”yny 点头称是。
因此你希望找到一个 S 的子集 T ,使得对于 S 中的任意一个序列 s,都存在一个
T 中序列 t ,使得 t 可以通过若干次变换操作变为 s。求出 |T | 的最小值模给定质数 P
的值。
【输入格式】
从文件 rice.in 中读入。
一行三个整数 n, m, P。
【输出格式】
输出到文件 rice.out 中。
一行一个整数,表示答案。
【样例 1 输入】
2 2 229【样例 1 输出】
2【样例 1 解释】
S = {[1, 2], [2, 1]},上述操作只能进行 [1, 2] → [1, 2],[2, 1] → [2, 1],故答案为 2。其 中 229 是第 50 个质数。
【样例 2】
见选手目录下的 rice/rice2.in 与 rice/rice2.ans。
该样例与子任务 2 满足同样的约束条件。
【样例 3】
见选手目录下的 rice/rice3.in 与 rice/rice3.ans。
该样例与子任务 3 满足同样的约束条件。
【样例 4】
见选手目录下的 rice/rice4.in 与 rice/rice4.ans。
该样例与子任务 4 满足同样的约束条件。
【样例 5】
见选手目录下的 rice/rice5.in 与 rice/rice5.ans。
该样例与子任务 5 满足同样的约束条件。
【测试点约束】
对于所有数据,保证由出题人手造,保证 $1 ≤ n < 229,1 ≤ m ≤ min(80, n),229 ≤ P ≤ 10^9 + 7$,保证 P 为质数。
• 子任务 1(1 分):n = 1。
• 子任务 2(11 分):n = 9; m ≤ 5。
• 子任务 3(14 分):m = 1。
• 子任务 4(26 分):m = n ≤ 80。
• 子任务 5(28 分):m ≤ n ≤ 37。
• 子任务 6(20 分):无特殊限制。