## https://yukicoder.me/problems/no/3129 MAX_VALUE = 10 ** 18 MIN_VALUE = - 10**18 def main(): N = int(input()) A = list(map(int, input().split())) # forward forward_cum_list = [0] * (N + 1) for i in range(N): forward_cum_list[i + 1] = A[i] + forward_cum_list[i] # maxの計算 forward_max_list = [0] * N min0 = forward_cum_list[0] for i in range(N): f = forward_cum_list[i + 1] forward_max_list[i] = f - min0 min0 = min(min0, forward_cum_list[i]) # minの計算 forward_min_list = [0] * N max0 = forward_cum_list[0] for i in range(N): f = forward_cum_list[i + 1] forward_min_list[i] = f - max0 max0 = max(max0, forward_cum_list[i]) # backward backward_cum_list = [0] * (N + 1) for i in reversed(range(N)): backward_cum_list[i] = A[i] + backward_cum_list[i + 1] backward_max_list = [0] * N min0 = backward_cum_list[-1] for i in reversed(range(N)): b = backward_cum_list[i] backward_max_list[i] = b - min0 min0 = min(min0, backward_cum_list[i]) backward_min_list = [0] * N max0 = backward_cum_list[-1] for i in reversed(range(N)): b = backward_cum_list[i] backward_min_list[i] = b - max0 max0 = max(max0, backward_cum_list[i]) # backwardの累積min, max backward_cum_max_list = [MIN_VALUE] * N backward_cum_max = MIN_VALUE backward_cum_min_list = [MAX_VALUE] * N backward_cum_min = MAX_VALUE for i in reversed(range(N)): backward_cum_max = max(backward_cum_max, backward_max_list[i]) backward_cum_min = min(backward_cum_min, backward_min_list[i]) backward_cum_max_list[i] = backward_cum_max backward_cum_min_list[i] = backward_cum_min answer = MIN_VALUE forward_cum_max = MIN_VALUE forward_cum_min = MAX_VALUE for i in range(1, N): forward_cum_max = max(forward_cum_max, forward_max_list[i - 1]) forward_cum_min = min(forward_cum_min, forward_min_list[i - 1]) answer = max(answer, forward_cum_max * backward_cum_max_list[i]) answer = max(answer, forward_cum_min * backward_cum_min_list[i]) print(answer) if __name__ == "__main__": main()