#CF2129D. 排列黑洞
排列黑洞
D. 排列黑洞
时间限制: 秒
内存限制: MB
对于一个长度为 的排列 ,其对应的染色序列 可通过以下染色过程得到:
初始时有 个白色格子,从左到右编号为 到 。在第 秒,每个格子的分数均为 。
在第 秒 (),
- 若 ,找到离格子 最近的黑色格子,并将该格子的分数增加 。若有多个最近的黑色格子,选择编号最小的那个。格子 被称为离格子 最近的黑色格子,当且仅当格子 是黑色,且不存在黑色格子 满足 。
- 将格子 染成黑色。
当所有格子都被染成黑色后,令 表示格子 的分数 (),即可得到染色序列 。
你可以阅读样例解释以更好地理解该过程。
现在给定一个不完整的染色序列 ,其中某些 已经固定,而其他位置的值尚未确定。请你统计有多少种不同的排列 能生成这一染色序列。由于答案可能很大,你需要输出其对 取模的结果。
输入格式
每个测试包含多个测试用例。第一行包含测试用例数 ()。接下来是各测试用例的描述。
每个测试用例的第一行包含一个整数 ()。
第二行包含 个整数 ()。其中 表示 尚未确定,而 表示 已经固定。
保证所有测试用例的 之和不超过 。
输出格式
对于每个测试用例,输出能够产生该染色序列的不同排列 的数量,对 取模。
样例
输入
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
说明
在第一个测试用例中, 和 均能生成染色序列 。
对于 ,染色过程如下图展示。




对于 ,染色过程如下图展示。



