#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef complex P; typedef vector

Poly; const double eps = 1e-8; inline double dot(const P a, const P b){//A dot B return a.real()*b.real() + a.imag()*b.imag(); } inline double cross(const P a, const P b){//A cross B return a.real()*b.imag() - a.imag()*b.real(); } bool less_P(const P& l, const P& r){ if (l.real() == r.real()) return l.imag() < r.imag(); else return l.real() < r.real(); } inline void convex_hull(Poly p, Poly& res){ int k = 0, t; res.resize(2 * p.size()); sort(p.begin(),p.end(),less_P); for(int i=0;i<(int)p.size();i++){ while (k > 1 && (cross(res[k - 1] - res[k - 2], p[i] - res[k - 1])=0;i--){ while (k > t && (cross(res[k - 1] - res[k - 2], p[i] - res[k - 1])>x[i]>>y[i]; } for(x[3]=-200;x[3]<=200;x[3]++) for(y[3]=-200;y[3]<=200;y[3]++){ Poly test(4),res; for(int i=0;i<4;i++){ test[i].real(x[i]); test[i].imag(y[i]); } convex_hull(test,res); bool flag=true; for(int i=0;i<(int)res.size();i++){ double tmp=dot(res[(i+2)%res.size()]-res[(i+1)%res.size()],res[(i+1)%res.size()]-res[i]); if(tmp>eps||tmp<-eps)flag=false; tmp=abs(res[(i+2)%res.size()]-res[(i+1)%res.size()])-abs(res[(i+1)%res.size()]-res[i]); if(tmp>eps||tmp<-eps)flag=false; } if(flag){ cout<