#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
struct cor{long long x, y;};
cor v[1001];
int n, i, j, dr, stg, mijl, contor=0;
bool cmp(cor a, cor b){
if(a.x<b.x)
return true;
else{
if(a.x>b.x)
return false;
else{
if(a.y<b.y)
return true;
else
return false;
}
}
}
bool gasit(long long corx, long long cory){
while(stg<=dr){
mijl=(stg+dr)/2;
if(v[mijl].x==corx&&v[mijl].y==cory)
return true;
if(v[mijl].x>corx)
dr=mijl-1;
else{
if(v[mijl].x<corx)
stg=mijl+1;
else{
if(v[mijl].y>=cory)
dr=mijl-1;
else
stg=mijl+1;
}
}
}
return false;
}
int main() {
long long xci, yci, xcj, ycj, xd, yd, centrux, centruy, vectorx, vectory , steag1, steag2;
char c;
int g1, g2;
FILE *fin, *fout;
fin = fopen("patrate3.in", "r");
fout = fopen("patrate3.out", "w");
fscanf(fin,"%d", &n);
c=fgetc(fin);
for(i=1;i<=n;i++){
fscanf(fin, "%d.%d", &g1, &g2);
if(g1>=0)
v[i].x = (g1 * 10000 + g2) * 10;
else
v[i].x = (g1 * 10000 - g2) * 10;
fscanf(fin, " %d.%d", &g1, &g2);
if(g1>=0)
v[i].y = (g1 * 10000 + g2) * 10;
else
v[i].y = (g1 * 10000 - g2) * 10;
}
sort(v+1,v+n+1,cmp);
for(i=1;i<=n;i++){
for(j=i+1;j<=n;j++){
if(i!=j){
//punctele sunt alaturate
if(v[i].y>v[j].y)
xd=v[j].x-v[i].x;
else
xd=v[i].x-v[j].x;
yd=abs(v[i].y-v[j].y);
xci=v[i].x+yd;
yci=v[i].y+xd;
xcj=v[j].x+yd;
ycj=v[j].y+xd;
stg=j;
dr=n+1;
if(gasit(xci, yci)==true&&gasit(xcj, ycj)==true)
contor++;
//punctele sunt opuse
centrux=(v[i].x+v[j].x)/2;
centruy=(v[i].y+v[j].y)/2;
vectorx=v[i].y-centruy;
vectory=v[i].x-centrux;
xci=centrux-vectorx;
yci=centruy+vectory;
xcj=centrux+vectorx;
ycj=centruy-vectory;
if(gasit(xci, yci)==true&&gasit(xcj, ycj)==true)
contor++;
}
}
}
/*
for(i=1;i<=n;i++){
fprintf(fout,"%lld %lld\n", v[i].x, v[i].y);
}
*/
fprintf(fout,"%d", contor);
fclose(fin);
fclose(fout);
return 0;
}