#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <cmath>
#include <map>

using namespace std;

const int MAXN = 400 + 100;

int n;
long long s[MAXN];
map<long long, int> cnt;

long long get_ind(int x0, int x1, int x2, int x3)
{
	return (x0) | (x1 << 10) | (x2 << 20) | ((long long)x3 << 30);
}

int get_dig(long long s, int k)
{
	return (s >> (10 * k)) & 1023;
}

void add(long long s, int v)
{
	for(int i = 0; i < 4; i++)
		cnt[s] += v, s = (s >> 10) | ((s & 1023) << 30);
}

int main()
{
	ios::sync_with_stdio(false);
	// freopen("1.in", "r", stdin);
	// freopen("1.out", "w", stdout);

	cin >> n;
	for(int i = 1; i <= n; i++)
	{
		int x0, x1, x2, x3;
		cin >> x0 >> x1 >> x2 >> x3;
		s[i] = get_ind(x0, x1, x2, x3);
		add(s[i], 1);
	}

	long long ans = 0;
	for(int i = 1; i <= n; i++)
	{
		add(s[i], -1);
		for(int j = i + 1; j <= n; j++)
		{
			add(s[j], -1);
			for(int k = 0; k < 4; k++)
			{
				long long t[4] = {
					get_ind(get_dig(s[j], k), get_dig(s[j], (k + 3) % 4), get_dig(s[i], 1), get_dig(s[i], 0)),
					get_ind(get_dig(s[j], (k + 3) % 4), get_dig(s[j], (k + 2) % 4), get_dig(s[i], 2), get_dig(s[i], 1)),
					get_ind(get_dig(s[j], (k + 2) % 4), get_dig(s[j], (k + 1) % 4), get_dig(s[i], 3), get_dig(s[i], 2)),
					get_ind(get_dig(s[j], (k + 1) % 4), get_dig(s[j], k), get_dig(s[i], 0), get_dig(s[i], 3))
				};
				long long tmp = 1;
				for(int l = 0; l < 4; l++)
					if(cnt.find(t[l]) == cnt.end())
					{
						tmp = 0; break;
					}
				if(!tmp) continue;
				for(int l = 0; l < 4; l++)
					tmp *= cnt[t[l]], add(t[l], -1);
				for(int l = 0; l < 4; l++)
					add(t[l], 1);
				ans += tmp;
			}
			add(s[j], 1);
		}
	}
	cout << ans << endl;

	return 0;
}
