#include <fstream>
#include <cstring>
using namespace std;
const int N=100005;
ifstream fin("xormax.in");
ofstream fout("xormax.out");
struct Trie
{
int n;
Trie *f[2];
Trie()
{
n=0;
f[0]=f[1]=0;
}
} *T=new Trie;
int a[N];
void tinsert(Trie *nod, int x, int lvl, int poz)
{
if(lvl==-1)
{
nod->n=poz;
return;
}
int next=((x&(1<<lvl))?1:0);
if(!nod->f[next]) nod->f[next]=new Trie;
tinsert(nod->f[next], x, lvl-1, poz);
}
int tquery(Trie *nod, int x, int lvl)
{
if(lvl==-1) return nod->n;
int next=((x&(1<<lvl))?1:0);
if(!nod->f[!next]) return tquery(nod->f[next], x, lvl-1);
return tquery(nod->f[!next], x, lvl-1);
}
int main()
{
int n, i, j, sol=-1, solx, soly;
fin>>n;
tinsert(T, 0, 20, 0);
for(i=1;i<=n;i++)
{
fin>>a[i];
a[i]^=a[i-1];
j=tquery(T, a[i], 20);
if((a[i]^a[j])>sol)
{
sol=(a[i]^a[j]);
solx=j;
soly=i;
}
tinsert(T, a[i], 20, i);
}
fout<<sol<<" "<<solx+1<<" "<<soly;
fin.close();
fout.close();
}