Проблема сводится к более простой: есть множество, как перебрать все комбинации произвольного числа элементов?
... как перебрать все комбинации произвольного числа элементов?
>>> import itertools
>>> num = '123'
>>> list(itertools.permutations(num))
[('1', '2', '3'), ('1', '3', '2'), ('2', '1', '3'), ('2', '3', '1'), ('3', '1', '2'), ('3', '2', '1')]
>>> letters = ['A', 'B', 'C']
>>> list(itertools.permutations(letters))
[('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]