#include <iostream>
#include <string>
#include <string.h>
#include <ctype.h>
bool n_expr (const char *&s, float &result);
bool p_expr (const char *&s, float &result);
bool o_expr (const char *&s, float &result, float eos);
bool expr (const char *&s, float &result, float eos = 0) {
while (isspace(*s)) ++s;
if (*s == eos) return false;
if (isdigit(*s)) {
if (!n_expr(s, result)) return false;
} else if (*s == '(') {
if (!p_expr(s, result)) return false;
} else return false;
while (isspace(*s)) ++s;
if (*s == eos) return true;
return o_expr(s, result, eos);
}
bool n_expr (const char *&s, float &result) {
float n = 0;
while (isdigit(*s)) n = 10 * n + (*s++ - '0');
result = n;
return true;
}
bool p_expr (const char *&s, float &result) {
if (expr(++s, result, ')')) {
++s;
return true;
}
return false;
}
bool o_expr (const char *&s, float &result, float eos) {
float oresult = 0;
const char *op = strchr("+-*/", *s);
if (op == 0) return false;
if (!expr(++s, oresult, eos)) return false;
switch (*op) {
case '+': result += oresult; break;
case '-': result -= oresult; break;
case '*': result *= oresult; break;
case '/': result /= oresult; break;
default: return false;
}
return true;
}
int main() {
std::string buf;
const char *p;
float r;
while (std::getline(std::cin, buf)) {
if (expr(p = buf.c_str(), r)) {
std::cout << r << std::endl;
} else {
std::cout << "ERROR\n";
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8c3RyaW5nLmg+CiNpbmNsdWRlIDxjdHlwZS5oPgoKYm9vbCBuX2V4cHIgKGNvbnN0IGNoYXIgKiZzLCBmbG9hdCAmcmVzdWx0KTsKYm9vbCBwX2V4cHIgKGNvbnN0IGNoYXIgKiZzLCBmbG9hdCAmcmVzdWx0KTsKYm9vbCBvX2V4cHIgKGNvbnN0IGNoYXIgKiZzLCBmbG9hdCAmcmVzdWx0LCBmbG9hdCBlb3MpOwoKYm9vbCBleHByIChjb25zdCBjaGFyIComcywgZmxvYXQgJnJlc3VsdCwgZmxvYXQgZW9zID0gMCkgewogICAgd2hpbGUgKGlzc3BhY2UoKnMpKSArK3M7CiAgICBpZiAoKnMgPT0gZW9zKSByZXR1cm4gZmFsc2U7CiAgICBpZiAoaXNkaWdpdCgqcykpIHsKICAgICAgICBpZiAoIW5fZXhwcihzLCByZXN1bHQpKSByZXR1cm4gZmFsc2U7CiAgICB9IGVsc2UgaWYgKCpzID09ICcoJykgewogICAgICAgIGlmICghcF9leHByKHMsIHJlc3VsdCkpIHJldHVybiBmYWxzZTsKICAgIH0gZWxzZSByZXR1cm4gZmFsc2U7CiAgICB3aGlsZSAoaXNzcGFjZSgqcykpICsrczsKICAgIGlmICgqcyA9PSBlb3MpIHJldHVybiB0cnVlOwogICAgcmV0dXJuIG9fZXhwcihzLCByZXN1bHQsIGVvcyk7Cn0KCmJvb2wgbl9leHByIChjb25zdCBjaGFyIComcywgZmxvYXQgJnJlc3VsdCkgewogICAgZmxvYXQgbiA9IDA7CiAgICB3aGlsZSAoaXNkaWdpdCgqcykpIG4gPSAxMCAqIG4gKyAoKnMrKyAtICcwJyk7CiAgICByZXN1bHQgPSBuOwogICAgcmV0dXJuIHRydWU7Cn0KCmJvb2wgcF9leHByIChjb25zdCBjaGFyIComcywgZmxvYXQgJnJlc3VsdCkgewogICAgaWYgKGV4cHIoKytzLCByZXN1bHQsICcpJykpIHsKICAgICAgICArK3M7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7Cn0KCmJvb2wgb19leHByIChjb25zdCBjaGFyIComcywgZmxvYXQgJnJlc3VsdCwgZmxvYXQgZW9zKSB7CiAgICBmbG9hdCBvcmVzdWx0ID0gMDsKICAgIGNvbnN0IGNoYXIgKm9wID0gc3RyY2hyKCIrLSovIiwgKnMpOwogICAgaWYgKG9wID09IDApIHJldHVybiBmYWxzZTsKICAgIGlmICghZXhwcigrK3MsIG9yZXN1bHQsIGVvcykpIHJldHVybiBmYWxzZTsKICAgIHN3aXRjaCAoKm9wKSB7CiAgICBjYXNlICcrJzogcmVzdWx0ICs9IG9yZXN1bHQ7IGJyZWFrOwogICAgY2FzZSAnLSc6IHJlc3VsdCAtPSBvcmVzdWx0OyBicmVhazsKICAgIGNhc2UgJyonOiByZXN1bHQgKj0gb3Jlc3VsdDsgYnJlYWs7CiAgICBjYXNlICcvJzogcmVzdWx0IC89IG9yZXN1bHQ7IGJyZWFrOwogICAgZGVmYXVsdDogcmV0dXJuIGZhbHNlOwogICAgfQogICAgcmV0dXJuIHRydWU7Cn0KCmludCBtYWluKCkgewoJc3RkOjpzdHJpbmcgYnVmOwoJY29uc3QgY2hhciAqcDsKCWZsb2F0IHI7Cgl3aGlsZSAoc3RkOjpnZXRsaW5lKHN0ZDo6Y2luLCBidWYpKSB7CgkJaWYgKGV4cHIocCA9IGJ1Zi5jX3N0cigpLCByKSkgewoJCQlzdGQ6OmNvdXQgPDwgciA8PCBzdGQ6OmVuZGw7CgkJfSBlbHNlIHsKCQkJc3RkOjpjb3V0IDw8ICJFUlJPUlxuIjsKCQl9Cgl9CglyZXR1cm4gMDsKfQ==