#include <bits/stdc++.h>
using namespace std;
int main() {
int arr[] = {10, 5, 2, 7, 1, 9};
int n = sizeof(arr) / sizeof(arr[0]);
int k = 15;
int pairs = 0;
unordered_map<int, int> mp;
//if XOR(i…j) = k then P(i-1) = k XOR k = 0 so we store 0 already in map beforehand
//specially for cases where valid subarray starts from index 0 itself
mp[0] = 1; // prefix XOR of empty subarray is 0
int currentXor = 0;
for (int j = 0; j < n; j++) {
currentXor ^= arr[j];
int toFind = currentXor ^ k;
pairs += mp[toFind];
mp[currentXor]++;
}
cout << pairs;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKCWludCBhcnJbXSA9IHsxMCwgNSwgMiwgNywgMSwgOX07CglpbnQgbiA9IHNpemVvZihhcnIpIC8gc2l6ZW9mKGFyclswXSk7CglpbnQgayA9IDE1OwoJaW50IHBhaXJzID0gMDsKCQoJdW5vcmRlcmVkX21hcDxpbnQsIGludD4gbXA7CgkvL2lmIFhPUihp4oCmaikgPSBrIHRoZW4gUChpLTEpID0gayBYT1IgayA9IDAgc28gd2Ugc3RvcmUgMCBhbHJlYWR5IGluIG1hcCBiZWZvcmVoYW5kCgkvL3NwZWNpYWxseSBmb3IgY2FzZXMgd2hlcmUgdmFsaWQgc3ViYXJyYXkgc3RhcnRzIGZyb20gaW5kZXggMCBpdHNlbGYKCW1wWzBdID0gMTsgICAgICAgICAgICAgICAgICAgICAvLyBwcmVmaXggWE9SIG9mIGVtcHR5IHN1YmFycmF5IGlzIDAKCQoJaW50IGN1cnJlbnRYb3IgPSAwOwoJZm9yIChpbnQgaiA9IDA7IGogPCBuOyBqKyspIHsKCQljdXJyZW50WG9yIF49IGFycltqXTsgICAgICAgICAgICAgCgkJaW50IHRvRmluZCA9IGN1cnJlbnRYb3IgXiBrOwkKCQlwYWlycyArPSBtcFt0b0ZpbmRdOwoJCW1wW2N1cnJlbnRYb3JdKys7Cgl9Cgljb3V0IDw8IHBhaXJzOwoJcmV0dXJuIDA7Cn0K