問題文
長さ 2N の整数列 A=(A0,A1,ldots,A2N−1) が与えられます。
また、Q 個のクエリが与えられます。 i=1,2,ldots,Q について、i 番目のクエリでは 2 つの整数 Xi,Yi が与えられ、下記の操作を行います。
j=0,1,2,ldots,2N−1 の順に下記の手順を行う。
-
まず、j の N 桁の 2 進数表現を bN−1bN−2ldotsb0 とおく。また、bN−1bN−2ldotsb0 から bXi を反転( 0 ならば 1 に、1 ならば 0 に変更)させて得られる 2 進数表現によって表される整数を j′ とおく。
-
そして、bXi=Yi ならば、Aj′ に Aj の値を加算する。
すべてのクエリを入力で与えられる順番に実行した後の A の各要素を 998244353 で割ったあまりを出力してください。
N 桁の 2 進数表現とは?
非負整数 X (0leqX<2N) の N 桁の 2 進数表現とは、0 と 1 のみからなり下記の条件を満たす唯一の、長さ N の列 bN−1bN−2ldotsb0です。
- sumi=0N−1bicdot2i=X
制約
- 1leqNleq18
- 1leqQleq2times105
- 0leqAilt998244353
- 0leqXileqN−1
- Yiinlbrace0,1rbrace
- 入力はすべて整数
入力
入力は以下の形式で標準入力から与えられる。
N Q
A0 A1 ldots A2N−1
X1 Y1
X2 Y2
vdots
XQ YQ
出力
i=0,1,ldots,2N−1 について、すべてのクエリを実行した後の Ai を 998244353 で割ったあまり Ai′ を、下記の形式にしたがって空白区切りで出力せよ。
A0′ A1′ ldots A2N−1′
入力例 1
2 2
0 1 2 3
1 1
0 0
出力例 1
2 6 2 5
1 番目のクエリに対する操作は次の通りです。
- j=0 のとき、b1b0=00,j′=2 です。b1neq1 であるので、加算の手順は行いません。
- j=1 のとき、b1b0=01,j′=3 です。b1neq1 であるので、加算の手順は行いません。
- j=2 のとき、b1b0=10,j′=0 です。b1=1 であるので、A0 に A2 の値を加算します。その結果、A=(2,1,2,3) となります。
- j=3 のとき、b1b0=11,j′=1 です。b1=1 であるので、A1 に A3 の値を加算します。その結果、A=(2,4,2,3) となります。
2 番目のクエリに対する操作は次の通りです。
- j=0 のとき、b1b0=00,j′=1 です。b0=0 であるので、A1 に A0 の値を加算します。その結果、A=(2,6,2,3) となります。
- j=1 のとき、b1b0=01,j′=0 です。b0neq0 であるので、加算の手順は行いません。
- j=2 のとき、b1b0=10,j′=3 です。b0=0 であるので、A3 に A2 の値を加算します。その結果、A=(2,6,2,5) となります。
- j=3 のとき、b1b0=11,j′=2 です。b0neq0 であるので、加算の手順は行いません。
以上より、すべてのクエリを実行した後の A は (2,6,2,5) です。
入力例 2
3 10
606248357 338306877 919152167 981537317 808873985 845549408 680941783 921035119
1 1
0 0
0 0
0 0
0 1
0 1
0 1
2 0
2 0
2 0
出力例 2
246895115 904824001 157201385 744260759 973709546 964549010 61683812 205420980