#agc035e. [agc035_e]Develop

[agc035_e]Develop

問題文

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

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

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

制約

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

入力

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

NN KK MM

出力

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


入力例 1

3 1 998244353

出力例 1

7

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


入力例 2

6 3 998244353

出力例 2

61

入力例 3

9 4 702443618

出力例 3

312

入力例 4

17 7 208992811

出力例 4

128832

入力例 5

123 45 678901234

出力例 5

256109226