//差分做法
#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
const int N = 2e6+10;
typedef long long ll;
struct name{
int x;
int y;
}num[N];
int c[N];
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int n;
cin>>n;
int maxn=-1;
int minn=1e9;
int ans=0;
for(int i=0;i<n;i++)
{
cin>>num[i].x>>num[i].y;
c[num[i].x]+=1;
c[num[i].y]-=1;
maxn=max(maxn,num[i].y);
minn=min(minn,num[i].x);
}
for(int i=1;i<=maxn;i++)
{
c[i]=c[i-1]+c[i];
}
int q=-1;
for(int i=0;i<=maxn;i++)
{
if(c[i]!=0)
{
ans++;
q=max(q,ans);
}else{
ans=0;
}
}
cout<<q<<" ";
q=0;
ans=0;
for(int i=minn;i<=maxn-1;i++)
{
if(c[i]==0)
{
ans++;
q=max(q,ans);
}else{
ans=0;
}
}
cout<<q<<endl;
return 0;
}
#include<bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
const int N = 2e5+10;
typedef long long ll;
struct name{
int x;
int y;
}num[N];
bool cmp(name a,name b)
{
return a.x<b.x;
}
signed main()
{
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>num[i].x;
cin>>num[i].y;
}
sort(num,num+n,cmp);
int maxnw=0;
int maxn=0,l=num[0].x,r=num[0].y;
for(int i=1;i<n;i++)
{
if(num[i].x<=r)
{
r=max(r,num[i].y);//max很重要
}else{
maxnw=max(maxnw,num[i].x-r);
l=num[i].x;
r=num[i].y;
}
maxn=max(maxn,r-l);
}
maxn=max(maxn,r-l);
cout<<maxn<<" "<<maxnw;
return 0;
}