ゆるふわ競技プログラミングオンサイト at FORCIA #6
コンテスト日時
2024/02/10 (Sa) 12:45 - 14:45

G - Koiwai Coffee

Flavor
6
s
1024
MB
1000

問題文

整数$N,K$と長さ$N$の数列 $A$が与えられます。
$A$の各値は、$1$以上$K$以下か、$-1$です。

このとき、以下の3つの条件を全て満たす長さ $N$ の数列 $B$ の個数を$998244353$で割った余りを求めてください。

  • $A_i \neq -1$ ならば $B_i = A_i$
  • $1 \leq i \leq N$ に対して、$1\leq B_i \leq K$
  • ある $1\leq j \leq N$が存在して、長さ $j$ の数列$(B_1,\ldots,B_j)$, 長さ $N - j$ の数列$(B_{j + 1},\ldots,B_N)$ がともに回文になる。

ただし、「長さ $M$ の数列 $X$ が回文である」とは、「任意の$1\leq i \leq M$ に対し$X[i] = X[M + 1 - i]$」 が成立することをいいます(長さ $0$ の配列も回文です)。

制約

  • $1\leq N \leq 10^5$
  • $1\leq K \leq 10^5$
  • $1\leq A_i \leq K$ または $A_i = -1$

入力

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

$N$ $K$
$A_1$ $A_2$ $\ldots$ $A_N$

出力

答えを1行に出力してください。

入力例 1
6 4 1 -1 1 -1 -1 4
出力例 1
23

たとえば、$B = (1, 3, 1, 4, 1, 4)$ は、$(1, 3, 1)$ と $(4, 1, 4)$ がともに回文であり、条件を満たします。条件をみたす $B$ は合わせて $23$ 個あります。

入力例 2
4 1 -1 1 -1 1
出力例 2
1
入力例 3
8 2 -1 -1 -1 -1 -1 -1 -1 -1
出力例 3
160
提出
C++23 (g++ 12.2.0)