#include <bits/stdc++.h>

using namespace std;

const int M = 1e4 + 5, N = 2 * M;

int n, cnt, ans, aa[5];
vector <int> g[N], v;
unordered_map <int, int> gr[N];
unordered_map <string, int> mp;
string mp2[N];
bool vis[N];

void dfs(int now, int cnt){
	aa[cnt] = now;
	if (cnt == 4){
		ans ++;
		return ;
	}
	
	for (auto i : g[now]){
		if (!gr[now][i]) continue;
		gr[now][i] --;
		if (cnt == 1){
			dfs(i, cnt + 1);
		}
		else if (cnt == 2){
			if (gr[aa[1]][i]){
				gr[aa[1]][i] --;
		
				dfs(i, cnt + 1);
	
				gr[aa[1]][i] ++;
			}
		}
		else if (cnt == 3){
			if (gr[aa[2]][i] && gr[i][aa[1]]){
				gr[aa[2]][i] --;
				gr[i][aa[1]] --;

				dfs(i, cnt + 1);
				
				gr[aa[2]][i] ++;
				gr[i][aa[1]] ++;
			}
		}
		gr[now][i] ++;
	}
}

int main(){
	cin >> n;
	for (int i = 1; i <= n; i++){
		string a, b, c, d;
		cin >> a >> b >> c >> d;
		if (mp[a] == 0) mp[a] = ++cnt, mp2[cnt] = a;
		if (mp[d] == 0) mp[d] = ++cnt, mp2[cnt] = d;
		g[mp[a]].push_back(mp[d]);
		gr[mp[a]][mp[d]]++;
		v.push_back(mp[a]);
	}
	
	for (auto i : v){
		if (vis[i]) continue;
		dfs(i, 1);
		vis[i] = 1;
	}
	
	cout << ans;
	return 0;
}