/*类似于线段覆盖的题目,不同的是端点不可以重合,但是仍然是要求线段最长*/
#include<cstdio>
#include<iostream>
using namespace std;
struct Group{
int start,end,len;
};
#include<algorithm>
Group group[1001];
int n;
int cmp(Group a,Group b)
{
return a.end<b.end;
}
void input()
{
scanf("%d",&n);
for(int i=1;i<=n;++i)
{
scanf("%d%d",&group[i].start,&group[i].end);
if(group[i].start>group[i].end)
swap(group[i].start,group[i].end);
group[i].len=group[i].end-group[i].start+1;
}
sort(group+1,group+n+1,cmp);
}
int dp[1001];
void DP()
{
dp[1]=group[1].len;
for(int i=2;i<=n;++i)
for(int j=1;j<=i-1;++j)
if(group[i].start>group[j].end)
dp[i]=max(dp[i],dp[j]+group[i].len);
}
int main()
{
input();
DP();
cout<<dp[n]<<endl;
return 0;
}