#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
struct tacka
{
	int x,y;
};
struct razlomak
{
	long long a,b;
};
struct prava
{
	razlomak k;
	long long d;
};
bool bolji(prava p,prava q)
{
	if(p.k.a*q.k.b==q.k.a*p.k.b)
	return p.d<q.d;
	else
	return(p.k.a*q.k.b<q.k.a*p.k.b);
}
bool bolji2(prava p,prava q)
{
	return p.d<q.d;
}
int main()
{
	int n,m=0;
	long long br=0,br0=0,r=0;
	prava p;
	cin>>n;
	tacka a[n];
	vector<prava>v(0);
	vector<long long>v2(0);
	vector<long long>::iterator l,f;
	for(int i=0;i<n;i++)
	cin>>a[i].x>>a[i].y;
	for(int i=0;i<n;i++)
	for(int j=i+1;j<n;j++)
	{
		p.d=pow(a[i].x-a[j].x,2)+pow(a[i].y-a[j].y,2);
		p.k.b=a[i].x-a[j].x;
		p.k.a=a[i].y-a[j].y;
		if(p.k.b<0)
		{
			p.k.b=-p.k.b;
			p.k.a=-p.k.a;
		}
		v.push_back(p);
		m++;
	}
	for(int i=0;i<m;i++)
	{
		if(v[i].k.b==0)
		{
			swap(v[i],v[br0]);
			br0++;
		}
	}
	sort(v.begin(),v.begin()+br0,bolji2);
	sort(v.begin()+br0,v.end(),bolji);
	for(int i=0;i<m;i++)
	{
		if(i==0)
		{
		r=1;
		v2.push_back(v[i].d);
	}
		else{
			if(v[i].k.b==0)
			{
			r++;
			v2.push_back(v[i].d);
		}
			else if(v[i].k.a*v[i-1].k.b==v[i-1].k.a*v[i].k.b)
			{
			r++;
			v2.push_back(v[i].d);
		}
			else
			{
				for(int j=0;j<r;j++)
				{
					if(v2[j]%4==0)
					{
						l=upper_bound(v2.begin(),v2.end(),v2[j]/4);
						f=lower_bound(v2.begin(),v2.end(),v2[j]/4);
						br+=l-f;
					}
				}
				v2.clear();
				r=1;
				v2.push_back(v[i].d);
			}
		}
	}
	for(int j=0;j<r;j++)
	{
	if(v2[j]%4==0)
	{					
	l=upper_bound(v2.begin(),v2.end(),v2[j]/4);
	f=lower_bound(v2.begin(),v2.end(),v2[j]/4);
	br+=l-f;
	}
	}
	cout<<br;
}