atcoder#AGC035E. [AGC035E] Develop

[AGC035E] Develop

配点 : 16001600

問題文

黒板に 1018-10^{18} から 101810^{18} までの整数が 11 個ずつ書かれています。高橋君は、以下の一連の操作を 00 回以上好きなだけ繰り返します。

  • 黒板に書かれている整数のうち 11 以上 NN 以下のものをひとつ選ぶ。選んだ整数を xx とし、xx を黒板から消す。
  • 黒板に x2x-2 が書かれていないなら、x2x-2 を書き加える。
  • 黒板に x+Kx+K が書かれていないなら、x+Kx+K を書き加える。

何回かの操作後、黒板に書かれている数の集合としてありうるものの個数を MM で割った余りを求めてください。 ただし、22 つの集合が異なるとは、その片方だけに現れるような整数が存在することを指します。

制約

  • 1KN1501 \leq K\leq N \leq 150
  • 108M10910^8\leq M\leq 10^9
  • N,K,MN,K,M は整数である

入力

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

NN KK MM

出力

何回かの操作後、黒板に書かれている数の集合としてありうるものの個数を MM で割った余りを出力せよ。

3 1 998244353
7

00 以下または 44 以上の整数すべてと、1,2,31,2,3 のうちの 11 つ以上を含むような集合すべてが条件を満たし、これは 77 通りあります。

6 3 998244353
61
9 4 702443618
312
17 7 208992811
128832
123 45 678901234
256109226