#include <bits/stdc++.h> using namespace std; string s[10005][5], g[5][5]; bool f[10005]; int cnt = 0, n; void dfs(int x) { if (x > 6) cnt++; else { if (x == 1) { for (int i = 1; i <= n; i++) { f[i] = 1; for (int j = 1; j <= 4; j++) g[1][j] = s[i][j]; dfs(x + 1); f[i] = 0; } } else if (x == 2) { for (int i = 1; i <= n; i++) { if (s[i][1] == g[1][4] && !f[i]) { f[i] = 1; for (int j = 2; j <= 4; j++) g[4][j] = s[i][j]; dfs(x + 1); f[i] = 0; } } } else if (x == 3) { for (int i = 1; i <= n; i++) { if (s[i][1] == g[4][4] && !f[i]) { f[i] = 1; g[4][1] = s[i][4], g[4][2] = s[i][3], g[4][3] = s[i][2]; dfs(x + 1); f[i] = 0; } } } else if (x == 4) { for (int i = 1; i <= n; i++) { if (s[i][4] == g[1][1] && s[i][1] == g[4][1] && !f[i]) { f[i] = 1; g[3][1] = s[i][2]; g[2][1] = s[i][3]; dfs(x + 1); f[i] = 0; } } } else if (x == 5) { for (int i = 1; i <= n; i++) { if (s[i][1] == g[1][1] && s[i][4] == g[4][4] && !f[i]) { f[i] = 1; g[2][2] = s[i][2]; g[3][3] = s[i][3]; dfs(x + 1); f[i] = 0; } } } else if (x == 6) { for (int i = 1; i <= n; i++) { if (s[i][1] == g[1][4] && s[i][4] == g[4][1] && !f[i]) { f[i] = 1; g[2][3] = s[i][2]; g[3][2] = s[i][3]; dfs(x + 1); f[i] = 0; } } } } } int main() { scanf("%d", &n); for (int i = 1; i <= n; i++) for (int j = 1; j <= 4; j++) cin >> s[i][j]; dfs(1); printf("%d\n", cnt); return 0; } /* 6 a b c d d e f g g h i j j k l a a m n g d o p j */