問題文
非負整数からなる集合 X に対し、X に属する 2 つの整数(同じ整数でもよい)のビット単位 mathrmXOR として表せるような非負整数からなる集合を f(X) と表します。例えば X=lbrace1,2,4rbrace に対し f(X) は lbrace0,3,5,6rbrace となります。
N 個の 2M 未満の非負整数からなる集合 S=lbraceA1,A2,dots,ANrbrace が与えられます。
あなたは以下の操作を好きな回数行えます。
- S を 2 つの集合 T1,T2 に分ける( T1,T2 のいずれかが空集合になってもよい)。その後、 S を f(T1),f(T2) の和集合で置き換える。
S を lbrace0rbrace にするのに必要な最小の操作回数を求めてください。
ビット単位 mathrmXOR 演算とは
非負整数 A,B のビット単位 mathrmXOR 、AoplusB は、以下のように定義されます。
- AoplusB を二進表記した際の 2k (kgeq0) の位の数は、A,B を二進表記した際の 2k の位の数のうち一方のみが 1 であれば 1、そうでなければ 0 である。
例えば、3oplus5=6 となります (二進表記すると: 011oplus101=110)。
一般に k 個の非負整数 p1,p2,p3,dots,pk のビット単位 mathrmXOR は $(\\dots ((p_1 \\oplus p_2) \\oplus p_3) \\oplus \\dots \\oplus p_k)$ と定義され、これは p1,p2,p3,dots,pk の順番によらないことが証明できます。
制約
- 1leqNleq300
- 1leqMleq300
- 0leqAi<2M
- Ai(1leqileqN) は互いに相異なる
- 各 Ai は 2 進表記でちょうど M 桁で与えられる( Ai が M 桁より少ない場合、 leading zero をつけて与えられる)
- 与えられる入力はすべて整数
入力
入力は以下の形式で標準入力から与えられる。
N M
A1
A2
vdots
AN
出力
答えを出力せよ。
入力例 1
4 2
00
01
10
11
出力例 1
2
1 回目の操作では $T_1=\\lbrace 0, 1\\rbrace, T_2=\\lbrace 2, 3\\rbrace$ と分けると $f(T_1) =\\lbrace 0, 1\\rbrace, f(T_2) =\\lbrace 0, 1\\rbrace$ なので S は lbrace0,1rbrace に置き換わります。
2 回目の操作で T1=lbrace0rbrace,T2=lbrace1rbrace と分けると S=lbrace0rbrace となります。
2 回未満の操作で S を lbrace0rbrace にすることはできないので答えは 2 となります。
入力例 2
1 8
10011011
出力例 2
1
1 回目の操作で T1=lbrace155rbrace,T2=lbracerbrace と分けると S は lbrace0rbrace になります。操作の際は T1,T2 のいずれかが空集合になっても構いません。
入力例 3
1 2
00
出力例 3
0
はじめから S=lbrace0rbrace であり、操作する必要がありません。
入力例 4
20 20
10011011111101101111
10100111100001111100
10100111100110001111
10011011100011011111
11001000001110011010
10100111111011000101
11110100001001110010
10011011100010111001
11110100001000011010
01010011101011010011
11110100010000111100
01010011101101101111
10011011100010110111
01101111101110001110
00111100000101111010
01010011101111010100
10011011100010110100
01010011110010010011
10100111111111000001
10100111111000010101
出力例 4
10