#include<bits/stdc++.h>

using namespace std;

#define maxn 1501
#define pb push_back
#define fi first
#define se second 
#define ppb pop_back

bool sec(const pair<double, double> &a, const pair<double, double> &b)
{
    return (a.second < b.second);
}

long long tackex[maxn], tackey[maxn];
vector<pair<double, double> > vec;
vector<int> pozicije;

int main(){
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	
	unsigned long long rez = 0;
	
    long long x, y;
	double m, r;
	unsigned long long ras;
	
	int n;
	cin >> n;
	for(int i=0; i<n; i++){
		cin >> tackex[i] >> tackey[i];
	}
	
	for(int i=0; i<n-1; i++){
		for(int j=i+1; j<n; j++){
			x = tackex[i] - tackex[j];
			y =  tackey[i] - tackey[j];
			m = (double) x/y;
			ras = x*x + y*y;
			r = sqrt(ras);
			vec.pb(make_pair(m, r));
		}
	}
	
	sort(vec.begin(), vec.end());
	
	double pivot;
	
	int p = 0, s = 0;
	int si = vec.size();
	pozicije.pb(-1);
	
	while(p < si){
		while(vec[s].fi == vec[s+1].fi  && s+1 < si ){
			s++;
		}
		sort(vec.begin()+p, vec.begin()+s+1, sec);
		p = s + 1;
		s = s + 1;
		pozicije.pb(p-1);
	}
	
	int kraj = pozicije.size();
	int koef = 1;
	int p1, p2;
	for(int i=0; i<kraj-1; i++){
		koef = 1;
		p1 = pozicije[i+1];
		p2 = pozicije[i+1];
		while(p2>pozicije[i]+1 && vec[p2].se == vec[p2-1].se){
			p2--;
			p1--;
			koef++;
		}
		while(p1>pozicije[i]){
			if(vec[p2].se < 2 * vec[p1].se){
				p1--;
			}
			else if(vec[p2].se == 2 * vec[p1].se){
				rez+=koef;
				p1--;
			}
			else{
				p2--;
				koef=1;
				while(p2>pozicije[i]+1 && vec[p2].se == vec[p2-1].se){
					koef++;
					p2--;
				}
			}
		}
	}
	
	
	cout << rez; 
	return 0;
}