i am using this
tot is total number of characters/2;
and num[i] stores occurences of characters between a and z
int fac[tot+10];
fac[0]=fac[1]=1;
for(i=2;i<=tot;i++)
fac[i]=i;
for(i=0;i<26;i++)
{
if(num[i]>1)
{
for(j=2;j<=num[i];j++)
{
for(k=j;k<=tot;k=k+j)
{
if(fac[k]%j==0)
{
fac[k]=k/j;
break;
}
}
}
}
}
unsigned long long ans=1;
for(i=2;i<=tot;i++)
ans=ans*fac[i];
cout<