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