множество A \subset {0....n-1} = n бит

unsigned long long A; // 64-бит

A | B 
A & B
~B
A & ~B
A << 10, A >> 10
(A >> i) & 1
A |= 1 << i
A &= ~(1 << i)
(1 << n) - 1 = 00011111111111 = 2^n - 1
A & (A - 1) == 0
-----------------------------------
0101010101111011100000000 = A
0101010101111011011111111 = A - 1
1010101010000100100000000 = ~(A - 1)
0101010101111011000000000 = A & (A - 1)
0000000000000000100000000 = A & ~(A - 1) = B
                i
2^i --> i // O(log n)  min x : (1 << x) >= B
2^i --> O(1)
answer[B % 67]
B = 2^{0.....63}
FOR i=0..63 : answer[(1ULL << i) % 67] = i;