#include <iostream>
#include <set>
#include <vector>
#include <string>
using namespace std;
class Cube{
public:
	int c[6];
	Cube(){}
	bool operator == (const Cube &p) const{
		for(int i=0;i<6;i++)if(c[i]!=p.c[i])return false;
		return true;
	}
	void r1(){
		int tmp[6];
		for(int i=0;i<6;i++)tmp[i]=c[i];
		c[0]=tmp[4];
		c[1]=tmp[0];
		c[4]=tmp[5];
		c[5]=tmp[1];
		return;
	}
	void r2(){
		int tmp[6];
		for(int i=0;i<6;i++)tmp[i]=c[i];
		c[0]=tmp[2];
		c[2]=tmp[5];
		c[3]=tmp[0];
		c[5]=tmp[3];
		return;
	}
	void r3(){
		int tmp[6];
		for(int i=0;i<6;i++)tmp[i]=c[i];
		c[1]=tmp[3];
		c[2]=tmp[1];
		c[3]=tmp[4];
		c[4]=tmp[2];
		return;
	}
};
bool onaji(Cube &a,Cube &b){
	for(int i=0;i<4;i++){
		for(int j=0;j<4;j++){
			if(a==b)return true;
			a.r1();
		}
		a.r2();
	}
	a.r3();
	for(int j=0;j<4;j++){
		if(a==b)return true;
		a.r1();
	}
	a.r3();a.r3();
	for(int j=0;j<4;j++){
		if(a==b)return true;
		a.r1();
	}
	return false;
}
int GetID(string s){
	if(s=="Red")return 1;
	if(s=="Yellow")return 2;
	if(s=="Blue")return 3;
	if(s=="Magenta")return 4;
	if(s=="Green")return 5;
	if(s=="Cyan")return 6;
}
int main()
{
	int n;
	while(cin>>n&&n){
		Cube sta[30];
		vector<Cube> ans;
		for(int i=0;i<n;i++){
			string s;
			for(int j=0;j<6;j++){
				cin>>s;
				sta[i].c[j]=GetID(s);
			}
			bool neww=true;
			for(vector<Cube>::iterator it=ans.begin();it<ans.end();it++){
				Cube tmp;tmp=ans.at(it-ans.begin());
				if(onaji(tmp,sta[i]))neww=false;
			}
			if(neww)ans.push_back(sta[i]);
		}
		cout<<n-(int)ans.size()<<endl;
	}
    
    return 0;
}