水以下コンテスト
コンテスト日時
2024/03/30 (Sa) 14:00 - 17:05

J - Counting Zig Zag Sequence

Ceylon
2
s
1024
MB
100

問題文

ある数列が増加と減少を交互に繰り返しているとき、その数列はジグザグ数列であると呼びます。
例えば、(3,1,4,1)(3, 1, 4, 1) は減少→増加→減少の順になっているのでジグザグ数列です。
また、(1,4,1,4,2)(1, 4, 1, 4, 2) は増加→減少→増加→減少の順なのでジグザグ数列です。
一方、(2,3,5,7)(2, 3, 5, 7)(1,3,3,1)(1, 3, 3, 1)(7,6,5)(7, 6, 5)(7,7)(7, 7) はジグザグ数列ではありません。
なお、1つの項からなる数列はジグザグ数列であるとします。

11 以上 KK 以下の要素からなる、長さ NN のジグザグ数列の個数を 998244353998244353 で割った余りを求めてください。

より厳密には、以下の条件を満たす数列 {Ai}\{A_i\} をジグザグ数列と呼びます。

  • i (1iN)i~(1 \leq i \leq N) に対して、 1AiK1 \le A_i \le K
  • 連続する2項は異なる
  • i (1iN2)i~(1 \leq i \leq N-2) に対して、 (AiAi+1)(Ai+1Ai+2)<0(A_i - A_{i+1})(A_{i+1} - A_{i+2}) < 0 を満たす

制約

  • 1N50001 \leq N \leq 5000
  • 1K50001 \leq K \leq 5000
  • 入力はすべて整数である

部分点

以下の条件を満たすテストケースにすべて正解したとき、記載された点数が与えられる。

  1. (20点) N5,  K5N \leq 5,~~ K \leq 5
  2. (30点) N5000,  K50N \leq 5000,~~K \leq 50
  3. (50点) 追加の制約なし

入力

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

NN KK

出力

条件を満たす数列の数を998244353で割った余りを1行に出力してください。

入力例 1
4 3
出力例 1
16

(1,2,1,2),(1,2,1,3),(1,3,1,2),(1,3,1,3),(1,3,2,3),(1, 2, 1, 2), (1, 2, 1, 3), (1, 3, 1, 2), (1, 3, 1, 3), (1, 3, 2, 3),
(2,1,2,1),(2,1,3,1),(2,1,3,2),(2,3,1,2),(2,3,1,3),(2,3,2,3),(2, 1, 2, 1), (2, 1, 3, 1), (2, 1, 3, 2), (2, 3, 1, 2), (2, 3, 1, 3), (2, 3, 2, 3),
(3,1,2,1),(3,1,3,1),(3,1,3,2),(3,2,3,1),(3,2,3,2)(3, 1, 2, 1), (3, 1, 3, 1), (3, 1, 3, 2), (3, 2, 3, 1), (3, 2, 3, 2)
の16個が条件を満たします。

入力例 2
2 2
出力例 2
2

(1,2),(2,1)(1, 2), (2, 1)
の2個が条件を満たします。

入力例 3
5 1
出力例 3
0

条件を満たす数列は存在しません。

入力例 4
1000 1000
出力例 4
228139627