#arc155e. [arc155_e]Split and Square

[arc155_e]Split and Square

問題文

非負整数からなる集合 XX に対し、XX に属する 22 つの整数(同じ整数でもよい)のビット単位 mathrmXOR\\mathrm{XOR} として表せるような非負整数からなる集合を f(X)f(X) と表します。例えば X=lbrace1,2,4rbraceX=\\lbrace 1, 2, 4\\rbrace に対し f(X)f(X)lbrace0,3,5,6rbrace\\lbrace 0, 3, 5, 6\\rbrace となります。

NN 個の 2M2^M 未満の非負整数からなる集合 S=lbraceA1,A2,dots,ANrbraceS=\\lbrace A_1, A_2, \\dots, A_N\\rbrace が与えられます。

あなたは以下の操作を好きな回数行えます。

  • SS22 つの集合 T1,T2T_1, T_2 に分ける( T1,T2T_1, T_2 のいずれかが空集合になってもよい)。その後、 SSf(T1),f(T2)f(T_1), f(T_2) の和集合で置き換える。

SSlbrace0rbrace\\lbrace 0\\rbrace にするのに必要な最小の操作回数を求めてください。

ビット単位 mathrmXOR\\mathrm{XOR} 演算とは

非負整数 A,BA, B のビット単位 mathrmXOR\\mathrm{XOR}AoplusBA \\oplus B は、以下のように定義されます。

  • AoplusBA \\oplus B を二進表記した際の 2k2^k (kgeq0k \\geq 0) の位の数は、A,BA, B を二進表記した際の 2k2^k の位の数のうち一方のみが 11 であれば 11、そうでなければ 00 である。

例えば、3oplus5=63 \\oplus 5 = 6 となります (二進表記すると: 011oplus101=110011 \\oplus 101 = 110)。
一般に kk 個の非負整数 p1,p2,p3,dots,pkp_1, p_2, p_3, \\dots, p_k のビット単位 mathrmXOR\\mathrm{XOR} は $(\\dots ((p_1 \\oplus p_2) \\oplus p_3) \\oplus \\dots \\oplus p_k)$ と定義され、これは p1,p2,p3,dots,pkp_1, p_2, p_3, \\dots, p_k の順番によらないことが証明できます。

制約

  • 1leqNleq3001 \\leq N \\leq 300
  • 1leqMleq3001 \\leq M \\leq 300
  • 0leqAi<2M0 \\leq A_i < 2^{M}
  • Ai(1leqileqN)A_i\\ (1\\leq i \\leq N) は互いに相異なる
  • AiA_i22 進表記でちょうど MM 桁で与えられる( AiA_iMM 桁より少ない場合、 leading zero をつけて与えられる)
  • 与えられる入力はすべて整数

入力

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

NN MM A1A_1 A2A_2 vdots\\vdots ANA_N

出力

答えを出力せよ。


入力例 1

4 2
00
01
10
11

出力例 1

2

11 回目の操作では $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$ なので SSlbrace0,1rbrace\\lbrace 0, 1\\rbrace に置き換わります。

22 回目の操作で T1=lbrace0rbrace,T2=lbrace1rbraceT_1=\\lbrace 0\\rbrace, T_2=\\lbrace 1\\rbrace と分けると S=lbrace0rbraceS=\\lbrace 0\\rbrace となります。

22 回未満の操作で SSlbrace0rbrace\\lbrace 0\\rbrace にすることはできないので答えは 22 となります。


入力例 2

1 8
10011011

出力例 2

1

11 回目の操作で T1=lbrace155rbrace,T2=lbracerbraceT_1=\\lbrace 155\\rbrace, T_2=\\lbrace \\rbrace と分けると SSlbrace0rbrace\\lbrace 0\\rbrace になります。操作の際は T1,T2T_1, T_2 のいずれかが空集合になっても構いません。


入力例 3

1 2
00

出力例 3

0

はじめから S=lbrace0rbraceS=\\lbrace 0\\rbrace であり、操作する必要がありません。


入力例 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