fork(2) download
  1. def rrpn(expr):
  2. if len (expr) == 1:
  3. return expr
  4. exp = expr[1:-1]
  5. ps = rpn(exp)
  6. s1=s2=s3=""
  7. if len(ps) >= 2:
  8. first = sorted(ps, key=lambda x:x[0])[0]
  9. last = sorted(ps, key=lambda x:x[1])[-1]
  10. s1 = exp[first[0]:first[1]+1]
  11. s2 = exp[last[0]:last[1]+1]
  12. s3 = exp[first[1]+1]
  13. elif len(ps) ==1:
  14. if ps[0][0] == 2:
  15. s1 = exp[0]
  16. s2 = exp[ps[0][0]:ps[0][1]+1]
  17. s3 = exp[1]
  18. elif ps[0][0] == 0:
  19. s2 = exp[0]
  20. s1 = exp[ps[0][0]:ps[0][1]+1]
  21. s3 = exp[ps[0][1]+1]
  22. else:
  23. s1 = exp[0]
  24. s2 = exp[2]
  25. s3 = exp[1]
  26. return rrpn(s1) + rrpn(s2) + s3
  27.  
  28.  
  29.  
  30.  
  31. def rpn(expr):
  32. prs = []
  33. cprs = []
  34.  
  35. for i in range(len(expr)):
  36. s = expr[i]
  37. if s == "(":
  38. prs.append([i])
  39. elif s == ")":
  40. prs[-1].append(i)
  41. cprs.append(prs.pop())
  42. return cprs
  43. count = int(input())
  44. res = ""
  45. for i in range(count):
  46. expr = input()
  47. if i>0:
  48. res += "\n"
  49. res += rrpn(expr)
  50. print(res)
  51.  
  52.  
Success #stdin #stdout 0.02s 9308KB
stdin
2
(a+b)
(a+(b-c))
stdout
ab+
abc-+