atcoder#ARC084D. [ARC084F] XorShift

[ARC084F] XorShift

配点 : 10001000

問題文

黒板に、NN 個の非負整数が書かれています。ii 個目の非負整数は、AiA_i です。

高橋君は、以下の 22 種類の操作を、好きな順番で何回でも行うことができます。

  • 黒板に書かれている整数を 11 つ選び、その整数の 22 倍の整数を新たに書き加える。選ばれた整数も、そのまま残しておく。
  • 黒板に書かれている相異なるとは限らない整数を 22 つ選び、その 22 整数の bitwise xor を新たに書き加える。選ばれた整数も、そのまま残しておく。

黒板に書かれうる整数のうち、XX 以下のものは何種類あるでしょうか。なお、最初に黒板に書かれていた整数も、黒板に書かれうる整数とみなします。 答えは非常に大きくなる可能性があるので、998244353998244353 で割った余りを求めてください。

制約

  • 1N61 \leq N \leq 6
  • 1X<240001 \leq X < 2^{4000}
  • 1Ai<24000(1iN)1 \leq A_i < 2^{4000}(1\leq i\leq N)
  • 入力は全て整数である
  • X,Ai(1iN)X,A_i(1\leq i\leq N)22 進表記で与えられ、先頭の桁は 11 である

入力

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

NN XX

A1A_1

::

ANA_N

出力

黒板に書かれうる整数のうち、XX 以下のものの個数を 998244353998244353 で割った余りを出力せよ。

3 111
1111
10111
10010
4

最初、黒板には 15,23,1815,23,18 が書かれています。77 以下の整数のうち、0,3,5,60,3,5,644 数を書くことができます。 例えば、66 は以下のような操作によって書くことができます。

  • 151522 倍し、3030 を書く
  • 30301818 の xor をとり、1212 を書く
  • 121222 倍し、2424 を書く
  • 30302424 の xor をとり、66 を書く
4 100100
1011
1110
110101
1010110
37
4 111001100101001
10111110
1001000110
100000101
11110000011
1843
1 111111111111111111111111111111111111111111111111111111111111111
1
466025955

998244353998244353 で割った余りを求めてください。