AT_arc218_e [ARC218E] Reverse and Reverse
Description
$ (1,2,\dots,N) $ の順列 $ p=(p_1,p_2,\dots,p_N) $ と正整数 $ M $ に対して、以下の問題の答えを $ f(p,M) $ と置きます。
> $ p $ に対して以下の操作を $ M $ 回行います。
>
> - $ 1 \le i \le N-1 $ を満たす整数 $ i $ を選び、 $ (p_1,p_2,\dots,p_i) $ と $ (p_{i+1},p_{i+2},\dots,p_N) $ をそれぞれ反転する。形式的には、 $ p $ を $ (p_i,p_{i-1},\dots,p_1,p_N,p_{N-1},\dots,p_{i+1}) $ に置き換える。
>
> 操作列としてあり得るものは $ (N-1)^M $ 通りありますが、その全てに対する「 $ M $ 回の操作終了後の $ p $ の転倒数」の総和を $ 998244353 $ で割った余りを求めてください。
$ (1,2,\dots,N) $ の順列 $ P=(P_1,P_2,\dots,P_N) $ が与えられます。以下のクエリを $ Q $ 回処理してください。
- $ 1 \le x \le N-1 $ を満たす整数 $ x $ と正整数 $ K $ が与えられる。 $ P_x,P_{x+1} $ を swap する。その後、 $ f(P,K) $ を求めよ。
Input Format
入力は以下の形式で標準入力から与えられる。
> $ N $ $ Q $ $ P_1\ P_2\ \dots\ P_N $ $ \mathrm{query}_1 $ $ \mathrm{query}_2 $ $ \vdots $ $ \mathrm{query}_Q $
各クエリは以下の形式で与えられる。
> $ x $ $ K $
Output Format
$ Q $ 行出力せよ。 $ i $ 行目には $ \mathrm{query}_i $ の答えを出力せよ。
Explanation/Hint
### Sample Explanation 1
$ 1 $ 番目のクエリについて、 $ P_1,P_2 $ を swap することで $ P=(3,1,2) $ となります。操作列は $ 2 $ 通りあり、それぞれ以下のようになります。
- $ i = 1 $ を選ぶ。 $ P=(3,2,1) $ となる。転倒数は $ 3 $ である。
- $ i = 2 $ を選ぶ。 $ P=(1,3,2) $ となる。転倒数は $ 1 $ である。
よって答えは $ 3+1=4 $ です。
$ 2 $ 番目のクエリについて、 $ P_2,P_3 $ を swap することで $ P=(3,2,1) $ となります。操作列は $ 2 $ 通りあり、それぞれ以下のようになります。
- $ i = 1 $ を選ぶ。 $ P=(3,1,2) $ となる。転倒数は $ 2 $ である。
- $ i = 2 $ を選ぶ。 $ P=(2,3,1) $ となる。転倒数は $ 2 $ である。
よって答えは $ 2+2=4 $ です。
### Constraints
- $ 2 \le N \le 2 \times 10^5 $
- $ 1 \le Q \le 2 \times 10^5 $
- $ P $ は $ (1,2,\dots,N) $ の順列
- $ 1 \le x \le N-1 $
- $ 1 \le K \le 10^9 $
- 入力は全て整数