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