fork download
  1. import itertools
  2.  
  3. def next_balanced_parens(s):
  4. num_pairs = len(s)//2
  5. depth = 0
  6. for i in range(len(s)-1, -1, -1):
  7. if s[i] == ")":
  8. depth += 1
  9. else:
  10. assert s[i] == "("
  11. depth -= 1
  12. if depth > 0:
  13. break
  14. else:
  15. return "(" * (num_pairs+1) + ")" * (num_pairs+1)
  16.  
  17. left = s[:i] + ")"
  18. l = num_pairs - left.count("(")
  19. r = num_pairs - left.count(")")
  20. return left + "("*l + ")"*r
  21.  
  22. def iter_balanced_parens():
  23. s = ""
  24. while True:
  25. yield s
  26. s = next_balanced_parens(s)
  27.  
  28. last = None
  29. for s in itertools.islice(iter_balanced_parens(), 100):
  30. if last is None or last < s or len(last) < len(s):
  31. print(s)
  32. else:
  33. print(s, "lexicographic ordering error!")
  34. last = s
Success #stdin #stdout 0.02s 9192KB
stdin
Standard input is empty
stdout
()
(())
()()
((()))
(()())
(())()
()(())
()()()
(((())))
((()()))
((())())
((()))()
(()(()))
(()()())
(()())()
(())(())
(())()()
()((()))
()(()())
()(())()
()()(())
()()()()
((((()))))
(((()())))
(((())()))
(((()))())
(((())))()
((()(())))
((()()()))
((()())())
((()()))()
((())(()))
((())()())
((())())()
((()))(())
((()))()()
(()((())))
(()(()()))
(()(())())
(()(()))()
(()()(()))
(()()()())
(()()())()
(()())(())
(()())()()
(())((()))
(())(()())
(())(())()
(())()(())
(())()()()
()(((())))
()((()()))
()((())())
()((()))()
()(()(()))
()(()()())
()(()())()
()(())(())
()(())()()
()()((()))
()()(()())
()()(())()
()()()(())
()()()()()
(((((())))))
((((()()))))
((((())())))
((((()))()))
((((())))())
((((()))))()
(((()(()))))
(((()()())))
(((()())()))
(((()()))())
(((()())))()
(((())(())))
(((())()()))
(((())())())
(((())()))()
(((()))(()))
(((()))()())
(((()))())()
(((())))(())
(((())))()()
((()((()))))
((()(()())))
((()(())()))
((()(()))())
((()(())))()
((()()(())))
((()()()()))
((()()())())
((()()()))()
((()())(()))
((()())()())
((()())())()
((()()))(())
((()()))()()
((())((())))