AT_agc054_c [AGC054C] Roughly Sorted
Description
[problemUrl]: https://atcoder.jp/contests/agc054/tasks/agc054_c
すぬけくんは,$ (1,\ 2,\ ...\ N) $ の順列 $ P=(P_1,P_2,\cdots,P_N) $ と整数 $ K $ をもらいました. そこですぬけくんは,$ P $ の隣接する二項をswapすることを繰り返して,以下の条件が満たされるようにしました.
- それぞれの $ 1\ \leq\ i\ \leq\ N $ について, $ 1\ \leq\ j\ \ P_i $ を満たす $ j $ が高々 $ K $ 個である.
ここで,すぬけくんは**最小**の操作回数でこの条件を達成しました.
すべての操作が終わったあと,すぬけくんは元の順列を忘れてしまいました. 操作後の順列 $ P' $ が与えられるので,元の順列 $ P $ としてあり得るものが何通りあるかを $ 998244353 $ で割った余りを求めてください.
Input Format
入力は以下の形式で標準入力から与えられる.
> $ N $ $ K $ $ P'_1 $ $ P'_2 $ $ \cdots $ $ P'_N $
Output Format
答えを出力せよ.
Explanation/Hint
### 制約
- $ 2\ \leq\ N\ \leq\ 5000 $
- $ 1\ \leq\ K\ \leq\ N-1 $
- $ 1\ \leq\ P'_i\ \leq\ N $
- $ P'_i\ \neq\ P'_j $ ($ i\ \neq\ j $)
- それぞれの $ 1\ \leq\ i\ \leq\ N $ について, $ 1\ \leq\ j\