跳转至

犀牛坦克

  • 参考时间限制:0.5 秒(参考环境:评测环境与性能;仅供预估)
  • 实际时间限制:标准程序在目标评测环境中处理最慢正式测试文件的基准时间的 2 倍,按 0.5 秒的倍数向上取整;若平台仅支持更粗的粒度,再向上取整到平台可设置值。
  • 内存限制:512 MB

背景故事

犀牛坦克的设计团队用一个特征矩阵检验新型号。各位置的特征独立生成,但每个位置采用的概率分布可能不同。团队希望矩阵中每行、每列都具有变化,请计算一台坦克通过检验的概率。

形式化问题描述

随机生成一个 \(n\times n\) 矩阵,每个元素属于 \(\{1,\ldots,m\}\) .对于位置 \((i,j)\) ,给定非负整数权重 \(w_{i,j,1},\ldots,w_{i,j,m}\) ,其取值为 \(c\) 的概率为

\[ p_{i,j,c}=\frac{w_{i,j,c}}{\sum_{d=1}^{m}w_{i,j,d}} \]

所有位置相互独立。如果不存在元素全相同的行,也不存在元素全相同的列,矩阵就合格。求矩阵合格的概率。

令 \(P=10^9+7\) .将答案写成分数 \(a/b\) ,输出 \(a\cdot b^{-1}\bmod P\) ,其中 \(b^{-1}\) 为模 \(P\) 乘法逆元。给定范围保证每个位置的权重和在 \(1\) 到 \(P-1\) 之间,因此该表示存在。

输入格式

第一行两个整数 \(n,m\) .接下来 \(n^2\) 行,按矩阵从上到下、每行从左到右的顺序描述各位置。每行 \(m\) 个整数,依次为该位置取值 \(1\) 到 \(m\) 的权重。

输出格式

输出一个整数,表示合格概率的模 \(P\) 表示。

样例 1

输入

2 2
1 1
1 1
1 1
1 1

输出

125000001

解释

共有 \(16\) 个等概率矩阵,其中两种棋盘格排列合格,概率为 \(1/8\) ,对应模值为 \(125000001\) .

样例 2

输入

3 3
1 1 2
3 2 1
0 0 3
1 0 2
0 3 5
1 2 3
6 7 9
3 2 1
1 1 1

输出

875789148

解释

矩阵为 \(3 imes3\) ,每个位置有三种特征,按各自权重独立生成。

样例 3

输入

1 2
3 7

输出

0

解释

只有一个位置时,唯一的行与列都满足“元素全相同”,所以合格概率为零。

数据范围与保证

  • \(1\le n\le5\) ,\(1\le m\le7\) .
  • \(0\le w_{i,j,c}\le100000\) ,每个位置至少有一个正权重。

数据分组

分值比例 额外条件
100% 无额外条件