def permutations2(items):
if len(items) == 1:
yield tuple(items)
return
for index, fixed in enumerate(items):
without_fixed = items[:index] + items[index + 1:]
for x in permutations2(without_fixed):
if fixed == x[0]:
continue
yield (fixed, *x)
for p in permutations2(list('abca')):
print(''.join(p))
ZGVmIHBlcm11dGF0aW9uczIoaXRlbXMpOgogICAgaWYgbGVuKGl0ZW1zKSA9PSAxOgogICAgICAgIHlpZWxkIHR1cGxlKGl0ZW1zKQogICAgICAgIHJldHVybgogICAgZm9yIGluZGV4LCBmaXhlZCBpbiBlbnVtZXJhdGUoaXRlbXMpOgogICAgICAgIHdpdGhvdXRfZml4ZWQgPSBpdGVtc1s6aW5kZXhdICsgaXRlbXNbaW5kZXggKyAxOl0KICAgICAgICBmb3IgeCBpbiBwZXJtdXRhdGlvbnMyKHdpdGhvdXRfZml4ZWQpOgogICAgICAgICAgICBpZiBmaXhlZCA9PSB4WzBdOgogICAgICAgICAgICAgICAgY29udGludWUKICAgICAgICAgICAgeWllbGQgKGZpeGVkLCAqeCkKCgpmb3IgcCBpbiBwZXJtdXRhdGlvbnMyKGxpc3QoJ2FiY2EnKSk6CiAgICBwcmludCgnJy5qb2luKHApKQo=