问题描述
有一个长度为 2N 的序列:A1,A2,...,A2N。每个 Ai 要么是 −1,要么是介于 1 和 2N(包括)之间的整数。除了 −1 之外的任何整数在 Ai 中最多出现一次。
对于每个满足 Ai=−1 的 i,Snuke 将 Ai 替换为介于 1 和 2N(包括)之间的整数,使得 Ai 成为 1,2,...,2N 的一个排列。然后,他找到一个长度为 N 的序列 B1,B2,...,BN,其中 Bi=min(A2i−1,A2i)。
求出 B1,B2,...,BN 可能的不同序列的数量,对 109+7 取模。
约束条件
- 1≤N≤300
- Ai=−1 或者 1≤Ai≤2N。
- 如果 Ai=−1,Aj=−1,则 Ai=Aj。 (i=j)
输入
输入通过标准输入给出,格式如下:
N
A1 A2 ... A2N
输出
输出 B1,B2,...,BN 可能的不同序列的数量,对 109+7 取模。
示例输入 1
示例输出 1
使 Ai 成为 1,2,...,2N 的排列共有六种方式;对于每一种方式,Bi 如下所示:
- (A1,A2,A3,A4,A5,A6)=(1,2,4,3,6,5):(B1,B2,B3)=(1,3,5)
- (A1,A2,A3,A4,A5,A6)=(1,2,5,3,6,4):(B1,B2,B3)=(1,3,4)
- (A1,A2,A3,A4,A5,A6)=(1,4,2,3,6,5):(B1,B2,B3)=(1,2,5)
- (A1,A2,A3,A4,A5,A6)=(1,4,5,3,6,2):(B1,B2,B3)=(1,3,2)
- (A1,A2,A3,A4,A5,A6)=(1,5,2,3,6,4):(B1,B2,B3)=(1,2,4)
- (A1,A2,A3,A4,A5,A6)=(1,5,4,3,6,2):(B1,B2,B3)=(1,3,2)
因此,B1,B2,B3 可能的不同序列的数量为五个。
示例输入 2
示例输出 2
示例输入 3
示例输出 3
示例输入 4
示例输出 4