#include <iostream>usingnamespacestd;
int main()
{
int n, a[105], b[105], f[5000];
while (cin >> n && n)
{
for (int i = 0; i < n; i++) cin >> a[i] >> b[i];
// b[]从小到大排序。a[]的位置随b[]改变。for (int i = 0; i < n - 1; i++)
{
for (int j = i; j < n; j++)
{
if (b[i] > b[j])
{
int t;
t = b[i]; b[i] = b[j]; b[j] = t;
t = a[i]; a[i] = a[j]; a[j] = t;
}
}
}
//设状态数组f[],初始化所有数值为0。memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
memset(f, 0, sizeof(f));
int result;
for (int i = 0; i < n; i++)
{
// 状态公式:fb[i]=max{fb[i],max{fb[j],j∈[0,a[i]]}+1}// 遍历计算所有的状态公式。
result = 0; for (int j = 0; j <= a[i]; j++) result = result > f[j] ? result : f[j];
f[b[i]] = f[b[i]] > result + 1 ? f[b[i]] : result + 1;
}
result = 0;
for (int i = 0; i <= b[n - 1]; i++)
//遍历f[],范围f0-fb[n-1],取最大值。
result = result > f[i] ? result : f[i];
cout << result << endl;
}
return0;
}