#include<bits/stdc++.h>
using namespace std;
int m,n,l;
int tp1[40],tp2[40],tp[110];
string s;
void exprint(){
cout<<s<<endl;
}
void explosion(){
for(int i=0;i<=30;i++){
for(int j=0;j<=30;j++){
tp[i+j]+=tp1[i]*tp2[j];
}
}int fl=0;
for(int i=100;i>=0;i--){
if(tp[i]){
if(fl++)cout<<"+";
printf("%d",tp[i]);
if(i>0)printf("a^%d",i);
}
}
cout<<endl;
}
int main(){
while(getline(cin,s)){
int i,j,k,x,y,z,t,p;
memset(tp1,0,sizeof tp1);
memset(tp2,0,sizeof tp2);
memset(tp,0,sizeof tp);
l=s.size();
for(k=0;k<l;k++)
if(s[k]=='*')break;
if(k==l){
exprint();continue;
}
for(i=0;i<k;i++){
if(s[i]=='a'){
x=0;t=i-1;p=1;
while(s[t]>='0'&&s[t]<='9'||s[t]==' '){
if(s[t]==' '){
t--;continue;
}
x=x+(s[t]-'0')*p;p*=10;t--;
}t=i;p=1;
i=i+1;while(s[i]==' ')i++;
if(s[i]=='^'){
t=i+1;p=0;
while(s[t]>='0'&&s[t]<='9'||s[t]==' '){
if(s[t]==' '){
t++;continue;
}
p=p*10+s[t]-'0';t++;
}
}
tp1[p]+=x;
}
}
for(i=k-1;;i--){
if(s[i]=='a')break;
if(s[i]=='+'){
t=i+1;x=0;
while(s[t]>='0'&&s[t]<='9'||s[t]==' '){
if(s[t]==' '){
t++;continue;
}
x=x*10+s[t]-'0';t++;
}
tp1[0]+=x;
break;
}
}
for(j=k+1;j<l;j++){
if(s[j]=='a'){
x=0;t=j-1;p=1;
while(s[t]>='0'&&s[t]<='9'||s[t]==' '){
if(s[t]==' '){
t--;continue;
}
x=x+(s[t]-'0')*p;p*=10;t--;
}t=j;p=1;
j=j+1;while(s[j]==' ')j++;
if(s[j]=='^'){
t=j+1;p=0;
while(s[t]>='0'&&s[t]<='9'||s[t]==' '){
if(s[t]==' '){
t++;continue;
}
p=p*10+s[t]-'0';t++;
}
}
tp2[p]+=x;
}
}
for(i=l-1;i>k;i--){
if(s[i]=='a')break;
if(s[i]=='+'){
t=i+1;x=0;
while(s[t]>='0'&&s[t]<='9'||s[t]==' '){
if(s[t]==' '){
t++;continue;
}
x=x*10+s[t]-'0';t++;
}
tp2[0]+=x;
break;
}
}
explosion();
}
return 0;
}