#include using namespace std; #define REP(i,n) for(int i=0; i<(int)(n); i++) const int INF = 1<<30; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; vector a(n); REP (i, n) cin >> a[i]; set pref, suff; REP (i, n) suff.insert(a[i]); int ret = INF; REP (i, n) { suff.erase(a[i]); if (pref.size() && suff.size()) { // a[i] is minimum auto itr = pref.lower_bound(a[i]); auto jtr = suff.lower_bound(a[i]); if (itr != pref.end() && jtr != suff.end()) ret = min(ret, a[i] + *itr + *jtr); // a[i] is maximum if (a[i] > max(*pref.begin(), *suff.begin())) ret = min(ret, a[i] + *pref.begin() + *suff.begin()); } pref.insert(a[i]); } cout << (ret == INF ? -1 : ret) << endl; return 0; }