
#include<bits/stdc++.h>
using namespace std;
string s;
int start,cnt=1,flag=0,term[105][4];
void setup(int begin,int i){
for(start=begin,flag=0;(s[start]!='+'||s[start]!='-')&&s[start]<=s.size()-1;start++){
if(s[start]=='^'||s[start]=='x'){flag=1;continue;}
term[i][flag]=10*term[i][flag]+s[start]-'0';
}
term[i][3]=(s[start]=='+'?1:0);
term[i][1]=max(1,term[i][1]);
if(!flag)term[i][2]=term[i][0],term[i][0]=0;
return;
}
void out_put(int i){
cout<<(term[i][3]?"+":"-");
cout<<term[i][0]*term[i][1];
if(term[i][1]-1)cout<<"x^"<<term[i][1]-1;
return;
}
int main(){
cin>>s;setup(0,1);
if(term[1][3])cout<<"-";
cout<<term[1][0]*term[1][1];
if(term[1][1]-1)cout<<"x^"<<term[1][1]-1;
for(int i=start;i<=s.size()-1;i++){
if(s[i]=='+')setup(i,cnt++);
}
for(int i=2;i<=cnt;i++){
if(!term[i][2])continue;
out_put(i);
}
return 0;
}