#include #define endl '\n' #define trace(x) cerr << #x << " = " << x << endl #define sz(x) ((int)x.size()) #define all(x) x.begin(), x.end() using namespace std; template inline bool chkmax(T &x, const T1 &y) { return x < y ? x = y, true : false; } template inline bool chkmin(T &x, const T1 &y) { return x > y ? x = y, true : false; } const int MAXN = 1024; const long long INF = (long long)1e18; long long n; vector a; void read() { cin >> n; a.reserve(n); for (long long i = 0; i < n; i++) { long long ai; cin >> ai; a.emplace_back(ai); } } long long ans = INF; void f(vector seq) { vector new_seq; long long len = 1; for (int i = 1; i < sz(seq); i++) { if (seq[i] == seq[i - 1]) len++; else { if (len > 1) { if (len & 1) { new_seq.emplace_back(seq[i - 1] * (len - 1)); new_seq.emplace_back(seq[i - 1]); } else new_seq.emplace_back(seq[i - 1] * len); } else new_seq.emplace_back(seq[i]); len = 1; } } if (len > 1) { if (len & 1) { new_seq.emplace_back(seq.back() * (len - 1)); new_seq.emplace_back(seq.back()); } else new_seq.emplace_back(seq.back() * len); } else new_seq.emplace_back(seq.back()); bool exec = false; if (new_seq != seq) { exec = true; f(new_seq); } new_seq.clear(); len = 1; for (int i = 1; i < sz(seq); i++) { if (seq[i] == seq[i - 1]) len++; else { if (len > 1) { if (len & 1) { new_seq.emplace_back(seq[i - 1]); new_seq.emplace_back(seq[i - 1] * (len - 1)); } else new_seq.emplace_back(seq[i - 1] * len); } else new_seq.emplace_back(seq[i]); len = 1; } } if (len > 1) { if (len & 1) { new_seq.emplace_back(seq.back()); new_seq.emplace_back(seq.back() * (len - 1)); } else new_seq.emplace_back(seq.back() * len); } else new_seq.emplace_back(seq.back()); if (new_seq != seq) { exec = true; f(new_seq); } if (!exec) chkmin(ans, *min_element(all(seq))); } void solve() { f(a); cout << ans << endl; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); freopen("combine.in", "rt", stdin); freopen("combine.out", "wt", stdout); read(); solve(); return EXIT_SUCCESS; }