#define __STDC_FORMAT_MACROS #include #include #include #include #include typedef unsigned int uint_t; const uint_t N = 50; static struct Solver { uint_t best; uint64_t a; std::vector ts; std::vector ms; void init(uint_t mx, uint64_t _a) { best = 6; a = _a; ts.clear(); ts.push_back(mx); ms.clear(); ms.push_back(1); } void solve() { uint_t n = ts.size() - 1; uint64_t mn = ms[n]; if ((a & ~mn) == 0) { if (n < best) best = n; return; } if (n + 1 >= best) return; for (uint_t x = ts[n]; x; x--) { ts.push_back(x); ms.push_back(mn | (mn << x)); solve(); ts.pop_back(); ms.pop_back(); } } } s; int main() { uint64_t a = 0; uint_t n = 0, mx = 0; int st = scanf("%u", &n); assert (st == 1); assert (0 < n && n <= N); for (uint_t i = 0; i < n; i++) { uint_t x = 0; st = scanf("%u", &x); assert (st == 1); assert (0 < x && x <= N); a |= 1ULL << x; if (mx < x) mx = x; } s.init(mx, a); s.solve(); printf("%u", s.best); return 0; }