int countTriplets(vector<int>& A) { static const int k = 3; const auto max_A = *max_element(A.cbegin(), A.cend()); int n = 1; for (; n <= max_A; n <<= 1); vector<int> B(n); for (const auto& x : A) { ++B[x]; } FWT(&B, 1); for(auto& x : B) { x = pow(x, k); } FWT(&B, -1); return B[0]; }
int main() { scanf("%d", &n); ++f[0]; for(int i = 1; i <= n; ++i) { scanf("%d", a + i); ++f[a[i] ^= a[i - 1]]; } FWT(f, maxs, 1); for(int i = 0; i < maxs; ++i) f[i] *= f[i]; FWT(f, maxs, -1); f[0] -= n + 1; for(int i = 1; i < maxs; ++i) if(f[id] < f[i]) id = i; printf("%d %lld\n", id, f[id] >> 1); return 0; }