atcoder#AGC024E. [AGC024E] Sequence Growing Hard

[AGC024E] Sequence Growing Hard

配点 : 12001200

問題文

次の条件を満たす数列の組 (A0,A1,...,AN)(A_0,A_1,...,A_N) としてありうるものの個数を MM で割ったあまりを求めてください。

  • 全ての i(0iN)i(0\leq i\leq N) に対し、AiA_i11 以上 KK 以下の整数からなる長さ ii の数列である
  • 全ての i(1iN)i(1\leq i\leq N) に対し、Ai1A_{i-1}AiA_i の部分列である。すなわち、ある 1xii1\leq x_i\leq i が存在し、AiA_ixix_i 文字目を取り除いてできる数列が Ai1A_{i-1} に一致する
  • 全ての i(1iN)i(1\leq i\leq N) に対し、AiA_i は辞書順で Ai1A_{i-1} より大きい

制約

  • 1N,K3001 \leq N,K \leq 300
  • 2M1092 \leq M \leq 10^9
  • N,K,MN,K,M は整数である

入力

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

NN KK MM

出力

数列の組 (A0,A1,...,AN)(A_0,A_1,...,A_N) としてありうるものの個数を MM で割ったあまりを出力せよ。

2 2 100
5

以下の 55 つの組が条件を満たします。

  • (),(1),(1,1)(),(1),(1,1)
  • (),(1),(1,2)(),(1),(1,2)
  • (),(1),(2,1)(),(1),(2,1)
  • (),(2),(2,1)(),(2),(2,1)
  • (),(2),(2,2)(),(2),(2,2)
4 3 999999999
358
150 150 998244353
186248260