VP cal_convex(VP a) { VP r; sort(all(a)); for(const auto& p: a) { while(sz(r)>1 && cross(r[sz(r)-2], r[sz(r)-1], p)<=0) r.pop_back(); r.pb(p); } int K=sz(r); reverse(all(a)); for(const auto& p: a) { while(sz(r)>K && cross(r[sz(r)-2], r[sz(r)-1], p)<=0) r.pop_back(); r.pb(p); } r.pop_back(); return r; }