AT_past202309_n ソートと関数

Description

正整数の多重集合(同一の要素を複数個含むことが許された集合) $ S $ に対して、関数 $ f(S) $ を以下のように定義します。 - まず、 $ S $ の要素を昇順に並べた数列を $ A=(A_0,A_1,...,A_{|S|-1}) $ とします。 - そして、 $ f(S)=\displaystyle \sum_{i=0}^{|S|-1} K^i A_i $ と定めます。この定数 $ K $ は入力で与えられます。 - ただし、 $ S $ が空の場合、 $ f(S)=0 $ とします。 最初空の多重集合 $ T $ があります。この集合に対して以下の操作を合わせて $ Q $ 回行います。 > + $ x $ $ T $ に $ x $ を $ 1 $ つ追加する。 > - $ x $ $ T $ から $ x $ を $ 1 $ つ削除する。但し、このとき $ T $ に $ x $ が $ 1 $ つ以上存在することが保証される。 各操作を行った後、その時点での $ f(T) $ の値を $ 998244353 $ で割った余りを求めてください。

Input Format

入力は以下の形式で標準入力から与えられる。 > $ Q $ $ K $ $ ope_1 $ $ ope_2 $ $ \vdots $ $ ope_Q $ 但し、 $ ope_i $ は $ i $ 回目に行う操作を表す。

Output Format

全体で $ Q $ 行出力せよ。 そのうち $ i $ 行目には、 $ i $ 回目の操作を終えた時点での $ f(T) $ の値を $ 998244353 $ で割った余りを出力せよ。

Explanation/Hint

### Sample Explanation 1 - $ 1 $ 個目の操作では、 $ T $ に $ 7 $ を $ 1 $ つ追加します。 - このとき、 $ T=\{7\} $ であり、 $ f(T)=7 $ です。 - $ 2 $ 個目の操作では、 $ T $ から $ 7 $ を $ 1 $ つ削除します。 - このとき、 $ T=\{\} $ であり、 $ f(T)=0 $ です。 - $ 3 $ 個目の操作では、 $ T $ に $ 2 $ を $ 1 $ つ追加します。 - このとき、 $ T=\{2\} $ であり、 $ f(T)=2 $ です。 - $ 4 $ 個目の操作では、 $ T $ に $ 3 $ を $ 1 $ つ追加します。 - このとき、 $ T=\{2,3\} $ であり、 $ f(T)=8 $ です。 - $ 5 $ 個目の操作では、 $ T $ から $ 2 $ を $ 1 $ つ削除します。 - このとき、 $ T=\{3\} $ であり、 $ f(T)=3 $ です。 - $ 6 $ 個目の操作では、 $ T $ に $ 3 $ を $ 1 $ つ追加します。 - このとき、 $ T=\{3,3\} $ であり、 $ f(T)=9 $ です。 - $ 7 $ 個目の操作では、 $ T $ に $ 5 $ を $ 1 $ つ追加します。 - このとき、 $ T=\{3,3,5\} $ であり、 $ f(T)=29 $ です。 - $ 8 $ 個目の操作では、 $ T $ から $ 3 $ を $ 1 $ つ削除します。 - このとき、 $ T=\{3,5\} $ であり、 $ f(T)=13 $ です。 - $ 9 $ 個目の操作では、 $ T $ に $ 998244352 $ を $ 1 $ つ追加します。 - このとき、 $ T=\{3,5,998244352\} $ であり、 $ f(T)=3992977421 $ なので、これを $ 998244353 $ で割った余りである $ 9 $ を出力してください。 - $ 10 $ 個目の操作では、 $ T $ に $ 5 $ を $ 1 $ つ追加します。 - このとき、 $ T=\{3,5,5,998244352\} $ であり、 $ f(T)=7985954849 $ なので、これを $ 998244353 $ で割った余りである $ 25 $ を出力してください。 ### Constraints - $ Q,K $ は整数 - $ 1 \le Q \le 3 \times 10^5 $ - $ 1 \le K < 998244353 $ - 全ての操作について、 $ x $ は整数 - 操作 `+` について、 $ 1 \le x < 998244353 $ - 操作 `-` について、その時点で $ T $ に $ x $ が $ 1 $ つ以上存在する。