#dpo. [dp_o]Matching

[dp_o]Matching

问题描述

NN 个男人和 NN 个女人,它们的编号分别为 1,2,ldots,N1, 2, \\ldots, N

对于每对 i,ji, j (1leqi,jleqN1 \\leq i, j \\leq N),男人 ii 和女人 jj 的兼容性表示为整数 ai,ja_{i, j}。如果 ai,j=1a_{i, j} = 1,则男人 ii 和女人 jj 是兼容的;如果 ai,j=0a_{i, j} = 0,则不兼容。

Taro 想要组成 NN 对,每对由一个男人和一个女人组成。在这里,每个男人和每个女人必须恰好属于一对。

计算 Taro 组成 NN 对的方式数,结果对 109+710^9 + 7 取模。

约束条件

  • 输入中的所有值均为整数。
  • 1leqNleq211 \\leq N \\leq 21
  • ai,ja_{i, j} 的值为 0011

输入

输入以以下格式从标准输入给出:

NN a1,1a_{1, 1} ldots\\ldots a1,Na_{1, N} :: aN,1a_{N, 1} ldots\\ldots aN,Na_{N, N}

输出

输出 Taro 组成 NN 对的方式数,结果对 109+710^9 + 7 取模。


示例输入 1

3
0 1 1
1 0 1
1 1 1

示例输出 1

3

有三种组成对的方式,如下所示 ((i,j)(i, j) 表示男人 ii 和女人 jj 组成一对):

  • (1,2),(2,1),(3,3)(1, 2), (2, 1), (3, 3)
  • (1,2),(2,3),(3,1)(1, 2), (2, 3), (3, 1)
  • (1,3),(2,1),(3,2)(1, 3), (2, 1), (3, 2)

示例输入 2

4
0 1 0 0
0 0 0 1
1 0 0 0
0 0 1 0

示例输出 2

1

只有一种组成对的方式,如下所示:

  • (1,2),(2,4),(3,1),(4,3)(1, 2), (2, 4), (3, 1), (4, 3)

示例输入 3

1
0

示例输出 3

0

示例输入 4

21
0 0 0 0 0 0 0 1 1 0 1 1 1 1 0 0 0 1 0 0 1
1 1 1 0 0 1 0 0 0 1 0 0 0 0 1 1 1 0 1 1 0
0 0 1 1 1 1 0 1 1 0 0 1 0 0 1 1 0 0 0 1 1
0 1 1 0 1 1 0 1 0 1 0 0 1 0 0 0 0 0 1 1 0
1 1 0 0 1 0 1 0 0 1 1 1 1 0 0 0 0 0 0 0 0
0 1 1 0 1 1 1 0 1 1 1 0 0 0 1 1 1 1 0 0 1
0 1 0 0 0 1 0 1 0 0 0 1 1 1 0 0 1 1 0 1 0
0 0 0 0 1 1 0 0 1 1 0 0 0 0 0 1 1 1 1 1 1
0 0 1 0 0 1 0 0 1 0 1 1 0 0 1 0 1 0 1 1 1
0 0 0 0 1 1 0 0 1 1 1 0 0 0 0 1 1 0 0 0 1
0 1 1 0 1 1 0 0 1 1 0 0 0 1 1 1 1 0 1 1 0
0 0 1 0 0 1 1 1 1 0 1 1 0 1 1 1 0 0 0 0 1
0 1 1 0 0 1 1 1 1 0 0 0 1 0 1 1 0 1 0 1 1
1 1 1 1 1 0 0 0 0 1 0 0 1 1 0 1 1 1 0 0 1
0 0 0 1 1 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1
1 0 1 1 0 1 0 1 0 0 1 0 0 1 1 0 1 0 1 1 0
0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 1 1 0 0 1
0 0 0 1 0 0 1 1 0 1 0 1 0 1 1 0 0 1 1 0 1
0 0 0 0 1 1 1 0 1 0 1 1 1 0 1 1 0 0 1 1 0
1 1 0 1 1 0 0 1 1 0 1 1 0 1 1 1 1 1 0 1 0
1 0 0 1 1 0 1 1 1 1 1 0 1 0 1 1 0 0 0 0 0

示例输出 4

102515160

请确保输出结果对 109+710^9 + 7 取模。