#agc034f. [agc034_f]RNG and XOR

[agc034_f]RNG and XOR

問題文

すぬけくんはある乱数生成器を手に入れました。 この乱数生成器は、00 以上 2N12^N-1 以下の整数を生成します。 それぞれの整数を生成する確率は、整数列 A0,A1,cdots,A2N1A_0,A_1,\\cdots,A_{2^N-1} によって表され、 整数 ii (0leqileq2N10 \\leq i \\leq 2^N-1) が生成される確率は Ai/SA_i / S です。 ただしここで S=sumi=02N1AiS = \\sum_{i=0}^{2^N-1} A_i とします。 また、乱数生成は毎回独立に行われます。

すぬけくんは整数 XX を持っています。 今、X=0X=0 です。 すぬけくんは、次の操作を好きなだけ行うことが出来ます。

  • 乱数生成器で一つの整数 vv を生成する。そして、XXXoplusvX \\oplus v で置き換える。 ただしここで、oplus\\oplus はビットごとの排他的論理和を表す。

それぞれの整数 ii (0leqileq2N10 \\leq i \\leq 2^N-1) について、XXii にするために必要な操作の回数の期待値を求めてください。 ただし、期待値は mod 998244353998244353 で出力してください。 より正確には、期待値が既約分数 P/QP/Q で表されるとき、 $R \\times Q \\equiv P \\mod 998244353,\\ 0 \\leq R < 998244353$ を満たす整数 RR が一意に定まるので、その RR を出力してください。

なお、すべての ii について、XXii にするために必要な操作の回数の期待値が有理数として存在し、 さらに mod 998244353998244353 での整数表現が定義できることが問題の制約から証明できます。

制約

  • 1leqNleq181 \\leq N \\leq 18
  • 1leqAileq10001 \\leq A_i \\leq 1000
  • 入力される値はすべて整数である。

入力

入力は以下の形式で標準入力から与えられる。

NN A0A_0 A1A_1 cdots\\cdots A2N1A_{2^N-1}

出力

2N2^N 行出力せよ。 i+1i+1 行目 (0leqileq2N10 \\leq i \\leq 2^N-1) には、XXii にするために必要な操作の回数の期待値を mod 998244353998244353 で出力せよ。


入力例 1

2
1 1 1 1

出力例 1

0
4
4
4

00 回操作をした段階で X=0X=0 なので、XX00 にするのに必要な操作回数の期待値は 00 です。

また、どの状態から操作しても、操作後の XX の値はそれぞれ 1/41/4 の確率で 0,1,2,30,1,2,3 になります。 よって、XX1,2,31,2,3 にするのに必要な操作回数の期待値はいずれも 44 です。


入力例 2

2
1 2 1 2

出力例 2

0
499122180
4
499122180

XX0,1,2,30,1,2,3 にするのに必要な操作回数の期待値は、それぞれ 0,7/2,4,7/20,7/2,4,7/2 です。


入力例 3

4
337 780 799 10 796 875 331 223 941 67 148 483 390 565 116 355

出力例 3

0
468683018
635850749
96019779
657074071
24757563
745107950
665159588
551278361
143136064
557841197
185790407
988018173
247117461
129098626
789682908