AT_abc330_g [ABC330G] Inversion Squared

Description

[problemUrl]: https://atcoder.jp/contests/abc330/tasks/abc330_g 長さ $ N $ の数列 $ A\ =\ (A_1,\ldots,A_N) $ が与えられます。 $ A $ の各要素は $ -1 $ または $ 1 $ 以上 $ N $ 以下の整数で、かつ $ 1 $ から $ N $ までの整数はそれぞれ高々 $ 1 $ 個含まれます。 $ (1,\ldots,N) $ の順列 $ P=(P_1,\ldots,P_N) $ であって、 $ A_i\ \neq\ -1\ \Rightarrow\ P_i\ =\ A_i $ を満たすものを **良い順列** と呼びます。良い順列全てに対する、転倒数の二乗の総和を $ 998244353 $ で割ったあまりを求めてください。 なお、順列 $ P $ の転倒数は、 $ 1\leq\ i\ \ P_j $ を共に満たすような整数の組 $ (i,j) $ の個数です。

Input Format

入力は以下の形式で標準入力から与えられる。 > $ N $ $ A_1 $ $ \ldots $ $ A_N $

Output Format

答えを出力せよ。

Explanation/Hint

### 制約 - $ 1\leq\ N\leq\ 3000 $ - $ 1\leq\ A_i\ \leq\ N $ または $ A_i\ =\ -1 $ - $ A $ に $ 1,\ldots,N $ はそれぞれ高々 $ 1 $ 個含まれる - 入力は全て整数 ### Sample Explanation 1 良い順列は $ P=(3,1,2,4) $ と $ P=(3,4,2,1) $ の $ 2 $ つで、転倒数はそれぞれ $ 2 $ と $ 5 $ です。 よって答えは $ 2^2\ +\ 5^2\ =\ 29 $ となります。 ### Sample Explanation 3 $ 998244353 $ で割ったあまりを求めてください。