问题描述
给定一个长度为2N的整数序列A=(A0,A1,…,A2N−1)。
另外,我们给出Q个查询。对于每个i=1,2,…,Q,第i个查询由两个整数Xi和Yi表示,并要求你执行以下操作。
按照顺序对于每个j=0,1,2,…,2N−1,执行以下操作:
1.首先,令bN−1bN−2…b0为j的二进制表示形式,其中有N个数字。此外,令j′为将第bXi位取反后(将0变为1,将1变为0)的二进制表示形式bN−1bN−2…b0所代表的整数。
2.然后,如果bXi=Yi,将Aj的值加到Aj′上。
在按照给定的输入顺序处理完所有的查询后,以模998244353的余数形式打印A的每个元素。
什么是N位二进制表示?
对于非负整数X(0≤X<2N),N位二进制表示是满足以下条件的长度为N的由0和1组成的唯一序列bN−1bN−2…b0:
- ∑i=0N−1bi⋅2i=X。
约束条件
- 1≤N≤18
- 1≤Q≤2×105
- 0≤Ai<998244353
- 0≤Xi≤N−1
- Yi∈{0,1}
- 输入中的所有值都是整数。
输入
输入以如下格式从标准输入给出:
N Q
A0 A1 … A2N−1
X1 Y1
X2 Y2
⋮
XQ YQ
输出
对于每个i=0,1,…,2N−1,按照以下格式,用空格分隔打印在处理完所有查询后将Ai除以998244353所得余数Ai′:
A0′ A1′ … A2N−1′
样例输入1
2 2
0 1 2 3
1 1
0 0
样例输出1
2 6 2 5
第一个查询要求你执行以下操作。
- 对于j=0,我们有b1b0=00和j′=2。由于b1=1,跳过相加操作。
- 对于j=1,我们有b1b0=01和j′=3。由于b1=1,跳过相加操作。
- 对于j=2,我们有b1b0=10和j′=0。由于b1=1,将A2的值加到A0上。现在A=(2,1,2,3)。
- 对于j=3,我们有b1b0=11和j′=1。由于b1=1,将A3的值加到A1上。现在A=(2,4,2,3)。
第二个查询要求你执行以下操作。
- 对于j=0,我们有b1b0=00和j′=1。由于b0=0,将A0的值加到A1上。现在A=(2,6,2,3)。
- 对于j=1,我们有b1b0=01和j′=0。由于b0=0,跳过相加操作。
- 对于j=2,我们有b1b0=10和j′=3。由于b0=0,将A2的值加到A3上。现在A=(2,6,2,5)。
- 对于j=3,我们有b1b0=11和j′=2。由于b0=0,跳过相加操作。
因此,在处理完所有查询后,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