Convert an expression written in postfix notation to infix notation

A postfix expression is one where each operator comes after it's operands, while in an infix expression the operator is in between the operands. For example, the postfix expression ab+c/ is equivalent to (a+b)/c in infix notation

Your code should take a string of arbitrary length, convert it to postfix and return the equivalent infix expression

• Your Solution should detect invalid expressions and output "invalid" in that case.
• The only valid operators are +, -, *,/ and ^ (exponentiation operator)
• You can assume that all operands are single characters.
• Operands and operators may or may not be separated by spaces.
• Your solution must enclose expression in the minimal set of parentheses to appropriately preserve the order of operations.
``````def post_to_infix(expression):
prec = {'+': 0, '-' : 0, '*' : 1, "/" : 1, '%' : 1, '^': 2}
stack = []
for x in expression:
if x == " ":
continue
if x in prec.keys():
#['+','-','*','/','%','^']:
if len(stack) < 2:
return "invalid";
op2 = stack.pop()  # pop a wrapped list out
op1 = stack.pop()
if len(op2) > 1 and ((prec[op2[1]] < prec[x]) or (prec[op2[1]]== prec[x])):
op2 = "(%s)" % op2[0]
else:
op2 = op2[0]

if len(op1) > 1 and prec[op1[1]] < prec[x]:
op1 = "(%s)" % op1[0]
else:
op1 = op1[0]

stack.append(["%s%s%s" % (op1, x, op2), x])

else:
stack.append([x])
if len(stack) != 1:
return "invalid"
return stack.pop()[0]

s = post_to_infix("a b+cd--")
s = post_to_infix("")

print (s)
``````