#include <stdio.h>
#define smax 10
#define emax 255
int power(int x,int y)
{
int t,s=1;
for (t=0; t<x;t++)
s=s*y;
return s;
}
int calc(char op, int x, int y)
{
int num;
if (op=='+')
num=x+y;
else if (op=='-')
num=y-x;
else if (op=='*')
num=y*x;
else if (op=='/')
num=y/x;
else if (op=='^')
num=power(x,y);
return num;
}
int rank(char op)
{
int r;
if (op=='+') r=0;
else if (op=='-') r=1;
else if (op=='*') r=2;
else if (op=='/') r=2;
else if (op=='^') r=3;
return r;
}
void main()
{
//栈
int s[smax];
char op[smax];
int top=0;
int otop=0;
//其他变量
int i,num,x,y;
int ans=0;
int rtop,rinput;
char o;
//表达式存储
char ex[emax];
//实现计算器的功能
//输入表达式
scanf("%s", ex);
i=0;
num=0;
//读出每个字符
s[0]=0;
top=1;
op[0]='+';
otop=1;
while (1)
{
//分解每个数和符号
if (ex[i] >=48 && ex[i]<58)
{
//读到数字
num=num*10+ex[i]-48;
}
else
{
//前一个数字已经输入完毕
//数字入栈
s[top]=num;
top=top+1;
num=0;
if (ex[i]==0)
break;
else
{
//判断符号优先级
//如果优先级低于当前栈顶的符号的优先级,计算栈顶符号对应的运算
rinput=rank(ex[i]);
//符号栈顶元素出栈
otop=otop-1;
o=op[otop];
rtop=rank(o);
while (rtop>=rinput && rtop!=0)
{
//计算
//数字出战
top=top-1;
x=s[top];
top=top-1;
y=s[top];
s[top]=calc(o,x,y);
top=top+1;
//读出下一个栈顶符号
otop=otop-1;
o=op[otop];
if (o=='+')
rtop=0;
else
if (o=='-') rtop=1;
}
//原先的放回
op[otop]=o;
otop=otop+1;
//新的符号入栈
op[otop]=ex[i];
otop=otop+1;
}
}
i=i+1;
}
while (otop!=0)
{
//数字出战
top=top-1;
x=s[top];
top=top-1;
y=s[top];
//符号出栈
otop=otop-1;
o=op[otop];
s[top]=calc(o,x,y);
top=top+1;
}
ans= s[0];
//输出结果
printf("%s=%d\n",ex,ans);
}