// OBčh2009 Day3 E : Colored Octahedra #include #include #include #include #include #include using namespace std; int dx[] = {3,2,6,7,0,1,5,4}; int dy[] = {4,0,3,7,5,1,2,6}; int dz[] = {1,2,3,0,5,6,7,4}; vector changeX(vector vi){ vector res(8); for(int i=0;i<8;i++) res[i] = vi[dx[i]]; return res; } vector changeY(vector vi){ vector res(8); for(int i=0;i<8;i++) res[i] = vi[dy[i]]; return res; } vector changeZ(vector vi){ vector res(8); for(int i=0;i<8;i++) res[i] = vi[dz[i]]; return res; } int main(){ while(true){ map< string, int > mp; int size = 0; vector vs; for(int i=0;i<8;i++){ string s; if(!(cin >> s)) return 0; if(!mp.count(s)) mp[s] = size++; vs.push_back(mp[s]); } sort(vs.begin(), vs.end()); set< vector > S; int ans = 0; do{ if(S.find(vs)==S.end()){ ans++; vector vi = vs; for(int i=0;i<4;i++){ for(int j=0;j<4;j++){ for(int k=0;k<4;k++){ S.insert(vi); vi=changeZ(vi); } vi = changeY(vi); } vi=changeX(vi); } } }while(next_permutation(vs.begin(),vs.end())); cout << ans << endl; } }