#include <iostream>
#include <fstream>
#define x first
#define poz second
using namespace std;
ifstream fin ("xormax.in");
ofstream fout ("xormax.out");
struct trie {
int val, poz;
trie *bit[2];
trie() {
val = poz = 0;
bit[0] = bit[1] = NULL;
}
};
trie *T = new trie;
void ins(trie *nod, int x, int poz)
{
for (int i = 25; i >= 0; i--)
{
int bit = (x >> i) & 1;
if (nod->bit[bit] == 0)
nod->bit[bit] = new trie;
nod = nod->bit[bit];
}
nod->val = x;
nod->poz = poz;
}
pair<int, int> trie_query(trie *nod, int x)
{
for (int i = 25; i >= 0; i--)
{
int bit = (x >> i) & 1;
if(nod->bit[!bit] != 0)
nod = nod->bit[!bit];
else
nod = nod->bit[bit];
}
return make_pair(nod->val, nod->poz);
}
int n, mx = -1, st, dr;
int main()
{
fin >> n;
ins(T, 0, 0);
int prefix = 0;
for (int i = 1; i <= n; i++)
{
int x;
fin >> x;
prefix ^= x;
pair<int, int> aux = trie_query(T, prefix);
if ((prefix ^ aux.x) > mx)
{
mx = prefix ^ aux.x;
st = aux.poz + 1;
dr = i;
}
ins(T, prefix, i);
}
fout << mx << " " << st << " " << dr;
return 0;
}