#include <iostream>
#include <vector>
using namespace std;
int main() {
char str[100]; //строку меням на массив символов
vector<char> stack; // строку меняем на вектор символов
char word, word_last;
int n=0, i=0; // переменные для помещения элементов в массив и пошаговой распечатки
while(cin>>word){
if((word>=48)&&(word<=57)){ //если символ это число
if((word_last>=48)&&(word_last<=57)){ // Проверка, я вляется ли предыдущий символ - числом
str[n++]=word; //Если да , то просто добавляем его, тем самым не разрушая число
}
else{
str[n++]=' '; // В противном случае добавляем пробел и добавляем символ в главную строку
str[n++]=word;
}
}
if(((word>=42)&&(word<=47))||(word==94)){ //если символ это операнд
if(word=='*'){ //Замена умножения
word='.';
}
if(word=='-'){ //Замена минуса
word=',';
}
if(stack.empty()){ // Если стэк пустой - то просто кладем символ в стэк
stack.push_back(word);
}
else{ // Если стэк не пуст
if((stack.back()>=word)||(stack.back()==word-1)||(stack.back()==word+1)){
while((stack.back()>=word)||(stack.back()==word-1)||(stack.back()==word+1)){
str[n++]=' '; // Если верхний элемент стэка имеет больший приоритет
str[n++]=stack.back(); //выталкиваем все элементы из стэка
stack.pop_back(); //lо тех пор, пока приоритет верхнего элемента не будет
} //ниже входящего символа
stack.push_back(word);
}
else{ // если же верхний элемент ниже приоритетом - то просто кладем символ в стэк
stack.push_back(word);
}
}
}
if(word=='('){ //Если символ - открывающая скобка
stack.push_back(word); //добавляем ее в стэк
}
if(word==')'){ //Если встречающийся симвлл - закрывающая скобка
while(stack.back()!='('){ // пока в стэке не встретится открывающая скобка
str[n++]=' '; // выталкиваем в главную строку все символы
str[n++]=stack.back();
stack.pop_back();
}
stack.pop_back(); //Удаляем открывающую скобку из стека
}
word_last=word; //Присваеваем значение текущего символа для проверки в последующем цикле
//cout << "Numb:" << i++ << endl; // Распечатка пошаговых действий
//cout << "Word: |" << word << endl;
}
while(!stack.empty()){ //При окончании строки выталкиваем все символы из стека
str[n++]=' ';
str[n++]=stack.back();
stack.pop_back();
}
str[n]='\0';
for( int i=0; str[i]!='\0';i++){ // Проходим циклом финальную строку для возврата требуемых символов
if(str[i]=='.')
str[i]='*';
if(str[i]==',')
str[i]='-';
}
cout <<"ИТОГ: ___ " << endl;
for(int i=0; str[i]!='\0'; i++){
cout << str[i];
}
cout << endl;
return 0;
}