module main; // リングバッファ、数式処理 import std; // stringで表された式の値を求める struct Eval(T) { private: static string expr; // 因子 static T factor() { if (expr[0] != '(') return parse!T(expr); expr = expr[1 .. $]; // (を除去 T x = expression(); expr = expr[1 .. $]; // )を除去 return x; } // 項 static T term() { T x = factor(); while (expr != "") { if (expr[0] == '*') { expr = expr[1 .. $]; x *= factor(); } else if (expr[0] == '/') { expr = expr[1 .. $]; T y = factor(); if (y == 0) throw new Exception("Eval: 0では割れません"); x /= y; } else break; } return x; } // 式 static T expression() { T x = term(); while (expr != "") { if (expr[0] == '+') { expr = expr[1 .. $]; x += term(); } else if (expr[0] == '-') { expr = expr[1 .. $]; x -= term(); } else break; } return x; } public: static T opCall(string expr) { if (!balancedParens(expr, '(', ')')) throw new Exception("Eval: かっこが対応していません"); this.expr = replace(expr, regex(`[\s\t\v\n\r]`, "g"), ""); // 空白、タブ、改行文字を除去 return expression(); } } void main() { // 入力 auto S = readln.chomp; // 答えの計算 int N = S.length.to!int; S ~= S[0 .. $ - 1]; long ans = -10L ^^ 9; foreach (i; 0 .. N) { auto expr = S[i .. i + N]; if (!isDigit(expr[0]) || !isDigit(expr[$ - 1])) continue; auto res = Eval!long(expr); ans = max(ans, res); } // 答えの出力 writeln(ans); }