Grid Colouring 

Um conjunto de contornos está representado em uma matriz bidimensional como ilustrado no input exemplo. Os contornos são feitos de qualquer caractere imprimível diferentes de espaço e `_' (underscore). No exemplo, esse caractere é `X'. Todos os outros elementos da matriz estão representados por espaços e/ou marking (caractere identificador da "cor", no exemplo você tem '#' e '/' como markers).


Uma zone da matriz é definida como sendo o conjunto de pontos dentro de um contorno de forma que 2 pontos da zone pode ser conectado por um caminho (vertical e/ou horizontal) que não cruze nenhum contorno. Uma zone será preenchida se ela contiver caracteres idênticos, chamados marking, diferentes de space e do caractere de contorno. Nenhuma zone pode ter caracteres de marking diferentes. Entretanto, observe que enquanto TODOS os contornos são desenhados com o mesmo caractere, os markings de  zones distintas podem ser diferentes. Uma zone não será preenchida se apenas contiver espaços. Os markings só aparecerão dentro de contornos.


Escreva um programa que preenche todas as zone que contém marking com seu respectivo marking , em cada matriz no arquivo de entrada . Como mostrado no exemplo abaixo.

Entrada 

No arquivo de entrada, cada matriz termina com uma linha de separação (uma linha contendo apenas`_' (underscore)). Serão no máximo 30 linhas com no máximo 80 caracteres. As linhas poderão ter tamanhos diferentes. A entrada termina quando houver 2 linhas de separação seguidas.

Saída 

O output padrão haverá todas as matrizes preenchidas. Cada matriz deverá ser impressa com o mesmo formato das lidas no input, inclusive com suas linhas de separação. E essa última linha não deverá ser processada e nem imprimida na saída.

Entrada Exemplo 

  XXXXXXXXXXXXXXXXXXXX
  X      X           X
  X # #  XXXXXXXX /  X
  X             X    X
  XXXXXXXXXXXXXXXXXXXX
_____________________________

   XXXXXXXXXXXX       XXXXXX
  X       #   XXX  XXX   X X
  X  XX         X  X     X X
 X  X  X  XXXXXXX  XXXXXXX
 X   XX   X
  X       X  XXXX  XXXXXXXX
   XX     XXXX  X  X  /   X
    X           X  X    / X
    XXXXXXXXXXXXX  XXXXXXXX
_____________________________
_____________________________

Saída Exemplo 

  XXXXXXXXXXXXXXXXXXXX
  X######X///////////X
  X######XXXXXXXX////X
  X#############X////X
  XXXXXXXXXXXXXXXXXXXX
_____________________________

   XXXXXXXXXXXX       XXXXXX
  X###########XXX  XXX   X X
  X##XX#########X  X     X X
 X##X  X##XXXXXXX  XXXXXXX
 X###XX###X
  X#######X  XXXX  XXXXXXXX
   XX#####XXXX##X  X//////X
    X###########X  X//////X
    XXXXXXXXXXXXX  XXXXXXXX
_____________________________

Sugestão

Busque com laços simples os caracteres diferentes do contorno e de espaços.
Crie uma função recursiva Colorir(int i, int j, char c) que recebe a posição do caractere achado e o caractere.
E que se for conveniente colore os seus vizinhos (possivelmente os caracteres acima, abaixo, num lado esquerdo e no direito)
recursivamente. Lembrem dos casos base.

Protótipo: (só use se não tiver ABSOLUTAMENTE nenhuma idéia)

colorir (int i, int j, char c) {
    se i e j não estiverem na matriz não faça nada
    se m[i][j] for espaço em branco
         põe c em m[i][j]
         colorir(i, j - 1)  // (esquerda)
         colorir(i, j + 1)  // (direita)
         colorir(i - 1, j)  // (alto) 
         colorir(i + 1, j)  // (baixo)
}