int a[202][202]={0},b[202][202]={0},flag[202]={0},dp2[202][202]={0},dp1[202][202]={0};
int minxx(int f[],int p)
{
int min777=2000000000,i;
for(i=0;i<p;i++)
{
if(min777>=f[i]) min777=f[i];
}
return min777;
}
int min(int a,int b)
{
if(a>b) return b;
else return a;
}
int maxxx(int f[],int p)
{
int min777=-1,i;
for(i=0;i<p;i++)
{
if(min777<=f[i]) min777=f[i];
}
return min777;
}
int max(int a,int b)
{
if(a<b) return b;
else return a;
}
int main()
{
int n,i,j,k,ans=0,p=0,ans2=0;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
scanf("%d",&a[i][i]);
a[i+n][i+n]=a[i][i];
}
for(i=n*2-1;i>0;i--)
{
for(j=i+1;j<=n*2;j++)
{
for(k=i;k<j;k++)
{
flag[p]=a[i][k]+a[i+p+1][j];
p++;
}
a[i][j]=minxx(flag,p);
for(k=0;k<=p;k++)
flag[k]=0;
p=0;
}
}
for(i=n*2-1;i>0;i--)
{
for(j=i+1;j<=n*2;j++)
{
dp2[i][j]=2100000000;
dp1[i][j]=-1;
p=0;
for(k=i;k<j;k++)
{
dp1[i][j]=max(dp1[i][j],dp1[i][k]+dp1[i+p+1][j]+a[i][j]);
dp2[i][j]=min(dp2[i][j],dp2[i][k]+dp2[i+p+1][j]+a[i][j]);
p++;
}
}
}
p=0;
for(i=1;i<=n+1;i++)
{
flag[p]=dp2[i][n+i-1];
p++;
}
ans=minxx(flag,p);
p=0;
for(i=1;i<=n+1;i++)
{
flag[p]=dp1[i][n+i-1];
p++;
}
ans2=maxxx(flag,p);
printf("%d\n%d",ans,ans2);
return 0;
}