#CF2129D. 排列黑洞

排列黑洞

D. 排列黑洞
时间限制:33
内存限制:512512 MB

对于一个长度为 nn 的排列 p1,p2,,pnp_1, p_2, \dots, p_n,其对应的染色序列 ss 可通过以下染色过程得到:

初始时有 nn 个白色格子,从左到右编号为 11nn。在第 00 秒,每个格子的分数均为 00
在第 ii 秒 (1in1 \le i \le n),

  • i>1i > 1,找到离格子 pip_i 最近的黑色格子,并将该格子的分数增加 11。若有多个最近的黑色格子,选择编号最小的那个。格子 yy 被称为离格子 xx 最近的黑色格子,当且仅当格子 yy 是黑色,且不存在黑色格子 zz 满足 xz<xy|x - z| < |x - y|
  • 将格子 pip_i 染成黑色。

当所有格子都被染成黑色后,令 sis_i 表示格子 ii 的分数 (1in1 \le i \le n),即可得到染色序列 ss

你可以阅读样例解释以更好地理解该过程。

现在给定一个不完整的染色序列 ss,其中某些 sis_i 已经固定,而其他位置的值尚未确定。请你统计有多少种不同的排列 pp 能生成这一染色序列。由于答案可能很大,你需要输出其对 998244353998244353 取模的结果。

输入格式
每个测试包含多个测试用例。第一行包含测试用例数 tt (1t1031 \le t \le 10^3)。接下来是各测试用例的描述。

每个测试用例的第一行包含一个整数 nn (2n1002 \le n \le 100)。

第二行包含 nn 个整数 s1,s2,,sns_1, s_2, \dots, s_n (1sin1-1 \le s_i \le n-1)。其中 si=1s_i = -1 表示 sis_i 尚未确定,而 si1s_i \neq -1 表示 sis_i 已经固定。

保证所有测试用例的 n2n^2 之和不超过 10410^4

输出格式
对于每个测试用例,输出能够产生该染色序列的不同排列 pp 的数量,对 998244353998244353 取模。

样例
输入

9
3
-1 -1 1
3
-1 -1 -1
4
-1 2 -1 0
4
-1 0 1 -1
5
-1 3 -1 0 -1
5
4 4 4 4 4
5
1 0 1 2 0
6
-1 1 -1 -1 3 0
13
-1 -1 -1 -1 -1 -1 2 -1 -1 -1 -1 -1 -1

输出

2
6
4
3
8
0
4
10
867303072

说明
在第一个测试用例中,p=[3,1,2]p = [3, 1, 2]p=[3,2,1]p = [3, 2, 1] 均能生成染色序列 s=[1,1,1]s = [-1, -1, 1]

对于 p=[3,1,2]p = [3, 1, 2],染色过程如下图展示。

对于 p=[3,2,1]p = [3, 2, 1],染色过程如下图展示。