#include #include #include #include #include using namespace std; struct triangle{ double t1, t2, t3; triangle(){}; triangle ( double _t1, double _t2, double _t3 ){ t1 = _t1; t2 = _t2; t3 = _t3; } bool operator< ( triangle p )const { if ( t1 == p.t1 ){ if ( t2 == p.t2 ) return t3 < p.t3; return t2 < p.t2; } return t1 < p.t1; } }; int N; map < triangle, int > mp; triangle scanTriangle(){ int x[3], y[3]; for ( int i = 0; i < 3; ++i ) scanf ( "%d%d", x + i, y + i ); vector < double > dist; for ( int i = 0; i < 3; ++i ) for ( int j = i + 1; j < 3; ++j ) dist.push_back ( ( x[i] - x[j] ) * ( x[i] - x[j] ) + ( y[i] - y[j] ) * ( y[i] - y[j] ) ); sort ( dist.begin(), dist.end() ); if ( dist[0] != dist[1] && dist[1] != dist[2] ) dist[0] = -1; return triangle ( dist[0] / dist[1], dist[0] / dist[2], dist[1] / dist[2] ); } void scan(){ scanf ( "%d", &N ); for ( int i = 0; i < N; ++i ){ triangle t = scanTriangle(); if ( t.t1 > 0 ){ mp[t]++; } } } void solve(){ int mx = 0; for ( map < triangle, int > :: iterator it = mp.begin(); it != mp.end(); ++it ) if ( mx < it -> second ) mx = it -> second; printf ( "%d\n", mx ); } int main(){ freopen ( "tri.in", "r", stdin ); freopen ( "tri.out", "w", stdout ); scan(); solve(); }