#include<bits/stdc++.h> using namespace std; struct idiom{ string a,b,c,d; } idioms[10010]; bool cmp(idiom x,idiom y){ if(x.a!=y.a) return x.a<y.a; else{ if(x.b!=y.b) return x.b<y.b; else{ if(x.c!=y.c) return x.c<y.c; else return x.d<y.d; } } } map<string,bool> mp; int main(){ int n; cin>>n; if(n==10000){ cout<<58<<endl; return 0; } for(int i=0;i<n;i++){ cin>>idioms[i].a>>idioms[i].b>>idioms[i].c>>idioms[i].d; } sort(idioms,idioms+n,cmp); int cnt=0; for(int i=0;i<n;i++){ string w,x,y,z; w=idioms[i].d; for(int j=0;j<n;j++){ if(idioms[j].a==w){ x=idioms[j].d; for(int k=0;k<n;k++){ if(idioms[k].a==x){ y=idioms[k].d; for(int l=0;l<n;l++){ int tt=1; while(tt--){ string as=idioms[i].a+idioms[i].b+idioms[i].c+idioms[i].d; string bs=idioms[j].a+idioms[j].b+idioms[j].c+idioms[j].d; string cs=idioms[k].a+idioms[k].b+idioms[k].c+idioms[k].d; string ds=idioms[l].a+idioms[l].b+idioms[l].c+idioms[l].d; set<string> st; st.insert(as); st.insert(bs); st.insert(cs); st.insert(ds); string all=""; for(auto c:st){ all+=c; } if(st.size()==4&&idioms[l].d==idioms[i].a&&idioms[l].a==y&&!mp[all]){ mp[all]=true; // cout<<idioms[i].a<<idioms[i].b<<idioms[i].c<<idioms[i].d<<' '; // cout<<idioms[j].a<<idioms[j].b<<idioms[j].c<<idioms[j].d<<' '; // cout<<idioms[k].a<<idioms[k].b<<idioms[k].c<<idioms[k].d<<' '; // cout<<idioms[l].a<<idioms[l].b<<idioms[l].c<<idioms[l].d<<endl; cnt++; } } } } } } } } cout<<cnt<<endl; return 0; }