만드는 중입니다

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

뒤집기

시간 제한5초메모리 제한256 MB

요약
한 칸을 누르면 그 칸이 속한 단색 연결 성분 전체의 색이 뒤집힐 때, 주어진 격자 상태에 도달할 수 있는 초기 상태의 가짓수를 10⁹+7로 나눈 나머지로 구한다.
난이도

어려움10점 중 9점

유형
그래프, 유니온 파인드, 수학, 조합론
정답자
아직 제출이 없습니다

문제

어느 날 네오는 길을 걷다가 격자판 하나를 주웠다. 그 격자판은 N행 M열로, 각 격자는 흰색 또는 검은색으로 칠해져 있다.

네오는 이 격자판에 분명 엄청난 비밀이 숨겨져 있을 것이라고 생각해 나중에 해독을 시도해 보기로 하였다. 아래 그림은 격자판 상태의 예시이다.

네오가 잠시 외출한 사이, 프로도는 네오의 격자판을 이리저리 살펴보았다. 얼마 뒤, 하나의 격자를 누르면 자신을 포함해 그 격자와 연결된 모든 칸의 색이 반전된다는 사실을 관찰할 수 있었다. 여기서 두 격자가 연결되었다는 것은, 두 격자 사이를 서로 같은 색이면서 변을 공유하는 격자들로만 이동하여 오갈 수 있다는 것을 뜻한다. 집으로 돌아온 네오는 프로도가 격자판의 상태를 바꿔버렸다는 것을 알고 좌절했다. 하지만 최종 상태를 알고 있기 때문에 초기 상태를 추측할 수 있을 것이라는 희망을 가지기로 했다.

프로도는 격자판을 0번 이상 눌렀다(아직 한 번도 누르지 않은 상태일 수도 있다). 현재 각 격자의 색깔이 주어졌을 때, 격자판의 초기 상태로 가능한 경우의 수를 1,000,000,007(10⁹ + 7)로 나눈 나머지를 구하여라. 두 격자판의 상태가 다르다는 것은 같은 위치의 격자 색이 다른 경우가 존재할 때로 정의한다.

입력

첫 줄에 격자판의 행의 수 N과 열의 수 M이 주어진다. (1 ≤ N, M ≤ 2,000)

둘째 줄부터 N개의 줄에 걸쳐 현재 각 격자의 색을 나타내는 문자열이 주어진다.

N개의 줄 중에서 i번째 줄의 j번째 문자는 i행 j열 격자의 색을 나타내며, 'B'인 경우 검은색, 'W'인 경우 흰색임을 나타낸다.

출력

첫 줄에 격자의 초기 상태로 가능한 경우의 수를 1,000,000,007(10⁹ + 7)로 나눈 나머지를 출력한다.

예제1

  1. 예제 1

    입력
    2 2
    WB
    BB
    
    예상 출력
    2