#include<bits/stdc++.h>
using namespace std;
int n,a[21],ans=0;
map<int,vector<set<int>>> mp;
set<set<int>> vis;
void dfs1(int w,int sum,set<int>& v){
if(w==n/2){
mp[sum].push_back(v);
return;
}
dfs1(w+1,sum,v);
set<int> tmp=v;
tmp.insert(w);
dfs1(w+1,sum+a[w],tmp);
tmp=v;
tmp.insert(w);
dfs1(w+1,sum-a[w],tmp);
}
void dfs2(int w,int sum,set<int>& v){
if(w==n){
if(mp.count(-sum)){
for(auto& s:mp[-sum]){
set<int> r=s;
r.insert(v.begin(),v.end());
if(!r.empty()&&vis.find(r)==vis.end()){
vis.insert(r);
ans++;
}
}
}
return;
}
dfs2(w+1,sum,v);
set<int> tmp=v;
tmp.insert(w);
dfs2(w+1,sum+a[w],tmp);
tmp=v;
tmp.insert(w);
dfs2(w+1,sum-a[w],tmp);
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
set<int> tmp;
dfs1(0,0,tmp);
tmp.clear();
dfs2(n/2,0,tmp);
cout<<ans<<endl;
return 0;
}