똑똑한 칸 선택
시간 제한6초메모리 제한1024 MB
빈 칸에서 시작해 서로 인접한 빈 칸에 돌을 번갈아 놓는 게임을 할 때, 첫 돌을 그 칸에 놓은 선공이 이기는 칸의 수를 구합니다.
문제
두 플레이어가 크기의 격자판에서 다음 게임을 한다.
- 처음에 각 칸은 비어 있거나 돌이 놓여 있다.
- 플레이어는 번갈아 가며 빈 칸에 돌을 놓아 그 칸을 차지한다. 새로 놓는 돌은 직전에 놓인 돌과 변을 공유하는 칸에 놓아야 한다. 다만 시작 돌은 빈 칸 어디에나 놓을 수 있다.
- 위 규칙에 따라 돌을 놓을 수 없는 플레이어가 지고, 상대방이 이긴다.
첫 번째 플레이어가 시작 돌을 어떤 칸에 놓았을 때 두 플레이어가 최적으로 두면 첫 번째 플레이어가 이기는 칸을 이기는 시작 칸이라고 한다. 격자판의 초기 상태가 주어졌을 때 이기는 시작 칸의 개수를 구하라.
입력
첫 줄에 두 정수 , ()이 주어진다. 이어서 개의 줄에 길이가 인 문자열이 주어진다. 번째 줄의 번째 문자는 칸 의 초기 상태를 나타낸다. .은 빈 칸, #은 돌이 놓인 칸이다.
출력
이기는 시작 칸의 개수를 한 줄에 출력한다.