atcoder#AGC057E. [AGC057E] RowCol/ColRow Sort
[AGC057E] RowCol/ColRow Sort
配点 : 点
問題文
行列 () に対して、次の操作を考えます。
- 行ソート:すべての行を昇順にソートする。つまり、すべての に対して を昇順にソートする。
- 列ソート:すべての列を昇順にソートする。つまり、すべての に対して を昇順にソートする。
行列 が与えられます。次の 条件をともに満たす 行列 の総数を で割った余りを求めてください。
- に対して行ソート、列ソートをこの順に行った結果は に一致する。
- に対して列ソート、行ソートをこの順に行った結果は に一致する。
制約
- 任意の および に対して
- 任意の および に対して
- 入力される値はすべて整数
入力
入力は以下の形式で標準入力から与えられます。
出力
条件を満たす行列 の総数を で割った余りを出力してください。
2 2
0 0
1 2
4
条件を満たす行列は次の つです:, , , .
例えば、 が条件を満たすことは次のように確かめられます。
- 行ソート、列ソートをこの順に行う場合:$\begin{pmatrix}2&1\\0&0\end{pmatrix}\to \begin{pmatrix}1&2\\0&0\end{pmatrix} \to \begin{pmatrix}0&0\\1&2\end{pmatrix}$.
- 列ソート、行ソートをこの順に行う場合:$\begin{pmatrix}2&1\\0&0\end{pmatrix}\to \begin{pmatrix}0&0\\2&1\end{pmatrix} \to \begin{pmatrix}0&0\\1&2\end{pmatrix}$.
3 3
0 1 3
2 4 7
5 6 8
576
例えば が条件を満たします。このことは次のように確かめられます。
- 行ソート、列ソートをこの順に行う場合:$\begin{pmatrix}5&7&6\\3&0&1\\4&8&2\end{pmatrix}\to \begin{pmatrix}5&6&7\\0&1&3\\2&4&8\end{pmatrix} \to \begin{pmatrix}0&1&3\\2&4&7\\5&6&8\end{pmatrix}$.
- 列ソート、行ソートをこの順に行う場合:$\begin{pmatrix}5&7&6\\3&0&1\\4&8&2\end{pmatrix}\to \begin{pmatrix}3&0&1\\4&7&2\\5&8&6\end{pmatrix} \to \begin{pmatrix}0&1&3\\2&4&7\\5&6&8\end{pmatrix}$.
3 5
0 0 0 1 1
0 0 1 1 2
0 1 1 2 2
10440
1 7
2 3 3 6 8 8 9
1260