#define _USE_MATH_DEFINES #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define rep(i, N) for (int i = 0; i < N; i++) #define pb push_back typedef long long ll; typedef unsigned long long ull; typedef pair i_i; typedef pair ll_i; typedef pair i_ll; typedef pair d_i; typedef pair ll_ll; typedef pair d_d; struct edge { int v; ll w; }; const int MOD = 1000000007; const int _MOD = 1000000009; double EPS = 1e-10; const ll INF = LLONG_MAX / 10; int main() { int N; cin >> N; vector a(N); rep(i, N) cin >> a[i]; if (N == 1) { cout << a[0] << endl; return 0; } int lb = -1, ub = 1010000000; while (ub - lb > 1) { int mid = (lb + ub) / 2; bool ok = false; rep(k0, N * 2 - 2) { vector b(N, -1); rep(t, N * 2 - 2) { int k = k0 + t; int i; if (k < N - 1) i = k; else if (k < N * 2 - 2) i = N * 2 - 2 - k; else if (k < N * 3 - 3) i = k - (N * 2 - 2); else i = N * 4 - 4 - k; if (b[i] == -1) b[i] = mid - t; } bool unko = false; rep(i, N) if (b[i] < a[i]) unko = true; if (!unko) ok = true; } if (ok) ub = mid; else lb = mid; } cout << ub << endl; }