#include <stdio.h>
#include <vector>
using namespace std;
int ans = 0; //总的方式数
int res = 0; //DFS递归过程中的累加和
int n;
vector<int> num; //存储数据
vector<long long> sum; //存储数据对应的后缀和
void DFS(int pos) //深度优先遍历
{
if(res > 40 || res+sum[pos] < 40) //剪枝
{
return;
}
if(pos==n) //递归结束条件
{
if(res==40) //n项相加等于40
{
ans++;
}
return;
}
//选当前数
res += num[pos];
DFS(pos+1);
res -= num[pos]; //回溯
//不选当前数
DFS(pos+1);
}
int main()
{
scanf("%d",&n);
num.resize(n); //读入之前要设置num数组的长度为n ,全局变量的处理
for(int i = 0 ; i < n ; i++)
{
scanf("%d",&num[i]);
}
int count = 0;
sum.resize(n); //设置sum的长度为n,可以使用下标进行访问
for(int i = n-1 ; i >=0 ; i--) //后缀和(下标从0开始) //若从最后开始则求前缀和
{
count += num[i];
sum[i] = count;
}
DFS(0);
printf("%d\n",ans);
return 0;
}