#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.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 isOpeartor(char c){
    return (c == '+' || c == '-' || c == '*' || c ==  '/' || c == '^');
}
char*prefixToPostfix(const char*expression){
    static char result[MAX_SIZE];
    CharStack stack;
    intStack(&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);
    }
    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];
    // printf("Enter a prefix expression");
    fgets(prefixExpression,sizeof(prefixExpression),stdin);
    size_t len = strlen(prefixExpression);
    if (len > 0 && prefixExpression[len-1]=='\n') {
        prefixExpression[len - 1] ='\0';
    }
    
        char*postfixExpression=prefix ToPostfix(prefixExpression);
        printf("%s\n",postfixExpression);
        return 0;
}