#include <stdio.h>
#include<map>
#include<vector>

//Svaka veza izmedju ucenika sadrzi podatak o svojoj duzini
struct relation
{
	float len;
};

struct ucenik
{
	int x, y;
};

ucenik ucenici[1500];

//Mapa koja za svaki k iz y = kx + n, sadrzi niz veza izmedju ucenika sa tim k
//Prave su paralelne ukoliko im je k jednak 
std::map<float, std::vector<relation>> veze;

int main()
{
	int odgovor = 0;

	int br_ucenika;

	scanf("%d", &br_ucenika);
	for (int i = 0; i < br_ucenika; i++)
		scanf("%d%d", &ucenici[i].x, &ucenici[i].y);

	//racunanje vrednosti k i udaljenosti izmedju svih ucenika
	for (int i = 0; i < br_ucenika-1; i++)
	{
		for (int j = i+1; j < br_ucenika; j++)
		{
			float k;
			if (ucenici[j].x == ucenici[i].x)
				k = INFINITY;
			else
				k = ((float)(ucenici[j].y - ucenici[i].y)) / (ucenici[j].x - ucenici[i].x);
			int dx = ucenici[j].x - ucenici[i].x;
			int dy = ucenici[j].y - ucenici[i].y;
			float duzina = sqrt(dx * dx + dy * dy);
			relation temp = { duzina };
			veze[k].push_back(temp);
		}
	}

	for (auto& p : veze)
	{
		int arr_size = p.second.size();
		for (int i = 0; i < arr_size-1; i++)
		{
			for (int j = i; j < arr_size; j++)
			{
				if (p.second[i].len == p.second[j].len * 2)
					odgovor++;
				else if (p.second[i].len * 2 == p.second[j].len)
					odgovor++;
			}
		}
	}
	
	printf("%d", odgovor);
	return 0;
}