/*
 * src.cpp
 *
 *  Created on: 2016/07/27
 *      Author: joi
 */

#include <bits/stdc++.h>

using namespace std;

#define FOR(i,a,b) for(int i=(a);i<(b);i++)
#define REP(i,a) FOR(i,0,a)

const int MAX_N=30;

struct dice{
	char c[7];
	void move(int f){
		if (f==1){
			swap(c[1],c[3]);
			swap(c[3],c[4]);
			swap(c[3],c[6]);
		}else if (f==2){
			swap(c[1],c[2]);
			swap(c[2],c[5]);
			swap(c[2],c[6]);
		}else{
			swap(c[2],c[3]);
			swap(c[3],c[4]);
			swap(c[3],c[5]);
		}
	}
	bool operator == (dice &a){
		if (c[1]!=a.c[1]){
			REP(i,4){
				a.move(1);
				if (c[1]==a.c[1]) break;
			}
			if (c[1]!=a.c[1]){
				REP(i,4){
					a.move(2);
					if (c[1]==a.c[1]) break;
				}
			}
		}
		if (c[6]!=a.c[6]) return false;
		REP(i,4){
			a.move(3);
			if (c[2]==a.c[2]) break;
		}
		FOR(i,1,7){
			if (c[i]!=a.c[i]){
				return false;
			}
		}
		return true;
	}
};

int N;
dice d[MAX_N];

int main(){
	do{
		cin>>N;
		if (N){
			cin.ignore();
			string s;
			REP(i,N){
				REP(j,6){
					cin>>s;
					d[i].c[j+1]=s[0];
				}
			}
			int ans=0;
			REP(i,N){
				REP(j,i){
					if (d[i]==d[j]){
						ans++;
						break;
					}
				}
			}
			cout<<ans<<endl;
		}
	}while (N);
	return 0;
}