#include<map>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=2e6+10;
int n,ans,tot,a[25],cnt[N];
vector<int>v[N];
map<int,int>mp;
void dfs1(int k,int sum,int now){
if(k>n/2){
if(mp[sum]==0)mp[sum]=++tot;
v[mp[sum]].push_back(now);
return;
}
dfs1(k+1,sum+a[k],now|(1<<k-1));
dfs1(k+1,sum-a[k],now|(1<<k-1));
dfs1(k+1,sum,now);
}
void dfs2(int k,int sum,int now){
if(k>n){
int x=mp[sum];
if(x){
for(int i=0;i<v[x].size();i++)
cnt[v[x][i]|now]=1;
}
return;
}
dfs2(k+1,sum+a[k],now|(1<<k-1));
dfs2(k+1,sum-a[k],now|(1<<k-1));
dfs2(k+1,sum,now);
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",a+i);
dfs1(1,0,0);
dfs2(n/2+1,0,0);
for(int i=1;i<=1<<n;i++)
ans+=cnt[i];
printf("%d",ans);
return 0;
}