procedure fundament;
const
infile='expr.in';
outfile='expr.out';
var
fin,fout:text;
expression:string;
procedure outprint(x:real);
begin
writeln(fout,x:0:3);
end;
function expr(s:string):real; //计算表达式S
const
maxN=100;
var
res,ch:char;
oprTop,numTop:integer;
opr:array[1..maxN] of char;
num:array[1..maxN] of real;
procedure error;
begin
write(fout,'error!');
exit;
end;
function comp(a,b:char):char;
begin
if not(a in ['+','-','*','/','(',')','#']) or not(b in ['+','-','*','/','(',')','#']) then result:='e'
else
case a of
'+','-': case b of
'*','/','(':result:='<';
else result:='>';
end;
'*','/':if b='(' then result:='<' else result:='>';
'(': if b=')' then result:='=' else if b='#' then result:='e' else result:='<';
')': if b='(' then result:='e' else result:='>';
'#': if b=')' then result:='e' else if b='#' then result:='R' else result:='<';
end;
end;
function cal(a,b:real;p:char):real;
begin
case p of
'+': result:=a+b;
'-': result:=a-b;
'*': result:=a*b;
'/': if b=0 then begin error;result:=0;end else result:=a/b;
end;
end;
function GetNumber(var s:string):real;
var
i,code:integer;
begin
i:=1;
while (i<=length(s))and(s[i] in ['0'..'9','.']) do inc(i);
val(copy(s,1,i-1),result,code);
delete(s,1,i-1);
end;
begin
opr[1]:='#';
s:=s+'#';
oprTop:=1;
numTop:=0;
res:=' ';
repeat
if s[1] in ['0'..'9'] then
begin
inc(numTop);
num[numTop]:=GetNumber(s);
end
else
begin
ch:=s[1];
delete(s,1,1);
repeat
res:=comp(opr[oprTop],ch);
case res of
'>':begin
num[numTop-1]:=cal(num[numTop-1],num[numtop],opr[oprTop]);
dec(numTop);
dec(oprTop);
end;
'<':begin
inc(oprTop);
opr[oprTop]:=ch;
end;
'=':begin
dec(oprTop);
end;
'e':begin
error;
result:=0;
exit;
end;
'R':begin
result:=num[numTop];
end;
end;
until res<>'>';
end;
until res='R';
end;
function init:boolean;
begin
init:=false;
if eof(fin) then exit;
readln(fin,expression);
init:=true;
end;
procedure main;
begin
outprint(expr(expression));
end;
begin
assign(fin,infile);
assign(fout,outfile);
reset(fin);rewrite(fout);