Problem hidden
|This problem was hidden by Editorial Board member probably because it has incorrect language|version or invalid test data, or description of the problem is not clear.|

CUBO - O Cubo

Num futuro não muito distante as pessoas buscarão jogos cada vez mais perigosos para se divertir. Depois de ultra-leve e bungee-jump as pessoas precisarão de jogos em que suas atividades mentais sejam também colocadas a prova. É o caso deste jogo, chamado "cube", inventado na Nova Zelândia. Em alguns lugares o jogo também é conhecido pelo seu nome em japonês: sokoban.

Considere um labirinto bi-dimensional composto por células quadradas, onde cada uma delas ou está livre ou está sendo ocupada por uma pedra. A cada passo, você pode sair de uma célula e mover-se para outra célula vizinha (i.e., cima, baixo, direita e esquerda) livre. Você está ocupando uma das células livres desse labirinto.

Uma célula do labirinto contém uma pilha de caixas. A pilha pode ser movida de uma célula i para uma célula k (por exemplo, k = i+1), vizinha de i, na direção ik se você estiver numa célula j (no caso, j = i-1), vizinha de i , e a direção ik é igual à direção ji. Uma caixa não pode ser movida de qualquer outra maneira (ou seja, você não pode puxá-la para trás). Logo, se ela for parar em algum canto do labirinto, você não será capaz de movê-la novamente. Por fim, note que em cada empurrão você dá um passo, e que o contrário não é necessariamente verdade.

Uma das células vazias é marcada como a célula final. Sua tarefa é trazer a caixa para essa célula final através de uma seqüência de passos e empurrões na caixa. Como a caixa é pesada, você quer realizar o menor número possível de empurrões na caixa.

Observe que no jogo de vida real há a possibilidade de você se prender ou mesmo ser esmagado pela caixa, tornando tudo muito mais divertido.

Entrada

O arquivo de entrada é composto por várias instâncias. Cada instância começa com uma linha contendo dois inteiro r e c (ambos menores ou iguais a 20) representando o número de linhas e colunas do labirinto.

Em seguida, são fornecidas r linhas, cada uma contendo c caracteres. Cada caractere descreve uma célula do labirinto. Uma célula ocupada por uma pedra é indicada por # e uma célula vazia é representada por um "." (sem as aspas). Sua posição inicial é indicada por S, a posição inicial da caixa é indicada por B e a posição final da caixa é indicada por T.

A entrada termina quando r = c = 0.

Saída

Para cada labirinto, inicialmente imprima o número da instância, conforme mostra o exemplo de saída abaixo. Se for impossível levar a caixa até sua posição final, imprima "Impossivel".

Caso contrário, você deve imprimir dois inteiros x e y, onde x indica o número de movimentos (passos + empurrões) e y o número de empurrões de uma seqüência que faz com que você leve a caixa até a posição final. O número de empurrões dever ser minimizado. Caso exista mais de uma seqüência possível que utiliza um número mínimo de empurrões, o número total de movimentos deve ser minimizado. Imprima uma linha em branco após cada instância.

Exemplo

Entrada:
1 7
SB....T
1 7
SB..#.T
7 11
###########
#T##......#
#.#.#..####
#....B....#
#.######..#
#.....S...#
###########
0 0 

Saída:
Instancia 1
5 5

Instancia 2
Impossivel

Instancia 3
28 6 

Adicionado por:Wanderley Guimarăes
Data:2007-09-01
Tempo limite:0.119s
Tamanho do fonte:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Linguagem permitida:Todas exceto: ASM64 CLOJURE ERL FSHARP JS-RHINO PERL6 PY_NBC SCALA TCL
Origem:Seletiva para Maratona de Programação do IME - 2006

© Spoj.com. All Rights Reserved. Spoj uses Sphere Engine™ © by Sphere Research Labs.