#include using Pos = std::pair; int main () { size_t N; std::cin >> N; long long int x, y; std::vector positions, same_y; size_t cnt = 0; for (size_t i = 0; i < N; ++i) { std::cin >> x >> y; positions.push_back({x,y}); same_y.push_back({y,x}); } std::sort(positions.begin(), positions.end(), [&] (const Pos & a, const Pos & b){ if (a.first == b.first) return a.second < b.second; return a.first < b.first; }); std::sort(same_y.begin(), same_y.end(), [&] (const Pos & a, const Pos & b){ if (a.first == b.first) return a.second < b.second; return a.first < b.first; }); std::vector> res, res_y; for (const auto & i : positions) { res.push_back({i, -1}); } res[0].second = 0; for (size_t i = 1; i <= N; ++i){ if(res[i-1].first.first == res[i].first.first){ res[i].second = res[i-1].second; } else{ res[i].second = res[i-1].second + 1; } } for (size_t i = 1; i <= N; ++i){ if(res[i-1].second != res[i].second && res[i].first.second == res[i-1].first.second){ res[i].second = res[i-1].second; } } std::set a; for (size_t i = 0; i < res.size(); ++i){ a.insert(res[i].second); } std::cout << a.size() - 1 << std::endl; return 0; }