Combinações de Substituição de Cordas

Então eu tenho uma string '1xxx1' e eu quero substituir um certo número (talvez todos talvez nenhum) de x com um caractere, digamos '5'. Eu quero todas as combinações possíveis (... talvez permutações) da string onde x é substituído ou deixado como x. Eu gostaria que esses resultados fossem armazenados em uma lista.

Então, o resultado desejado seria

>>> myList = GenerateCombinations('1xxx1', '5')
>>> print myList
['1xxx1','15xx1','155x1','15551','1x5x1','1x551','1xx51']

Obviamente, gostaria que fosse capaz de manipular strings de qualquer tamanho com qualquer quantidade de xs, além de ser capaz de substituir qualquer número. Eu tentei usar loops e recursão para descobrir isso sem sucesso. Qualquer ajuda seria apreciada.

questionAnswers(1)

yourAnswerToTheQuestion