题目描述
Moon 最近在玩一款名为 Shadowverse 的卡牌游戏,在非常有趣的游戏过程中,Moon 想到这样一个关于洗牌的问题。假设当前牌堆中有 n 张牌,第 i 张牌的标号为 i,我们定义一种洗牌方式是一个排列 X={x1,x2,...,xn}, 也就是把牌堆中第 i 张位置的牌变成第 xi 张。那么假设现在 Moon 按照 X 的洗牌方式洗了 k 次牌,不妨设最终得到了一个排列 Y={y1,y2,...,yn},yi 表示洗完牌后第 i 张牌的标号。Moon 希望你可以帮助他算出有多少合法的洗牌方式 X,满足洗了 K 次后变成排列 Y ,由于答案可能很大,所以你只需要输出对 998244353 取模的答案即可。
形式化而言,考虑对于排列 P={p1,p2,...,pn} 和排列 Q={q1,q2,...,qn}, 定义这两个排列的乘积:
P×Q={qp1,qp2,...,qpn}
而排列 X 的 k 次幂 Xk 为 k 个排列 X 的乘积,现在考虑给定排列 Y 和正整数 k, 求满足方程 Xk=Y 的排列 X 的数量,对 998244353 取模。
输入格式
第一行是一个整数 T 表示测试数据组数。
每组数据包括两行,第一行两个正整数 n,k,分别表示排列 X 和 Y 的长度、洗了 k 次牌。
第二行是 n 个 1 到 n 内互不相同的正整数 {y1,y2,...,yn},表示排列 Y 。
输出格式
T 行,每行一个整数, 表示合法的洗牌方式的数量,对 998244353 取模。
1
5 6
2 1 4 3 5
2
见/example/permutation/下的
permutation1.in
见/example/permutation/下的
permutation1.out
提示
样例解释
样例中,X=[3,4,2,1,5] 或者 [4,3,1,2,5], 共两个合法排列。
数据范围
对于所有的数据,有 1≤n≤3000,1≤k≤106,1≤T≤10;
对于 20% 的数据,有 1≤n,k≤8;
对于另外 10% 的数据,仅保证 1≤n≤8;
对于另外 30% 的数据,仅保证 1≤n≤50。