atcoder#AGC021F. [AGC021F] Trinity

[AGC021F] Trinity

配点 : 18001800

問題文

NN マス、横 MM マスのマス目があります。ii 行目、jj 列目にあるマスを (i,j)(i,j) とあらわすことにします。 特に、一番左上のマスは (1,1)(1,1) と、一番右下のマスは (N,M)(N,M) とあらわされます。 高橋君は 00 個以上のいくつかのマスを黒く、他のマスを白く塗りました。

長さ NN の数列 AA と、長さ MM の数列 B,CB,C をそれぞれ以下のように定義するとき、列の組 (A,B,C)(A,B,C) としてありうるものの個数を 998244353998244353 で割った余りを求めてください。

  • Ai(1iN)A_i(1\leq i\leq N) は、マス (i,j)(i,j) が黒く塗られているような最小の jj (存在しない場合、M+1M+1)
  • Bi(1iM)B_i(1\leq i\leq M) は、マス (k,i)(k,i) が黒く塗られているような最小の kk (存在しない場合、N+1N+1)
  • Ci(1iM)C_i(1\leq i\leq M) は、マス (k,i)(k,i) が黒く塗られているような最大の kk (存在しない場合、00)

注意

この問題では、提出できるソースコードのサイズは 2000020000 B 以下に制限される。 制限を超える長さの提出は無効とするので注意すること。

制約

  • 1N80001 \leq N \leq 8000
  • 1M2001 \leq M \leq 200
  • N,MN,M は整数である

部分点

  • N300N\leq 300 を満たすデータセットに正解すると、15001500 点が与えられる。

入力

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

N M

出力

列の組 (A,B,C)(A,B,C) の個数を 998244353998244353 で割った余りを出力せよ。

2 3
64

N=2N=2 なので、Bi,CiB_i,C_i の情報から、各列の黒く塗られたマスの配置が一意に定まります。各 ii について、(Bi,Ci)(B_i,C_i) の組は (1,1),(1,2),(2,2),(3,0)(1,1),(1,2),(2,2),(3,0)44 通りなので、答えは 4M=644^M=64 通りです。

4 3
2588
17 13
229876268
5000 100
57613837