#include <bits/stdc++.h>
using namespace std;
string s[10005][5], g[5][5];
bool f[10005];
int cnt = 0, n;
void dfs(int x)
{
	if (x > 6)
		cnt++;
	else
	{
		if (x == 1)
		{
			for (int i = 1; i <= n; i++)
			{	
				f[i] = 1;
				for (int j = 1; j <= 4; j++)
					g[1][j] = s[i][j];
				dfs(x + 1);
				f[i] = 0;
			}	
		}
		else if (x == 2)
		{
			for (int i = 1; i <= n; i++)
			{
				if (s[i][1] == g[1][4] && !f[i])
				{
					f[i] = 1;
					for (int j = 2; j <= 4; j++)
						g[4][j] = s[i][j];
					dfs(x + 1);
					f[i] = 0;
				}	
			}		
		}
		else if (x == 3)
		{
			for (int i = 1; i <= n; i++)
			{
				if (s[i][1] == g[4][4] && !f[i])
				{
					f[i] = 1;
					g[4][1] = s[i][4], g[4][2] = s[i][3], g[4][3] = s[i][2];
					dfs(x + 1);
					f[i] = 0;
				}		
			}		
		}
		else if (x == 4)
		{
			for (int i = 1; i <= n; i++)
			{
				if (s[i][4] == g[1][1] && s[i][1] == g[4][1] && !f[i])
				{
					f[i] = 1;
					g[3][1] = s[i][2];
					g[2][1] = s[i][3];
					dfs(x + 1);
					f[i] = 0;
				}
			}		
		}
		else if (x == 5)
		{
			for (int i = 1; i <= n; i++)
			{
				if (s[i][1] == g[1][1] && s[i][4] == g[4][4] && !f[i])
				{
					f[i] = 1;
					g[2][2] = s[i][2];
					g[3][3] = s[i][3];
					dfs(x + 1);
					f[i] = 0;
				}
			}		
		}
		else if (x == 6)
		{
			for (int i = 1; i <= n; i++)
			{
				if (s[i][1] == g[1][4] && s[i][4] == g[4][1] && !f[i])
				{
					f[i] = 1;
					g[2][3] = s[i][2];
					g[3][2] = s[i][3];
					dfs(x + 1);
					f[i] = 0;
				}
			}		
		}		
	}
}
int main()
{
	scanf("%d", &n);
	for (int i = 1; i <= n; i++)
		for (int j = 1; j <= 4; j++)
			cin >> s[i][j];
	dfs(1);
	printf("%d\n", cnt);
	return 0;
}
/*
6
a b c d
d e f g
g h i j
j k l a
a m n g
d o p j
*/