#include<bits/stdc++.h>
#define int long long
using namespace std;
string mp[10010][4],x[2][4];
int n,vis[10010],ans = 0;
void dfs(int t){
	if(t >= 2) ans++;
	for(int i = 1;i <= n;i++){
		if(vis[i]) continue;
		if(t == 0){
			int f1 = 0,f2 = 0,f3 = 0;
			for(int j = 1;j <= n;j++){
				if(i == j || vis[j]) continue;
				if(mp[i][0] == mp[j][3]) f1 = 1;
				if(mp[i][0] == mp[j][0]) f2 = 1;
				if(mp[i][3] == mp[j][0]) f3 = 1;
			}
			if(f1 && f2 && f3){
				vis[i] = 1;
				x[t][0] = mp[i][0];x[t][1] = mp[i][1];
				x[t][2] = mp[i][2];x[t][3] = mp[i][3];
				dfs(t + 1);
				vis[i] = 0;
			}
		}
		else{
			int f1 = 0,f2 = 0,f3 = 0,f4 = 0;
			for(int j = 1;j <= n;j++){
				if(i == j || vis[j]) continue;
				if(x[0][0] == mp[j][3] && mp[i][3] == mp[j][0]) f1 = 1;
				if(x[0][0] == mp[j][0] && mp[i][0] == mp[j][3]) f2 = 1;
				if(x[0][3] == mp[j][0] && mp[i][3] == mp[j][3]) f3 = 1;
				if(x[0][3] == mp[j][0] && mp[i][0] == mp[j][3]) f4 = 1;
			}
			if(f1 && f2 && f3 && f4){
				vis[i] = 1;
				x[t][0] = mp[i][0];x[t][1] = mp[i][1];
				x[t][2] = mp[i][2];x[t][3] = mp[i][3];
				dfs(t + 1);
				vis[i] = 0;
			}
		}
	}
}
signed main(){
	cin >> n;
	for(int i = 1;i <= n;i++) cin >> mp[i][0] >> mp[i][1] >> mp[i][2] >> mp[i][3];
	dfs(0);
	cout << ans << endl;
	return 0;
}