------------------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------------------
#include <iostream>
#include <queue>
#include <stack>
#include <string>
#include <cstdio>
#include <cstdlib>
using namespace std;
string ss;
vector<double> ans;
vector<string> s,A;
stack<char> B;
int cmp[8][8]={ {1,1,-1,-1,-1,1},
{1,1,-1,-1,-1,1},
{1,1,1,1,-1,1},
{1,1,1,1,-1,1},
{-1,-1,-1,-1,-1,0},
{1,1,1,1,0,0}};
int gec[333];
bool isNum(char a){
switch(a){
case '+':
case '-':
case '*':
case '/':
case '(':
case ')':
return false;
}
return true;
}
void init(){
gec['+']=0;
gec['-']=1;
gec['*']=2;
gec['/']=3;
gec['(']=4;
gec[')']=5;
}
void Quit(int v){
cout << "ERROR : ";
switch(v){
case 1:
cout << "DIVISION BY 0";
break;
case 2:
cout << "PARENTHESES ARE NOT EVEN";
break;
}
cout << endl;
exit(0);
}
double gen(string s){
double tmp;
sscanf(s.c_str(),"%lf",&tmp);
return tmp;
}
void check(){
stack<char> q;
for (string::size_type i(0);i!=ss.size();i++){
if (ss[i]=='(') q.push(ss[i]);
if (ss[i]==')') {
if (q.empty()) Quit(2);
if (q.top()=='(') q.push(ss[i]);
else q.pop();
}
}
if (q.size()) Quit(2);
}
void ready(){
cin >> ss;
check();
ss+=')';
string str="";
for (string::size_type i(0);i!=ss.size();i++){
if (isNum(ss[i])){
str+=ss[i];
}else {
if (str.size()) s.push_back(str);
str=ss[i];
s.push_back(str);
str="";
}
}
}
void changetype(){
B.push('(');
for (unsigned int i(0);i!=s.size();i++){
if (isNum(s[i][0])){
A.push_back(s[i]);
}else{
char ch=s[i][0];
if (cmp[gec[B.top()]][gec[ch]]<0){
B.push(ch);
}else
if (cmp[gec[B.top()]][gec[ch]]>=0){
string str;
while (cmp[gec[B.top()]][gec[ch]]>0){
str=B.top();
A.push_back(str);
B.pop();
}
if (cmp[gec[B.top()]][gec[ch]]==0){
B.pop();
}else{
B.push(ch);
}
}
}
}
}
void calcit(){
for (int i(0);i!=A.size();i++){
if (isNum(A[i][0])) {
ans.push_back(gen(A[i]));
}else{
double a1=ans[ans.size()-2];
double a2=ans[ans.size()-1];
printf("%.2f%c%.2f=",a1,A[i][0],a2);
switch (A[i][0]){
case '+':
a1+=a2;
break;
case '-':
a1-=a2;
break;
case '*':
a1*=a2;
break;
case '/':
if (!a2){
Quit(1);
}
a1/=a2;
break;
}
printf("%.2f\n",a1);
ans.pop_back();
ans[ans.size()-1]=a1;
}
}
printf("%.3f\n",ans[0]);
}
int main(){
init();
ready();
changetype();
calcit();
return 0;
}