#include <bits/stdc++.h>
#include <variant>
#include <vector>
using namespace std;
//组合问题
int res = 0;
vector<bool> used(21, 0);
void dfs(int value, int index, vector<int> v) {
    if (value == 40) {//收集结果
        res++;
        return;
    }
    if (value > 40) return ;//剪枝---value>40就不要继续了
    if (index == v.size()) return ;//越界了就不要继续了
    for (int i = index; i < v.size(); i++) {
        //需要index来记录下一层递归,搜索的起始位置。index 就是防止出现重复的组合。
        dfs(value + v[i], i + 1, v);
    }
}
int main() {
    int n;
    while (cin >> n) {
        int data;
        vector<int> v;
        while (n--) {
            cin >> data;
            v.push_back(data);
        }
        //以上是处理输入
        dfs(0, 0, v);
        cout << res << endl;
    }
}
// 64 位输出请用 printf("%lld")