#include using namespace std; int LIS(vector& A) { vector dp; for (int x : A) { auto it = lower_bound(dp.begin(), dp.end(), x); if (it == dp.end()) dp.push_back(x); else *it = x; } return dp.size(); } int simulatedAnnealing(int n, vector>& range) { vector A(n); for (int i = 0; i < n; i++) { A[i] = rand() % (range[i].second - range[i].first + 1) + range[i].first; } int bestLIS = LIS(A); vector bestA = A; double temperature = 100.0; double coolingRate = 0.995; while (temperature > 1e-6) { int idx = rand() % n; int oldVal = A[idx]; A[idx] = rand() % (range[idx].second - range[idx].first + 1) + range[idx].first; int newLIS = LIS(A); if (newLIS > bestLIS) { bestLIS = newLIS; bestA = A; } else { double prob = exp((newLIS - bestLIS) / temperature); if (rand() / double(RAND_MAX) < prob) { bestLIS = newLIS; bestA = A; } else { A[idx] = oldVal; } } temperature *= coolingRate; } return bestLIS; } int main() { int n; cin >> n; vector> range(n); for (int i = 0; i < n; i++) { cin >> range[i].first >> range[i].second; } int res = 0; for (int i = 1; i <= 10;i++ ) res = max(res, simulatedAnnealing(n, range)); cout<