#include #include #include #include #include #include using namespace std; #define N 10 int fact[N]; int check(map& cnt, int m) { for (map::iterator it=cnt.begin();it!=cnt.end();++it) if (it->second%m!=0) return 0; return 1; } int calc(map& cnt, int div, int p) { int res=fact[p]; for (map::iterator it=cnt.begin();it!=cnt.end();++it) res/=fact[it->second/div]; return res; } int main() { fact[0]=1; for (int i=1;i cnt; while(iss>>token) ++cnt[token]; int ans=0; ans+=calc(cnt,1,8); if (check(cnt,2)) ans+=9*calc(cnt,2,4); if (check(cnt,4)) ans+=6*calc(cnt,4,2); vector idx; for (map::iterator it=cnt.begin();it!=cnt.end();++it) if (it->second%3!=0) idx.push_back(it->first); if (idx.size()==1) { cnt[idx[0]]-=2; ans+=8*calc(cnt,3,2); } else if (idx.size()==2) { --cnt[idx[0]]; --cnt[idx[1]]; ans+=16*calc(cnt,3,2); } ans/=24; printf("%d\n",ans); }