//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;
	}
      }
      string r[10];
      for(int i=0;i<5;i++){
	r[9-i*2]=s[i*2];
	reverse(r[9-i*2].begin(),r[9-i*2].end());
	r[i*2]=s[i*2+1];
      }
      copy(r,r+10,s);
    }
    h=ss;
  }
};

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

void dfs(int d,int u,L c){
  if(d==10){
    c.mh();
    st.insert(c);
  }else{
    for(int i=0;i<10;i++){
      if(!(u>>i&1)){
	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()/2<<endl;
  }
  return 0;
}