5C.生成排列(perm)
时空限制:3 s / 512 MiB
输入输出方式:perm.in / perm.out
对于一个 的排列 ,考虑如下操作:
- 初始化一个序列 ;
- 对于每个 ,依次 交换 与 。特别地,当 时,交换 与 ;
- 称最终的序列 为 的 生成排列。
给定某个序列 ,计算有多少个初始排列 可能以 作为其生成排列。由于答案可能很大,你只需要输出其对 取模的值。
输入格式
从文件 perm.in 中读入数据。
本题包含多组测试数据。输入的第一行包含两个正整数 ,分别表示测试点编号以及测试数据组数。 表示该测试点为样例。
对于每组测试数据:
- 第一行包含一个正整数 ,表示排列长度;
- 第二行包含 个互不相同的正整数 。
输出格式
输出到文件 perm.out。
对于每组测试数据,输出一行一个整数,表示符合条件的排列 的个数对 取模的结果。
样例 1
输入
0 32 1 25 3 1 2 5 48 1 7 2 8 5 3 6 4
输出
230
对于第一组测试数据,所有长度为 的排列均以 为生成排列,所以答案为 。
对于第二组测试数据,所有符合条件的初始排列 为 、 和 。
对于第三组测试数据,可以证明,不存在符合要求的初始排列。
样例 2
见附件中的 perm2.in 与 perm2.ans。
该样例满足测试点 的限制条件。
样例 3
见附件中的 perm3.in 与 perm3.ans。
该样例满足测试点 的限制条件。
样例 4
见附件中的 perm4.in 与 perm4.ans。
该样例满足测试点 的限制条件。
样例 5
见附件中的 perm5.in 与 perm5.ans。
该样例满足测试点 的限制条件。
数据范围
对于全部测试数据,保证:
- ;
- ;
- 是 的一个排列。
| 测试点编号 | 特殊性质 | |
|---|---|---|
| 无 | ||
| 有 | ||
| 无 | ||
| 有 | ||
| 无 | ||
特殊性质:存在至少一个 ,使得 。