만드는 중입니다

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

똑똑한 칸 선택

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

요약
빈 칸에서 시작해 서로 인접한 빈 칸에 돌을 번갈아 놓는 게임을 할 때, 첫 돌을 그 칸에 놓은 선공이 이기는 칸의 수를 구합니다.
난이도

보통10점 중 7점

유형
그래프, BFS
정답자
아직 제출이 없습니다

문제

두 플레이어가 N×MN \times M 크기의 격자판에서 다음 게임을 한다.

  • 처음에 각 칸은 비어 있거나 돌이 놓여 있다.
  • 플레이어는 번갈아 가며 빈 칸에 돌을 놓아 그 칸을 차지한다. 새로 놓는 돌은 직전에 놓인 돌과 변을 공유하는 칸에 놓아야 한다. 다만 시작 돌은 빈 칸 어디에나 놓을 수 있다.
  • 위 규칙에 따라 돌을 놓을 수 없는 플레이어가 지고, 상대방이 이긴다.

첫 번째 플레이어가 시작 돌을 어떤 칸에 놓았을 때 두 플레이어가 최적으로 두면 첫 번째 플레이어가 이기는 칸을 이기는 시작 칸이라고 한다. 격자판의 초기 상태가 주어졌을 때 이기는 시작 칸의 개수를 구하라.

입력

첫 줄에 두 정수 NN, MM (1≤N,M≤501 \le N, M \le 50)이 주어진다. 이어서 NN개의 줄에 길이가 MM인 문자열이 주어진다. ii번째 줄의 jj번째 문자는 칸 (i,j)(i, j)의 초기 상태를 나타낸다. .은 빈 칸, #은 돌이 놓인 칸이다.

출력

이기는 시작 칸의 개수를 한 줄에 출력한다.

예제3

  1. 예제 1

    입력
    3 3
    #.#
    ...
    #.#
    
    예상 출력
    4
    
  2. 예제 2

    입력
    3 3
    ..#
    ...
    ...
    
    예상 출력
    0
    
  3. 예제 3

    입력
    1 4
    ...#
    
    예상 출력
    2