题号:NC312379
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
64bit IO Format: %lld
题目描述

给定一个长度为

的序列

,满足序列

的数
两两互不相同,且序列

中所有值都在
![[0,n]](https://www.nowcoder.com/equation?tex=%5B0%2Cn%5D)
的闭区间范围内。换句话说,序列

是一个
![[0,n]](https://www.nowcoder.com/equation?tex=%5B0%2Cn%5D)
都出现的排列删去一个数得到的新序列。

现在你有

次操作以及一个空序列

,每次操作依次执行如下操作:

选择任意一个位置
)
,将

删除;

将下标

放入序列

末尾;

再将
)
添加到序列

的末尾。

显然,操作完成后,

序列的长度保持不变。

令
)
表示在经过
恰好 
次操作后,最终的
%3Dx)
的不同方案数,其中最终得到的序列

为方案序列。

两种长度相同的方案序列不同,当且仅当两个方案序列

、

,存在某个位置
)
,使得

,另外,
空序列也算一种合法的方案序列。

现在,对于所有的

,求出对应的
)
值。由于答案可能很大,请将答案对

取模后输出。
【名词解释】
mex:整数序列的

定义为没有出现在序列中的最小非负整数。例如,
%20%3D0)
、
%20%3D1)
。
输入描述:
每个测试文件均包含多组测试数据。第一行输入一个整数
代表数据组数,每组测试数据描述如下:
第一行输入两个整数
,分别表示序列
的初始长度与操作数。
第二行输入
个整数
,保证序列
的所有数两两互不相同。
除此之外,保证单个测试文件的
之和、
之和均不超过
。
输出描述:
对于每一组测试数据,新起一行输出
个整数,表示
的值对
取模后的结果,其中
依次取
。
示例1
输入
复制
4
2 3
1 2
2 3
0 2
2 4
0 1
3 2
0 2 3
输出
复制
1 3 11
0 4 11
0 0 31
0 3 4 6
示例2
输入
复制
5
5 10
0 1 3 4 5
10 15
0 1 2 4 5 6 7 8 9 10
10 2000
0 2 3 4 5 6 7 8 9 10
6 520
1 2 3 4 5 6
4 1314
0 1 2 4
输出
复制
0 0 2047 86526 1309528 10808930
0 0 0 21523360 411888052 778520183 234804 348169110 866328669 463227006 365181041
0 2001 419683055 136993170 698008321 649608350 327930363 786975970 700352276 922358214 467350136
1 520 896286168 314312390 697320235 954556547 993400807
0 0 0 439733751 756040099