#include<bits/stdc++.h>
#define rep(i,j,k) for(i=j; i<=k; i++)
using namespace std;

const int MAXN = 1E5 + 10;
const int INF = (1 << 30);
typedef long long LL;

struct Point{
	int x,y;
};

bool operator < (const Point &a, const Point &b){
	if (a.y==b.y)
		return a.x<b.x;
	else
		return a.y<b.y;
}

Point a[6*MAXN];
int Nico[MAXN*12];

int main(){
	int n;
	while(scanf("%d",&n)!=EOF){
		int Xmin=INF,Ymin=INF;
		int Xmax=0,Ymax=0;
		int i;
		rep(i,1,n){
			scanf("%d%d",&a[i].x,&a[i].y);
			Xmin=min(Xmin,a[i].x);
			Xmax=max(Xmax,a[i].x);
			Ymin=min(Ymin,a[i].y);
			Ymax=max(Ymax,a[i].y);
		}
		sort(a+1,a+n+1);
		vector<Point> L,R;
		a[0].x=Xmax+1;
		a[0].y=Ymin-1;
		L.push_back(a[0]);
		for(i=1;(i<=n)&&(a[i].x>Xmin);i++){
			if (a[i].y!=a[i-1].y){
				if (a[i].x<=L[L.size()-1].x)
					L.push_back(a[i]);
			}
		}
		L.push_back(a[i]);
		for(i++;i<=n;i++){
			if (a[i].y!=a[i-1].y){
				while(a[i].x<L[L.size()-1].x)
					L.pop_back();
				L.push_back(a[i]);
			}
		}
		a[n+1].x=Xmin-1;
		a[n+1].y=Ymax+1;
		R.push_back(a[n+1]);
		for(i=n;(i>0)&&(a[i].x<Xmax);i--){
			if (a[i].y!=a[i+1].y){
				if (a[i].x>=R[R.size()-1].x)
					R.push_back(a[i]);
			}
		}
		R.push_back(a[i]);
		for(i--;i>0;i--){
			if (a[i].y!=a[i+1].y){
				while(a[i].x>R[R.size()-1].x)
					R.pop_back();
				R.push_back(a[i]);
			}
		}
		/*
		for(i = 1; i < L.size(); i++)
			cout<<L[i].x<<' '<<L[i].y<<endl;
		cout<<endl;
		for(i = 1; i < R.size(); i++)
			cout<<R[i].x<<' '<<R[i].y<<endl;
		cout<<endl;
		*/

		/*
		int r=R.size()-1;
		while(R[r].x<Xmax)
			r--;
		int l=1;
		while((L[l].x!=Xmin)&&(r>1)){
			while((L[l].x!=Xmin)&&(L[l+1].y<R[r].y))
				l++;
			if ((L[l].y<R[r].y)&&(L[l+1].y>=R[r].y)&&(R[r-1].y>L[l+1].y)&&(L[l].x<R[r].x)&&(R[r-1].x<=L[l].x)&&(R[r-1].x>L[l+1].x)){
				
			}
		}
		*/
		vector<Point> all;
		all.push_back((Point){Xmax+2,Ymin-2});
		int tot=0;
		for(i = 1;(i < L.size()) && (L[i-1].x > Xmin); i++){
			int tmpx=L[i].x,tmpy=L[i].y;
			all.push_back((Point){tmpx-1,tmpy-1});
			Nico[++tot]=1;
			all.push_back((Point){tmpx-1,tmpy+1});
			Nico[++tot]=1;
			all.push_back((Point){tmpx+1,tmpy-1});
			Nico[++tot]=1;
			all.push_back((Point){tmpx+1,tmpy+1});
			Nico[++tot]=1;
			if (i!=1){
				all.push_back((Point){L[i-1].x,L[i].y});
				Nico[++tot]=1;
				all.push_back((Point){L[i-1].x-1,L[i].y-1});
				Nico[++tot]=1;
			}
		}
		for(i--; i < L.size(); i++){
			int tmpx=L[i].x,tmpy=L[i].y;
			all.push_back((Point){tmpx-1,tmpy-1});
			Nico[++tot]=1;
			all.push_back((Point){tmpx-1,tmpy+1});
			Nico[++tot]=1;
			all.push_back((Point){tmpx+1,tmpy-1});
			Nico[++tot]=1;
			all.push_back((Point){tmpx+1,tmpy+1});
			Nico[++tot]=1;
			if (i!=L.size()-1){
				all.push_back((Point){L[i+1].x-1,L[i].y+1});
				Nico[++tot]=1;
				all.push_back((Point){L[i+1].x,L[i].y});
				Nico[++tot]=1;
			}
		}
		for(i = 1;(i < R.size()) && (R[i-1].x < Xmax); i++){
			int tmpx=R[i].x,tmpy=R[i].y;
			all.push_back((Point){tmpx-1,tmpy-1});
			Nico[++tot]=1;
			all.push_back((Point){tmpx-1,tmpy+1});
			Nico[++tot]=1;
			all.push_back((Point){tmpx+1,tmpy-1});
			Nico[++tot]=1;
			all.push_back((Point){tmpx+1,tmpy+1});
			Nico[++tot]=1;
			if (i!=1){
				all.push_back((Point){R[i-1].x+1,R[i].y+1});
				Nico[++tot]=0;
			}
		}
		for(i--; i < R.size(); i++){
			int tmpx=R[i].x,tmpy=R[i].y;
			all.push_back((Point){tmpx-1,tmpy-1});
			Nico[++tot]=1;
			all.push_back((Point){tmpx-1,tmpy+1});
			Nico[++tot]=1;
			all.push_back((Point){tmpx+1,tmpy-1});
			Nico[++tot]=1;
			all.push_back((Point){tmpx+1,tmpy+1});
			Nico[++tot]=1;
			if (i!=R.size()-1){
				all.push_back((Point){R[i+1].x+1,R[i].y-1});
				Nico[++tot]=0;
			}
		}
	
		vector<pair<Point,int> > TMP;
		for(i = 0; i < all.size(); i++){
			TMP.push_back(make_pair(all[i], Nico[i]));
		}
		sort(TMP.begin(),TMP.end());

		while(all.size())
			all.pop_back();
		for(i = 0; i < TMP.size(); i++){
			all.push_back(TMP[i].first);
			Nico[i]=TMP[i].second;
		}
		
	//	for(i = 0; i < all.size(); i++)		cout<<Nico[i]<<' '<<all[i].x<<' '<<all[i].y<<endl;
	//	sort(all.begin(),all.end());

	//	for(i = 0; i < all.size(); i++)
	//		cout<<all[i].x<<' '<<all[i].y<<endl;



		vector<Point> L2,R2;
		L2.push_back(all[0]);
		for(i=1;(i<all.size())&&(all[i].x>Xmin-1);i++){
		//	if (all[i].y!=all[i-1].y){
				if (Nico[i]&&(all[i].x<=L2[L2.size()-1].x))
					L2.push_back(all[i]);
		//	}
		}
		L2.push_back(all[i]);
		for(i++;i<all.size();i++)
			if (Nico[i]){
	//		if (all[i].y!=all[i-1].y){
				while(all[i].x<L2[L2.size()-1].x)
					L2.pop_back();
				L2.push_back(all[i]);
		//	}
			}
		//all[n+1].x=Xmin-1;
		//all[n+1].y=Ymax+1;
		all.push_back((Point){Xmin-2,Ymax+2});
		R2.push_back(all[all.size()-1]);
		for(i=all.size()-2;(i>0)&&(all[i].x<Xmax+1);i--){
		//	if (all[i].y!=all[i+1].y){
				if (all[i].x>=R2[R2.size()-1].x)
					R2.push_back(all[i]);
		//	}
		}
		R2.push_back(all[i]);
		for(i--;i>0;i--){
	//		if (all[i].y!=all[i+1].y){
				while(all[i].x>R2[R2.size()-1].x)
					R2.pop_back();
				R2.push_back(all[i]);
	//		}
		}

	/*	cout<<endl<<endl;
		for(i = 1; i < L2.size(); i++){cout<< L2[i].x << ' '<< L2[i]. y<<endl;}
		cout<<endl<<endl;
		for(i = 1; i < R2.size(); i++){cout<< R2[i].x << ' '<< R2[i]. y<<endl;}*/



		vector<Point> lt;
		lt.push_back(L2[1]);
		for(i = 2; i < L2.size(); i++){
			if ((L2[i].x==lt[lt.size()-1].x)&&(L2[i].y==lt[lt.size()-1].y))
				continue;
			if ((L2[i].x!=lt[lt.size()-1].x)&&(L2[i].y!=lt[lt.size()-1].y)){
				if (L2[i].x<lt[lt.size()-1].x)
					lt.push_back((Point){lt[lt.size()-1].x,L2[i].y});
				else
					lt.push_back((Point){L2[i].x,lt[lt.size()-1].y});
			}
			lt.push_back(L2[i]);
		}
		
	//	lt.push_back(R2[1]);
		for(i = 1; i < R2.size(); i++){
			if ((R2[i].x==lt[lt.size()-1].x)&&(R2[i].y==lt[lt.size()-1].y))
				continue;
			if ((R2[i].x!=lt[lt.size()-1].x)&&(R2[i].y!=lt[lt.size()-1].y)){
				if (R2[i].x>lt[lt.size()-1].x)
					lt.push_back((Point){lt[lt.size()-1].x,R2[i].y});
				else
					lt.push_back((Point){R2[i].x,lt[lt.size()-1].y});
			}
			lt.push_back(R2[i]);
		}
		
	/*	cout<<endl<<endl;
		for(i = 0; i < lt.size(); i++)
			cout<<lt[i].x<<' '<<lt[i].y<<endl;*/

		long long area = 0;
		/*
		for(i = 1; i < L2.size() - 1; i++){
			area+= L2[i+1].x * L2[i].y - L2[i+1].y * L2[i].x;
		}
		for(i = 1; i < R2.size() - 1; i++){
			area+= R2[i+1].x * R2[i].y - R2[i+1].y * R2[i].x;
		}

		cout<<endl<<endl;
		area+= R2[1].x * L2[L2.size()-1].y - R2[1].y * L2[L2.size()-1].x;
		area+= L2[1].x * R2[R2.size()-1].y - L2[1].y * R2[R2.size()-1].x;
		*/
		for(i = 0; i < lt.size() - 1; i++){
			area+= (LL)lt[i+1].x * lt[i].y - (LL)lt[i+1].y * lt[i].x;
		//	cout<<area<<endl;
		}
		area+=(LL)lt[0].x * lt[lt.size()-1].y - (LL)lt[0].y * lt[lt.size()-1].x;
		printf("%lld %lld\n",(((LL)Xmax-Xmin+2)+((LL)Ymax-Ymin+2))*2, area/2);
	}
}
