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\