#include using namespace std; #define rep(i, a, b) for(int i=a;i<(b);++i) #define all(x) begin(x), end(x) #define sz(x) (int)(x).size() typedef long long ll; typedef pair pii; typedef vector vi; class UF{ public: int n; vector par; UF(int n_){ n=n_; par.assign(n, 0); iota(all(par),0); } int root(int a){ vector were; while (a!=par[a]){ were.push_back(a); a=par[a]; } for (int i:were){ par[i]=a; } return a; } bool union_(int a, int b){ int pa=root(a); int pb=root(b); if (pa!=pb){ par[pa] = pb; return 1; } return 0; } }; int main(){ cin.tie(0)->sync_with_stdio(0); cout.tie(0); int n; cin>>n; map rows; map cols; for (int i=0;i>x>>y; if (rows.count(y)==0){ rows[y]={}; } rows[y].push_back(i); if (cols.count(x)==0){ cols[x]={}; } cols[x].push_back(i); } vectorE; for (auto [c, vec]: cols){ for (int i=1;i