[AGC043D] Merge Triplets
题意翻译
- 给定如下构造生成长度为 $3N$ 的排列 $P$ 的方法:
- 先生成一个长度为 $3N$ 的排列 $A$。然后将 $\forall k \in [0, N-1]$,$A_{3k+1},A_{3k+2},A_{3k+3}$ 分成一块。
- 有 $N$ 个指针,初始指向每个块的第一个数。
- 每次选择所有指针指向的数中最小的数删除,然后放到 $P$ 的末尾。之后指向被删除的数后移一个位置。若移出块了,则删除这个指针。
- 请你求出,一共能生成长度为 $3N$ 的排列共多少种。答案可能很大,请求出对 $M$ 取模的结果。
- $1 \leq N \leq 2 \times 10^3$,$10^8\leq M \leq 10^9+7$。
题目描述
[problemUrl]: https://atcoder.jp/contests/agc043/tasks/agc043_d
正整数 $ N $ が与えられます。 $ (1,2,\cdots,3N) $ の順列 $ (P_1,P_2,\cdots,P_{3N}) $であって、次の操作によって生成されうるものの数を求めてください。 ただし、答えは非常に大きくなることがあるので、素数 $ M $ で割ったあまりを求めてください。
- 長さ $ 3 $ の数列を $ N $ 個用意する。この数列たちを $ A_1,A_2,\cdots\ ,A_N $ とする。この $ 3N $ 個の値には $ 1 $ から $ 3N $ がちょうど一度ずつ登場せねばならない。
- 空の数列 $ P $ を用意する。以下の操作を $ 3N $ 回繰り返す。
- 各数列 $ A_i $ のうち、空でないものの先頭の要素を見て、そのうち最小の要素を $ x $ とする。
- $ x $ を $ A_i $ から消去する。 $ P $ の最後尾に $ x $ を追加する。
输入输出格式
输入格式
入力は以下の形式で標準入力から与えられる。
> $ N $ $ M $
输出格式
条件を満たす順列の数を $ M $ で割ったあまりを出力せよ。
输入输出样例
输入样例 #1
1 998244353
输出样例 #1
6
输入样例 #2
2 998244353
输出样例 #2
261
输入样例 #3
314 1000000007
输出样例 #3
182908545
说明
### 制約
- $ 1\ \leq\ N\ \leq\ 2000 $
- $ 10^8\ \leq\ M\ \leq\ 10^9+7 $
- $ M $ は素数
- 入力はすべて整数
### Sample Explanation 1
すべての長さ $ 3 $ の順列が条件を満たします。