#include <bits/stdc++.h>
using namespace std;
long long read() {
  long long x = 0, f = 0;
  char ch = getchar();
  while (!isdigit(ch)) f = ch == '-', ch = getchar();
  while (isdigit(ch)) x = (x << 1) + (x << 3) + (ch ^ 48), ch = getchar();
  return f ? -x : x;
}
template <class T>
void ckmax(T &x, T y) {
  if (x < y) x = y;
}
template <class T>
void ckmin(T &x, T y) {
  if (x > y) x = y;
}
long long absl(long long x) { return x < 0 ? -x : x; }
const int N = 20;
int n, all;
long long a[N];
int dp[1 << N];
namespace checker {
int n;
long long a[N];
long long v1[1 << N], c1;
long long v2[1 << N], c2;
long long getv(long long *a, int n, long long *v, long long &c) {
  v[0] = 0, c = 1;
  long long sum = 0;
  for (int i = (0); i <= (n - 1); i++) {
    sum += a[i];
    for (int j = (0); j <= (c - 1); j++) v[j + c] = v[j] + a[i] * 2;
    inplace_merge(v, v + c, v + c * 2);
    c *= 2;
  }
  for (int i = (0); i <= (c - 1); i++) v[i] -= sum;
  return sum;
}
int check01() {
  int res = (n - 1) & 1;
  for (int i = (0); i <= (n - 1); i++)
    if (a[i] % 2 != 0) res ^= 1;
  return res == 0;
}
int check() {
  if (!check01()) return 0;
  int mid = n / 2;
  long long sum = getv(a, mid, v1, c1) + getv(a + mid, n - mid, v2, c2);
  int lp = 0, rp = 0, tot = n != 1 && absl(sum) <= n - 1 ? -2 : 0;
  for (int i = (0); i <= (c1 - 1); i++) {
    while (lp < c2 && v2[lp] < v1[i] - (n - 1)) lp++;
    while (rp < c2 && v2[rp] <= v1[i] + (n - 1)) rp++;
    tot += rp - lp;
    if (tot > 0) return 1;
  }
  return 0;
}
}  // namespace checker
int check(int s) {
  checker::n = 0;
  for (int i = (0); i <= (n - 1); i++)
    if (s >> i & 1) checker::a[checker::n++] = a[i];
  return checker::check();
}
int main() {
  n = read();
  for (int i = (0); i <= (n - 1); i++) a[i] = read();
  all = 1 << n;
  for (int i = (0); i <= (all - 1); i++) dp[i] = __builtin_popcount(i);
  for (int i = (1); i <= (all - 1); i++) {
    for (int j = (0); j <= (n - 1); j++) ckmin(dp[i | 1 << j], dp[i] + 1);
    if (dp[i] == __builtin_popcount(i) && check(i)) {
      dp[i]--;
      int highbit = n - 1;
      while (~i >> highbit & 1) highbit--;
      int u = ((1 << (highbit + 1)) - 1) ^ i;
      for (int j = u; j; j = (j - 1) & u) ckmin(dp[i + j], dp[i] + dp[j]);
    }
  }
  cout << dp[all - 1] << endl;
  return 0;
}
