#include <bits/stdc++.h>
#define int long long
#define rep(i,a,b) for(int i=a;i<b;i++)
using namespace std;
string l[20005],r[20005];
map<string,int> mp;
int cnt,a[20005],b[20005];
map<pair<int,int>,int> have;
void add(string s){
	if(mp[s]==0){
		cnt++;
		mp[s]=cnt;
	}
}
vector<int> Gv[20005];
int ans,n;
bool a_is_b(int i,int x,int y){
	if(a[i]==x and b[i]==y)return 1;
	return 0;
}
bool x_is_y(int a,int b,int x,int y){
	if(a==x and b==y)return 1;
	return 0;
}
signed main(){
	cin>>n;
	rep(i,0,n){
		cin>>l[i]>>r[i]>>r[i]>>r[i];
		add(l[i]);
		add(r[i]);
		a[i]=mp[l[i]],b[i]=mp[r[i]];
		have[make_pair(a[i],b[i])]++;
		Gv[a[i]].push_back(i);
	}
	rep(i,0,n){
		for(int j:Gv[b[i]]){
			if(i==j)continue;
			for(int k:Gv[b[j]]){
				if(k==i or k==j)continue;
				int dl=b[k],dr=a[i];
				if(!have[make_pair(dl,dr)])continue;
				int exl=a[i],exr=b[j];
				if(!have[make_pair(exl,exr)])continue;
				int txl=a[j],txr=b[k];
				if(!have[make_pair(txl,txr)])continue;
				int cnt=1;
				int lx=have[make_pair(dl,dr)];
				if(a_is_b(i,dl,dr))lx--;
				if(a_is_b(j,dl,dr))lx--;
				if(a_is_b(k,dl,dr))lx--;
				cnt*=lx;
				lx=have[make_pair(exl,exr)];
				if(a_is_b(i,exl,exr))lx--;
				if(a_is_b(j,exl,exr))lx--;
				if(a_is_b(k,exl,exr))lx--;
				if(x_is_y(dl,dr,exl,exr))lx--;
				cnt*=lx;
			    lx=have[make_pair(txl,txr)];
				if(a_is_b(i,txl,txr))lx--;
				if(a_is_b(j,txl,txr))lx--;
				if(a_is_b(k,txl,txr))lx--;
				if(x_is_y(dl,dr,txl,txr))lx--;
				if(x_is_y(exl,exr,txl,txr))lx--;
		        cnt*=lx;
		        ans+=cnt;
			}
		}
	}
	cout<<ans;
	return 0;
}