//30
#include<iostream>
#include<set>
#include<string>
#include<algorithm>

using namespace std;

struct L{
  string s[10];
  string h;
  bool operator<(L a)const{
    return h<a.h;
  }
  void mh(){
    string ss;
    for(int i=0;i<4;i++){
      for(int j=0;j<2;j++){
	for(int i=0;i<5;i++){
	  swap(s[i*2],s[i*2+1]);
	}
	string t;
	for(int i=0;i<10;i++){
	  t+=s[i];
	}
	if(ss<t){
	  ss=t;
	}
      }
      for(int i=0;i<1;i++){
	string r[10];
	for(int i=0;i<5;i++){
	  r[9-i*2]=s[i*2];
	  r[i*2]=s[i*2+1];
	  reverse(r[i*2].begin(),r[i*2].end());
	}
	copy(r,r+10,s);
      }
    }
    h=ss;
  }
};

string s[10];
set<L> st;

void dfs(int d,int u,const L &c){
  if(d==10){
    L fc=c;
    fc.mh();
    st.insert(fc);
  }else{
    for(int i=0;i<10;i++){
      if(!(u>>i&1)){
	//	for(int k=0;k<1+(s[i]!=string(s[i].rbegin(),s[i].rend()));k++){
	for(int k=0;k<2;k++){
	  reverse(s[i].begin(),s[i].end());
	  bool f=false;
	  for(int j=!(d&1);j<d;j+=2){
	    f|=c.s[j][d/2]==s[i][j/2];
	  }
	  if(!f){
	    L nc=c;
	    nc.s[d]=s[i];
	    dfs(d+1,u|1<<i,nc);
	  }
	}
      }
    }
  }
}

int main(){
  while(cin>>s[0],s[0]!="END"){
    for(int i=1;i<10;i++){
      cin>>s[i];
    }
    st.clear();
    dfs(0,0,L());
    cout<<st.size()<<endl;
  }
  return 0;
}