#include <bits/stdc++.h> using namespace std; int main() { int n; cin >> n; vector<pair<int, int>> a(n); for (int i = 0; i < n; ++i) cin >> a[i].first >> a[i].second; sort(a.begin(), a.end(), [](const auto & x, const auto & y) { if (x.first != y.first) return x.first < y.first; // 长升序 return x.second > y.second; // 同长宽降序 }); vector<int> tails; // tails[k]:长度为 k+1 的序列最小可能尾宽 for (auto& e : a) { int w = e.second; auto it = lower_bound(tails.begin(), tails.end(), w); // 严格递增 if (it == tails.end()) tails.push_back(w); else *it = w; } cout << (int)tails.size() << '\n'; return 0; }