N = gets.to_i A = gets.split.map(&:to_i) dp = Array.new(N) { [-Float::INFINITY, Float::INFINITY] } dp[0][0] = A[0] dp[0][1] = A[0] 0.upto(N - 2) do |i| dp[i + 1][0] = dp[i][0] + A[i + 1] dp[i + 1][0] = dp[i][0] - A[i + 1] if dp[i + 1][0] < dp[i][0] - A[i + 1] dp[i + 1][0] = dp[i][0] * A[i + 1] if dp[i + 1][0] < dp[i][0] * A[i + 1] dp[i + 1][0] = dp[i][0] / A[i + 1] if A[i + 1] != 0 && dp[i + 1][0] < dp[i][0] / A[i + 1] dp[i + 1][1] = dp[i][1] + A[i + 1] dp[i + 1][1] = dp[i][1] - A[i + 1] if dp[i + 1][1] > dp[i][1] - A[i + 1] dp[i + 1][1] = dp[i][1] * A[i + 1] if dp[i + 1][1] > dp[i][1] * A[i + 1] dp[i + 1][1] = dp[i][1] / A[i + 1] if A[i + 1] != 0 && dp[i + 1][1] > dp[i][1] / A[i + 1] end puts dp[N - 1][0]