#include <cstdio>
#include <algorithm>
constexpr int INT_MIN() {
return (1 << ((sizeof(int) << 3) - 1));
}
inline int accumulate(int *current, int next) {
int ret = (*current) * next;
if (next == 0) {
*current = 1;
} else {
*current = ret;
}
return ret;
}
template<size_t N_>
int calculate(int (&a)[N_]) {
int m = INT_MIN(), litr = 1, ritr = 1;
for (size_t i = 0; i < N_; ++i) {
m = std::max({
m, accumulate(&litr, a[i]), accumulate(&ritr, a[N_ - i - 1])
});
}
return m;
}
int main() {
int a[] = {
2, -7, 0, 2, 3, 8, -6, 5
};
printf("%d\n", calculate(a));
int b[] = {
-2, 0, 3, 5, -7
};
printf("%d\n", calculate(b));
int c[] = {
-2, 10, 10, -2
};
printf("%d\n", calculate(c));
return 0;
}
I2luY2x1ZGUgPGNzdGRpbz4KCiNpbmNsdWRlIDxhbGdvcml0aG0+Cgpjb25zdGV4cHIgaW50IElOVF9NSU4oKSB7CiAgcmV0dXJuICgxIDw8ICgoc2l6ZW9mKGludCkgPDwgMykgLSAxKSk7Cn0KCmlubGluZSBpbnQgYWNjdW11bGF0ZShpbnQgKmN1cnJlbnQsIGludCBuZXh0KSB7CiAgaW50IHJldCA9ICgqY3VycmVudCkgKiBuZXh0OwogIGlmIChuZXh0ID09IDApIHsKICAgICpjdXJyZW50ID0gMTsKICB9IGVsc2UgewogICAgKmN1cnJlbnQgPSByZXQ7CiAgfQogIHJldHVybiByZXQ7Cn0KCnRlbXBsYXRlPHNpemVfdCBOXz4KaW50IGNhbGN1bGF0ZShpbnQgKCZhKVtOX10pIHsKICBpbnQgbSA9IElOVF9NSU4oKSwgbGl0ciA9IDEsIHJpdHIgPSAxOwogIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgTl87ICsraSkgewogICAgbSA9IHN0ZDo6bWF4KHsKICAgICAgICBtLCBhY2N1bXVsYXRlKCZsaXRyLCBhW2ldKSwgYWNjdW11bGF0ZSgmcml0ciwgYVtOXyAtIGkgLSAxXSkKICAgIH0pOwogIH0KICByZXR1cm4gbTsKfQoKaW50IG1haW4oKSB7CiAgaW50IGFbXSA9IHsKICAgICAgMiwgLTcsIDAsIDIsIDMsIDgsIC02LCA1CiAgfTsKICBwcmludGYoIiVkXG4iLCBjYWxjdWxhdGUoYSkpOwogIGludCBiW10gPSB7CiAgICAgIC0yLCAwLCAzLCA1LCAtNwogIH07CiAgcHJpbnRmKCIlZFxuIiwgY2FsY3VsYXRlKGIpKTsKICBpbnQgY1tdID0gewogICAgICAtMiwgMTAsIDEwLCAtMgogIH07CiAgcHJpbnRmKCIlZFxuIiwgY2FsY3VsYXRlKGMpKTsKICByZXR1cm4gMDsKfQ==