#P17424. [PM13459] RookGraph

[PM13459] RookGraph

题目描述

有一个 N×NN\times N 的国际象棋棋盘,以及 KK 个互不相同的车,编号为 0,1,,K10,1,\ldots,K-1。每个格子至多放一个车。

给定一个 K×KK\times K 的 01 矩阵 graph。对于任意 i,ji,j

  • graph[i][j] = '1',则车 ii 与车 jj 必须位于同一行或同一列;
  • graph[i][j] = '0',则车 ii 与车 jj 必须既不同行也不同列。

求满足所有限制的摆放方案数,对 109+710^9+7 取模。

车是有编号的,因此交换两个车的位置通常会产生不同方案。

输入格式

第一行输入两个整数 K,NK,N。注意:真实数据中车的数量 KK 在前,棋盘大小 NN 在后。

接下来输入 KK 行,每行一个长度为 KK 的 01 字符串,组成矩阵 graph

输出格式

输出合法摆放方案数对 109+710^9+7 取模后的结果。

数据范围

  • 1N501\le N\le50
  • 1K501\le K\le50
  • graph[i][i] = '1'
  • graph 为对称矩阵;
  • 每个字符均为 01

样例

2 8
11
11
896

样例说明

0082=648^2=64 个位置。固定车 00 后,车 11 可以放在同一行其余 77 个格子或同一列其余 77 个格子,共 1414 种,因此答案为 64×14=89664\times14=896