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