#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
const long long int INFLL = 1e18;
const double EPS = 1e-8;
template <class T>
T &chmin(T &a, const T &b) {
  return a = min(a, b);
}
template <class T>
T &chmax(T &a, const T &b) {
  return a = max(a, b);
}
long long int in() {
  long long int a;
  cin >> a;
  return a;
}
const int MAX_N = 32;
int n;
long long int a[MAX_N];
int dp[2][1 << 23];
vector<int> s[MAX_N];
bool ok(int i, int j) {
  for (int k = (0); k < (int)(s[i].size()); k++)
    if ((j & s[i][k]) == s[i][k]) return true;
  return false;
}
int main() {
  cin >> n;
  for (int i = (0); i < (int)(n); i++) cin >> a[i];
  for (int i = (0); i < (int)(n); i++) {
    for (int j = (0); j < (int)(i); j++)
      for (int k = (0); k < (int)(i); k++)
        if (a[j] + a[k] == a[i]) s[i].push_back((1 << j) | (1 << k));
    sort((s[i]).begin(), (s[i]).end());
    s[i].erase(unique((s[i]).begin(), (s[i]).end()), s[i].end());
  }
  dp[1][0] = INF;
  dp[1][1] = 1;
  for (int i = (1); i < (int)(n); i++) {
    for (int j = (0); j < (int)(1 << (i + 1)); j++) dp[(i + 1) & 1][j] = INF;
    for (int j = (0); j < (int)(1 << i); j++) {
      if (ok(i, j)) {
        for (int k = (0); k < (int)(i); k++) {
          if (j & (1 << k))
            chmin(dp[(i + 1) & 1][j - (1 << k) + (1 << i)], dp[i & 1][j]);
        }
        chmin(dp[(i + 1) & 1][j + (1 << i)], dp[i & 1][j] + 1);
      }
    }
  }
  int ans = INF;
  for (int i = (0); i < (int)(1 << n); i++) chmin(ans, dp[n & 1][i]);
  if (ans == INF)
    cout << -1 << endl;
  else
    cout << ans << endl;
  return 0;
}
