#include<bits/stdc++.h> using namespace std; string s1,s2,s3,s4; struct chyu { string hd,ed; chyu(){} chyu(string a,string b) { hd=a,ed=b; } }k[10002]; bool operator<(const chyu a,const chyu b) { return true; } map<string,vector<int> >h; map<string,map<string,bool> >hv; int n; long long ans; int number[4]; string nw; void dfs(int d=1,int id=0) { if(d==1) { for(int i=1;i<=n;i++) if(h[k[i].ed].size()) number[0]=i,nw=k[i].hd,dfs(2,i); } if(d==2) { for(int i=0;i<h[k[id].ed].size();i++) { if(h[k[id].ed][i]!=number[0]) if(hv[k[id].hd][k[h[k[id].ed][i]].ed]) number[1]=h[k[id].ed][i],dfs(3,h[k[id].ed][i]); } } if(d==3) { for(int i=0;i<h[k[id].ed].size();i++) { if(h[k[id].ed][i]!=number[0] && h[k[id].ed][i]!=number[1]) if(hv[k[id].hd][k[h[k[id].ed][i]].ed]) number[2]=h[k[id].ed][i],dfs(4,h[k[id].ed][i]); } } if(d==4) { for(int i=0;i<h[k[id].ed].size();i++) { if(h[k[id].ed][i]!=number[0] && h[k[id].ed][i]!=number[1] && h[k[id].ed][i]!=number[2] && k[h[k[id].ed][i]].ed==nw) number[3]=h[k[id].ed][i]; for(int j=0;j<h[k[number[0]].ed].size();j++) { if(h[k[number[0]].ed][j]!=number[0] && h[k[number[0]].ed][j]!=number[1] && h[k[number[0]].ed][j]!=number[2] && h[k[number[0]].ed][j]!=number[3] && k[h[k[number[0]].ed][j]].ed==k[number[2]].ed) { ans++; return 0; } } } } } int main() { cin>>n; for(int i=1;i<=n;i++) { cin>>s1>>s2>>s3>>s4; k[i].hd=s1,k[i].ed=s4; hv[s1][s4]=true; h[s1].push_back(i); } dfs(); cout<<ans; return 0; }