#include using namespace std; #define rep(i,a,b) for (auto i=(a); i<(b); ++i) #define iter(it,c) for (auto it = (c).begin(); it != (c).end(); ++it) typedef pair ii; typedef vector vi; typedef vector vii; typedef vector vvi; typedef long long ll; const int INF = 2147483647; const ll DINF = 9000000000000000000; map mem; int n; vector arr, sm; ll tot = 0; ll mn(int l, int r) { if ((r+1)%n == l) { return 0; } ii st(l, r); if (mem.find(st) != mem.end()) { return mem[st]; } ll now = sm[r]; if (l-1 >= 0) { now -= sm[l-1]; } if (now < 0) { now += tot; } ll res = DINF; int li = l == 0 ? n-1 : l-1, ri = r == n-1 ? 0 : r+1; res = min(res, max(arr[li]-now, mn(li, r))); res = min(res, max(arr[ri]-now, mn(l, ri))); return mem[st] = res; } int main() { cin >> n; arr = vector(n); sm = vector(n); rep(i,0,n) { cin >> arr[i]; sm[i] = arr[i]; if (i-1 >= 0) { sm[i] += sm[i-1]; } tot += arr[i]; } ll res = DINF; rep(i,0,n) { res = min(res, max(arr[i], mn(i,i))); } cout << res << endl; return 0; }