AT_jsc2025_final_c Prefix Bounding Box, Mod, Minimize
Description
正整数 $ N,M $ と素数 $ P $ と $ (1,2,\dots ,N) $ の順列 $ Y=(Y_1,Y_2,\dots ,Y_N) $ が与えられます。
$ (1,2,\dots ,N) $ の順列 $ X=(X_1,X_2,\dots ,X_N) $ に対して、 $ f(X) $ を以下のように定義します。
- $ 2 $ 以上 $ N $ 以下の整数 $ k $ について以下の値を $ B_k $ としたときの $ \max(B_2,B_3,\dots ,B_N) $
- 座標が $ (X_1,Y_1), (X_2,Y_2), \dots ,(X_k,Y_k) $ であるような $ 2 $ 次元平面上の $ k $ 個の点の集合 $ S $ に対するバウンディングボックスの面積を $ M $ で割った余り
$ f(X) $ が最小となるような $ X $ の個数を $ P $ で割った余りを求めてください。
$ T $ 個のテストケースが与えられるので、それぞれについて答えを求めてください。
バウンディングボックスとは $ S $ に対するバウンディングボックスとは、 $ S $ に含まれる全ての点を内部または周上に含んでかつ $ x $ 軸に平行な辺を持つような長方形のうち、面積が最小であるものを指します。
Input Format
入力は以下の形式で標準入力から与えられる。
> $ T $ $ \text{case}_1 $ $ \text{case}_2 $ $ \vdots $ $ \text{case}_T $
各テストケースは以下の形式で与えられる。
> $ N $ $ M $ $ P $ $ Y_1 $ $ Y_2 $ $ \ldots $ $ Y_N $
Output Format
$ T $ 行出力せよ。
$ i $ 行目には $ i $ 番目のテストケースについて、 $ f(X) $ が最小となるような $ X $ の個数を $ P $ で割った余りを出力せよ。
Explanation/Hint
### Sample Explanation 1
$ 1 $ つ目のテストケースについて、例えば $ X=(3,1,4,2) $ のとき $ (B_2,B_3,B_4)=(2,0,3) $ であり $ f(X)=3 $ です。 $ f(X) $ の最小値は $ 3 $ であり、 $ f(X)=3 $ となるような $ X $ は $ 12 $ 個存在します。
$ 2 $ つ目のテストケースについて、全ての $ X $ について $ f(X)=0 $ であり、答えは $ 13! $ を $ P=10007 $ で割った余りとなります。
### Constraints
- $ 1 \le T \le 100 $
- $ 2 \le N \le 3000 $
- $ 1 \le M \le 10^7 $
- $ 10^4 \le P \le 10^9 $
- $ P $ は素数
- $ Y $ は $ (1,2, \dots ,N) $ の順列
- 全てのテストケースにおける $ N $ の総和は $ 3000 $ 以下
- 入力される値は全て整数