#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct __Node{
char data;
struct __Node *left, *right;
}Node;
int isLetter(char c){
if(c >= 'A' && c <= 'Z') return 1;
else if(c == '\0') return -1;// == NULL
else return 0; //是加減乘除
}
char s[260];
int pos = 0;
void printNode(Node* head){
if(head != NULL){
int flag = 0;
char l = '\0', r = '\0';
if(head->left != NULL) l = head->left->data;
if(head->right != NULL) r = head->right->data;
if(isLetter(l) != isLetter(r)){
if(isLetter(l) == 0 && l != head->data) flag = 1;
if(isLetter(r) == 0 && r != head->data) flag = 2;
}
if(head->data == '/' || head->data == '*'){
if(isLetter(l) == 0 && l != head->data) flag = 1;
if(isLetter(r) == 0 && r != head->data) flag = 2;
if(isLetter(r) == 0 && isLetter(l) == 0 && l != head->data && r != head->data) flag = 3;
}
if(head->left != NULL){
if(flag == 1 || flag == 3) printf("(");
printNode(head->left);
if(flag == 1 || flag == 3) printf(")");
}
printf("%c", head->data);
if(head->right != NULL){
if(flag == 2 || flag == 3) printf("(");
printNode(head->right);
if(flag == 2 || flag == 3) printf(")");
}
}
return;
}
Node* prefix(){
Node* nd = (Node*)malloc(sizeof(Node));
nd->left = NULL, nd->right = NULL;
nd->data = s[pos];
if(pos < strlen(s)){
if(nd->data < 'A' || nd->data > 'Z'){
pos++;
nd->left = prefix();
pos++;
nd->right = prefix();
}
}
return nd;
}
int main(){
scanf("%s", &s);
Node* init = prefix();
printNode(init);
printf("\n");
}