Exercise 1 solution from itertools import product for n in range(1, 6): pairs = [("m%d" % i, "p%d" % i) for i in range(1, n + 1)] combos = set(product(*pairs)) print(n, len(combos), 2 ** n, len(combos) == 2 ** n) Output: 1 2 2 True 2 4 4 True 3 8 8 True 4 16 16 True 5 32 32 True Reading it: product picks one chromosome from each pair in every possible way, so each extra pair doubles the count.