#include using namespace std; using ll = long long; vector contiguous_max(const vector& arr) { int n = arr.size(); vector ans(n + 1, 0); ll s = 0, m = 0; for (int i = 0; i < n; i++) { s += arr[i]; m = min(m, s); ans[i + 1] = max(ans[i], s - m); } return ans; } vector contiguous_min(const vector& arr) { int n = arr.size(); vector ans(n + 1, 0); ll s = 0, m = 0; for (int i = 0; i < n; i++) { s += arr[i]; m = max(m, s); ans[i + 1] = min(ans[i], s - m); } return ans; } int main(){ int N; cin >> N; vector A(N); for (int i = 0; i < N; i++){ cin >> A[i]; } if(N == 2){ cout << static_cast(A[0]) * A[1] << "\n"; return 0; } vector left_max = contiguous_max(A); vector left_min = contiguous_min(A); vector revA = A; reverse(revA.begin(), revA.end()); vector right_max = contiguous_max(revA); vector right_min = contiguous_min(revA); reverse(right_max.begin(), right_max.end()); reverse(right_min.begin(), right_min.end()); ll ans = 0; for (int i = 0; i < N; i++){ ll candidate1 = left_max[i] * right_max[i]; ll candidate2 = left_min[i] * right_min[i]; ans = max(ans, max(candidate1, candidate2)); } cout << ans << "\n"; return 0; }