#include using namespace std; #define MAXM 19 #define MAXN (1 << MAXM) int N; int A[MAXN]; bool used[MAXN]; int main() { // assert(freopen("peculiar_function.in", "r", stdin)); // assert(freopen("peculiar_function.out", "w", stdout)); cin.sync_with_stdio(false); cin >> N; for (int i = 0; i < N; i++) { cin >> A[i]; } int rank = 0; for (int j = MAXM - 1; j >= 0; j--) { int p = 0; while (p < N && (used[p] || (A[p] & (1 << j)) == 0)) { p++; } if (p == N) { continue; } rank++; used[p] = true; for (int i = 0; i < N; i++) { if (!used[i] && (A[i] & (1 << j)) > 0) { A[i] ^= A[i] & A[p]; } } } cout << rank << endl; return 0; }