#include<iostream>
#include<vector>
#include<algorithm>

int colorToInt(std::string s){
	const	char cs[] = {'C', 'Y', 'R', 'M', 'G', 'B'};
	for(int i=0;i<6;i++){
		if(s[0] == cs[i]){
			return i;
		}
	}
}

int main(){
	int n;
	while(std::cin >> n, n){
		std::vector<int> cube_v;

		for(int i=0;i<n;i++){
			int cs[6];
			for(int j=0;j<6;j++){
				std::string c;
				std::cin >> c;
				cs[j] = colorToInt(c);
			}

			//Cyanをc1, c2, c3のどれかに入れる
			if(cs[3] == 0 || cs[4] == 0 || cs[5] == 0){
				std::swap(cs[0], cs[5]);
				std::swap(cs[1], cs[4]);
				std::swap(cs[2], cs[3]);
			}

			//Cyanをc1に来させる
			if(cs[1] == 0){
				std::swap(cs[1], cs[0]);
				std::swap(cs[4], cs[5]);
			}
			if(cs[2] == 0){
				std::swap(cs[2], cs[0]);
				std::swap(cs[3], cs[5]);
			}

			if(cs[4] < cs[1]){
				std::swap(cs[1], cs[4]);
			}
			if(cs[3] < cs[2]){
				std::swap(cs[2], cs[3]);
			}
			if(cs[2] < cs[1]){
				std::swap(cs[1], cs[2]);
				std::swap(cs[3], cs[4]);
			}

			int cube = 0;
			for(int i=0;i<6;i++){
				cube = (cube << 3) + cs[i];
			}

			if(std::find(cube_v.begin(), cube_v.end(), cube) == cube_v.end()){
				cube_v.push_back(cube);
			}
		}

		std::cout << (n-cube_v.size()) << std::endl;
	}
}