#include <iostream>
using namespace std;
void Sortowanie( int tab[], int left, int right )
{
int i = left;
int j = right;
int x = tab[( left + right ) / 2 ];
do
{
while( tab[ i ] < x )
i++;
while( tab[ j ] > x )
j--;
if( i <= j )
{
swap( tab[ i ], tab[ j ] );
i++;
j--;
}
}
while( i <= j );
if( left < j ) Sortowanie( tab, left, j );
if( right > i ) Sortowanie( tab, i, right );
}
int silnia (int n, int a)
{
if (n == a) return a;
else return n*silnia(n-1,a);
}
int silnia_1 (int n)
{
if (n == 0) return 1;
else return n*silnia_1(n-1);
}
string wyraz;
int d,tab[1000],tab_licz[1000],licznik,ile;
long long int mianownik, licznik_k,wynik;
int main()
{
cin>>ile;
for(int k=0; k<ile; k++)
{
cin>>wyraz;
d=wyraz.length();
for(int i=0; i<d; i++)
{
tab[i]=(int)wyraz[i];
}
Sortowanie(tab, 0,d-1);
int j=0;
licznik=1;
for(int i=0; i<d; i++)
{
if((tab[i]==tab[i+1])&&i<d)
{
licznik++;
}
if((tab[i]!=tab[i+1])&&i<d)
{
tab_licz[j]=licznik;
licznik=1;
j++;
}
}
if(tab[0]!=tab[d-1])
{
Sortowanie(tab_licz, 0, j-1);
mianownik=1;
for(int i=0; i<(j-1); i++)
{
mianownik=silnia_1(tab_licz[i])*mianownik;
}
licznik_k=silnia(d, tab_licz[j-1]+1);
wynik=licznik_k/mianownik;
cout<<wynik<<endl;
}else
cout<<1<<endl;
licznik_k=0;
mianownik=0;
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZvaWQgU29ydG93YW5pZSggaW50IHRhYltdLCBpbnQgbGVmdCwgaW50IHJpZ2h0ICkKewogICAgaW50IGkgPSBsZWZ0OwogICAgaW50IGogPSByaWdodDsKICAgIGludCB4ID0gdGFiWyggbGVmdCArIHJpZ2h0ICkgLyAyIF07CiAgICBkbwogICAgewogICAgICAgIHdoaWxlKCB0YWJbIGkgXSA8IHggKQogICAgICAgICAgICBpKys7CgogICAgICAgIHdoaWxlKCB0YWJbIGogXSA+IHggKQogICAgICAgICAgICBqLS07CgogICAgICAgIGlmKCBpIDw9IGogKQogICAgICAgIHsKICAgICAgICAgICAgc3dhcCggdGFiWyBpIF0sIHRhYlsgaiBdICk7CgogICAgICAgICAgICBpKys7CiAgICAgICAgICAgIGotLTsKICAgICAgICB9CiAgICB9CiAgICB3aGlsZSggaSA8PSBqICk7CgogICAgaWYoIGxlZnQgPCBqICkgU29ydG93YW5pZSggdGFiLCBsZWZ0LCBqICk7CgogICAgaWYoIHJpZ2h0ID4gaSApIFNvcnRvd2FuaWUoIHRhYiwgaSwgcmlnaHQgKTsKCn0KaW50IHNpbG5pYSAoaW50IG4sIGludCBhKQp7CiAgICBpZiAobiA9PSBhKSByZXR1cm4gYTsKICAgIGVsc2UgcmV0dXJuIG4qc2lsbmlhKG4tMSxhKTsKfQoKaW50IHNpbG5pYV8xIChpbnQgbikKewogICAgaWYgKG4gPT0gMCkgcmV0dXJuIDE7CiAgICBlbHNlIHJldHVybiBuKnNpbG5pYV8xKG4tMSk7Cn0KCnN0cmluZyB3eXJhejsKaW50IGQsdGFiWzEwMDBdLHRhYl9saWN6WzEwMDBdLGxpY3puaWssaWxlOwpsb25nIGxvbmcgaW50IG1pYW5vd25paywgbGljem5pa19rLHd5bmlrOwppbnQgbWFpbigpCnsKICAgIGNpbj4+aWxlOwogICAgZm9yKGludCBrPTA7IGs8aWxlOyBrKyspCiAgICB7CiAgICAgICAgY2luPj53eXJhejsKICAgICAgICBkPXd5cmF6Lmxlbmd0aCgpOwogICAgICAgIGZvcihpbnQgaT0wOyBpPGQ7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIHRhYltpXT0oaW50KXd5cmF6W2ldOwogICAgICAgIH0KICAgICAgICBTb3J0b3dhbmllKHRhYiwgMCxkLTEpOwoKICAgICAgICBpbnQgaj0wOwogICAgICAgIGxpY3puaWs9MTsKICAgICAgICBmb3IoaW50IGk9MDsgaTxkOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBpZigodGFiW2ldPT10YWJbaSsxXSkmJmk8ZCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbGljem5paysrOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZigodGFiW2ldIT10YWJbaSsxXSkmJmk8ZCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGFiX2xpY3pbal09bGljem5pazsKICAgICAgICAgICAgICAgIGxpY3puaWs9MTsKICAgICAgICAgICAgICAgIGorKzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZih0YWJbMF0hPXRhYltkLTFdKQogICAgICAgIHsKICAgICAgICAgICAgU29ydG93YW5pZSh0YWJfbGljeiwgMCwgai0xKTsKCiAgICAgICAgICAgIG1pYW5vd25paz0xOwoKICAgICAgICAgICAgZm9yKGludCBpPTA7IGk8KGotMSk7IGkrKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgbWlhbm93bmlrPXNpbG5pYV8xKHRhYl9saWN6W2ldKSptaWFub3duaWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxpY3puaWtfaz1zaWxuaWEoZCwgdGFiX2xpY3pbai0xXSsxKTsKICAgICAgICAgICAgd3luaWs9bGljem5pa19rL21pYW5vd25pazsKICAgICAgICAgICAgY291dDw8d3luaWs8PGVuZGw7CiAgICAgICAgfWVsc2UKICAgICAgICBjb3V0PDwxPDxlbmRsOwogICAgICAgIGxpY3puaWtfaz0wOwogICAgICAgIG1pYW5vd25paz0wOwogICAgICAgIAogICAgfQpyZXR1cm4gMDsKfQo=