#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>

#define MAX_SIZE 1000
typedef struct{
    char array[MAX_SIZE];
    int top;
}charStack;
void initStack(CharStack*stack){
    stack->top=-1;
}
void push(Charstack*stack,char value)
{
     if(stack->top<MAX_SIZE - 1){
         stack->array[++(stack->top)] =value;
     }
}
char pop(CharStack*stack){
    if(stack->top >=0){
        return stack->array[(stack->top)];
    }
    return '\0';
}
int isEmpty(CharStack*stack){
    return stack->top == -1;
}
int isOperator(char c){
    return c =='+' || c=='-' || c=='*' || c=='/' || c=='^';
}
char*prefixToPostfix(const char*expression){
    static char result[MAX_SIZE];
    CharStack stack;
    initStack(&stack);
    int j = 0;
    for(int i = strlen(expression)-1; i>=0;i--){
        char c=expression[i];
        if(isspace(c)){
            continue;
        }
        if(isalnum(c)){
            push(&stack,c);
        }else if(isOperator(c)){
            if(stack.top<1){
                return "Invalid input";
            }
        }
        char op1=pop(&stack);
        char op2=pop(&stack);
        
        result[j++]=op1;
        result[j++]=op2;
        result[j++]=c;
        push(&stack,result[j - 1]);
    }else{
        return "Invalid input"; }
    }
    while(!isEmpty(&stack)){
        result[j++] = pop(&stack);
    }
    result[j] = '\0';
    for(int k = 0;k<j/2;k++){
        char temp = result[k];
        result[k]=result[j-k-1];
        result[j-k-1]=temp;
    }
    return result;
}
int main(){
    char prefixExpression(MAX_SIZE);
    fgets(prefixExpression,sizeof(prefixExpression),stdin);
    size_t len=strlen(prefixExpression);if(len>0 && prefixExpression [len- 1] =='\n'){
        prefixExpression[len - 1] = '\0';
    }
    char*postfixExpression=prefixToPostfix(prefixExpression);
    printf("%s\n",postfixExpression);
    return 0;
}