#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> mypair;
#define eps 1e-6
#define equals(a,b) (fabs( (a) - (b) )< EPS )
#define EPS eps
typedef struct point{
	double x,y;
	point(){};
	point(double x ,double y):x(x),y(y){};
	point operator + (point &p){ return point(x+p.x,y+p.y);	}
	point operator - (point &p){ return point(x-p.x,y-p.y);	}
	point operator * (point &p){ return point(x*p.x-y*p.y,x*p.y+y*p.x) ;}
	point operator * (double a){ return point(x*a,y*a);	}
	point operator / (double a){ return point(x/a,y/a);	}
	
	double abs() { return sqrt(norm()); }
	double norm() { return x*x+y*y; }
	
	bool operator < (const point &p) const { return x!=p.x ? x<p.x : y<p.y; }
	bool operator == (const point &p) const { return fabs(x-p.x)<EPS && fabs(y-p.y)<EPS; }
}point;

double cross(point a,point b){ return a.x*b.y - a.y*b.x ; }//ﾂ外ﾂ静・zﾂ青ｬﾂ閉ｪ)ﾂ　aﾂ×b
bool isparallel(point a,point b){ return equals(cross(a,b),0.0); }
double dot(point a,point b){ return a.x*b.x+a.y*b.y ; } //ﾂ禿ﾂ静渉　aﾂ・b
point make(){ 
	double x,y; cin>>x>>y;
       	return point(x,y);
}
int dfs(int now,int m,int ans,vector<vector<point > > &ang,vector<bool>&used){
	if(now == m-1)return ans;
	if(!used[now]) return dfs(now+1,m,ans,ang,used);
	used[now] = false;
	int tmp = ans;
       for(int i = 0;i< m;i++) if(used[i]){
	used[i] = false;
	int count = 1;
	vector<int> convert;
	convert.push_back(i);
	point tmpang = ang[now][i] ;
		for(int j = now+1;j<m;j++){
			if(used[j] )for(int k = j+1;k<m;k++){
				if(used[k]){
					if(isparallel(tmpang,ang[j][k])){
					used[j] =false;
					used[k] = false;
					convert.push_back(j);
					convert.push_back(k);
					count++;
					break;	
					}		
				}	
			}
		}
		
		//	cout<<endl<<"debug"<<now<<' '<<i<<' '<<count<<' '<<count*(count-1)/2<<endl;
		tmp = max(tmp,dfs(now+1,m,ans+(count*(count-1))/2,ang,used));
		for(int j=0;j<convert.size();j++){
			used[convert[j]]  = true;
		//	cout<<convert[j]<<' ';
       		}
	}
	used[now] = true;
	return tmp;	
}

int main(){
	int m;
	cin>>m;
	vector<point> p(m);
	for(int i=0;i<m;i++){
	p[i] = make();
	}
	vector<vector<point> > ang(m,vector<point> (m) );
	for(int i=0;i<m;i++){

		for(int j=0;j<m;j++){
			ang[i][j] = p[i]-p[j];
		}
	}
	vector<bool> used(m,true);
	cout<<dfs(0,m,0,ang,used)<<endl;

	return 0;
}

