structP{ int x,y; }; P operator - (const P &a,const P &b) {return (P){a.x-b.x,a.y-b.y};} intoperator * (const P &a,const P &b) {return a.x*b.y-a.y*b.x;} boolcmpP(const P &a,const P &b){return a.x<b.x || a.x==b.x && a.y<b.y;}
int n; P p[maxn];
P h[2*maxn]; int h0; bool fuck; voidHell() { sort(p+1,p+1+n,cmpP); h0=0; fo(i,1,n) { while (h0>=2 && (h[h0]-h[h0-1])*(p[i]-h[h0])>0) h0--; h[++h0]=p[i]; } fd(i,n-1,1) { while (h0>=2 && (h[h0]-h[h0-1])*(p[i]-h[h0])>0) h0--; h[++h0]=p[i]; } fuck=(h0==2*n-1); h0--; }