5C.生成排列(perm)

时空限制:3 s / 512 MiB

输入输出方式:perm.in / perm.out

对于一个 1,2,…,n1,2,\ldots, n 的排列 p=[p1,p2,…,pn]p=[p_1,p_2,\ldots,p_n],考虑如下操作:

  • 初始化一个序列 q=[1,2,…,n]q=[1,2,\ldots,n];
  • 对于每个 1≤i≤n1\le i\le n,依次 交换 qpiq_{p_i} 与 qpi+1q_{p_i+1}。特别地,当 pi=np_i=n 时,交换 qnq_n 与 q1q_1;
  • 称最终的序列 qq 为 pp 的 生成排列。

给定某个序列 r=[r1,r2,…,rn]r=[r_1,r_2,\ldots,r_n],计算有多少个初始排列 pp 可能以 rr 作为其生成排列。由于答案可能很大,你只需要输出其对 998 244 353998\,244\,353 取模的值。

输入格式

从文件 perm.in 中读入数据。

本题包含多组测试数据。输入的第一行包含两个正整数 c,tc,t,分别表示测试点编号以及测试数据组数。c=0c=0 表示该测试点为样例。

对于每组测试数据:

  • 第一行包含一个正整数 nn,表示排列长度;
  • 第二行包含 nn 个互不相同的正整数 r1,r2,…,rnr_1,r_2,\ldots,r_n。

输出格式

输出到文件 perm.out。

对于每组测试数据,输出一行一个整数,表示符合条件的排列 pp 的个数对 998 244 353998\,244\,353 取模的结果。

样例 1

输入 
0 3
2 1 2
5 3 1 2 5 4
8 1 7 2 8 5 3 6 4
输出 
2
3
0

对于第一组测试数据,所有长度为 22 的排列均以 [1,2][1,2] 为生成排列,所以答案为 22。

对于第二组测试数据,所有符合条件的初始排列 pp 为 [3,2,1,4,5][3,2,1,4,5]、[3,2,4,1,5][3,2,4,1,5] 和 [3,4,2,1,5][3,4,2,1,5]。

对于第三组测试数据,可以证明,不存在符合要求的初始排列。

样例 2

见附件中的 perm2.in 与 perm2.ans。

该样例满足测试点 4,54,5 的限制条件。

样例 3

见附件中的 perm3.in 与 perm3.ans。

该样例满足测试点 11∼1411\sim14 的限制条件。

样例 4

见附件中的 perm4.in 与 perm4.ans。

该样例满足测试点 15,1615,16 的限制条件。

样例 5

见附件中的 perm5.in 与 perm5.ans。

该样例满足测试点 2020 的限制条件。

数据范围

对于全部测试数据,保证:

  • 1≤t≤51\le t \le 5;
  • 1≤n≤1031\le n\le 10^3;
  • r1,r2,…,rnr_1,r_2,\ldots,r_n 是 1,2,…,n1,2,\ldots ,n 的一个排列。
测试点编号n≤n\le特殊性质
1177无
221010
331414
4,54,51818
6,76,72020
886060
9,109,108080有
11∼1411\sim 14无
15,1615,16500500有
1717无
1818600600
1919800800
202010310^3

特殊性质:存在至少一个 1≤i≤n1\le i\le n,使得 pi=ip_i=i。