#include<iostream>
#include<stdio.h>
#include<ctype.h>
#include<string>
#include<cmath>
#include<math.h>
#include<vector>
#include<stdlib.h>
#include<algorithm>
#include<functional>

using namespace std;

#define OUT cout <<
#define IN cin >>
#define E << endl;
#define FOR(i,a,b) for(int i = a;i < b;i++)

int n;

void input(){
	IN n;
}

class Dice{
	private:
		string temp;
	public:
		string c[6];
		Dice(){}
		void roll(int axis){
			switch(axis){
			case 0:
				temp = c[0];
				c[0] = c[1];
				c[1] = c[5];
				c[5] = c[4];
				c[4] = temp;
				break;
			case 1:
				temp = c[1];
				c[1] = c[3];
				c[3] = c[4];
				c[4] = c[2];
				c[2] = temp;
				break;
			case 2:
				temp = c[0];
				c[0] = c[2];
				c[2] = c[5];
				c[5] = c[3];
				c[3] = temp;
				break;
			default:
				OUT "switch error!!!!!!\n" E
				break;
			}
		}
		void getd(string& c1, string& c2, string& c3, string& c4, string& c5, string& c6){
			c1 = c[0];
			c2 = c[1];
			c3 = c[2];
			c4 = c[3];
			c5 = c[4];
			c6 = c[5];
		}

		void input(){
			FOR(i,0,6){
				IN c[i];
			}
		}

};

int main(){
	while(true){
		input();
		if(n == 0)break;
		int count = 0;
		bool match[n];
		FOR(i, 0, n){
			match[i] = false;
		}
		string str1[6];
		string str2[6];	

		vector<Dice> dice;
	
		dice.resize(n);
		FOR(i, 0, n){
			dice[i].input();
		}
			

		FOR(i, 0, n - 1){
			FOR(j, i + 1, n){
				bool flag2 = false;
				FOR(z, 0, 4){
				FOR(x, 0, 4){
					FOR(y, 0, 4){
						dice[i].getd(str1[0],str1[1],str1[2],str1[3],str1[4],str1[5]);
						dice[j].getd(str2[0],str2[1],str2[2],str2[3],str2[4],str2[5]);
						
						//printf("\n%s %s %s %s %s %s \n",str1[0].c_str(),str1[1].c_str(),str1[2].c_str(),str1[3].c_str(),str1[4].c_str(),str1[5].c_str());
						//printf("%s %s %s %s %s %s \n\n",str2[0].c_str(),str2[1].c_str(),str2[2].c_str(),str2[3].c_str(),str2[4].c_str(),str2[5].c_str());

						bool flag1 = true;
						FOR(d, 0, 6){					
							if(str1[d] != str2[d]){
								flag1 = false;
							}
						}

						if(flag1){
							if(match[i] == false){							
								flag2 = true;
								//printf("%s %s %s %s %s %s \n",str1[0].c_str(),str1[1].c_str(),str1[2].c_str(),str1[3].c_str(),str1[4].c_str(),str1[5].c_str());
								//printf("%s %s %s %s %s %s \n",str2[0].c_str(),str2[1].c_str(),str2[2].c_str(),str2[3].c_str(),str2[4].c_str(),str2[5].c_str());
							}
							match[j] = true;
						}
						flag1 = true;
					
						dice[i].roll(1);
					}
					dice[i].roll(0);
				}
				dice[i].roll(2);
				}
				//OUT i << " " << j << " " << flag2 E
				if(flag2){
					count++;
					//OUT "count++ " << i << " " << j  E
				}
			}
		}	

		OUT count E

	}
}