#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long s = 0, t = 1;
  char ch = getchar();
  while (ch < '0' || ch > '9') {
    if (ch == '-') t = -1;
    ch = getchar();
  }
  while (ch >= '0' && ch <= '9')
    s = (s << 3) + (s << 1) + (ch ^ 48), ch = getchar();
  return s * t;
}
const int N = 25;
const int M = (1 << 20) + 5;
int n, m, U, dp[M];
long long a[N], b[N], sl[M], sr[M], tl[M], tr[M];
void Get(long long *s, int l, int r) {
  s[1] = 0;
  for (int i = l, m = 1; i <= r; i++, m <<= 1) {
    for (int j = 1; j <= m; j++) tl[j] = s[j] + b[i], tr[j] = s[j] - b[i];
    for (int j = 1, x = 1, y = 1; j <= (m << 1); j++) {
      if (y > m || (x <= m && tl[x] < tr[y]))
        s[j] = tl[x++];
      else
        s[j] = tr[y++];
    }
  }
}
bool Check(int S) {
  int sz = 0;
  long long sum = 0;
  for (int i = 1; i <= n; i++)
    if (S >> i - 1 & 1) sum += (b[++sz] = a[i]);
  if ((sum - (sz - 1)) & 1) return 0;
  Get(sl, 1, sz / 2), Get(sr, sz / 2 + 1, sz);
  int L = 1 << (sz / 2), R = 1 << (sz - sz / 2), Num = 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 && sl[k] + sr[i] < sz && Num; k++) Num--;
  }
  return !Num;
}
int main() {
  n = read();
  for (int i = 1; i <= n; i++) a[i] = read(), a[i] ? a[++m] = a[i] : 0;
  n = m, U = (1 << n) - 1;
  for (int S = 1; S <= U; S++)
    if (!dp[S] && Check(S)) {
      int C = U ^ S;
      dp[S] = 1;
      for (int T = C; T; (--T) &= C) dp[S | T] = max(dp[S | T], dp[T] + 1);
    }
  printf("%d", n - dp[U]);
  return 0;
}
