#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int Fect(int b)
{
if(b==0)
return 1;
else
return b*Fect(b-1);
}
int palindrome(char a[],int num)
{
int count[26]={0};
int odd_count=0,even_count=0,out,a1=0,b=1;
for(int i=0 ; i<num;i++)
{
switch(a[i])
{
case 'a':
count[0]++;
break;
case 'b':
count[1]++;
break;
case 'c':
count[2]++;
break;
case 'd':
count[3]++;
break;
case 'e':
count[4]++;
break;
case 'f':
count[5]++;
break;
case 'g':
count[6]++;
break;
case 'h':
count[7]++;
break;
case 'i':
count[8]++;
break;
case 'j':
count[9]++;
break;
case 'k':
count[10]++;
break;
case 'l':
count[11]++;
break;
case 'm':
count[12]++;
break;
case 'n':
count[13]++;
break;
case 'o':
count[14]++;
break;
case 'p':
count[15]++;
break;
case 'q':
count[16]++;
break;
case 'r':
count[17]++;
break;
case 's':
count[18]++;
break;
case 't':
count[19]++;
break;
case 'u':
count[20]++;
break;
case 'v':
count[21]++;
break;
case 'w':
count[22]++;
break;
case 'x':
count[23]++;
break;
case 'y':
count[24]++;
break;
case 'z':
count[25]++;
break;
}
}
for(int j=0;j<26;j++)
{
if(count[j]%2==1)
odd_count++;
else if(count[j]>0&&count[j]%2==0)
even_count++;
}
for(int j=0;j<26;j++)
{
if(count[j]%2==1&&count[j]>=3)
{
a1+=count[j]-1;
b*=Fect((count[j]-1)/2);
}
else if(count[j]>0&&count[j]%2==0)
{
a1+=count[j];
b*=Fect((count[j])/2);
}
}
a1=a1/2;
a1=Fect(a1);
if(odd_count>1)
out=0;
else
out = a1/b;
return out;
}
int main(void)
{
int n;
scanf("%d",&n);
int out[n],num;
for(int i=0;i<n;i++)
{
char a[40];
scanf("%s",&a);
num = strlen(a);
printf("%d\n",palindrome(a,num));
}
return 0;
}
到底為什麼會輸出短少......QQ