#include #include #include std::vector V[2010]; int color[2010]; void init(int k, int col) { if(color[k]) return; color[k] = col; for(int i=0;i > edge; int x[2010]; int main() { int a; scanf("%d",&a); for(int i=1;i<=a;i++) scanf("%d",&x[i]); for(int i=1;i<=a;i++) { for(int j=i+1;j<=a;j++) { int val = (x[i]^x[j]); if(val%65536==0) val/=65536; if(val%256==0) val/=256; if(val%16==0) val/=16; if(val%4==0) val/=4; if(val%2==0) val/=2; if(val==1) { V[i].push_back(j); V[j].push_back(i); edge.push_back(std::make_pair(i,j)); } } } for(int i=1;i<=a;i++) init(i,1); atcoder::mf_graph G(2*a+3); int source = 2*a+1, sink = 2*a+2; for(int i=1;i<=a;i++) G.add_edge(source,i,1); for(int i=1;i<=a;i++) G.add_edge(i+a,sink,1); for(int i=0;i