fundo
Alice e Bob jogam um jogo chamado construir uma palavra binária . Para jogar, você fixa um comprimento n >= 0, um conjunto Gde npalavras binárias chamadas de conjunto de metas e uma nsequência tcontendo as letras Ae Bchamada de ordem do turno . O jogo dura por nturnos e, por sua vez i, o jogador definido por t[i]seleciona um pouco w[i]. Quando o jogo termina, os jogadores olham para a palavra binária que weles construíram. Se essa palavra for encontrada no objetivo definido G, Alice vence o jogo; caso contrário, Bob vence.
Por exemplo, vamos consertar n = 4, G = [0001,1011,0010]e t = AABA. Alice recebe o primeiro turno e escolhe w[0] = 0. O segundo turno também é de Alice, e ela escolhe w[1] = 0. Bob tem o terceiro turno e ele escolhe w[2] = 0. No turno final, Alice escolhe w[3] = 1. A palavra resultante,, 0001é encontrada em G, então Alice vence o jogo.
Agora, se Bob tivesse escolhido w[2] = 1, Alice poderia ter escolhido w[3] = 0em seu turno final e ainda vencer. Isso significa que Alice pode ganhar o jogo, não importa como Bob jogue. Nesta situação, Alice tem uma estratégia vencedora . Essa estratégia pode ser visualizada como uma árvore binária rotulada, que se ramifica nos níveis correspondentes aos turnos de Bob e cuja cada ramificação contém uma palavra de G:
A A B A
-0-0-0-1
\
1-0
Alice toca simplesmente seguindo os galhos na sua vez; não importa qual ramo Bob escolher, Alice finalmente vence.
Entrada
Você recebe como entrada o comprimento ne o conjunto Gcomo uma lista (possivelmente vazia) de cadeias de comprimento n.
Resultado
Sua saída é a lista de ordens de turno para as quais Alice possui uma estratégia vencedora, que é equivalente à existência de uma árvore binária, conforme descrito acima. A ordem das ordens de turno não importa, mas duplicatas são proibidas.
Regras detalhadas
Você pode escrever um programa completo ou uma função. No caso de um programa, você pode escolher o delimitador para entrada e saída, mas deve ser o mesmo para ambos. A menor contagem de bytes vence e as brechas padrão não são permitidas.
Casos de teste
3 [] -> []
3 [000,001,010,011,100,101,110,111] -> [AAA,AAB,ABA,ABB,BAA,BAB,BBA,BBB]
4 [0001,1011,0010] -> [AAAA,BAAA,AABA]
4 [0001,1011,0010,0110,1111,0000] -> [AAAA,BAAA,ABAA,BBAA,AABA,AAAB]
5 [00011,00110,00111,11110,00001,11101,10101,01010,00010] -> [AAAAA,BAAAA,ABAAA,BBAAA,AABAA,AAABA,BAABA,AAAAB,AABAB]
Fato engraçado
O número de ordens de turno na saída é sempre igual ao número de palavras no conjunto de metas.
11101duas vezes; o fato divertido ainda vale para os sets. Zgarb, a entrada pode conter elementos repetidos ou isso foi um erro?