# your code goes here def binomial(n,k): if n < 0 or k < 0 or k > n: return 0 b = 1 for i in range(k): b = b*(n-i)//(i+1) return b def unchoose(n,S): k = len(S) if k == 0 or k == n: return 0 j = S[0] if k == 1: return j S = [x-1 for x in S] if not j: return unchoose(n-1,S[1:]) return binomial(n-1,k-1)+unchoose(n-1,S) def choose(X,k): n = len(X) if k < 0 or k > n: return [] if not k: return [[]] if k == n: return [X] return [X[:1] + S for S in choose(X[1:],k-1)] + choose(X[1:],k) (n,k) = (7,3) for S in choose(list(range(n)),k): print((unchoose(n,S),S))
Standard input is empty
(0, [0, 1, 2]) (1, [0, 1, 3]) (2, [0, 1, 4]) (3, [0, 1, 5]) (4, [0, 1, 6]) (5, [0, 2, 3]) (6, [0, 2, 4]) (7, [0, 2, 5]) (8, [0, 2, 6]) (9, [0, 3, 4]) (10, [0, 3, 5]) (11, [0, 3, 6]) (12, [0, 4, 5]) (13, [0, 4, 6]) (14, [0, 5, 6]) (15, [1, 2, 3]) (16, [1, 2, 4]) (17, [1, 2, 5]) (18, [1, 2, 6]) (19, [1, 3, 4]) (20, [1, 3, 5]) (21, [1, 3, 6]) (22, [1, 4, 5]) (23, [1, 4, 6]) (24, [1, 5, 6]) (25, [2, 3, 4]) (26, [2, 3, 5]) (27, [2, 3, 6]) (28, [2, 4, 5]) (29, [2, 4, 6]) (30, [2, 5, 6]) (31, [3, 4, 5]) (32, [3, 4, 6]) (33, [3, 5, 6]) (34, [4, 5, 6])