Jogo da Vida

O Jogo da Vida de Conway é um processo de simulação (conhecido como autômato celular ) criado pelo matemático britânico John Conway para reproduzir, por meio de uma matriz, processos de mudança em grupos de seres vivos. As regras do jogo indicam como a matriz é modificada a cada passo. Os valores da matriz em um determinado passo são coletivamente chamados de estado do jogo.

Mais especificamente, o jogo acontece em uma matriz quadrada N×NN \times N (ou seja, com NN linhas e NN colunas) no qual cada célula está viva (representada pelo número 11) ou morta (representada pelo número 00). Para simular o próximo estado do autômato, para cada célula calculamos o seu número de vizinhos vivos (duas células são consideradas vizinhas se elas são adjacentes diagonalmente, horizontalmente ou verticalmente – ou seja, uma célula pode ter até 88 vizinhas), e decidimos se a célula estará viva ou morta no próximo estado de acordo com as seguintes regras:

Toda célula fora da matriz é considerada morta, ou seja, células fora da matriz nunca afetam a quantidade de vizinhos vivos de alguma célula. Observe que as regras são aplicadas em todas as células simultaneamente, uma vez a cada passo.

Dada uma matriz que representa o estado inicial do jogo e um inteiro positivo QQ, sua tarefa é determinar o QQ-ésimo estado do jogo de acordo com as regras descritas acima, ou seja, o valor de cada célula da matriz após QQ passos do jogo.

A figura abaixo mostra um exemplo de jogo em uma matriz 5×55 \times 5 e seus estados para diferentes valores de QQ. Células vivas são representadas com a cor preta e células mortas são representadas com a cor branca.

Entrada

A primeira linha contém dois números inteiros, NN e QQ, representando, respectivamente, o número de linhas/colunas da matriz e o número de passos a serem simulados.

As próximas NN linhas contém NN caracteres cada. O jj-ésimo caractere da ii-ésima linha representa o estado inicial da célula na linha ii e coluna jj. Caso o caractere seja ‘0’, a célula naquela posição inicia o jogo morta; caso o caractere seja ‘1’, a célula inicia o jogo viva.

Saída

O seu programa deverá imprimir NN linhas, cada uma contendo NN caracteres. Na ii-ésima linha, o jj-ésimo caractere deve representar o QQ-ésimo estado da célula na linha ii e coluna jj. Caso a célula esteja morta, o caractere deve ser ‘0’; se ela estiver viva, o caractere deve ser ‘1’.

Restrições

Informações sobre a pontuação

A tarefa vale 100 pontos. Estes pontos estão distribuídos em subtarefas, cada uma com suas restrições adicionais às definidas acima.

Seu programa pode resolver corretamente todas ou algumas das subtarefas acima (elas não precisam ser resolvidas em ordem). Sua pontuação final na tarefa é a soma dos pontos de todas as subtarefas resolvidas corretamente por qualquer uma das suas submissões.

Exemplo de Entrada 1

5 3
00000
01110
01000
00100
00000

Exemplo de Saída 1

01100
11000
00100
00000
00000

Exemplo de Entrada 2

15 1
000010000010000
000010000010000
000011000110000
000000000000000
111001101100111
001010101010100
000011000110000
000000000000000
000011000110000
001010101010100
111001101100111
000000000000000
000011000110000
000010000010000
000010000010000

Exemplo de Saída 2

000000000000000
000110000011000
000011000110000
010010101010010
011101101101110
001010101010100
000111000111000
000000000000000
000111000111000
001010101010100
011101101101110
010010101010010
000011000110000
000110000011000
000000000000000

Exemplo de Entrada 3

15 3
000010000010000
000010000010000
000011000110000
000000000000000
111001101100111
001010101010100
000011000110000
000000000000000
000011000110000
001010101010100
111001101100111
000000000000000
000011000110000
000010000010000
000010000010000

Exemplo de Saída 3

000010000010000
000010000010000
000011000110000
000000000000000
111001101100111
001010101010100
000011000110000
000000000000000
000011000110000
001010101010100
111001101100111
000000000000000
000011000110000
000010000010000
000010000010000