#include<bits/stdc++.h> using namespace std; map<string,int> mp; int n,bh,ans; struct cy{ int s1,s2,s3,s4; }; cy a[10010]; bool vis[10010]; int b[10]; bool check(int x,int y){ if(x==1) return true; else if(x==2){ return (a[b[1]].s4==a[y].s1); }else if(x==3){ return (a[b[2]].s4==a[y].s1); }else if(x==4){ if(a[b[3]].s4!=a[y].s1) return false; if(a[b[1]].s1!=a[y].s4) return false; return true; }else if(x==5){ if(a[b[1]].s4!=a[y].s1) return false; if(a[b[4]].s1!=a[y].s4) return false; return true; }else{ if(a[b[2]].s4!=a[y].s1) return false; if(a[b[1]].s1!=a[y].s4) return false; return true; } } void dfs(int x){ if(x>6){ ans++; return; } for(int i=1;i<=n;i++){ if(vis[i] || !check(x,i)) continue; b[x]=i; vis[i]=true; dfs(x+1); vis[i]=false; } } int main(){ cin>>n; for(int i=1;i<=n;i++){ cy k; int c[5]; for(int j=0;j<4;j++){ string s; cin>>s; if(mp[s]==0){ mp[s]=++bh; c[j]=bh; }else c[j]=mp[s]; } k={c[0],c[1],c[2],c[3]}; a[i]=k; } dfs(1); cout<<ans; return 0; }