#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; }