#include<bits/stdc++.h> using namespace std; string s[100010][10]; string t[100010][10][10]; int n; bool isSame(int x, int a) { for(int i = x; i <= x + 3; i++) { for (int j = 1; j <= 4; j++) { if(s[i][j] == t[a][i - x + 1][j]) { return true; } } } return false; } bool check(string s1[4]) { for(int i = 1; i <= n; i++) { bool f = true; for (int j = 1; j <= 4; j++) { if (s1[j] != s[i][j]) { f = false; break; } } if (f) { return true; } } return false; } bool isOk(int x) { string s1[6][4] = {{s[x][1], s[x][2], s[x][3], s[x][4]},{s[x + 3][1], s[x + 2][1], s[x + 1][1], s[x][1]},{s[x][4], s[x + 1][4], s[x + 2][4], s[x + 3][4]},{s[x + 3][4], s[x + 3][3], s[x + 3][2], s[x + 3][1]}, {s[x][1], s[x + 1][2], s[x + 2][3], s[x + 3][4]}, {s[x][4], s[x + 1][3], s[x + 2][2], s[x + 3][1]}}; for (int i = 0; i < 6; i++) { for (int j = i + 1; j < 6; j++) { bool f = true; for (int k = 0; k < 4; k++) { if (s1[i][k] != s1[j][k]) { f = false; break; } } if (f) { return false; } } } return (check(s1[0]) && check(s1[2]) && check(s1[3]) && check(s1[4]) && check(s1[5]) && check(s1[1])); } int main () { ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> n; for (int i = 1; i <= n; i++) { cin >> s[i][1] >> s[i][2] >> s[i][3] >> s[i][4]; } int ans = 0; for (int i = 1; i <= n - 3; i++) { if (isOk(i)) { bool f = true; for (int j = 1; j <= ans; j++) { if (isSame(i, j)) { f = false; break; } } cout << i << endl; if (f) { ans++; for (int j = i; j <= i + 3; j++) { for (int k = 1; k <= 4; k++) { t[ans][j - i + 1][k] = s[j][k]; } } } } } cout << ans << endl; return 0; }