#include <iostream>
using namespace std;
struct
part
{
int
weight, length;
part()
{
weight = length = 0;
}
bool
operator < ( part p2 ) //对自定义的结构体的大小判断根据题目需要来构造
{ //水王争霸就是自己构造自定义结构体的大小判断函数
if( length < p2.length )
return true;
if( length == p2.length )
if( weight < p2.weight )
return true;
return false;
}
}p[1001];
int
n, f[1001];
void
__read__()
{
cin >> n;
for( int i = 1; i <= n; i++ )
cin >> p[i].length >> p[i].weight;
}
void
swap( part& p1, part& p2 )
{
part p3 = p1;
p1 = p2;
p2 = p3;
}
void
__qsort__( int head, int tail ) //快速排序
{
int
h = head, t = tail;
part mid = p[( h + t ) / 2];
while( h < t )
{
while( p[h] < mid )
h++;
while( mid < p[t] )
t--;
if( h <= t ) //注意这里!!
{
swap( p[h], p[t] );
h++;
t--;
}
}
if( head < t )
__qsort__( head, t );
if( h < tail )
__qsort__( h, tail );
}
void
__init__()
{
p[0].weight = 9999999; //初始化,,别又搞忘了
__qsort__( 1, n );
for( int i = 1; i <= n; i++ )
f[i] = 1;
}
void
__dp__()
{
for( int i = n - 1; i >= 0; i-- )
for( int j = n; j > i; j-- )
if( p[i].weight > p[j].weight )
if( f[i] < f[j] + 1 )
f[i] = f[j] + 1;
}
void
__outp__()
{
cout << f[0] - 1 << endl;
}
int
main()
{
__read__();
__init__(); //初始化函数写了,,,没调用,,WA了一次。。
__dp__();
__outp__();
return 0;
}