#include <bits/stdc++.h>
using namespace std;

void makeCombiUtil(vector<vector<int> >& ans,
	vector<int>& tmp, int n, int left, int k)
{
	if (k == 0) {
		ans.push_back(tmp);
		return;
	}
	for (int i = left; i <= n; ++i)
	{
		tmp.push_back(i);
		makeCombiUtil(ans, tmp, n, i + 1, k - 1);

		tmp.pop_back();
	}
}
vector<vector<int> > makeCombi(int n, int k)
{
	vector<vector<int> > ans;
	vector<int> tmp;
	makeCombiUtil(ans, tmp, n, 1, k);
	return ans;
}

struct tacka{
	int x,y;
};

int main()
{
	
	unsigned short int j;
	unsigned short int n,c=0;
	int i,a,b;
	cin>>n;
	tacka tacke[n];
	tacka romb[4];
	for(i=0;i<n;i++){
		cin>>tacke[i].x;
		cin>>tacke[i].y;
	}
	vector<vector<int> > ans = makeCombi(n, 4);
	for (i = 0; i < ans.size(); i++) {
		for (j = 0; j < 4; j++) {
			romb[j] = tacke[ans.at(i).at(j)-1];
		}
		a=((romb[0].x-romb[3].x)*(romb[0].x-romb[3].x))+((romb[0].y-romb[3].y)*(romb[0].y-romb[3].y));
		b=((romb[1].x-romb[2].x)*(romb[1].x-romb[2].x))+((romb[1].y-romb[2].y)*(romb[1].y-romb[2].y));
		if(((romb[0].x-romb[3].x)*(romb[1].y-romb[2].y)==(romb[1].x-romb[2].x)*(romb[0].y-romb[3].y))&&(a==b*4||b==a*4)){
			c++;
		}
		else{
			a=((romb[0].x-romb[2].x)*(romb[0].x-romb[2].x))+((romb[0].y-romb[2].y)*(romb[0].y-romb[2].y));
			b=((romb[1].x-romb[3].x)*(romb[1].x-romb[3].x))+((romb[1].y-romb[3].y)*(romb[1].y-romb[3].y));
			if(((romb[0].x-romb[2].x)*(romb[1].y-romb[3].y)==(romb[1].x-romb[3].x)*(romb[0].y-romb[2].y))&&(a==b*4||b==a*4)){
				c++;
			}
			else{
				a=((romb[0].x-romb[1].x)*(romb[0].x-romb[1].x))+((romb[0].y-romb[1].y)*(romb[0].y-romb[1].y));
				b=((romb[3].x-romb[2].x)*(romb[3].x-romb[2].x))+((romb[3].y-romb[2].y)*(romb[3].y-romb[2].y));
				if(((romb[0].x-romb[1].x)*(romb[3].y-romb[2].y)==(romb[3].x-romb[2].x)*(romb[0].y-romb[1].y))&&(a==b*4||b==a*4)){
					c++;
				}	
			}
		}
	}

	cout<<c;
	return 0;
}