#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define popcount __builtin_popcount using namespace std; typedef long long int ll; //typedef pair P; #define EPS 1e-10 double add(double a, double b){ if(abs(a+b)EPS){ return x convex_hull(vector

ps){ int n=ps.size(); sort(ps.begin(), ps.end()); int k=0; vector

qs(n*2); for(int i=0; i1 && (qs[k-1]-qs[k-2]).det(ps[i]-qs[k-1])<=0) k--; qs[k++]=ps[i]; } for(int i=n-2, t=k; i>=0; i--){ while(k>t && (qs[k-1]-qs[k-2]).det(ps[i]-qs[k-1])<=0) k--; qs[k++]=ps[i]; } qs.resize(k-1); return qs; } double maxdist(vector

v){ int n=v.size(); double ret=0; int i=0, j=0; for(int k=0; k=0) j=(j+1)%n; else i=(i+1)%n; }while(i0!=i || j0!=j); return ret; } struct unionfind{ vector par, sz; unionfind() {} unionfind(int n):par(n), sz(n, 1){ for(int i=0; isz[y]) swap(x, y); par[x]=y; sz[y]+=sz[x]; } bool same(int x, int y){ return find(x)==find(y); } int size(int x){ return sz[find(x)]; } }; int main() { int n; cin>>n; if(n==0){ cout<<1<>p[i].x>>p[i].y; } sort(p, p+n); unionfind uf(n); vector

w; for(int i=-10; i<=10; i++){ for(int j=-10; j<=10; j++){ if(i*i+j*j<=100){ w.push_back(P(i, j)); } } } for(int i=0; i v[120020]; for(int i=0; i