#include <bits/stdc++.h>
using namespace std;
inline void updmax(int& a, int b) {
  if (a < b) a = b;
}
const int N = 20;
const int L = 1 << N;
int cnt[L];
long long sum[L];
bool getSOS(int mask, long long* s, long long S1, long long S2) {
  int pos = 0;
  for (int elon = mask; elon; elon = (elon - 1) & mask, ++pos) {
    s[pos] = 2 * sum[elon];
    if (S1 <= s[pos] && s[pos] <= S2) return true;
  }
  sort(s, s + pos);
  return false;
}
long long l[L], r[L];
bool check(int n, int mask) {
  long long S = sum[mask];
  if (n == 1) return !S;
  if ((S + n - 1) & 1) return false;
  int nL = n / 2;
  int maskL = 0, maskR;
  for (int i = 0, cntL = 0; cntL < nL; ++i) {
    if ((mask >> i) & 1) {
      maskL ^= 1 << i;
      cntL += 1;
    }
  }
  maskR = mask ^ maskL;
  if (getSOS(maskL, l, S, S + n - 1)) return true;
  if (getSOS(maskR, r, S, S + n - 1)) return true;
  int sL = (1 << nL) - 1;
  int sR = (1 << (n - nL)) - 1;
  for (int i = sL - 1, pos0 = 0, posN = 0; i >= 0; --i) {
    while (pos0 < sR && S - l[i] > r[pos0]) ++pos0;
    while (posN < sR && r[posN] <= S + n - 1 - l[i]) ++posN;
    if (pos0 < posN) return true;
  }
  return false;
}
long long a[N];
int dp[L];
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) scanf("%lld", &sum[1 << i]);
  sum[0] = 0;
  for (int mask = 1; mask < (1 << n); ++mask) {
    int elon = (mask - 1) & mask;
    sum[mask] = sum[elon] + sum[mask ^ elon];
    cnt[mask] = cnt[mask / 2] + (mask & 1);
  }
  for (int mask = 1; mask < (1 << n); ++mask)
    dp[mask] = (int)check(cnt[mask], mask);
  int ans = 0;
  for (int mask = 1; mask < (1 << n); ++mask) {
    for (int elon = mask; elon; elon = (elon - 1) & mask)
      updmax(dp[mask], dp[elon] + dp[mask ^ elon]);
    updmax(ans, dp[mask]);
  }
  printf("%d\n", n - ans);
}
