TSG LIVE! 13 プログラミングコンテスト
コンテスト日時
2024/11/23 (Sa) 13:05 - 14:45

I - Many INV Problems

Flavor
2
s
1024
MB
600

問題文

Rho17君は以下のような問題を作りました。

順列 $P=(P_1, \cdots, P_N)$ に対し、$I(u,v)=u \leq i < j \leq v$かつ$P_i>P_j$ を満たす整数の組$(i,j)$ の個数 と定める。
すなわち、$I(u,v)=(P_u, P_{u+1}, \cdots, P_v)$ の転倒数である。
$f({P})=\sum_{i=1}^{n-1} \sum_{j=i+1}^{n} I(i,j)$ の値を求めよ。


Rho1000000007君はこの問題を簡単すぎると考えたため、以下のような問題を作りました。


全ての要素が$1$以上$N$以下の整数あるいは$-1$である整数列$(A_1, \cdots, A_N)$ が与えられる。ここで、$A_i \neq -1$かつ $i \neq j$ならば $A_i \neq A_j$である。
長さ$N$の順列$P'=(P'_1,\cdots, P'_N)$であって、$A_i \neq -1 \Rightarrow P'_i=A_i$ を満たすものを考える。ありうる全ての$P'$に対する$f(P')$の総和を$998244353$で割った余りを求めよ。


Rho1000000007君の作った問題の答えを求めてください。

制約

  • $2 \leq N \leq 200\ 000$
  • $A_i=-1$ または $1 \leq A_i \leq N$
  • $A_i \neq -1$ ならば $A_i \neq A_j (i \neq j)$
  • 入力は全て整数である

入力

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

$N$
$A_1\ A_2\ \cdots\ A_N$

出力

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

入力例 1
3 2 1 3
出力例 1
2
入力例 2
4 4 -1 -1 -1
出力例 2
63
入力例 3
13 -1 -1 -1 -1 -1 6 -1 -1 -1 4 -1 -1 -1
出力例 3
511650916
提出
C++23 (g++ 12.2.0)