#!/usr/bin/python3

## Usage:  python3 parens.py

"""Print the parenthesized expressions up to length 6."""

import itertools

def parens(n,s):
    if n == 1:
        return [s]
    return itertools.chain.from_iterable(
        [itertools.product(parens(k,s),parens(n-k,s+k)) for k in range(1,n)])

for n in range(7):
    for p in parens(n,0):
        print (p)

## Output:

### 0
### (0, 1)
### (0, (1, 2))
### ((0, 1), 2)
### (0, (1, (2, 3)))
### (0, ((1, 2), 3))
### ((0, 1), (2, 3))
### ((0, (1, 2)), 3)
### (((0, 1), 2), 3)
### (0, (1, (2, (3, 4))))
### (0, (1, ((2, 3), 4)))
### (0, ((1, 2), (3, 4)))
### (0, ((1, (2, 3)), 4))
### (0, (((1, 2), 3), 4))
### ((0, 1), (2, (3, 4)))
### ((0, 1), ((2, 3), 4))
### ((0, (1, 2)), (3, 4))
### (((0, 1), 2), (3, 4))
### ((0, (1, (2, 3))), 4)
### ((0, ((1, 2), 3)), 4)
### (((0, 1), (2, 3)), 4)
### (((0, (1, 2)), 3), 4)
### ((((0, 1), 2), 3), 4)
### (0, (1, (2, (3, (4, 5)))))
### (0, (1, (2, ((3, 4), 5))))
### (0, (1, ((2, 3), (4, 5))))
### (0, (1, ((2, (3, 4)), 5)))
### (0, (1, (((2, 3), 4), 5)))
### (0, ((1, 2), (3, (4, 5))))
### (0, ((1, 2), ((3, 4), 5)))
### (0, ((1, (2, 3)), (4, 5)))
### (0, (((1, 2), 3), (4, 5)))
### (0, ((1, (2, (3, 4))), 5))
### (0, ((1, ((2, 3), 4)), 5))
### (0, (((1, 2), (3, 4)), 5))
### (0, (((1, (2, 3)), 4), 5))
### (0, ((((1, 2), 3), 4), 5))
### ((0, 1), (2, (3, (4, 5))))
### ((0, 1), (2, ((3, 4), 5)))
### ((0, 1), ((2, 3), (4, 5)))
### ((0, 1), ((2, (3, 4)), 5))
### ((0, 1), (((2, 3), 4), 5))
### ((0, (1, 2)), (3, (4, 5)))
### ((0, (1, 2)), ((3, 4), 5))
### (((0, 1), 2), (3, (4, 5)))
### (((0, 1), 2), ((3, 4), 5))
### ((0, (1, (2, 3))), (4, 5))
### ((0, ((1, 2), 3)), (4, 5))
### (((0, 1), (2, 3)), (4, 5))
### (((0, (1, 2)), 3), (4, 5))
### ((((0, 1), 2), 3), (4, 5))
### ((0, (1, (2, (3, 4)))), 5)
### ((0, (1, ((2, 3), 4))), 5)
### ((0, ((1, 2), (3, 4))), 5)
### ((0, ((1, (2, 3)), 4)), 5)
### ((0, (((1, 2), 3), 4)), 5)
### (((0, 1), (2, (3, 4))), 5)
### (((0, 1), ((2, 3), 4)), 5)
### (((0, (1, 2)), (3, 4)), 5)
### ((((0, 1), 2), (3, 4)), 5)
### (((0, (1, (2, 3))), 4), 5)
### (((0, ((1, 2), 3)), 4), 5)
### ((((0, 1), (2, 3)), 4), 5)
### ((((0, (1, 2)), 3), 4), 5)
### (((((0, 1), 2), 3), 4), 5)
