#D0147. Matching

Matching

问题陈述

NN 名男性和 NN 名女性,编号均为 1,2,,N1, 2, \ldots, N

对于每个 i,ji, j ( 1i,jN1 \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 ,则不相容。

太郎试图做出 NN 对,每对都由一个相容的男人和一个相容的女人组成。在这里,每个男人和每个女人必须正好属于一对。

求太郎凑成 NN 对的方法数,模为 109+710^9 + 7

限制因素

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

输入

输入内容由标准输入法提供,格式如下:

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

输出

打印太郎可以组成 NN 对的方式数,模数为 109+710^9 + 7

3
0 1 1
1 0 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)
4
0 1 0 0
0 0 0 1
1 0 0 0
0 0 1 0
1

有一种配对方法如下:

  • (1,2),(2,4),(3,1),(4,3)(1, 2), (2, 4), (3, 1), (4, 3)
1
0
0
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
102515160

确保打印出 109+710^9 + 7 的模数。

来源

https://atcoder.jp/contests/dp/tasks/dp_o