#include using namespace std; #define reep(i,a,b) for(int i=(a);i<(b);i++) #define rep(i,n) reep((i),0,(n)) typedef pair pii; typedef pair pp; #define F first #define S second #define PB push_back // 2-D kika #define EPS 1e-8 typedef complex P; typedef const P &rP; typedef pair seg; //naiseki double dot(rP a, rP b){ return real(a) * real(b) + imag(a) * imag(b); } //gaiseki double cross(rP a, rP b){ return real(a) * imag(b) - imag(a) * real(b); } double norm(P x){ return real(x) * real(x) + imag(x) * imag(x); } int ccw(const seg &s, P c){ P b = s.second - s.first; c -= s.first; double cr = cross(b, c); if(cr < -EPS){ return 1; } if(cr > EPS){ return -1; } if(dot(b, c) < -EPS){ return 2; } if(norm(b) < norm(c) - EPS){ return -2; } return 0; } bool intersectSS(const seg &s, const seg &t){ return ccw(s, t.first) * ccw(s, t.second) <= 0 && ccw(t, s.first) * ccw(t, s.second) <= 0; } bool foo(pii a,pii b,pii c,pii d){ seg x(P(a.F,a.S),P(b.F,b.S)); seg y(P(c.F,c.S),P(d.F,d.S)); return intersectSS(x,y); } int check(pii a,pii b,vector &v){ int ret=0; rep(i,v.size()){ if(foo(a,b,v[i].F,v[i].S)) ret++; } return ret; } int main(){ int n; cin>>n; vector v(n); vector w; rep(i,n){ int a,b,c,d; cin>>a>>b>>c>>d; v[i]=make_pair(pii(a,b),pii(b,c)); w.PB(pii(a,b)); w.PB(pii(c,d)); } sort(w.begin(),w.end()); w.erase(unique(w.begin(),w.end()),w.end()); int ans=0; rep(i,w.size()){ rep(j,i){ ans=max(ans,check(w[i],w[j],v)); } } cout<