Você recebe uma posição no tabuleiro de um jogo Go e uma jogada para jogar. Você precisa mostrar se a mudança é legal ou não, e a nova posição no conselho, se for legal.
Uma breve explicação dos movimentos do Go: o jogo consiste em colocar, alternativamente, peças em preto e branco ("pedras") em lugares vazios em um tabuleiro quadrado. Conjuntos de peças da mesma cor que são conectados um ao outro (quatro vias) são chamados de grupos. Lugares vazios no quadro que são adjacentes a um grupo (também de quatro vias) são considerados "liberdades" desse grupo. Um grupo com 0 liberdades é capturado (removido do quadro). Uma jogada que faria com que seu próprio grupo fosse capturado ("suicídio") é ilegal, a menos que esteja capturando um ou mais grupos de oponentes (ganhando liberdades no processo para que não seja realmente capturado).
Para os interessados, você não precisa lidar com ko (e superko), ou seja, você pode assumir que uma captura de ko é legal. Se você não sabe o que isso significa, basta seguir as regras acima e tudo ficará bem.
Entrada: um número n entre 2 e 19 (inclusive) representando o tamanho do quadro, seguido por n linhas de n números entre 0 e 2 (inclusive) representando a posição do quadro, seguidos por 3 números separados por espaço, representando o movimento a ser realizado. Na posição do tabuleiro, 0 significa lugar vazio, 1 significa pedra preta e 2 significa pedra branca. O movimento indica a coluna, a linha e a cor (1 ou 2) da pedra. A coluna e a linha são baseadas em 0, variando de 0 a n-1 (inclusive) e contadas na mesma ordem que a entrada da placa.
Você pode assumir que a posição do conselho é legal (todos os grupos têm pelo menos uma liberdade).
Saída: uma linha contendo 1 ou 0 (ou verdadeiro / falso, se você preferir) se a jogada for legal ou não, seguida (apenas no caso de uma jogada legal) pela nova posição da placa no mesmo formato da entrada.
Pontuação: número de bytes do código fonte completo, quanto menor, melhor. 20% de multa adicional pelo uso de caracteres não-ascii e 20% de multa adicional se o seu código não puder ser testado no Linux usando software disponível gratuitamente.
Regras: sem conexões de rede e sem bibliotecas de terceiros. Seu programa deve usar os fluxos de entrada e saída padrão ou o equivalente padrão para sua linguagem de programação.
Exemplos:
1) Input:
2
10
01
1 0 2
Output:
0
2) Input:
2
10
11
1 0 2
Output:
1
02
00
3) Input:
5
22122
22021
11211
02120
00120
2 1 1
Output:
1
00100
00101
11011
02120
00120
4) Input:
6
000000
011221
121121
122221
011110
000000
4 0 1
Output:
1
000010
011221
121121
122221
011110
000000