#include <stdio.h>
#include <algorithm>
using namespace std;
const int M=100005;
int a[M],b[M],srt[M];
int arr[M],brr[M];
bool cmp(int x,int y)
{
return (a[x]<a[y] || a[x]==a[y] && b[x]<b[y]);
}
int LIS(int n)
{
int i,s,t,L,R,M,rt=1;
if(n==0)
return 0;
brr[1]=arr[0];
for(i=1;i<n;i++)
if(brr[rt]<arr[i])
brr[++rt]=arr[i];
else if(brr[1]>=arr[i])
brr[1]=arr[i];
else
{
L=1;R=rt;t=0;
while(L<R)
{
M=(L+R)/2;
if(brr[M]<arr[i])
{
t=M;
L=M+1;
}
else
R=M-1;
}
brr[t+1]=arr[i];
}
return rt;
}
int main(void)
{
int n,max,i,j,p,q,k;
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
scanf("%d%d",&a[i],&b[i]);
for(i=0;i<n;i++)
srt[i]=i;
sort(srt,srt+n,cmp);
max=0;
for(j=0;j<n;j++)
{
i=srt[j];
q=0;
for(k=j+1;k<n && a[srt[k]]<b[i];k++)
if(b[srt[k]]>b[i])
arr[q++]=b[srt[k]];
p=LIS(q)+1;
if(max<p) max=p;
}
printf("%d\n",max);
}
return 0;
}