//采用递归的思想(dfs)
#include "stdio.h"
int N;
int count;//记录解决方案个数
int array[30];//记录物品重量
bool isUesd[30];//记录物品被选择情况,false为未选择
void calculate(int weight,int pos){//weight为当前还剩的重量,pos为上一个物品的下标
    if(weight == 0){
        ++count;
        return;
    }
    for (int i = pos; i < N; ++i) {//要从pos开始,不然会多算情况。而且这样并不少算情况
        if(isUesd[i] == false){    //因为要选择的几样物品必然可以通过从前到后的次序选择出来
            isUesd[i] = true;//拿去array[i]
            calculate(weight - array[i],i);
            isUesd[i] = false;//算完后还要放回array[i]
        }
    }
    return;
}

int main(){
    scanf("%d",&N);
    for (int i = 0; i < N; ++i) {
        scanf("%d",array+i);
        isUesd[i] = false;
    }
    calculate(40,0);
    printf("%d",count);
}