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