# Generate combinations (meh).

def combinations(sequence, k):
    def inner(start, n, res):
        if n == k:
            yield tuple(res)
        else:
            for i in range(start, len(sequence)):
                res[n] = sequence[i]
                yield from inner(i+1, n+1, res)
    return inner(0, 0, [None] * k)

# Show.

n = 5
a = list(range(1, 1+n))
for k in range(1, 1+n):
    print(f'{n} choose {k}')
    for x in combinations(a, k):
        print('', x)