#include <bits/stdc++.h>
using namespace std;
int n;
long long a[21];
long long sum[1 << 21];
long long can[1 << 21];
void dfs(int now, int state, long long res) {
  if (now == n + 1) {
    sum[state] = res;
    return;
  }
  dfs(now + 1, state, res);
  dfs(now + 1, state | (1 << (now - 1)), res + a[now]);
  return;
}
long long myabs(long long now) { return now > 0 ? now : -now; }
int dp[(1 << 21)];
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    scanf("%lld", &a[i]);
    if (a[i] == 0) i--, n--;
  }
  dfs(1, 0, 0);
  for (int state = 0; state < (1 << n); state++) {
    for (int sub = (state & (state - 1)); (2 * sub >= state) && sub;
         sub = ((sub - 1) & state)) {
      int sub2 = (state ^ sub);
      int cnt = __builtin_popcount(state);
      if (myabs(sum[sub2] - sum[sub]) <= cnt - 1 &&
          (cnt - 1 - myabs(sum[sub2] - sum[sub])) % 2 == 0) {
        dp[state] = 1;
        break;
      }
    }
  }
  for (int state = 0; state < (1 << n); state++)
    if (dp[state] != 0) {
      for (int sub = (state | (state + 1)); sub < (1 << n);
           sub = ((sub + 1) | state)) {
        int sub2 = (sub ^ state);
        dp[sub] = max(dp[sub], dp[state] + dp[sub2]);
      }
    }
  printf("%d\n", n - dp[(1 << n) - 1]);
}
