atcoder#NOMURA2020F. Sorting Game

Sorting Game

配点 : 10001000

問題文

高橋くんとすぬけくんは、数列を使った次のようなゲームを思いつきました。

  • 00 以上 2N2^N 未満の整数からなる、長さ MM の数列 a=a1,a2,,aMa = a_1, a_2, \ldots, a_M を用意する。
  • まずすぬけくんは、以下の操作を好きな回数行う。
    • ある正整数 dd を選び、全ての i(1iM)i \sim (1 \leq i \leq M) について、aia_i22 進数で表したときの dd 桁目(最下位桁は 11 桁目とする)を 00 にする。
  • ある正整数 dd を選び、全ての i(1iM)i \sim (1 \leq i \leq M) について、aia_i22 進数で表したときの dd 桁目(最下位桁は 11 桁目とする)を 00 にする。
  • すぬけくんの操作が全て終わったあと高橋くんは、以下の操作を好きな回数行い aa を昇順に並べ替えることを目指す。ここで aa が昇順であるとは、任意の i(1iM1)i \sim (1 \leq i \leq M - 1) について aiai+1a_i \leq a_{i + 1} であることを言う。
    • aa の隣接する 22 要素 ai,ai+1a_i, a_{i + 1} を選び、ai,ai+1a_i, a_{i + 1}22 進数で表したときちょうど 11 桁が異なる場合、ai,ai+1a_i, a_{i + 1} をスワップする。
  • aa の隣接する 22 要素 ai,ai+1a_i, a_{i + 1} を選び、ai,ai+1a_i, a_{i + 1}22 進数で表したときちょうど 11 桁が異なる場合、ai,ai+1a_i, a_{i + 1} をスワップする。

ゲームで使うことができる、00 以上 2N2^N 未満の整数からなる、長さ MM の数列は 2NM2^{NM} 個存在します。

このうちゲームで使ったとき、すぬけくんがどのように操作を行ったとしても、高橋くんが適当な操作を行うことで昇順に並べ替えることができるものは何個あるでしょうか。 109+710^9 + 7 で割った余りを求めてください。

制約

  • 入力は全て整数である。
  • 1N50001 \leq N \leq 5000
  • 2M50002 \leq M \leq 5000

入力

入力は以下の形式で標準入力から与えられる。

NN MM

出力

ゲームで使ったとき、すぬけくんがどのように操作を行ったとしても、高橋くんが適当な操作を行うことで昇順に並べ替えることができる数列の個数を 109+710^9 + 7 で割った余りを出力せよ。

2 5
352

例えば a=1,3,1,3,1a = 1, 3, 1, 3, 1 の場合を考えます。このとき、

  • aa の各要素の 11 桁目を 00 にすると a=0,2,0,2,0a = 0, 2, 0, 2, 0 に、
  • aa の各要素の 22 桁目を 00 にすると a=1,1,1,1,1a = 1, 1, 1, 1, 1 に、
  • aa の各要素の 1,21, 2 桁目を 00 にすると a=0,0,0,0,0a = 0, 0, 0, 0, 0 に、

なります。 すぬけくんが操作を行わず aa が変わらない場合も含めて、いずれの場合も、22 進数でちょうど 11 桁が異なる隣接要素のスワップを繰り返して、昇順に並び替えることができます。 よってこの数列は、ゲームで使ったとき、すぬけくんがどのように操作を行っても高橋くんが適当な操作を行うことで昇順に並べ替えることができる数列の 11 つです。

2020 530
823277409