
class Stack:
def __init__(self):
self.items = []
def isEmpty(self):
return self.items == []
def top(self):
if self.items == []:
raise StackUnderflow
return self.items[len(self.items) - 1]
def push(self,item):
return self.items.append(item)
def pop(self):
return self.items.pop()
def size(self):
return len(self.items)
operators = {"(": 1, "+": 3, "-": 3, "*": 5, "/": 5}
infix_operators = "+-*/()"
def houzhui(k):
s = Stack() #放操作符
exp = [] #放数字
a = despace(k)
for i in range(len(a)):
if a[i] == "(": # 判别“(”
s.push(a[i])
elif a[i] not in infix_operators:
exp.append(a[i])
elif a[i] == ")":
while not s.isEmpty() and s.top() != "(":
exp.append(s.pop())
if s.isEmpty():
raise SyntaxError("Missing \'(\'.")
s.pop() #删除栈中的“(”
else:
while(not s.isEmpty() and operators[a[i]] <= operators[s.top()]):
exp.append(s.pop())
s.push(a[i])
while not s.isEmpty():
if s.top() == "(":
raise SyntaxError("Extra\'(\' in expression.")
exp.append(s.pop())
return exp
def despace(s):
arr = []
for i in range(len(s)):
if s[i].isspace():
continue
arr.append(s[i])
return arr
a = input()
b = houzhui(a)
print(" ".join(b))