#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];
    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 "Inbvalid 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(int k=0;k<j/2;k++){
                char temp=rsult[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 -1]=='\n'){
            prefixExprssion[len -1]='\0';
        }
        char*prefixExpression=prefix(prefixExpression);
        printf("%s\n",postfixExpression);
        return 0;
}