F1. 小排列问题(简单版本)
时间限制:2 秒
内存限制:256 兆字节
在简单版本中,ai 的取值范围是 [0,n];在困难版本中,ai 的取值范围是 [−1,n],并且好排列的定义略有不同。只有解决了所有版本的题目,你才能进行 Hack。
你有一个整数 n 和一个数组 a1,a2,…,an,其中每个 ai 都在 [0,n] 范围内。
一个 [1,2,…,n] 的排列 p1,p2,…,pn 被称为好的,如果对于每个 i,以下条件成立:
在 [p1,p2,…,pi] 中,数值 ≤i 的个数恰好为 ai。
请计算好排列的数量,结果对 998244353 取模。
输入
每个测试包含多个测试用例。第一行包含一个整数 t(1≤t≤104),表示测试用例的数量。接下来是每个测试用例的描述:
- 每个测试用例的第一行包含一个整数 n(1≤n≤2⋅105),表示数组 a 的长度。
- 第二行包含 n 个整数 a1,a2,…,an(0≤ai≤n),描述好排列的条件。
保证所有测试用例的 n 之和不超过 2⋅105。
输出
对于每个测试用例,输出一行,包含好排列的数量(对 998244353 取模)。
示例
输入
5
5
1 2 3 4 5
6
0 2 2 2 4 6
6
0 1 3 4 5 5
6
1 2 3 2 4 6
15
0 0 1 1 1 2 3 4 5 6 7 9 11 13 15
输出
1
4
0
0
532305727
示例说明
在第一个测试用例中,唯一的好排列是 [1,2,3,4,5]。
在第二个测试用例中,有 4 个好排列:
- [2,1,5,6,3,4]
- [2,1,5,6,4,3]
- [2,1,6,5,3,4]
- [2,1,6,5,4,3]
例如,[2,1,5,6,3,4] 是好的,因为:
- a1=0,在 [p1]=[2] 中 ≤1 的个数为 0;
- a2=2,在 [p1,p2]=[2,1] 中 ≤2 的个数为 2;
- a3=2,在 [p1,p2,p3]=[2,1,5] 中 ≤3 的个数为 2;
- a4=2,在 [p1,p2,p3,p4]=[2,1,5,6] 中 ≤4 的个数为 2;
- a5=4,在 [p1,p2,p3,p4,p5]=[2,1,5,6,3] 中 ≤5 的个数为 4;
- a6=6,在 [p1,p2,p3,p4,p5,p6]=[2,1,5,6,3,4] 中 ≤6 的个数为 6。
在第三个测试用例中,不存在好排列,因为没有任何排列能使 a6=5(在 [p1,…,p6] 中 ≤6 的个数只能为 6)。