체스 말 둘러싸기
시간 제한2초메모리 제한2048 MB
8x8 체스판에 흰 말을 놓아 검은 말들이 빈 칸을 따라 서로 이동하지 못하게 하는 방법의 수를 구합니다.
문제
체스라고 하면 가장 먼저 전략과 지능의 상징이 떠오른다. 오랜 역사를 가진 이 게임은 거의 무한한 가능성을 품고 있어서, 플레이어를 몇 시간이고 몰입하게 만든다. 그런데 함께 둘 상대가 없다면 어떻게 해야 할까? 그 대신 아래 문제를 풀어 보자.
크기의 체스판이 있다. 흰색 말은 최대 64개, 검은색 말도 최대 64개까지 쓸 수 있다. 판 위에는 이미 검은색 말 몇 개가 놓여 있다. 흰색 말을 적절히 놓아서 어떤 두 검은색 말도 "연결되지" 않도록 만들어야 한다.
두 검은색 말이 연결되었다는 것은 빈 칸을 따라 상하좌우로 한 칸씩 움직여서 한 말에서 다른 말로 갈 수 있다는 뜻이다. 즉, 흰색 말을 거치지 않고 빈 칸만으로 두 검은색 말을 잇는 경로가 있으면 안 된다.
검은색 말이 모두 서로 떨어져 있도록 흰색 말을 놓는 방법의 수를 구하는 프로그램을 작성하라. 흰색 말은 모두 구별하지 않는다.
입력
8줄에 걸쳐 입력이 주어진다. 각 줄에는 8개의 문자가 있다. "."은 빈 칸, "B"는 검은색 말이 놓인 칸을 나타낸다.
출력
흰색 말을 놓는 방법 중 검은색 말끼리 서로 도달할 수 없는 경우의 총 개수를 정수 하나로 출력한다.