No episódio Futurama, os membros da tripulação do Prisioneiro de Benda trocam de corpo entre si, com a intenção de que nenhum par de corpos pode ter suas mentes trocadas mais de uma vez.
Desafio
Escreva um programa ou função que aceite uma coleção válida de trocas mente-corpo que já ocorreram e produza um conjunto legal de trocas que retornarão cada mente ao seu corpo original. Os identificadores para essas coleções mente-corpo devem ser cadeias que não conterão novas linhas. Você pode adicionar até duas pessoas (com nome distinto) que não tiveram trocas anteriores no grupo de entrada. (Prova de que você só precisa de no máximo 2 órgãos adicionais). No entanto, você deve adicionar o número mínimo de pessoas necessárias para resolver o problema.
A entrada e a saída podem assumir qualquer forma clara; no entanto, nenhuma informação adicional também pode ser armazenada. Você pode assumir que é sempre válido. Isso é código de golfe, então o vencedor é o envio com o menor número de bytes.
Exemplos
[('A','B'),('C','D')] -> [('A','C'),('B','D'),('A','D'),('B','C')]
['A','B'] -> ['C','D','A','C','B','D','A','D','B','C']
[('A','B'),('C','D'),('A','C'),('A','D')] -> [('B', 'E'), ('A', 'E'), ('C', 'B'), ('C', 'E')]
"A\nB\nC\nD\n" -> "A\nC\nB\nD\nA\nD\nB\nC\n"
O do show:
[("Amy","Hubert"),("Bender","Amy"),("Hubert","Turanga"),("Amy","Wash Bucket"),("Wash Bucket","Nikolai"),("Phillip","John"),("Hermes","Turanga")]
A solução do programa, apresentada abaixo é inválida:
[("Clyde","Phillip"),("Ethan","John"),("Clyde","John"),("Ethan",Phillip"),("Clyde","Hubert"),("Ethan","Wash Bucket"),("Clyde","Leela"),("Ethan","Nikolai"),("Clyde","Hermes"),("Ethan","Bender"),("Clyde","Amy"),("Ethan","Hubert"),("Clyde","Wash Bucket")]
Isso é inválido porque Ethan e Clyde são desnecessários devido ao pouco uso de Fry Phillip, Zoidberg John e Hermes Hermes. Uma solução válida para este caso é fornecida abaixo:
[("Philip","Hubert"),("John","Wash Bucket"),("Philip","Turanga"),("John","Nikolai"),("Philip","Hermes"),("John","Bender"),("Philip","Amy"),("John","Hubert"),("Philip","Wash Bucket")]
Observe que existem claramente muitas respostas possíveis para qualquer entrada válida. Qualquer um é válido.
[('Nikolai', 'Phillip'), ('Nikolai', 'Hubert'), ('Nikolai', 'Turanga'), ('Nikolai', 'Bender'), ('Phillip', 'Amy'), ('John', 'Wash Bucket'), ('Nikolai', 'John'), ('Phillip', 'Wash Bucket'), ('Hubert', 'John'), ('Bender', 'Hermes')]