#include using namespace std; typedef long long ll; const int INF = 1e9; const int MOD = 1e9+7; struct UnionFind { vector data; UnionFind(int size) : data(size, -1) { } bool unite(int x, int y) { x = root(x); y = root(y); if (x != y) { if (data[y] < data[x]) swap(x, y); data[x] += data[y]; data[y] = x; } return x != y; } bool same(int x, int y) { return root(x) == root(y); } int root(int x) { return data[x] < 0 ? x : data[x] = root(data[x]); } int size(int x) { return -data[root(x)]; } }; double dist(int x1,int y1,int x2,int y2){ return sqrt((double)(x2-x1)*(x2-x1)+(double)(y2-y1)*(y2-y1)); } int main(void) { int N; cin >> N; if(N == 0){ cout << 1 << endl; return 0; } vector x(N),y(N); for(int i=0;i> x[i] >> y[i]; } UnionFind uf(N); for(int i=0;i