#include <bits/stdc++.h>
using namespace std;


map<int,int>Map;
int N[8];
int n[8];
int ans=0;

void rot1(){
	int p[8];
	
	p[0]=n[1];
	p[1]=n[2];
	p[2]=n[3];
	p[3]=n[0];
	p[4]=n[5];
	p[5]=n[6];
	p[6]=n[7];
	p[7]=n[4];
	
	for(int i=0;i<8;i++)n[i]=p[i];
}

void rot2(){
	int p[8];
	
	p[0]=n[3];
	p[1]=n[2];
	p[2]=n[6];
	p[3]=n[7];
	p[4]=n[0];
	p[5]=n[1];
	p[6]=n[5];
	p[7]=n[4];
	
	for(int i=0;i<8;i++)n[i]=p[i];
}

void rot3(){
	int p[8];
	
	p[0]=n[1];
	p[1]=n[5];
	p[2]=n[6];
	p[3]=n[2];
	p[4]=n[0];
	p[5]=n[4];
	p[6]=n[7];
	p[7]=n[3];
	
	for(int i=0;i<8;i++)n[i]=p[i];
}


int INT(){
	int t=0;
	for(int i=0;i<8;i++){
		t=t*10+n[i];
	}
	return t;
}

void cal(){
	int p[8];
	for(int i=0;i<8;i++)p[i]=n[i];
	int f=1;
	for(int x=0;x<4;x++){
		for(int y=0;y<4;y++){
			for(int z=0;z<4;z++){
				for(int i=0;i<8;i++)n[i]=p[i];
				for(int i=0;i<x;i++)rot1();
				for(int i=0;i<y;i++)rot2();
				for(int i=0;i<z;i++)rot3();
				int t=INT();
				if(Map[t])f=0;
			}
		}
	}
	
	if(f){
		int t=INT();
		ans++;
		Map[t]=1;
	}
	
}

int main(){
	
	string t[8];
	while(cin>>t[0]){
		
		for(int i=1;i<8;i++){
			cin>>t[i];
		}
		ans=0;
		map<string , int>M;
		int cnt=0;
		for(int i=0;i<8;i++){
			if(M[t[i]]){
				N[i]=M[t[i]];
			}
			else{
				cnt++;
				M[t[i]]=cnt;
				N[i]=M[t[i]];
			}
		}
		
		
		sort(N,N+8);
		do{
			for(int i=0;i<8;i++)n[i]=N[i];
			cal();
		}while(next_permutation(N,N+8));
		cout<<ans<<endl;
	}
	
	
	
	return 0;
}
