#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 maxLength=0;
vector<int> prefixXor(n);
prefixXor[0]=arr[0];
for(int i=1;i<n;i++)
prefixXor[i]=prefixXor[i-1]^arr[i];
unordered_map<int, int> mp;
mp[0]=-1;
for(int j=0;j<n;j++){
int toFind=prefixXor[j]^k;
if(mp.find(prefixXor[j])!=mp.end()){
int i=mp[toFind]+1; //note that the actual subarray with xor k is from i+1 to j
//bcoz we look for P(i-1) s.t P(i-1)^XOR(i…j)=P(j)
//so P(i-1)^k=p(j) as we have assumed XOR(i…j) = k
int length=j-i+1;
maxLength=max(length, maxLength);
}
if(mp.find(prefixXor[j])==mp.end())
mp[prefixXor[j]]=j;
}
cout<<maxLength;
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKCWludCBhcnJbXT0gezEwLDUsMiw3LDEsOX07CglpbnQgbj1zaXplb2YoYXJyKS9zaXplb2YoYXJyWzBdKTsKCWludCBrPTE1OwoJaW50IG1heExlbmd0aD0wOwoJdmVjdG9yPGludD4gcHJlZml4WG9yKG4pOwoJcHJlZml4WG9yWzBdPWFyclswXTsKCWZvcihpbnQgaT0xO2k8bjtpKyspCgkJcHJlZml4WG9yW2ldPXByZWZpeFhvcltpLTFdXmFycltpXTsKCXVub3JkZXJlZF9tYXA8aW50LCBpbnQ+IG1wOwoJbXBbMF09LTE7Cglmb3IoaW50IGo9MDtqPG47aisrKXsKCQlpbnQgdG9GaW5kPXByZWZpeFhvcltqXV5rOwkKCQlpZihtcC5maW5kKHByZWZpeFhvcltqXSkhPW1wLmVuZCgpKXsKCQkJaW50IGk9bXBbdG9GaW5kXSsxOyAgICAvL25vdGUgdGhhdCB0aGUgYWN0dWFsIHN1YmFycmF5IHdpdGggeG9yIGsgaXMgZnJvbSBpKzEgdG8gagogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCSAgICAgICAgICAgICAvL2Jjb3ogd2UgbG9vayBmb3IgUChpLTEpIHMudCBQKGktMSleWE9SKGnigKZqKT1QKGopCgkJCQkJCS8vc28gUChpLTEpXms9cChqKSBhcyB3ZSBoYXZlIGFzc3VtZWQgWE9SKGnigKZqKSA9IGsgCgkJCWludCBsZW5ndGg9ai1pKzE7CgkJCW1heExlbmd0aD1tYXgobGVuZ3RoLCBtYXhMZW5ndGgpOwoJCX0KCQlpZihtcC5maW5kKHByZWZpeFhvcltqXSk9PW1wLmVuZCgpKQoJCQltcFtwcmVmaXhYb3Jbal1dPWo7Cgl9Cgljb3V0PDxtYXhMZW5ndGg7CglyZXR1cm4gMDsKfQo=