#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<vector>
#include<stack>
#include<string>
using namespace std;
template<typename T>
class expCal{
public:
expCal(){ expMid.clear();expSuffix.clear();}
expCal(string s){
expCal();
init(s);
}
int fun(char ch){ //运算符标号
switch(ch){
case '+': return 0;
case '-': return 1;
case '*': return 2;
case '/': return 3;
case '(': return 4;
case ')': return 5;
}
return -1;
}
void init(string s){ //初始化,解析字符串成中缀表达式;
node t;
int i=0;
while(i<s.size()){
while(i<s.size()&&s[i]==' ') i++;
while(i<s.size()&&s[i]!=' '&&(s[i]<'0'||s[i]>'9')){
t.isch=fun(s[i]);i++;
expMid.push_back(t);
}
while(i<s.size()&&s[i]==' ') i++;
if(i<s.size()&&s[i]<='9'&&s[i]>='0'){
t.val=0;t.isch=-1;
while(i<s.size()&&s[i]<='9'&&s[i]>='0') t.val=t.val*10+s[i++]-'0';
expMid.push_back(t);
}
while(i<s.size()&&s[i]==' ') i++;
while(i<s.size()&&s[i]!=' '&&(s[i]<'0'||s[i]>'9')){
t.isch=fun(s[i]);i++;
expMid.push_back(t);
}
}
}
bool midTosuffix(){ //中缀转后缀;
stack <node> Sta;
for(int i=0;i<expMid.size();i++){
if(expMid[i].isch<0) expSuffix.push_back(expMid[i]);
else {
if(expMid[i].isch==5){
while(Sta.size()&&Sta.top().isch!=4)
expSuffix.push_back(Sta.top()),Sta.pop();
if(Sta.size()&&Sta.top().isch==4) Sta.pop();
else return false;
continue;
}
while(Sta.size()&&Sta.top().isch!=4&&expMid[i].isch<=Sta.top().isch)
expSuffix.push_back(Sta.top()),Sta.pop();
Sta.push(expMid[i]);
}
}
while(Sta.size()) expSuffix.push_back(Sta.top()),Sta.pop();
int a=0,b=0;
for(int i=0;i<expSuffix.size();i++){
if(expSuffix[i].isch>=0) a++;
else b++;
}
return a+1==b;
}
bool subcal(T &ret,T val,int op){ //运算符计算
if(op==3&&val==0) return false;
switch(op){
case 0: ret+=val; break;
case 1: ret-=val; break;
case 2: ret*=val; break;
case 3: ret/=val; break;
}
return true;
}
bool cal(T &ans){ //计算后缀表达式
if(midTosuffix()==false) return false;
stack <node> Sta;
for(int i=0;i<expSuffix.size();i++){
if(expSuffix[i].isch<0) Sta.push(expSuffix[i]);
else {
if(Sta.size()<2) return false;
T _val=Sta.top().val;Sta.pop();
if(subcal(Sta.top().val,_val,expSuffix[i].isch)==false)
return false;
}
}
if(Sta.size()!=1) return false;
ans=Sta.top().val; return true;
}
public:
struct node{
T val;
int isch;
};
private:
vector<node> expMid,expSuffix;
};
char s[11000];
int main(){
while(gets(s)){
expCal<double> T(s);
double ans;
if(T.cal(ans))
printf("%f\n",ans);
else
printf("error\n");
}
return 0;
}