//a[1,n]原数组
//b[i]=a[i]-a[i-1]差分数组的定义.(区间a[l,r]等于某个相同值时,区间b[l+1,r]中每个数的等于0)
//a[l,r]+C = (b[l]+=C;b[r+1]-=C);原数组区间加上某个值.
//求区间[1,n]操作次数最少使得原数组等于某个值 = 求区间[1,n]操作次数最少使得差分数组b[k]=0(k取n,n-1,2);
//区间操作根据边界值可以分类成:
//(1)l=1,r<=n.(原数组前缀[1,r]整体加上C)->b[1]+=C,b[r+1]+=C.(b[1]的改变不影响原数组的值)整体改变量为C.
//(2)l>=2,r=n.(原数组后缀[l,n]整体加上C)->b[l]+=C,b[n+1]-=C(b[n+1]的改变不影响原数组的值)整体改变值为C.
//(3)l>=2,r<=n-1.(原数组[l,r]整体加上C) -> b[l]+=C,b[r+1]-=C.(b[l],b[r]改变都影响其原数组的值.)整体改变值为2C.
//(4)l=1,r=n.(原数组[l,r]整体加上C) -> b[1]+=C;b[n+1]-=C(b[1],b[r+1]的改变不影响原数组的值)整体改变值为0.
//易知最少操作次数应该为:
//区间a[1,n]进行操作(3)次数的最大值(min(区间b[1,n]负数之和的绝对值,区间b[1,n]正数之和的绝对值))+||负数之和|-|正数之和||
//数列最终有多少种=操作(1)or(2)总共进行(||负数之和|-|正数之和||)次操作=||负数之和|-|正数之和||+1;
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long LL;
const int N = 1E5+10;
int a[N];//原数组
int b[N];//差分数组
int main()
{
int n;
cin>>n;
LL pos=0,neg=0;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=2;i<=n;i++){b[i]=a[i]-a[i-1];if(b[i]>0)pos+=b[i];else neg+=b[i];}
cout<<min(abs(neg),abs(pos))+abs(abs(neg)-abs(pos))<<endl;
cout<<abs(abs(neg)-abs(pos))+1<<endl;
return 0;
}