#include <bits/stdc++.h>
#define mem(a,b) memset(a,b,sizeof a);
#define rep(i,a,b) for(int i = a; i <= b; i++)
#define per(i,a,b) for(int i = a; i >= b; i--)
#define __ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0)
typedef long long ll;
typedef double db;
const int N = 20;
const db EPS = 1e-9;
using namespace std;

void dbg() {cout << "\n";}
template<typename T, typename... A> void dbg(T a, A... x) {cout << a << ' '; dbg(x...);}
#define logs(x...) {cout << #x << " -> "; dbg(x);}

int n,x[N],y[N],ans,vis[N],flag[N],sz;

void dfs(vector<int> v, int tmp){
	ans = max(ans, tmp);
	int sz = v.size();
	if(sz == 0) return;
	rep(i,0,sz-1){
		rep(j,i+1,sz-1){
			int x1 = x[v[i]]-x[v[j]], y1 = y[v[i]]-y[v[j]];
			int cnt = 0;
			rep(k1,0,sz-1){
				if(flag[v[k1]]) continue;
				rep(k2,k1+1,sz-1){
					if(flag[v[k2]]) continue;
					int x2 = x[v[k2]]-x[v[k1]], y2 = y[v[k2]]-y[v[k1]];
					if(y2*x1 == y1*x2){
						flag[v[k1]] = flag[v[k2]] = 1;
						cnt++;
						break;
					}
				}
			}
			if(cnt > 1){
				vector<int> vv; vv.clear();
				rep(k1,0,sz-1)
					if(!flag[v[k1]]) vv.push_back(v[k1]);
				dfs(vv, tmp+cnt*(cnt-1)/2);
				vv.clear();
			}
			rep(k1,0,sz-1) flag[v[k1]] = 0;
		}
	}
	v.clear();
}

int main()
{
	scanf("%d",&n);
	rep(i,1,n) scanf("%d %d",&x[i],&y[i]);
	vector<int> v;
	rep(i,1,n) v.push_back(i);
	dfs(v,0);
	printf("%d\n", ans);
	return 0;
}
