#include <iostream>
#include <fstream>
#include <cmath>
#include <algorithm>
#include <vector>
using namespace std;
#define cnr ComplexNr
#define PRECISION 0.00000001
#define scale 0.0001
const double PI=atan(1)*4;
class ComplexNr{
public:double real,img,mod,angle;
public:ComplexNr() {real=img=mod=angle=0;}
bool riupdate()
{
real=mod*cos(angle);
img=mod*sin(angle);
return true;
}
bool maupdate()
{
if ((img==0)&&(real==0))
angle=0;
else
angle=atan2(img,real);
mod=sqrt(real*real+img*img);
return true;
}
public:ComplexNr(double a,double b,bool arg)
{
if (arg==false)
{
real=a;
img=b;
maupdate();
}
if (arg==true)
{
mod=a;
angle=b;
riupdate();
}
}
};
cnr operator + (cnr z1,cnr z2)
{
cnr z;
z.real=z1.real+z2.real;
z.img=z1.img+z2.img;
z.maupdate();
return z;
}
cnr operator - (cnr z1,cnr z2)
{
cnr z;
z.real=z1.real-z2.real;
z.img=z1.img-z2.img;
z.maupdate();
return z;
}
cnr operator * (cnr z1,cnr z2)
{
cnr z;
z.mod=z1.mod*z2.mod;
z.angle=z1.angle+z2.angle;
z.riupdate();
return z;
}
cnr operator / (cnr z1,cnr z2)
{
cnr z;
z.mod=z1.mod/z2.mod;
z.angle=z1.angle-z2.angle;
z.riupdate();
return z;
}
ostream& operator << (ostream& out,cnr z)
{
out<<z.real<<' '<<z.img<<' '<<z.mod<<' '<<z.angle;
return out;
}
double mod(double nr)
{
if (nr<0)
return -nr;
return nr;
}
cnr rot(cnr source,cnr middle,double angle)
{
cnr ax(1,angle,true);
cnr ax2;
ax2=(source-middle)*ax+middle;
return ax2;
}
vector <pair <double,double> > points;
int n,i,i1,k;
double x,y;
cnr z1,z2,z31,z32;
int main(void)
{
FILE * f;
f=fopen("triang.in","r");
ofstream g("triang.out");
fscanf(f,"%d",&n);
for (i=1;i<=n;i++)
{
fscanf(f,"%lf%lf",&x,&y);
x=(int(x/scale))*scale;
y=(int(y/scale))*scale;
//cout<<x<<' '<<y<<'\n';
points.push_back(make_pair(x,y));
}
sort(points.begin(),points.end());
for (i=0;i<n;i++)
for (i1=i+1;i1<n;i1++)
{
z1=cnr(points[i].first,points[i].second,false);
z2=cnr(points[i1].first,points[i1].second,false);
z31=rot(z1,z2,PI/3);
z32=rot(z1,z2,-PI/3);
//cout<<"\n\n"<<z1.real<<' '<<z1.img<<" "<<z2.real<<' '<<z2.img<<": "<<z31.real<<' '<<z31.img<<" "<<z32.real<<' '<<z32.img;
x=z31.real;
y=z31.img;
x=(int(x/scale))*scale;
y=(int(y/scale))*scale;
if ((binary_search(points.begin(),points.end(),make_pair(x,y)))==true)
k++;
x=z32.real;
y=z32.img;
x=(int(x/scale))*scale;
y=(int(y/scale))*scale;
if ((binary_search(points.begin(),points.end(),make_pair(x,y)))==true)
k++;
}
g<<k/2;
g.close();
return 0;
}