I - Inversion Graph Editorial /

Time Limit: 2 sec / Memory Limit: 1024 MiB

配点 : 100

問題文

整数 N,K と、長さ Q の整数列 D = (D_1, D_2, \dots, D_Q) が与えられます。

(1, 2, \dots, N) の順列 P = (P_1, P_2, \dots, P_N) に対して、頂点 1 から頂点 N までの N 個の頂点を持つ無向グラフ G(P) を以下のように定義します。

1 \leq i < j \leq N を満たす整数の組 (i, j) について、P_i > P_j であるとき、またそのときに限り、G(P) において頂点 i と頂点 j の間に辺が存在する。

また、各 d = 1, 2, \dots, N-1 について、以下の条件を全て満たす (1, 2, \dots, N) の順列 P 全体の集合を \mathcal{S}_d とします。

  • G(P) が木である。
  • G(P) の直径が d である。

q = 1, 2, \dots, Q に対し、\displaystyle \sum_{P \in \mathcal{S}_{D_q}} (\mathrm{LIS}(P))^K998244353 で割った余りを求めてください。ただし、\mathrm{LIS}(P) は順列 P の最長増加部分列の長さを表します。

制約

  • 入力は全て整数
  • 2 \leq N \leq 10^6
  • 0 \leq K \leq 10^{18}
  • 1\le Q\le 2\times 10^5
  • 1\le D_1 < D_2 < \ldots < D_Q < N

部分点

  • 追加の制約 N \le 500 を満たすデータセットに正解した場合は 10 点が与えられる。

入力

入力は以下の形式で標準入力から与えられる。

N K
Q
D_1
D_2
\vdots
D_Q

出力

q = 1, 2, \dots, Q に対する答えをこの順に改行区切りで出力せよ。


入力例 1

4 0
3
1
2
3

出力例 1

0
2
2

G(P) が木であるような (1, 2, 3, 4) の順列 P は以下の 4 通りです。

  • P = (2, 3, 4, 1)G(P) の直径は 2 で、\mathrm{LIS}(P) = 3 です。
  • P = (4, 1, 2, 3)G(P) の直径は 2 で、\mathrm{LIS}(P) = 3 です。
  • P = (2, 4, 1, 3)G(P) の直径は 3 で、\mathrm{LIS}(P) = 2 です。
  • P = (3, 1, 4, 2)G(P) の直径は 3 で、\mathrm{LIS}(P) = 2 です。

以上より

  • q = 1 に対する答えは 0
  • q = 2 に対する答えは 3^0 + 3^0 = 2
  • q = 3 に対する答えは 2^0 + 2^0 = 2

となります。


入力例 2

2 100
1
1

出力例 2

1

入力例 3

314159 26535
5
271
828
1828
45904
52353

出力例 3

765557189
351184939
258247317
305813889
68486796