#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long x = 0, f = 1, c = getchar();
  while (!isdigit(c)) {
    if (c == '-') f = -1;
    c = getchar();
  }
  while (isdigit(c)) {
    x = (x << 1) + (x << 3) + (c ^ 48);
    c = getchar();
  }
  return f == 1 ? x : -x;
}
const long long N = 24, M = 1 << 20;
long long n, nn, S, a[N], b[N], f[M], g[M], h[M], sum[M];
inline void solve(long long *c, long long l, long long r) {
  long long s = 0;
  c[0] = 0;
  for (long long i = l; i < r; i++) s |= 1 << b[i];
  for (long long i = s;; i = (i - 1) & s) {
    c[++c[0]] = sum[i] - sum[s ^ i];
    if (!i) break;
  }
  sort(c + 1, c + c[0] + 1);
}
inline bool check(long long s) {
  long long tot = 0, ned;
  for (long long i = 0; i < n; i++)
    if ((s >> i) & 1) b[tot++] = i;
  if ((sum[s] ^ tot ^ 1) & 1) return 0;
  solve(g, 0, tot / 2);
  solve(h, tot / 2, tot);
  ned = 1 + (abs(sum[s]) < tot) * 2;
  for (long long i = 1, l = h[0] + 1, r = h[0]; i <= g[0]; i++) {
    while (l > 1 && g[i] + h[l - 1] > -tot) --l;
    while (r && g[i] + h[r] > tot) --r;
    if (l <= r) ned -= r - l + 1;
    if (ned <= 0) return 1;
  }
  return 0;
}
signed main() {
  n = read();
  S = (1 << n) - 1;
  for (long long i = 0, x; i < n; i++)
    if (x = read()) a[nn++] = x;
  n = nn;
  for (long long s = 1; s <= S; s++)
    for (long long i = 0; i < n; i++)
      if ((s >> i) & 1) sum[s] += a[i];
  for (long long s = 1, x; s <= S; s++)
    if (!f[s] && check(s)) {
      x = S ^ s;
      f[s] = 1;
      for (long long i = x; i; i = (i - 1) & x)
        f[s | i] = max(f[s | i], f[i] + 1);
    }
  cout << n - f[S] << "\n";
  return (0 - 0);
}
