AT_agc067_d [AGC067D] Unique Matching
Description
[problemUrl]: https://atcoder.jp/contests/agc067/tasks/agc067_d
整数 $ N $ と素数 $ P $ が与えられます。
以下がともに満たされるとき、またそのときに限り $ N $ 個の区間からなる列 $ ([L_1,R_1]\ ,[L_2,R_2],\ \cdots,\ [L_N,R_N]) $ を **良い** と呼びます。
- すべての $ 1\le\ i\le\ N $ に対して $ 1\le\ L_i\le\ R_i\le\ N $ が成り立つ。
- すべての $ 1\le\ i\le\ N $ に対して $ L_i\le\ x_i\le\ R_i $ が成り立つような $ (1,2,\cdots,N) $ の順列 $ x=(x_1,x_2,\cdots,x_N) $ が **ただ一つ** 存在する。
**良い** 区間の列の個数を $ P $ で割った余りを求めてください。
Input Format
入力は標準入力から以下の形式で与えられる。
> $ N $ $ P $
Output Format
答えを出力せよ。
Explanation/Hint
### 制約
- $ 2\ \leq\ N\ \leq\ 5000 $
- $ 10^9\