#include <iostream>
#include <string>
#define rep2(x,from,to) for(int x=(from);(x)<(to);(x)++)
#define rep(x,to) rep2(x,0,to)
using namespace std;
string color[6] =  {"Cyan", "Yellow", "Red", "Magenta", "Green", "Blue"};
int* south(int c[6]) {
	int buf = c[0];
	c[0] = c[1];
	c[1] = c[5];
	c[5] = c[4];
	c[4] = buf;
	return c;
}
int* east(int c[6]) {
	int buf = c[0];
	c[0] = c[2];
	c[2] = c[5];
	c[5] = c[3];
	c[3] = buf;
	return c;
}
int* round(int c[6]) {
	int buf = c[1];
	c[1] = c[2];
	c[2] = c[4];
	c[4] = c[3];
	c[3] = buf;
	return c;
}
bool check(int d1[6], int d2[6]) {
	rep(i,6) {
		if(i%2)d1 = south(d1);
		else d1 = east(d1);
		rep(j,4) {
			d1 = round(d1);
			bool f = 1;
			rep(k,6) {
				if(d1[k] != d2[k]) {
					f = 0;
					break;
				}
			}	
			if(f) return true;
		}
	}
	return false;
}
int main(){
	int n, d[30][6] = {};
	string s;
	while(cin >> n, n) {
		rep(i,n) {
			rep(j,6) {
				cin >> s;
				rep(k,6) {
					if(color[k] == s) d[i][j] = k;
				}
			}
		}
		int a[30];
		bool used[30] = {};
		rep(i,n) a[i] = i;
		rep(i,n) {
			rep2(j,i+1,n) {
				if(check(d[i],d[j])) {
					a[j] = i;
				}
			}
		}
		rep(i,n) {
			int x = i;
			while(a[x]!=x) {
				a[x] = a[a[x]];
				x = a[x];
			}
		}
		rep(i,n) used[a[i]] = true;
		int ret = 0;
		rep(i,n) {
			if(!used[i]) ret++;
		}
		cout << ret << endl;
	}
	return 0;
}