#include <iostream>
#include <cstdio>
#include <utility>
#include <vector>
#include <algorithm>
#include <cstring>
using namespace std;
//英语 看博友分析 抄博友程序 二分未实现 动态规划实现 背
int dp[10008];//i为底最多能堆多少积木
int main()
{
while(1)
{
int n;
scanf("%d",&n);
if(n==0)
{
cout<<"*"<<endl;
break;
}
memset(dp,0,sizeof(dp));
vector<pair<int,int> > ve;
ve.clear();
for(int i=0;i<n;i++)
{
int x,y;
cin>>x>>y;
ve.push_back(make_pair(x,y));
}
sort(ve.begin(),ve.end());
int jg=-1;
for(int i=0;i<n;i++)
{
dp[i]=1;
for(int j=0;j<i;j++)
{
if(ve[i].second>=ve[j].second)
{
dp[i]=max(dp[i],dp[j]+1);
jg=max(jg,dp[i]);
}
}
}
cout<<jg<<endl;
}
return 0;
}