#include <bits/stdc++.h>
using namespace std;
int n, m, ans = 0x7fffffff, f[1 << 23], g[1 << 23];
long long a[23];
int at(int s) { return s ? 31 - __builtin_clz(s) : -1; }
void dfs(int s) {
  if (f[s] >= ans) return;
  int t = at(s) + 1, i, j, k, s2, f2;
  if (t == n) {
    ans = min(ans, f[s]);
    return;
  }
  for (i = 0; i < t; i++)
    if ((1 << i) & s)
      for (j = 0; j < t; j++)
        if ((1 << j) & s)
          if (a[i] + a[j] == a[t]) {
            s2 = s + (1 << t);
            f2 = max(__builtin_popcount(s2), f[s]);
            if (f[s2] > f2) {
              f[s2] = f2;
              g[s2] = s;
              dfs(s2);
            }
            for (k = 0; k < t; k++)
              if ((1 << k) & s) {
                s2 = s + (1 << t) - (1 << k);
                f2 = max(__builtin_popcount(s2), f[s]);
                if (f[s2] > f2) {
                  f[s2] = f2;
                  g[s2] = s;
                  dfs(s2);
                }
              }
          }
}
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%I64d", a + i);
  }
  fill(f, f + (1 << n), 0x7fffffff);
  dfs(f[1] = 1);
  printf("%d\n", ans < 0x7fffffff ? ans : -1);
  return 0;
}
