#include <bits/stdc++.h>
using namespace std;
#define int long long int
#define double long double
#define print(a) for(auto x : a) cout << x << " "; cout << endl
const int M = 1000000007;
const int N = 3e5+9;
const int INF = 2e9+1;
const int LINF = 2000000000000000001;
inline int power(int a, int b, int mod=M) {
int x = 1;
a %= mod;
while (b) {
if (b & 1) x = (x * a) % mod;
a = (a * a) % mod;
b >>= 1;
}
return x;
}
//_ ***************************** START Below *******************************
vector<int> a;
//* Dp + greedy kadane
int consistency1(int n){
if(n==1) return a[0];
int z = 0;
int neg = 0;
int prod = 1;
for(int i=0; i<n; i++){
if(a[i] < 0) neg++;
else if(a[i] == 0) z++;
prod *= a[i];
}
if( !(neg & 1) && z == 0) return prod;
vector<int> prefix(n+1, 1);
vector<int> pMaxi(n+1, INT32_MIN);
int maxi = INT32_MIN;
for(int i=0; i<n; i++){
if(a[i] != 0){
prefix[i+1] = prefix[i] * a[i];
maxi = max(maxi, prefix[i+1]);
pMaxi[i+1] = maxi;
}
}
vector<int> sufix(n+1, 1);
vector<int> sMaxi(n+1, INT32_MIN);
maxi = INT32_MIN;
for(int i=n-1; i>=0; i--){
if(a[i] != 0){
sufix[i] = sufix[i+1] * a[i];
maxi = max(maxi, sufix[i]);
sMaxi[i] = maxi;
}
}
int ans = INT32_MIN;
for(int i=0; i<n; i++){
int left = pMaxi[i];
int right = sMaxi[i+1];
if(a[i] <= 0){
ans = max(ans, max(left, right));
}
}
if(z > 0) ans = max(ans, 0LL);
return ans;
}
//* Greedy Kadane
int consistency2(int n){
int maxi = INT32_MIN;
int prod = 1;
for(int i=0; i<n; i++){
prod *= a[i];
maxi = max(maxi, prod);
if(prod == 0){
prod = 1;
}
}
prod = 1;
for(int i=n-1; i>=0; i--){
prod *= a[i];
maxi = max(maxi, prod);
if(prod == 0){
prod = 1;
}
}
return maxi;
}
//* Optimized 1 loop
int consistency3(int n){
int maxi1 = INT32_MIN;
int maxi2 = INT32_MIN;
int prod1 = 1;
int prod2 = 1;
int ans = INT32_MIN;
for(int i=0; i<n; i++){
prod1 *= a[i];
prod2 *= a[n-i-1];
maxi1 = max(maxi1, prod1);
maxi2 = max(maxi2, prod2);
ans = max(ans, max(maxi1, maxi2));
if(prod1 == 0){
prod1 = 1;
}
if(prod2 == 0){
prod2 = 1;
}
}
return ans;
}
int practice(int n){
return 0;
}
void solve() {
int n;
cin>> n;
a.resize(n);
for(int i=0; i<n; i++) cin >> a[i];
cout << consistency1(n) << " " << consistency2(n) << " " << consistency3(n) << endl;
}
int32_t main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int t = 1;
// cin >> t;
while (t--) {
solve();
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgaW50ICAgICAgICAgICAgICBsb25nIGxvbmcgaW50CiNkZWZpbmUgZG91YmxlICAgICAgICAgICBsb25nIGRvdWJsZQojZGVmaW5lIHByaW50KGEpICAgICAgICAgZm9yKGF1dG8geCA6IGEpIGNvdXQgPDwgeCA8PCAiICI7IGNvdXQgPDwgZW5kbAoKCmNvbnN0IGludCBNID0gMTAwMDAwMDAwNzsKY29uc3QgaW50IE4gPSAzZTUrOTsKY29uc3QgaW50IElORiA9IDJlOSsxOwpjb25zdCBpbnQgTElORiA9IDIwMDAwMDAwMDAwMDAwMDAwMDE7CgppbmxpbmUgaW50IHBvd2VyKGludCBhLCBpbnQgYiwgaW50IG1vZD1NKSB7CiAgICBpbnQgeCA9IDE7CiAgICBhICU9IG1vZDsKICAgIHdoaWxlIChiKSB7CiAgICAgICAgaWYgKGIgJiAxKSB4ID0gKHggKiBhKSAlIG1vZDsgCiAgICAgICAgYSA9IChhICogYSkgJSBtb2Q7CiAgICAgICAgYiA+Pj0gMTsKICAgIH0KICAgIHJldHVybiB4Owp9CgoKLy9fICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIFNUQVJUIEJlbG93ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCgoKCnZlY3RvcjxpbnQ+IGE7CgovLyogRHAgKyBncmVlZHkga2FkYW5lIAoKaW50IGNvbnNpc3RlbmN5MShpbnQgbil7CgoJaWYobj09MSkgcmV0dXJuIGFbMF07CgkKCWludCB6ID0gMDsKCWludCBuZWcgPSAwOwoJaW50IHByb2QgPSAxOwoJCglmb3IoaW50IGk9MDsgaTxuOyBpKyspewoJICAgIGlmKGFbaV0gPCAwKSBuZWcrKzsKCSAgICBlbHNlIGlmKGFbaV0gPT0gMCkgeisrOwoJICAgIHByb2QgKj0gYVtpXTsKCX0KCWlmKCAhKG5lZyAmIDEpICYmIHogPT0gMCkgcmV0dXJuIHByb2Q7CgkKCXZlY3RvcjxpbnQ+IHByZWZpeChuKzEsIDEpOwoJdmVjdG9yPGludD4gcE1heGkobisxLCBJTlQzMl9NSU4pOwoJaW50IG1heGkgPSBJTlQzMl9NSU47Cglmb3IoaW50IGk9MDsgaTxuOyBpKyspewoJICAgIGlmKGFbaV0gIT0gMCl7CgkgICAgICAgIHByZWZpeFtpKzFdID0gcHJlZml4W2ldICogYVtpXTsKCSAgICAgICAgbWF4aSA9IG1heChtYXhpLCBwcmVmaXhbaSsxXSk7CgkgICAgICAgIHBNYXhpW2krMV0gPSBtYXhpOwoJICAgIH0KCX0KCQoJdmVjdG9yPGludD4gc3VmaXgobisxLCAxKTsKCXZlY3RvcjxpbnQ+IHNNYXhpKG4rMSwgSU5UMzJfTUlOKTsKCQoJbWF4aSA9IElOVDMyX01JTjsKCWZvcihpbnQgaT1uLTE7IGk+PTA7IGktLSl7CgkgICAgaWYoYVtpXSAhPSAwKXsKCSAgICAgICAgc3VmaXhbaV0gPSBzdWZpeFtpKzFdICogYVtpXTsKCSAgICAgICAgbWF4aSA9IG1heChtYXhpLCBzdWZpeFtpXSk7CgkgICAgICAgIHNNYXhpW2ldID0gbWF4aTsKCSAgICB9Cgl9CgkKCWludCBhbnMgPSBJTlQzMl9NSU47Cglmb3IoaW50IGk9MDsgaTxuOyBpKyspewoJICAgIGludCBsZWZ0ID0gcE1heGlbaV07CgkgICAgaW50IHJpZ2h0ID0gc01heGlbaSsxXTsKCSAgICBpZihhW2ldIDw9IDApewoJICAgICAgICBhbnMgPSBtYXgoYW5zLCBtYXgobGVmdCwgcmlnaHQpKTsKCSAgICB9Cgl9CgkKCWlmKHogPiAwKSAgIGFucyA9IG1heChhbnMsIDBMTCk7CglyZXR1cm4gYW5zOwoJCn0KCQoJCgoKCi8vKiBHcmVlZHkgS2FkYW5lCgppbnQgY29uc2lzdGVuY3kyKGludCBuKXsKCglpbnQgbWF4aSA9IElOVDMyX01JTjsKCWludCBwcm9kID0gMTsKCQoJZm9yKGludCBpPTA7IGk8bjsgaSsrKXsKCQlwcm9kICo9IGFbaV07CgkJbWF4aSA9IG1heChtYXhpLCBwcm9kKTsKCQkKCSAgICBpZihwcm9kID09IDApewoJICAgICAgICBwcm9kID0gMTsKCSAgICB9Cgl9CgkKCQoJcHJvZCA9IDE7Cglmb3IoaW50IGk9bi0xOyBpPj0wOyBpLS0pewoJCXByb2QgKj0gYVtpXTsKCQltYXhpID0gbWF4KG1heGksIHByb2QpOwoJCWlmKHByb2QgPT0gMCl7CgkJCXByb2QgPSAxOwoJCX0KCX0KCQoJcmV0dXJuIG1heGk7Cn0KCQoJCgkKCQoKLy8qIE9wdGltaXplZCAxIGxvb3AgCgppbnQgY29uc2lzdGVuY3kzKGludCBuKXsKCglpbnQgbWF4aTEgPSBJTlQzMl9NSU47CglpbnQgbWF4aTIgPSBJTlQzMl9NSU47CglpbnQgcHJvZDEgPSAxOwoJaW50IHByb2QyID0gMTsKCQoJaW50IGFucyA9IElOVDMyX01JTjsKCQoJZm9yKGludCBpPTA7IGk8bjsgaSsrKXsKCQlwcm9kMSAqPSBhW2ldOwoJCXByb2QyICo9IGFbbi1pLTFdOwoJCQoJCW1heGkxID0gbWF4KG1heGkxLCBwcm9kMSk7CgkJbWF4aTIgPSBtYXgobWF4aTIsIHByb2QyKTsKCQkKCQlhbnMgPSBtYXgoYW5zLCBtYXgobWF4aTEsIG1heGkyKSk7CgkJCgkgICAgaWYocHJvZDEgPT0gMCl7CgkgICAgICAgIHByb2QxID0gMTsKCSAgICB9CgkgICAgaWYocHJvZDIgPT0gMCl7CgkgICAgCXByb2QyID0gMTsKCSAgICB9Cgl9CgkKCQoJcmV0dXJuIGFuczsKfQoKCgoKCgoKCgoKCgoKCgoKCmludCBwcmFjdGljZShpbnQgbil7CgoKICAgIHJldHVybiAwOwp9CgoKCgoKdm9pZCBzb2x2ZSgpIHsKICAgIAogICAgaW50IG47CiAgICBjaW4+PiBuOwogICAgCiAgICBhLnJlc2l6ZShuKTsKICAgIGZvcihpbnQgaT0wOyBpPG47IGkrKykgY2luID4+IGFbaV07CiAgICAKICAgIGNvdXQgPDwgY29uc2lzdGVuY3kxKG4pIDw8ICIgIiA8PCBjb25zaXN0ZW5jeTIobikgPDwgIiAiIDw8IGNvbnNpc3RlbmN5MyhuKSA8PCBlbmRsOwoKCn0KCgoKCgppbnQzMl90IG1haW4oKSB7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKCiAgICBpbnQgdCA9IDE7CiAgICAvLyBjaW4gPj4gdDsKICAgIHdoaWxlICh0LS0pIHsKICAgICAgICBzb2x2ZSgpOwogICAgfQoKICAgIHJldHVybiAwOwp9