#include <bits/stdc++.h>
using namespace std;
using ll = long long;
const int N = (1 << 20) + 5;
int n, f[N];
ll a[100], b[100], sl[N], sr[N];
void get(ll *s, int l, int r) {
  int m = 1;
  s[1] = 0;
  static ll pos[N], neg[N];
  for (int i = l; i <= r; i++, m <<= 1) {
    for (int j = 1; j <= m; j++) pos[j] = s[j] + b[i], neg[j] = s[j] - b[i];
    for (int x = 1, y = 1, k = 1; k <= m * 2; k++)
      s[k] = x > m             ? neg[y++]
             : y > m           ? pos[x++]
             : pos[x] < neg[y] ? pos[x++]
                               : neg[y++];
  }
}
bool check(int s) {
  int sz = 0;
  ll sum = 0;
  for (int i = 1; i <= n; i++)
    if ((s >> (i - 1)) & 1) sum += a[i], 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), nd = 1 + (abs(sum) < sz) * 2;
  for (int i = r, j = 1; i > 0; --i) {
    while (j <= l && sl[j] + sr[i] <= -sz) j++;
    for (int k = j; k <= l && nd && sl[k] + sr[i] < sz; k++) --nd;
  }
  return !nd;
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n;
  int m = 0;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    if (a[i]) a[++m] = a[i];
  }
  n = m;
  int lim = (1 << n) - 1;
  for (int s = 1; s <= lim; s++)
    if (!f[s] && check(s)) {
      int r = lim ^ s;
      f[s] = 1;
      for (int t = r; t > 0; t--, t &= r) f[s | t] = max(f[s | t], f[t] + 1);
    }
  cout << n - f[lim] << endl;
  return 0;
}
