만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

젊은 얼룩말

시간 제한0.5초메모리 제한1024 MB

요약
흑백 N by M 패턴을 무한히 이어 붙였을 때, 각 칸이 속한 연결 요소의 크기를 구합니다. 크기가 무한하면 -1을 출력합니다.
난이도

보통10점 중 6점

유형
BFS, 행렬, 구현
정답자
아직 제출이 없습니다

문제

요즘 젊은 얼룩말 사이에서는 가죽의 흑백 무늬를 바꾸는 수술이 큰 인기를 끌고 있다. 젊은 얼룩말인 정우도 이 수술로 가죽 무늬를 바꾸는 데 관심이 많다.

이 수술을 받기 전에 얼룩말은 원하는 크기의 흑백 패턴을 준비해야 한다. 수술은 이 패턴을 무한히 이어 붙인 것을 기준으로 한다. 예를 들어 2×32 \times 3 크기의 패턴과 이를 이어 붙인 그림은 다음과 같다.

그림 1: 2×32 \times 3 크기의 패턴

그림 2: 위의 패턴을 무한히 이어 붙인 것의 일부. 빨간 직사각형은 위의 패턴을 나타내며, 뒤틀림 없이 그대로 맞춰서 이어 붙인다.

격자는 시술할 때 없어지므로 결과가 이상해질까 걱정하지 않아도 된다.

정우는 먼저 패턴을 정한 뒤 이를 무한히 이어 붙여 보려고 한다. 이때 중요한 것은 무한히 이어 붙인 뒤 각 칸이 속한 연결 성분의 크기다. 미관상 매우 중요한 문제다. 색이 같은 두 칸이 상하좌우로 붙어 있다면, 두 칸은 같은 연결 성분에 속한다.

그림 2에서 각 칸이 속한 연결 성분의 크기를 구해 보면, 검은색 칸이 속한 연결 성분의 크기는 모두 2424이고, 흰색 칸이 속한 연결 성분에는 무한히 많은 칸이 포함된다. 즉 크기가 무한대이다. 주어진 패턴을 무한히 이어 붙인 뒤 각 칸이 속한 연결 성분의 크기를 구하는 프로그램을 작성하라.

입력

첫 번째 줄에 얼룩 패턴의 크기를 나타내는 두 정수 NN, MM(1≤N,M≤4001 ≤ N, M ≤ 400)이 공백 하나로 구분되어 주어진다. 다음 NN개 줄의 각 줄에는 길이가 MM인 문자열이 주어진다. 모든 문자열은 B 또는 W로만 이루어져 있다. B는 검은색, W는 흰색을 나타낸다.

출력

NN개의 줄에 걸쳐 정답을 출력한다. ii번째 줄에는 MM개의 수를 공백 하나로 구분하여 출력하고, 그중 jj번째 수는 입력에서 ii번째 행 jj번째 열에 주어진 칸이 속한 연결 성분의 크기여야 한다. 크기가 무한히 크다면 -1을 출력해야 한다.

예제4

  1. 예제 1

    입력
    2 3
    BBW
    WWW
    
    예상 출력
    2 2 -1
    -1 -1 -1
    
  2. 예제 2

    입력
    2 3
    BWB
    WBW
    
    예상 출력
    2 1 2
    2 1 2
    
  3. 예제 3

    입력
    5 5
    WBWBW
    BBWBB
    WWWWW
    BBWBB
    WBWBW
    
    예상 출력
    4 12 -1 12 4
    12 12 -1 12 12
    -1 -1 -1 -1 -1
    12 12 -1 12 12
    4 12 -1 12 4
    
  4. 예제 4

    입력
    5 4
    WWBW
    BWBB
    BBWW
    BWBB
    WWBW
    
    예상 출력
    8 8 -1 8
    -1 8 -1 -1
    -1 -1 2 2
    -1 8 -1 -1
    8 8 -1 8