#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;
}

posted on 2012-05-11 21:46  梨子  阅读(194)  评论(0)    收藏  举报