#include <iostream>
using namespace std;
int n;
struct countandtime
{
int count;
int time;
};
countandtime *divideandcount=new countandtime[n];
int com(int sum1,int len)//计算结果
{
long all=1;
for(int a=0;a<len;a++)
{
long all1=1;
long h=1;//重复时再除的数
for(int b=1;b<=divideandcount[a].time;b++)
{
long c=1;//分子
long d=1;//分母
h=h*b;
for(int e=1;e<=divideandcount[a].count;e++)
{
c=c*e;
d=d*(sum1-e+1);
}
all1=all1*d/c;
sum1=sum1-divideandcount[a].count;
}
all1=all1/h;
all=all*all1;
}
return all;
}
int main()
{
while(cin>>n)
{
if(n<1)break;
if(n>12)break;
int divide;
int sum=0;
int length=0;
for(int i=0;i<n;i++)
{
cin>>divide;
if(i==0)
{
divideandcount[0].count=divide;
divideandcount[0].time=1;
length=1;
sum=divide;
continue;
}
for(int k=0;k<length;k++)
{
if(divideandcount[k].count==divide)
{
divideandcount[k].time++;
break;
}
else
{
if(k==length-1)
{
length=length+1;
divideandcount[length-1].count=divide;
divideandcount[length-1].time=1;
break;
}
}
}
sum=sum+divide;
}
long result=com(sum,length);
cout<<result<<endl;
}
return 0;
}
浙公网安备 33010602011771号