#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:1024000000,1024000000")
using namespace std;
const int V = 20;
const int oo = 1000000000;
long long ab(long long x) {
  if (x < 0) return -x;
  return x;
}
long long a[V];
long long s[1 << V];
int c[1 << V];
int cost[1 << V];
int dp[1 << V];
int n;
int main() {
  while (~scanf("%d", &n)) {
    for (int i = 0; i < n; ++i) scanf("%I64d", &a[i]);
    cost[0] = 0;
    for (int i = 0; i < (1 << n); ++i) {
      cost[i] = 0;
      s[i] = 0;
      c[i] = 0;
      int mid = 0;
      for (int j = 0; j < n; ++j) {
        if ((i & (1 << j))) {
          if (a[j] != 0) ++cost[i];
          s[i] += a[j];
          ++c[i];
          mid = j;
        }
      }
      if (c[i] >= 2) {
        if ((s[i] + c[i] - 1) % 2 == 0) {
          long long mx = (s[i] + c[i] - 1) / 2;
          long long mi = (s[i] - c[i] + 1) / 2;
          for (int j = (i ^ (1 << mid)); j; j = (j - 1) & i) {
            if (s[j] >= mi && s[j] <= mx) {
              cost[i] = min(cost[i], c[i] - 1);
              break;
            }
          }
        }
      }
    }
    for (int i = 0; i < (1 << n); ++i) dp[i] = oo;
    dp[0] = 0;
    int sub = 0;
    for (int i = 1; i < (1 << n); ++i) {
      for (int j = i; j; j = (j - 1) & i) {
        dp[i] = min(dp[i], dp[i ^ j] + cost[j]);
      }
    }
    printf("%d\n", dp[(1 << n) - 1]);
  }
  return 0;
}
