#include <stdio.h>
#include <stdlib.h>
typedef struct SNode
{
char data;
struct SNode* next;
}SNode;
void pushs(SNode* pS, char e)
{
SNode* pR, *pQ;
pQ = pS;
while (pQ->next != NULL)
pQ = pQ->next;
pR = (SNode*)malloc(sizeof(SNode));
pR->next = NULL;
pR->data = e;
pQ->next = pR;
}
void push(SNode* pT, char x)
{
SNode* pR;
pR = (SNode*)malloc(sizeof(SNode));
pR->data = x;
pR->next = pT->next;
pT->next = pR;
}
char gettop(SNode* pS)
{
if (pS->next == NULL)
return 0;
char e;
SNode* pR;
pR = pS->next;
e = pR->data;
pS->next = pR->next;
free(pR);
return e;
}
int main()
{
char x, e;
SNode* pT, * pS, * pR;
pT = (SNode*)malloc(sizeof(SNode));
pT->next = NULL;
pS = (SNode*)malloc(sizeof(SNode));
pS->next = NULL;
while (1)
{
scanf("%c", &x);
if (x == '\n')
break;
else if (x == '(')
push(pT, x);
else if (x == ')')
while (1)
{
e = gettop(pT);
if (e == '(')
break;
else
pushs(pS, e);
}
else if (x == '*' || x == '/')
while (1)
{
if (pT->next->data == '+' || pT->next->data == '-' || pT->next->data == '(')
{
push(pT, x);
break;
}
else
{
e = gettop(pT);
pushs(pS, e);
}
}
else if (x == '+' || x == '-')
while (1)
{
if (pT->next == NULL || pT->next->data == '(')
{
push(pT, x);
break;
}
else
{
e = gettop(pT);
pushs(pS, e);
}
}
else
pushs(pS, x);
}
while (pT->next != NULL)
{
e = gettop(pT);
pushs(pS, e);
}
pR = pS->next;
while (pR != NULL)
{
printf("%c", pR->data);
pR = pR->next;
}
return 0;
}