precedence = {
'+': 1,
'-': 1,
'*': 2,
'/': 2
}
noncommunicative = '-/'
def prefix_to_infix(prefix):
stack = []
for token in reversed(prefix):
if precedence_current := precedence.get(token):
value_left, precedence_left = stack.pop()
value_right, precedence_right = stack.pop()
if 0 < precedence_left < precedence_current:
value_left = f'({value_left})'
if (
0 < precedence_right < precedence_current or
precedence_right == precedence_current and
token in noncommunicative
):
value_right = f'({value_right})'
stack.append((f'{value_left}{token}{value_right}', precedence_current))
else:
stack.append((token, 0))
return stack[0][0]
print(prefix_to_infix('+/-94*5-736'))
print(prefix_to_infix('-+---+78*/5426*7230'))
cHJlY2VkZW5jZSA9IHsKICAgICcrJzogMSwKICAgICctJzogMSwKICAgICcqJzogMiwKICAgICcvJzogMgp9Cm5vbmNvbW11bmljYXRpdmUgPSAnLS8nCgpkZWYgcHJlZml4X3RvX2luZml4KHByZWZpeCk6CiAgICBzdGFjayA9IFtdCiAgICBmb3IgdG9rZW4gaW4gcmV2ZXJzZWQocHJlZml4KToKICAgICAgICBpZiBwcmVjZWRlbmNlX2N1cnJlbnQgOj0gcHJlY2VkZW5jZS5nZXQodG9rZW4pOgogICAgICAgICAgICB2YWx1ZV9sZWZ0LCBwcmVjZWRlbmNlX2xlZnQgPSBzdGFjay5wb3AoKQogICAgICAgICAgICB2YWx1ZV9yaWdodCwgcHJlY2VkZW5jZV9yaWdodCA9IHN0YWNrLnBvcCgpCiAgICAgICAgICAgIGlmIDAgPCBwcmVjZWRlbmNlX2xlZnQgPCBwcmVjZWRlbmNlX2N1cnJlbnQ6CiAgICAgICAgICAgICAgICB2YWx1ZV9sZWZ0ID0gZicoe3ZhbHVlX2xlZnR9KScKICAgICAgICAgICAgaWYgKAogICAgICAgICAgICAgICAgMCA8IHByZWNlZGVuY2VfcmlnaHQgPCBwcmVjZWRlbmNlX2N1cnJlbnQgb3IKICAgICAgICAgICAgICAgIHByZWNlZGVuY2VfcmlnaHQgPT0gcHJlY2VkZW5jZV9jdXJyZW50IGFuZAogICAgICAgICAgICAgICAgdG9rZW4gaW4gbm9uY29tbXVuaWNhdGl2ZQogICAgICAgICAgICApOgogICAgICAgICAgICAgICAgdmFsdWVfcmlnaHQgPSBmJyh7dmFsdWVfcmlnaHR9KScKICAgICAgICAgICAgc3RhY2suYXBwZW5kKChmJ3t2YWx1ZV9sZWZ0fXt0b2tlbn17dmFsdWVfcmlnaHR9JywgcHJlY2VkZW5jZV9jdXJyZW50KSkKICAgICAgICBlbHNlOgogICAgICAgICAgICBzdGFjay5hcHBlbmQoKHRva2VuLCAwKSkKICAgIHJldHVybiBzdGFja1swXVswXQoKcHJpbnQocHJlZml4X3RvX2luZml4KCcrLy05NCo1LTczNicpKQpwcmludChwcmVmaXhfdG9faW5maXgoJy0rLS0tKzc4Ki81NDI2KjcyMzAnKSk=