#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long sum = 0, f = 1;
  char ch = getchar();
  while (ch != '-' && (ch < '0' || ch > '9')) ch = getchar();
  if (ch == '-') ch = getchar(), f = -1;
  while (ch <= '9' && ch >= '0') sum = sum * 10 + ch - '0', ch = getchar();
  return sum * f;
}
int n;
long long w[22];
bool used[(1 << 20) + 10];
int st[22], num, end_, maxn;
bool col[22];
long long A[(1 << 20) + 10], B[(1 << 20) + 10], cntA, cntB;
long long AA, BB, AA_, BB_;
void dfs(int a, long long cha, int ty, int allodd, int alleven) {
  if (a == end_) {
    if (!ty)
      A[++cntA] = cha;
    else
      B[++cntB] = cha;
    if (!ty) {
      if (allodd) AA = cha;
      if (alleven) AA_ = cha;
    } else {
      if (allodd) BB = cha;
      if (alleven) BB_ = cha;
    }
    return;
  }
  col[a] = 0, dfs(a + 1, cha - w[st[a]], ty, 0, alleven);
  col[a] = 1, dfs(a + 1, cha + w[st[a]], ty, allodd, 0);
}
bool chk(int sta) {
  num = 0;
  long long sum = 0;
  for (int i = 1; i <= n; i++)
    if (sta & (1 << (i - 1))) st[++num] = i, sum += w[i];
  if (num == 1 || (sum & 1) != ((num - 1) & 1)) return 0;
  int mid = num >> 1;
  cntA = cntB = 0;
  AA = AA_ = BB = BB_ = 2e18;
  end_ = mid + 1, dfs(1, 0, 0, 1, 1);
  end_ = num + 1, dfs(mid + 1, 0, 1, 1, 1);
  sort(A + 1, A + 1 + cntA);
  sort(B + 1, B + 1 + cntB);
  int pB = cntB, pA = cntA;
  if (abs(AA + BB_) <= num - 1 || abs(AA_ + BB) <= num - 1) return 1;
  for (int i = 1; i <= cntA; i++) {
    if (A[i] == AA_ || A[i] == AA) continue;
    long long l = 1 - num - A[i], r = num - 1 - A[i];
    while (pB && B[pB] > r) pB--;
    if (!pB) return 0;
    if (B[pB] >= l) return 1;
  }
  for (int i = 1; i <= cntB; i++) {
    if (B[i] == BB_ || B[i] == BB) continue;
    long long l = 1 - num - B[i], r = num - 1 - B[i];
    while (pA && A[pA] > r) pA--;
    if (!pA) return 0;
    if (A[pA] >= l) return 1;
  }
  return 0;
}
int f[(1 << 20) + 10 + 10];
int s[22];
int main() {
  n = read();
  int q = 0;
  for (int i = 1; i <= n; i++) {
    w[i] = read();
    if (w[i]) w[++q] = w[i];
  }
  n = q;
  maxn = (1 << n) - 1;
  for (int i = 1; i <= maxn; i++) {
    used[i] = chk(i);
    if (used[i]) f[i] = 1;
  }
  for (int i = 1; i <= maxn; i++)
    if (used[i]) {
      int g = maxn ^ i;
      for (int j = g; j; j = (j - 1) & g) {
        f[i + j] = max(f[i + j], f[j] + f[i]);
      }
    }
  cout << n - f[maxn];
  return 0;
}
