import math
def reverse_polish(input_stack):
f = {
'+': lambda t, b: b + t,
'-': lambda t, b: b - t,
'*': lambda t, b: b * t,
'/': lambda t, b: b / t,
'//':lambda t, b: b // t,
'%': lambda t, b: b % t,
'^': lambda t, b: b ** t}
short_stack = []
for i in input_stack:
if i == '!':short_stack.append(math.factorial(short_stack.pop()))
elif i in f:
t, b = short_stack.pop(), short_stack.pop()
short_stack.append(f[i](t, b))
else:short_stack.append(float(i))
return short_stack[0] if len(short_stack) == 1 else 'failed'
print(reverse_polish("0.5 1 2 ! * 2 1 ^ + 10 + *".split()))
print(reverse_polish("1 2 3 4 ! + - / 100 *".split()))
print(reverse_polish("100 807 3 331 * + 2 2 1 + 2 + * 5 ^ * 23 10 558 * 10 * + + *".split()))
aW1wb3J0IG1hdGgKZGVmIHJldmVyc2VfcG9saXNoKGlucHV0X3N0YWNrKToKICAgIGYgPSB7CiAgICAgICAgJysnOiBsYW1iZGEgdCwgYjogYiArIHQsCiAgICAgICAgJy0nOiBsYW1iZGEgdCwgYjogYiAtIHQsCiAgICAgICAgJyonOiBsYW1iZGEgdCwgYjogYiAqIHQsCiAgICAgICAgJy8nOiBsYW1iZGEgdCwgYjogYiAvIHQsCiAgICAgICAgJy8vJzpsYW1iZGEgdCwgYjogYiAvLyB0LAogICAgICAgICclJzogbGFtYmRhIHQsIGI6IGIgJSB0LAogICAgICAgICdeJzogbGFtYmRhIHQsIGI6IGIgKiogdH0KICAgIHNob3J0X3N0YWNrID0gW10KICAgIGZvciBpIGluIGlucHV0X3N0YWNrOgogICAgICAgIGlmIGkgPT0gJyEnOnNob3J0X3N0YWNrLmFwcGVuZChtYXRoLmZhY3RvcmlhbChzaG9ydF9zdGFjay5wb3AoKSkpCiAgICAgICAgZWxpZiBpIGluIGY6CiAgICAgICAgICAgIHQsIGIgPSBzaG9ydF9zdGFjay5wb3AoKSwgc2hvcnRfc3RhY2sucG9wKCkKICAgICAgICAgICAgc2hvcnRfc3RhY2suYXBwZW5kKGZbaV0odCwgYikpCiAgICAgICAgZWxzZTpzaG9ydF9zdGFjay5hcHBlbmQoZmxvYXQoaSkpCiAgICByZXR1cm4gc2hvcnRfc3RhY2tbMF0gaWYgbGVuKHNob3J0X3N0YWNrKSA9PSAxIGVsc2UgJ2ZhaWxlZCcKCnByaW50KHJldmVyc2VfcG9saXNoKCIwLjUgMSAyICEgKiAyIDEgXiArIDEwICsgKiIuc3BsaXQoKSkpCnByaW50KHJldmVyc2VfcG9saXNoKCIxIDIgMyA0ICEgKyAtIC8gMTAwICoiLnNwbGl0KCkpKQpwcmludChyZXZlcnNlX3BvbGlzaCgiMTAwIDgwNyAzIDMzMSAqICsgMiAyIDEgKyAyICsgKiA1IF4gKiAyMyAxMCA1NTggKiAxMCAqICsgKyAqIi5zcGxpdCgpKSkK