CF2061C Kevin and Puzzle

题目描述

有 $n$ 个人排成一行,第 $i$ 个人说他的左边有 $a_i$ 个说谎的人。 每个人要么诚实,要么说谎,诚实的人总是说真话,说谎的人说的话可真可假,没有两个说谎的人站在一起。 两个方案被认为是不同的,应当使至少一个人在一个方案诚实,在另外一个方案说谎。请输出不同的方案数对 $998244353$ 取模的结果。

输入格式

多组测试用例,第一行输入 $t (1 \le t \le 10 ^ 4)$,表示测试用例组数。 对于每组测试用例,第一行输入一个正整数 $n (n \le 2 \times 10 ^ 5, \sum n \le 2 \times 10 ^ 5)$,表示人数。 第二行输入 $n$ 个整数 $a_1, a_2, \ldots, a_n (0 \le a_i \le n)$。

输出格式

对于每组测试用例,输出不同的方案数对 $998244353$ 取模的结果。 ### 样例解释 将使用 $\color{red} \textbf{红色}$ 表示说谎的人,$\color{blue} \textbf{蓝色}$ 表示诚实的人。 - 测试用例 $1$ : $(\color{red}0, \color{blue} 1, \color{red} 2)$; - 测试用例 $2$ : $(\color{blue}0, 0, 0, 0, 0)$ 或 $(\color{blue}0, 0, 0, 0, \color{red} 0)$; - 测试用例 $3$ : $(\color{blue}0, 0, \color{red} 1, \color{blue} 1, \color{red} 2)$ 或 $(\color{blue}0, \color{red} 0, \color{blue} 1, \color{red} 1, \color{blue} 2)$ 或 $(\color{blue}0, \color{red} 0, \color{blue} 1, \color{blue} 1, \color{red} 2)$。

说明/提示

We will use $ \color{red}{\text{red}} $ to mark liars and $ \color{blue}{\text{blue}} $ to mark honest people. In the first test case, the only possible way is $ (\color{red}{0},\color{blue}{1},\color{red}{2}) $ . In the second test case, two possible ways are $ (\color{blue}{0},\color{blue}{0},\color{blue}{0},\color{blue}{0},\color{blue}{0}) $ and $ (\color{blue}{0},\color{blue}{0},\color{blue}{0},\color{blue}{0},\color{red}{0}) $ . In the third test case, three possible ways are $ (\color{blue}{0},\color{blue}{0},\color{red}{1},\color{blue}{1},\color{red}{2}) $ , $ (\color{blue}{0},\color{red}{0},\color{blue}{1},\color{red}{1},\color{blue}{2}) $ , $ (\color{blue}{0},\color{red}{0},\color{blue}{1},\color{blue}{1},\color{red}{2}) $ .