#include<bits/stdc++.h> #define int long long using namespace std; string mp[10010][4],x[2][4]; int n,vis[10010],ans = 0; void dfs(int t){ if(t >= 2) ans++; for(int i = 1;i <= n;i++){ if(vis[i]) continue; if(t == 0){ int f1 = 0,f2 = 0,f3 = 0; for(int j = 1;j <= n;j++){ if(i == j || vis[j]) continue; if(mp[i][0] == mp[j][3]) f1 = 1; if(mp[i][0] == mp[j][0]) f2 = 1; if(mp[i][3] == mp[j][0]) f3 = 1; } if(f1 && f2 && f3){ vis[i] = 1; x[t][0] = mp[i][0];x[t][1] = mp[i][1]; x[t][2] = mp[i][2];x[t][3] = mp[i][3]; dfs(t + 1); vis[i] = 0; } } else{ int f1 = 0,f2 = 0,f3 = 0,f4 = 0; for(int j = 1;j <= n;j++){ if(i == j || vis[j]) continue; if(x[0][0] == mp[j][3] && mp[i][3] == mp[j][0]) f1 = 1; if(x[0][0] == mp[j][0] && mp[i][0] == mp[j][3]) f2 = 1; if(x[0][3] == mp[j][0] && mp[i][3] == mp[j][3]) f3 = 1; if(x[0][3] == mp[j][0] && mp[i][0] == mp[j][3]) f4 = 1; } if(f1 && f2 && f3 && f4){ vis[i] = 1; x[t][0] = mp[i][0];x[t][1] = mp[i][1]; x[t][2] = mp[i][2];x[t][3] = mp[i][3]; dfs(t + 1); vis[i] = 0; } } } } signed main(){ cin >> n; for(int i = 1;i <= n;i++) cin >> mp[i][0] >> mp[i][1] >> mp[i][2] >> mp[i][3]; dfs(0); cout << ans << endl; return 0; }