beecrowd | 1480

O Famoso Campo Minado

Por Cristhian Bonilha, UTFPR Brasil
Timelimit: 1

Campo Minado é um jogo antigo, que ficou muito conhecido por ser um jogo nativo em um sistema operacional que ninguém lembra o nome. Trata-se de uma grade com N linhas e M colunas, contendo diversas minas espalhadas, e diversas dicas indicando onde elas estariam. O seu objetivo é encontrar todas as minas, sem nunca pisar em uma.

Cada posição da grade pode ou não conter uma mina. Caso não contenha uma mina, tal posição irá conter um valor, conhecido também como dica, que irá identificar quantas minas há nos quadrados adjacentes àquele (nas 8 direções), que varia de 0 a 8 (ver Figura 1).

Rafael se interessou muito pela proposta do jogo, e achou tão fácil que resolveu escrever por conta própria alguns casos de jogo, onde ele define onde as minas estarão e quais as dicas iniciais. Notou porém que existem duas situações que podem ocorrer durante a partida: em determinados casos, é possível descobrir com certeza onde está a mina, graças às dicas dadas; já em outros casos, não é possível descobrir com certeza onde está a mina, e o jogador vai depender apenas de sua sorte.

Considere uma partida como se segue: há inicialmente um determinado número de quadrados revelados (dicas) e o restante dos quadrados cobertos. O jogador pode então realizar dois movimentos: revelar um quadrado coberto, podendo encontrar uma mina (fim de jogo) ou uma dica; ou sinalizar um quadrado coberto como sendo uma mina, de modo a prevenir a si mesmo de nunca revelar tal quadrado.

Para prosseguir na partida de uma forma lógica (sem se basear na sorte), leve em consideração as seguintes definições, em relação a um conjunto de quadrados adjacentes a algum quadrado sendo analisado:

Veja como exemplo na Figura 2.

Na parte a) da figura, temos adjCob = 1, adjSin = 0 e dica = 1, logo 1 + 0 = 1, e podemos sinalizar os quadrados cobertos para identificar as minas.

Na parte b) da figura, temos adjSin = 1 e dica = 1, logo 1 = 1, e podemos revelar os quadrados adjacentes ainda cobertos.

Para que seu caso de jogo ficasse interessante e desafiador, Rafael decidiu que devia ser possível encontrar todas as minas baseando-se apenas na definição dada, porém não sabe verificar quando isso é possível, e para isso pediu sua ajuda.

Entrada

A entrada irá conter diversos casos de teste. Cada caso de teste inicia com três inteiros N, M e K (1 ≤ N, M ≤ 20, 1 ≤ K ≤ 30), indicando que a grade do jogo contém N linhas e M colunas, e que há K minas escondidas naquela grade. Em seguida, haverá N linhas com M caracteres em cada linha, onde o caractere da linha i e coluna j (1 ≤ i ≤ N e 1 ≤ j ≤ M) indica o que há na posição [i, j] da grade:

Em seguida haverá K pares de inteiros a e b (1 ≤ a ≤ N e 1 ≤ b ≤ M), indicando que há uma mina na posição [a, b] da grade. Note que tal informação é útil quando um quadrado é revelado, para se poder calcular qual a dica que será apresentada.

A entrada termina quando N = M = K = 0.

Saída

Seu programa deverá imprimir, para cada caso de teste, uma linha, contendo a palavra “Possivel” caso seja possível encontrar todas as minas baseando nas definições acima, ou “Impossivel”, caso isso não seja possível.

Exemplo de Entrada Exemplo de Saída

4 4 3
011.
13..
1..2
.2..
2 3
3 2
3 3
3 3 1
111
1.1
111
2 2
3 3 1
...
.1.
...
1 1
0 0 0

Possivel
Possivel
Impossivel