#include #include #include using namespace std; typedef long long Int; struct triangle { Int x1,y1,x2,y2,x3,y3; Int side1,side2,side3; }; struct fraction { Int a,b; }; triangle tri[100001]; Int rtL=0; triangle rtri[100001]; fraction fractions[100001]; bool SortFrac(fraction ch,fraction zn) { fraction ca=ch,cb=zn; ca.a=ca.a * cb.b; cb.a=cb.a * ca.b; return (ca.a<=cb.a); } int main() { freopen("tri.in","r",stdin); freopen("tri.out","w",stdout); Int n; Int i; Int curlen=1; Int maxlen=1; Int d; fraction copy1,copy2; scanf("%I64d",&n); for (i=1;i<=n;i++) { scanf("%I64d %I64d %I64d %I64d %I64d %I64d",&tri[i].x1,&tri[i].y1,&tri[i].x2,&tri[i].y2,&tri[i].x3,&tri[i].y3); tri[i].side1=(tri[i].x1 - tri[i].x2)*(tri[i].x1 - tri[i].x2) + (tri[i].y1 - tri[i].y2)*(tri[i].y1 - tri[i].y2); tri[i].side2=(tri[i].x2 - tri[i].x3)*(tri[i].x2 - tri[i].x3) + (tri[i].y2 - tri[i].y3)*(tri[i].y2 - tri[i].y3); tri[i].side3=(tri[i].x3 - tri[i].x1)*(tri[i].x3 - tri[i].x1) + (tri[i].y3 - tri[i].y1)*(tri[i].y3 - tri[i].y1); if (tri[i].side1==tri[i].side2) { rtL++; rtri[rtL]=tri[i]; } else if (tri[i].side1==tri[i].side3) { rtL++; rtri[rtL].x1=tri[i].x1; rtri[rtL].x2=tri[i].x2; rtri[rtL].x3=tri[i].x3; rtri[rtL].y1=tri[i].y1; rtri[rtL].y2=tri[i].y2; rtri[rtL].y3=tri[i].y3; rtri[rtL].side1=tri[i].side1; rtri[rtL].side2=tri[i].side3; rtri[rtL].side3=tri[i].side2; } else if (tri[i].side2==tri[i].side3) { rtL++; rtri[rtL].x1=tri[i].x1; rtri[rtL].x2=tri[i].x2; rtri[rtL].x3=tri[i].x3; rtri[rtL].y1=tri[i].y1; rtri[rtL].y2=tri[i].y2; rtri[rtL].y3=tri[i].y3; rtri[rtL].side1=tri[i].side2; rtri[rtL].side2=tri[i].side3; rtri[rtL].side3=tri[i].side1; } } for (i=1;i<=rtL;i++) { fractions[i].a=rtri[i].side1; fractions[i].b=rtri[i].side3; } sort(fractions+1,fractions+1+rtL,SortFrac); for (i=2;i<=rtL;i++) { copy1=fractions[i-1]; copy2=fractions[i]; copy1.a=copy1.a * copy2.b; copy2.a=copy2.a * copy1.b; if (copy1.a==copy2.a) { curlen++; if (curlen>maxlen) { maxlen=curlen; } } else { curlen=1; } } printf("%I64d\n",maxlen); }