python, itertools, перестановки, последовательности

В модуле itertools есть классы, с помощью которых можно получить возможные перестановки (кол-во перестановок последовательности из неодинаковых элементов длиной n будет n!):
for i in itertools.permutations('123',3): print ''.join(i)
for i in itertools.permutations('abcd',4): print ''.join(i)
Если нужно получить все возможные комбинации длиной m из элементов последовательности длиной n (неодинаковых), но с возможностью повтора элементов - можно воспользоваться itertools.product (количество таких комбинаций будет n^m):
for i in itertools.product('12345',repeat=2): print ''.join(i)
(кол-во 5^2)