#JP28. 说谎者

说谎者

题目描述

nn 个同学排成一行进行一场游戏;
从左边数第 ii 个人说:他左边有 aia_{i} 个说谎者(不包括他们自己);
每个同学要么诚实,要么是说谎者;
没有两个说谎者站在一起
诚实的同学总是说真话,说谎者可以说真话或谎言,因此他们的陈述可被认为是不可靠的。
你想要确定不同的合法情况数量,结果对 998244353998244353 取模。
如果至少有一个同学在某种情况中是诚实的,而在另一个情况中是说谎者,则这两个情况视为不同。

输入格式

lie.inlie.in 读入数据。
第一行两个整数 n,cn,cnn 含义见题目描述,cc 为子任务编号,
接下来一行 nn 个整数,描述 aa 数组。

输出格式

输出答案到 lie.outlie.out
输出一个整数表示不同合法情况的数量,对 998244353998244353 取模。

样例

我们将用 红色\color{red} {\text{红色}} 来标记说谎者,用 蓝色\color{blue} {\text{蓝色}} 来标记诚实的人。

3 4
0 1 2
1

唯一的可能是 (0,1,2)\color{grey}(\color{red}{0},\color{blue}{1},\color{red}{2}\color{grey})

5 4
0 0 1 1 2
3

三种可能的情况分别是:(0,0,1,1,2)\color{grey}(\color{blue}{0},\color{blue}{0},\color{red}{1},\color{blue}{1},\color{red}{2} \color{grey}), (0,0,1,1,2)\color{grey}(\color{blue}{0},\color{red}{0},\color{blue}{1},\color{red}{1},\color{blue}{2}\color{grey}), (0,0,1,1,2)\color{grey}(\color{blue}{0},\color{red}{0},\color{blue}{1},\color{blue}{1},\color{red}{2}\color{grey})

5 4
0 1 2 3 4
0
5 4
0 0 1 1 1
4
5 4
5 1 5 2 5
1
1 1
0
2
4 4
2 3 1 1
0
见下发文件
见下发文件

下发文件.zip

子任务与数据范围

对于所有数据,保证 1n2×105, 0ain1\leq n\leq 2\times {10}^5,~0\leq a_{i}\leq n
测评使用捆绑测试,本题不卡常,短时限是为了防止卡评测。

子任务编号子任务编号 nn aia_{i} 特殊性质特殊性质 分数分数
11 2\leq2 n\leq n N/A 2020
22 3×103\leq 3\times {10}^3 0\leq 0 1010
33 1×105\geq 1\times {10}^5 n\leq n 保证 aia_{i} 的取值在 [0,i1]{[0,i-1]} 中独立均匀随机生成 2020
44 3×103\leq 3\times {10}^3 N/A 3030
55 2×105\leq 2\times {10}^5 2020