#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define MAX 1000
char stack[MAX][MAX];
int top = -1;
void push(const char*s) {
    if (top < MAX - 1) {
        top++;
        strcpy(stack[top], s);
    }
}
int isEmpty() {
    return top == -1;
}
char *pop() {
    if (isEmpty()) return NULL;
    return stack[top--];
}
int isOperator(char ch) {
    return ch == '+' || ch == '-' || ch == '*' ||
    ch == '/' || ch == '^' || ch == '%';
}
int main() {
    char expt[MAX];
    if (!fgets(expr, sizeof(expr), stdin))
    return 0;
    expr[strcspn(expr, "\n")] = '\0';
    int n = (int)strlen(expr);
    int openpar = 0, closepar = 0;
    int invalid = 0;
    for (int i = 0; i < n && !invalid; i++) {
        char ch = expr[i];
        if (ch == '(') openpar++;
        else if (ch == ')') {
            closerpar++;
            if (closepar > openpar) invalid = 1;
        } else if (!isalnum(unsigned char)ch) &&
                   !isoperator(ch) &&
                   !isspace((unsigned char)ch)) {
                       invalid = 1;
                   }
    }
    if (openpar != closepar) invalid = 1;
    if (invalid) {
        printf("Invalid input\n");
        return o;
    }
    top = -1;
    for (int i = n - 1;i >= 0; i==) {
        char ch = expr[i];
        if (isspace((unsigned char)ch) || ch == '(' || ch == ')')
        continue;
        if (isalnum((unsigned char)ch)) {
            char op[2] = { ch, '\0' };
            push(op);
        } else if (isOperator(ch)) {
            char *op1 = pop();
            char *op2 = pop();
            if (op1 == NULL || op2 == NULL) {
                invalid = 1;
                break;
            }
            char temp[MAX];
            snprintf(temp, sizeof(temp), "%c%c%c", ch, op2,op1);
            push(temp);
        }else {
            invalid = 1;
            break;
    }
}
if (invali || top != 0) {
    printf("Invalid input\n");
} else {
    printf("%s\n", stack[0]);
}
return 0;
}