#arc084d. [arc084_d]XorShift

[arc084_d]XorShift

問題文

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

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

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

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

制約

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

入力

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

NN XX A1A_1 :: ANA_N

出力

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


入力例 1

3 111
1111
10111
10010

出力例 1

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 を書く

入力例 2

4 100100
1011
1110
110101
1010110

出力例 2

37

入力例 3

4 111001100101001
10111110
1001000110
100000101
11110000011

出力例 3

1843

入力例 4

1 111111111111111111111111111111111111111111111111111111111111111
1

出力例 4

466025955

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