小根堆
#include<bits/stdc++.h>
#define int long long
using namespace std;
constexpr int maxn=1e7+10;
int read()
{
int x=0,f=1;
char ch=getchar();
while (ch<'0' || ch>'9')
{
if (ch == '-') f=-1;
ch=getchar();
}
while (ch>='0' && ch<='9')
{
x=(x<<1)+(x<<3)+ch-'0';
ch=getchar();
}
return x*f;
}
int n,a[maxn],stk[maxn],top=1,ls[maxn],rs[maxn];
void des()
{
for (int i=2;i<=n;i++)
{
while (a[stk[top]]>a[i] && top) top--;
if (!top) ls[i]=stk[top+1];
else ls[i]=rs[stk[top]],rs[stk[top]]=i;
stk[++top]=i;
}
}
int ans1,ans2;
signed main()
{
n=read();stk[1]=1;
for (int i=1;i<=n;i++) a[i]=read();
des();
for (int i=1;i<=n;i++) ans1^=i*(ls[i]+1),ans2^=i*(rs[i]+1);
printf("%lld %lld\n",ans1,ans2);
return 0;
}