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