char IO; template <classT=int> T rd(){ T s=0; int f=0; while(!isdigit(IO=getchar())) f|=IO=='-'; do s=(s<<1)+(s<<3)+(IO^'0'); while(isdigit(IO=getchar())); return f?-s:s; }
constint N=2e5+10,INF=1e9+10; const db eps=1e-9,PI=acos((db)-1);
int n; structNode{ db x,y; Node(){ } Node(db x,db y):x(x),y(y){ } Node operator - (const Node &t) const { returnNode(x-t.x,y-t.y); } db angle(){ db t=atan2(y,x); if(t<-eps) t+=2*PI; return t; } } O,A[N]; Node Read(){ db a=rd(),b=rd(),c=rd(),s=a+b+c; returnNode(a/s,b/s); }
int cnt1,cnt2; char op[2]; structcmp{booloperator()(const db &x,const db &y)const{ return x+eps<y; } }; multiset <db,cmp> st; db Go(db x){ x+=PI; if(x>=2*PI) x-=2*PI; return x; } voidIns(Node x){ if(fabs(x.x)<eps && fabs(x.y)<eps) returnvoid(cnt1++); db y=x.angle(); if(st.find(y)==st.end() && st.find(Go(y))!=st.end()) cnt2++; st.insert(y); }