#agc043d. [agc043_d]Merge Triplets

[agc043_d]Merge Triplets

問題文

正整数 NN が与えられます。 (1,2,cdots,3N)(1,2,\\cdots,3N) の順列 (P1,P2,cdots,P3N)(P_1,P_2,\\cdots,P_{3N})であって、次の操作によって生成されうるものの数を求めてください。 ただし、答えは非常に大きくなることがあるので、素数 MM で割ったあまりを求めてください。

  • 長さ 33 の数列を NN 個用意する。この数列たちを A1,A2,cdots,ANA_1,A_2,\\cdots ,A_N とする。この 3N3N 個の値には 11 から 3N3N がちょうど一度ずつ登場せねばならない。
  • 空の数列 PP を用意する。以下の操作を 3N3N 回繰り返す。
    • 各数列 AiA_i のうち、空でないものの先頭の要素を見て、そのうち最小の要素を xx とする。
    • xxAiA_i から消去する。 PP の最後尾に xx を追加する。

制約

  • 1leqNleq20001 \\leq N \\leq 2000
  • 108leqMleq109+710^8 \\leq M \\leq 10^9+7
  • MM は素数
  • 入力はすべて整数

入力

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

NN MM

出力

条件を満たす順列の数を MM で割ったあまりを出力せよ。


入力例 1

1 998244353

出力例 1

6

すべての長さ 33 の順列が条件を満たします。


入力例 2

2 998244353

出力例 2

261

入力例 3

314 1000000007

出力例 3

182908545