#include using namespace std; #define PB push_back #define ZERO (1e-10) #define INF int(1e9+1) #define CL(A,I) (memset(A,I,sizeof(A))) #define DEB printf("DEB!\n"); #define D(X) cout<<" "<<#X": "<B&&A-ZERO pll; typedef vector vi; typedef pair ii; typedef vector vii; #define IN(n) int n;scanf("%d",&n); #define FOR(i, m, n) for (int i(m); i < n; i++) #define F(n) FOR(i,0,n) #define FF(n) FOR(j,0,n) #define FT(m, n) FOR(k, m, n) #define aa first #define bb second void ga(int N,int *A){F(N)scanf("%d",A+i);} #define MX (222222) struct pt{ double x,y; int I; pt operator-(pt r){return {x-r.x,y-r.y};} pt operator+(pt r){return {x+r.x,y+r.y};} pt operator*(double a){return {x*a,y*a};} bool operator<(const pt&r)const{return EQ(x,r.x)?y1&&(r[M-1]-r[M-2]).XP(P[i]-r[M-2])<0)--M; r[M++]=P[i]; }K=M; for(int i(N-2);~i;--i){ while(M>K&&(r[M-1]-r[M-2]).XP(P[i]-r[M-2])<0)--M; r[M++]=P[i]; } return max(M-1,0); } #define AG(I,J) atan2(P[I].x-P[J].x,P[I].y-P[J].y) #define SS(A) (EQ(A,0)?0:A<0?-1:1) int N,M,I,S,C[MX],L; set G; vi Z; pair V[MX*2]; int go(){ FT(1,M)V[L++]={AG(R[0].I,R[k].I),R[k].I}; F(N)if(!G.count(i))V[L++]={AG(R[0].I,i),i}; sort(V,V+L); F(L)V[i+L]=V[i]; int l=-1,y=0; F(L*2)if(G.count(V[i].bb))l=V[i].bb,C[V[i].bb]|=y,y=0; else{ y=1; if(~l)C[l]=1; } S=N-M+1; F(N)S+=C[i]; return S; } int main(void){ scanf("%d",&N); F(N)p[i].gt(),p[i].I=i,P[i]=p[i]; M=hull(p,N,r); assert(N>=M); if(N==M)return printf("3 %d %d\n",N-2,N),0; F(M)if(r[i].I