#include<bits/stdc++.h> using namespace std; struct node{ bool f=true; string a,b; }cy[10005]; int n,ans=0; string a[10]; void dfs(string s,int num){ if(num>6){ ans++; return; } if(num<4){ for(int i=1;i<=n;i++){ if(cy[i].f&&cy[i].a==s){ cy[i].f=false; a[num]=cy[i].a; dfs(cy[i].b,num+1); cy[i].f=true; } } } else{ if(num==4){ for(int i=1;i<=n;i++){ if(cy[i].f&&cy[i].a==s&&cy[i].b==a[1]){ cy[i].f=false; a[num]=cy[i].a; dfs(cy[i].b,num+1); cy[i].f=true; } } } else{ if(num==5){ for(int i=1;i<=n;i++){ if(cy[i].f&&cy[i].a==a[1]&&cy[i].b==a[3]){ cy[i].f=false; dfs(cy[i].b,num+1); cy[i].f=true; } } } else{ for(int i=1;i<=n;i++){ if(cy[i].f&&cy[i].a==a[2]&&cy[i].b==a[4]){ cy[i].f=false; dfs(cy[i].b,num+1); cy[i].f=true; } } } } } } int main(){ cin>>n; for(int i=1;i<=n;i++){ string x1,x2; cin>>cy[i].a>>x1>>x2>>cy[i].b; } for(int i=1;i<=n;i++){ cy[i].f=false; a[1]=cy[i].a; dfs(cy[i].b,2); cy[i].f=true; } cout<<ans; return 0; }