#include<bits/stdc++.h>
#define maxn 20
#define LL long long
using namespace std;
const int N = 1<<20|5;
int n,f[N];
LL a[maxn];
LL b[maxn],sl[N],sr[N];
void getque(LL *s,int l,int r){
int m=1; s[1]=0;
static LL pos[N],neg[N];
for(int i=l;i<=r;i++,m<<=1){
for(int j=1;j<=m;j++) pos[j]=s[j]+b[i],neg[j]=s[j]-b[i];
for(int x=1,y=1,k=1;k<=m<<1;k++)
s[k]=x>m?neg[y++]:y>m?pos[x++]:pos[x]<neg[y]?pos[x++]:neg[y++];
}
}
bool check(int S){
int sz=0; LL sum=0;
for(int i=1;i<=n;i++) if(S>>i-1&1) sum+=a[i],b[++sz]=a[i];
if(sum-(sz-1)&1) return 0;
getque(sl,1,sz/2),getque(sr,sz/2+1,sz);
int L=1<<(sz/2),R=1<<(sz-sz/2),need=1+(abs(sum)<sz)*2;
for(int i=R,j=1;i>=1;i--){
while(j<=L&&sl[j]+sr[i]<=-sz) j++;
for(int k=j;k<=L&&need&&sl[k]+sr[i]<sz;k++) need--;
}
return !need;
}
int main()
{
scanf("%d",&n); int m=0;
for(int i=1;i<=n;i++) scanf("%lld",&a[i]),a[i]&&(a[++m]=a[i]);
n=m; int all=(1<<n)-1;
for(int s=1;s<=all;s++) if(!f[s]&&check(s)){
int r=all^s; f[s]=1;
for(int t=r;t;--t&=r) f[s|t]=max(f[s|t],f[t]+1);
}
printf("%d\n",n-f[all]);
}