#include #include #include #include #include #include #include #include #include #include #include static const int MOD = 1000000007; using ll = long long; using u32 = uint32_t; using namespace std; template constexpr T INF = ::numeric_limits::max()/32*15+208; int main() { int n; cin >> n; vector v(n); for (auto &&i : v) scanf("%d", &i); vector dp(n), dq(n); dp[0] = v[0], dq[0] = v[0]; for (int i = 1; i < n; ++i) { dp[i] = max({dp[i-1]+v[i], dq[i-1]+v[i], dp[i-1]-v[i], dq[i-1]-v[i], dp[i-1]*v[i], dq[i-1]*v[i]}); dq[i] = min({dp[i-1]+v[i], dq[i-1]+v[i], dp[i-1]-v[i], dq[i-1]-v[i], dp[i-1]*v[i], dq[i-1]*v[i]}); if(v[i]) { dp[i] = max({dp[i], dp[i-1]/v[i], dq[i-1]/v[i]}); dq[i] = min({dq[i], dp[i-1]/v[i], dq[i-1]/v[i]}); } } cout << dp.back() << "\n"; return 0; }