#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;
}
