#include <bits/stdc++.h>
using namespace std;
int n;
struct node {
	string a,b,c,d;
} s[100005];
bool vis[9];
int ans;
string an[9][9];
void dfs(int k,int sum) {
	if(s==0||k==n+1) {
		ans++;
		return ;
	}
	for(int i=1; i<=6; i++) {
		if(vis[i]==0) {
			if(i==1) {
				if((an[1][1]==""&&an[1][4]=="")||(an[1][1]==s[k].a&&an[1][4]=="")||(an[1][4]==s[k].d&&an[1][1]=="")||(an[1][4]==s[k].d&&an[1][1]==s[k].a)) {
					an[1][1]=s[k].a;
					an[1][2]=s[k].b;
					an[1][3]=s[k].c;
					an[1][4]=s[k].d;
					vis[1]=1;
					dfs(k+1,sum-1);
					an[1][1]="";
					an[1][2]="";
					an[1][3]="";
					an[1][4]="";
					vis[1]=0;
				}
			} else if(i==2) {
				if((an[1][4]==""&&an[4][4]=="")||(an[1][4]==s[k].a&&an[4][4]=="")||(an[4][4]==s[k].d&&an[1][4]=="")||(an[4][4]==s[k].d&&an[1][4]==s[k].a)) {
					an[1][4]=s[k].a;
					an[2][4]=s[k].b;
					an[3][4]=s[k].c;
					an[4][4]=s[k].d;
					vis[2]=1;
					dfs(k+1,sum-1);
					an[1][4]="";
					an[2][4]="";
					an[3][4]="";
					an[4][4]="";
					vis[2]=0;
				}
			} else if(i==3) {
				if((an[4][1]==""&&an[4][4]=="")||(an[4][4]==s[k].a&&an[4][1]=="")||(an[4][1]==s[k].d&&an[4][4]=="")||(an[4][1]==s[k].d&&an[4][4]==s[k].a)) {
					an[4][4]=s[k].a;
					an[4][3]=s[k].b;
					an[4][2]=s[k].c;
					an[4][1]=s[k].d;
					vis[3]=1;
					dfs(k+1,sum-1);
					an[4][4]="";
					an[4][3]="";
					an[4][2]="";
					an[4][1]="";
					vis[3]=0;
				}
			} else if(i==4) {
				if((an[1][4]==""&&an[1][1]=="")||(an[1][4]==s[k].a&&an[1][1]=="")||(an[1][1]==s[k].d&&an[1][4]=="")||(an[1][1]==s[k].d&&an[1][4]==s[k].a)) {
					an[1][4]=s[k].a;
					an[1][3]=s[k].b;
					an[1][2]=s[k].c;
					an[1][1]=s[k].d;
					vis[4]=1;
					dfs(k+1,sum-1);
					an[1][4]="";
					an[1][3]="";
					an[1][2]="";
					an[1][1]="";
					vis[4]=0;
				}
			} else if(i==5) {
				if((an[1][1]==""&&an[4][4]=="")||(an[1][1]==s[k].a&&an[4][4]=="")||(an[4][4]==s[k].d&&an[1][1]=="")||(an[4][4]==s[k].d&&an[1][1]==s[k].a)) {
					an[1][1]=s[k].a;
					an[2][2]=s[k].b;
					an[3][3]=s[k].c;
					an[4][4]=s[k].d;
					vis[5]=1;
					dfs(k+1,sum-1);
					an[1][1]="";
					an[2][2]="";
					an[3][3]="";
					an[4][4]="";
					vis[5]=0;
				}
			} else {
				if((an[4][1]==""&&an[1][4]=="")||(an[1][4]==s[k].a&&an[4][1]=="")||(an[4][1]==s[k].d&&an[1][4]=="")||(an[4][1]==s[k].d&&an[1][4]==s[k].a)) {
					an[1][4]=s[k].a;
					an[3][2]=s[k].b;
					an[2][3]=s[k].c;
					an[4][1]=s[k].d;
					vis[6]=1;
					dfs(k+1,sum-1);
					an[1][4]="";
					an[3][2]="";
					an[2][3]="";
					an[4][1]="";
					vis[6]=0;
				}
			}
		}
	}
	dfs(k+1,sum);
	return ;
}
int main() {
	scanf("%d",&n);
	for(int i=1; i<=n; i++) {
		scanf("%s %s %s %s",&s[i].a,&s[i].b,&s[i].c,&s[i].d);
	}
	dfs(1,6);
	printf("%d",ans);
	return 0;
}