#include <iostream>
#include <algorithm>
const int N = 4e5 + 5;
int n,a[N],b[N];
struct lines{
int l,r;
}l[N * 4];
struct bit_tr{
int mx[N];
inline void upd(int x,int v){
while(x < N){
mx[x] = std::max(mx[x],v);
x += x & -x;
}
}
inline int ask(int x){
int Max = 0;
while(x){
Max = std::max(Max,mx[x]);
x -= x & -x;
}
return Max;
}
}bit;
int f[N];
int main(){
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cin >> n;
for(int i = 1;i <= n; ++ i){
std::cin >> a[i] >> b[i];
}
int m = n * 4;
for(int i = 1;i <= n; ++ i){
if(a[i] > b[i]){
std::swap(a[i],b[i]);
}
l[i] = {a[i],b[i]};
l[i + n] = {b[i],a[i] + 2 * n};
l[i + 2 * n] = {a[i] + 2 * n,b[i] + 2 * n};
}
std::sort(l + 1,l + m + 1,[&](const lines & x,const lines & y){
return x.l < y.l;
});
int Max = 1;
for(int i = 1;i <= m; ++ i){
f[m - l[i].r + 1] = 1;
if(m - l[i].r > 0) f[m - l[i].r + 1] = std::max(f[m - l[i].r + 1],bit.ask(m - l[i].r) + 1);
bit.upd(m - l[i].r + 1,f[m - l[i].r + 1]);
}
for(int i = 1;i <= m; ++ i){
Max = std::max(Max,f[i]);
}
std::cout << Max;
return 0;
}