atcoder#ARC084D. [ARC084F] XorShift
[ARC084F] XorShift
配点 : 点
問題文
黒板に、 個の非負整数が書かれています。 個目の非負整数は、 です。
高橋君は、以下の 種類の操作を、好きな順番で何回でも行うことができます。
- 黒板に書かれている整数を つ選び、その整数の 倍の整数を新たに書き加える。選ばれた整数も、そのまま残しておく。
- 黒板に書かれている相異なるとは限らない整数を つ選び、その 整数の bitwise xor を新たに書き加える。選ばれた整数も、そのまま残しておく。
黒板に書かれうる整数のうち、 以下のものは何種類あるでしょうか。なお、最初に黒板に書かれていた整数も、黒板に書かれうる整数とみなします。 答えは非常に大きくなる可能性があるので、 で割った余りを求めてください。
制約
- 入力は全て整数である
- は 進表記で与えられ、先頭の桁は である
入力
入力は以下の形式で標準入力から与えられる。
出力
黒板に書かれうる整数のうち、 以下のものの個数を で割った余りを出力せよ。
3 111
1111
10111
10010
4
最初、黒板には が書かれています。 以下の整数のうち、 の 数を書くことができます。 例えば、 は以下のような操作によって書くことができます。
- を 倍し、 を書く
- と の xor をとり、 を書く
- を 倍し、 を書く
- と の xor をとり、 を書く
4 100100
1011
1110
110101
1010110
37
4 111001100101001
10111110
1001000110
100000101
11110000011
1843
1 111111111111111111111111111111111111111111111111111111111111111
1
466025955
で割った余りを求めてください。