#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;
}