#include <bits/stdc++.h> using namespace std; #define ll long long #define fi first #define se second map<pair<string, string>, ll> mp; inline int qry(pair<string, string> s) { if (mp.count(s)) { return mp[s]; } else { return 0; } } int main() { int n; cin >> n; for (int i = 0; i < n; i++) { string a, b, c, d; cin >> a >> b >> c >> d; mp[make_pair(a, d)]++; } ll ans = 0; ll cnt = 0; map<pair<string, string>, ll> mp2; for (auto z1 : mp) { for (auto z2 : mp) { if (!qry(make_pair(z1.fi.se, z2.fi.fi)) || !qry(make_pair(z2.fi.se, z1.fi.fi))) { continue; } mp2.clear(); cnt++; ll b = (z1 == z2 ? z1.se * (z1.se - 1) : z1.se * z2.se); mp2[z1.fi]++, mp2[z2.fi]++; b *= (qry(make_pair(z1.fi.se, z2.fi.fi)) - mp2[make_pair(z1.fi.se, z2.fi.fi)]); mp2[make_pair(z1.fi.se, z2.fi.fi)]++; b *= (qry(make_pair(z2.fi.se, z1.fi.fi)) - mp2[make_pair(z2.fi.se, z1.fi.fi)]); mp2[make_pair(z2.fi.se, z1.fi.fi)]++; b *= (qry(make_pair(z1.fi.fi, z2.fi.fi)) - mp2[make_pair(z1.fi.fi, z2.fi.fi)]); mp2[make_pair(z1.fi.fi, z2.fi.fi)]++; b *= (qry(make_pair(z1.fi.se, z2.fi.se)) - mp2[make_pair(z1.fi.se, z2.fi.se)]); mp2[make_pair(z1.fi.se, z2.fi.se)]++; for (auto x : mp2) { for (int i = 1; i <= x.second; i++) { b /= i; } } ans += b; } } printf("%lld", ans); return 0; }