#include<bits/stdc++.h> using namespace std; struct cy{ string za,zb,zc,zd; bool flag=false; }z[10000]; int s=0; void dfs(int n,int step,string zs,string ys,string yx,string zx) { if(step==6) { s++; return; } if(step==0) { for(int i=0;i<n;i++) { z[i].flag=true; dfs(n,1,z[i].za,z[i].zd," "," "); z[i].flag=false; } }else if(step==1) { for(int i=0;i<n;i++) { if(z[i].za==ys&&!z[i].flag) { z[i].flag=true; dfs(n,2,zs,ys,z[i].zd," "); z[i].flag=false; } } }else if(step==2) { for(int i=0;i<n;i++) { if(z[i].za==yx&&!z[i].flag) { z[i].flag=true; dfs(n,3,zs,ys,yx,z[i].zd); z[i].flag=false; } } }else if(step==3) { for(int i=0;i<n;i++) { if(z[i].za==zx&&z[i].zd==zs&&!z[i].flag) { z[i].flag=true; dfs(n,4,zs,ys,yx,zx); z[i].flag=false; } } }else if(step==4) { for(int i=0;i<n;i++) { if(z[i].za==zs&&z[i].zd==yx&&!z[i].flag) { z[i].flag=true; dfs(n,5,zs,ys,yx,zx); z[i].flag=false; } } }else if(step==5) { for(int i=0;i<n;i++) { if(z[i].za==ys&&z[i].zd==zx&&!z[i].flag) { z[i].flag=true; dfs(n,6,zs,ys,yx,zx); z[i].flag=false; } } } } int main() { int n; cin>>n; for(int i=0;i<n;i++) { cin>>z[i].za>>z[i].zb>>z[i].zc>>z[i].zd; } dfs(n,0," "," "," "," "); cout<<s<<endl; return 0; }