#include<iostream>
using namespace std;
struct tre{
long long id,w,f,l,r;
}dkrt[10000007];
long long n,lis[10000007];
long long ans=0,bns=0;
template<typename T>
inline void read(T &x){
T w=1;x=0;
char c=getchar();
while(!isdigit(c)){if(c=='-'){w=-1;}c=getchar();}
while(isdigit(c)){x=x*10+(c-'0');c=getchar();}
x=x*w;
}
void bld(){
for(long long i=1,k;i<=n;i++){
k=i-1;dkrt[i].w=lis[i];dkrt[i].id=i;
while(dkrt[k].w>lis[i]){k=dkrt[k].f;}
dkrt[i].l=dkrt[k].r;
dkrt[dkrt[i].l].f=i;
dkrt[k].r=i;
dkrt[i].f=k;
}return ;
}
int main(){
read(n);
for(long long i=1;i<=n;i++){
read(lis[i]);
}
dkrt[0]=(tre){0,0,0,0,0};
bld();
for(long long i=1;i<=n;i++){
ans^=i*(dkrt[i].l+1);
bns^=i*(dkrt[i].r+1);
}printf("%d %d",ans,bns);
return0;
}