#include<bits/stdc++.h>
using namespace std;
#define fir first
#define sec second
#define INT __int128
#define ll long long
#define pii pair<int,int>
#define pll pair<long long,long long>
#define cst const
#define u_mp unordered_map
#define u_st unordered_set
#define prio_q priority_queue
#define fastrd ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define rep(i,a,b,c) for(i=a;i<=b;i+=c)
#define arep(i,a,b,c) for(i=a;i>=b;i-=c)
#define pb push_back
cst int INFi=0x3f3f3f3f;
cst ll INFl=0x3f3f3f3f3f3f3f3f;
cst INT INFI=0x3f3f3f3f3f3f3f3f;
template<class T>
T read(){
	char c;
	bool flag=0;
	while(c<'0'||c>'9'){
		c=getchar();
		if(c=='-'){
			flag=1;
		}
	}
	T a=0;
	while(isdigit(c)){
		a=a*10+(c-'0');
		c=getchar();
	}
	if(flag){
		a=-a;
	}
	return a;
}
template<class T>
void print(T a){
	if(a<0){
		putchar('-');
		a=-a;
	}
	if(a>9){
		print(a/10);
	}
	putchar((char)((a%10)+'0'));
}
template<class T>
void v_clear(vector<T>& ve){
	vector<T>no;
	swap(ve,no);
}
template<class T>
void us_clear(u_st<T>& ve){
	u_st<T>no;
	swap(ve,no);
}
template<class T,class T1>
void um_clear(u_mp<T,T1>& ve){
	u_mp<T,T1>no;
	swap(ve,no);
}
template<class T,class T1,class T2>
T qmax(T1 a,T2 b){
	return (a>b?a:b);
}
template<class T,class T1,class T2>
T qmin(T1 a,T2 b){
	return (a<b?a:b);
}
u_mp<string,u_st<string>>mp;
int n;
long long ans=0;
int main(){
	fastrd
	cin>>n;
	char x,y;
	for(int i=1;i<=n;i++){
		string a,b,c,d;
		cin>>a>>b>>c>>d;
		mp[a].insert(d);
	}
	for(auto a:mp){
		for(auto b:a.sec){
			for(auto c:mp){
				for(auto d:c.sec){
					if(a.fir==c.fir&&b==d){
						continue;
					}else{
						if(mp[b].find(c.fir)!=mp[b].end()){
							if(mp[d].find(a.fir)!=mp[d].end()){
								if(a.sec.find(c.fir)!=a.sec.end()){
									if(mp[b].find(d)!=mp[b].end()){
										ans++;
									}
								}
							}
						}
					}
				}
			}
		}
	}
	cout<<ans;
	return 0;
}