#include #include using namespace std; int main() { int N; cin >> N; vector A(N); for (int &a : A) cin >> a; atcoder::mf_graph G(N + 2); vector dir(N); for (int i = 0; i < N; i++) { if (popcount((unsigned)A[i]) & 1) dir[i] = 1, G.add_edge(N, i, 1); else G.add_edge(i, N + 1, 1); } for (int i = 0; i < N; i++) for (int j = 0; j < i; j++) { int k = A[j] ^ A[i]; if (k == (k & (-k)) && k != 0) { assert(dir[i] != dir[j]); if (dir[i]) G.add_edge(i, j, 1); else G.add_edge(j, i, 1); } } cout << N - G.flow(N, N + 1) << endl; }