题目描述
有一个长度为 2N 的数列 A1, A2, ..., A2N。每个 Ai 要么等于 −1,要么是 1 到 2N 之间的整数。除了 −1 以外,任意整数在 Ai 中最多只出现一次。
すぬけ君会将所有 Ai=−1 的位置,分别替换成 1 到 2N 的整数,使得最终的 Ai 恰好是 1,2,…,2N 的一个排列。然后,他会构造一个长度为 N 的数列 B1, B2, ..., BN,其中 Bi=min(A2i−1, A2i)。
请你求出,所有可能的 B1, B2, ..., BN 的不同取值的个数,并对 109+7 取模。
输入格式
输入从标准输入读入,格式如下:
N A1 A2 … A2N
输出格式
输出所有可能的 B1, B2, ..., BN 的不同取值的个数,对 109+7 取模。
样例 1
输入
3
1 -1 -1 3 6 -1
输出
5
样例 2
输入
4
7 1 8 3 5 2 6 4
输出
1
样例 3
输入
10
7 -1 -1 -1 -1 -1 -1 6 14 12 13 -1 15 -1 -1 -1 -1 20 -1 -1
输出
9540576
样例 4
输入
20
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 6 -1 -1 -1 -1 -1 7 -1 -1 -1 -1 -1 -1 -1 -1 -1 34 -1 -1 -1 -1 31 -1 -1 -1 -1 -1 -1 -1 -1
输出
374984201
说明/提示
约束条件
- 1≤N≤300
- Ai=−1 或 1≤Ai≤2N
- 如果 Ai=−1 且 Aj=−1,则 Ai=Aj(i=j)
样例解释 1
将 Ai 补全为 1,2,…,2N 的排列的方法有 6 种,对于每种情况,Bi 如下:
- $(A\_1, A\_2, A\_3, A\_4, A\_5, A\_6) = (1, 2, 4, 3, 6, 5)$:(B1,B2,B3)=(1,3,5)
- $(A\_1, A\_2, A\_3, A\_4, A\_5, A\_6) = (1, 2, 5, 3, 6, 4)$:(B1,B2,B3)=(1,3,4)
- $(A\_1, A\_2, A\_3, A\_4, A\_5, A\_6) = (1, 4, 2, 3, 6, 5)$:(B1,B2,B3)=(1,2,5)
- $(A\_1, A\_2, A\_3, A\_4, A\_5, A\_6) = (1, 4, 5, 3, 6, 2)$:(B1,B2,B3)=(1,3,2)
- $(A\_1, A\_2, A\_3, A\_4, A\_5, A\_6) = (1, 5, 2, 3, 6, 4)$:(B1,B2,B3)=(1,2,4)
- $(A\_1, A\_2, A\_3, A\_4, A\_5, A\_6) = (1, 5, 4, 3, 6, 2)$:(B1,B2,B3)=(1,3,2)
因此,不同的 (B1,B2,B3) 有 5 种。
由 ChatGPT 4.1 翻译