fundo
Alice e Bob jogam um jogo chamado construir uma palavra binária . Para jogar, você fixa um comprimento n >= 0
, um conjunto G
de n
palavras binárias chamadas de conjunto de metas e uma n
sequência t
contendo as letras A
e B
chamada de ordem do turno . O jogo dura por n
turnos 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 w
eles 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] = 0
em 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 n
e o conjunto G
como 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.
11101
duas vezes; o fato divertido ainda vale para os sets. Zgarb, a entrada pode conter elementos repetidos ou isso foi um erro?