#include<bits/stdc++.h>
using namespace std;
int N,x[1509],y[1509],nzd,n;
long long dx,dy,sol;
struct slog{
	long long D,ky,kx;
	bool operator < (const slog &a) const {
      return ((D<a.D) or
							(D==a.D and ky <a.ky) or
							(D==a.D and ky==a.ky and kx<a.kx));
	}
}niz[2300009],l;
int NZD(int a,int b){
	a=abs(a);
	b=abs(b);
	while(a%b){
		swap(a,b);
		a%=b;
	}
	return b;
}
map<slog,int>Mapa;
int main(){

	cin>>N;
	for(int i=1; i<=N; i++)cin>>x[i]>>y[i];
	
	N=1500;
	for(int i=1; i<=N; i++){
		x[i]=rand();
		y[i]=rand();
		for(int j=1; j<i; j++)
			if(x[i]==x[j] and y[i]==y[j]){i--; break;}
	}
	cout<<"ok"<<endl;
	for(int i=1; i<=N; i++){
		for(int j=i+1; j<=N; j++){
			dx=x[i]-x[j];
			dy=y[i]-y[j];
			l.D=dx*dx+dy*dy;
			if(dx!=0 and dy!=0){
				nzd=NZD(dx,dy);
				l.kx=dx/nzd;
				l.ky=dy/nzd;
			}
			if(dx==0){
				l.kx=0;
				l.ky=1;
			}
			if(dy==0){
				l.kx=1;
				l.ky=0;
			}
			if(l.ky<0){
				l.ky=-l.ky;
				l.kx=-l.kx;
			}
			Mapa[l]++;
			if(Mapa[l]==1)niz[++n]=l;
		}
	}
	for(int i=1; i<=n; i++){
		l=niz[i];
		l.D*=4;
		sol+=Mapa[l];
	}
	cout<<sol<<endl;
	return 0;
}