울타리
시간 제한2초메모리 제한512 MB
늑대 한 마리와 여러 마리 양이 있는 작은 격자에서 모든 양을 안에 두고 늑대를 밖에 두는 가장 짧은 닫힌 울타리 길이를 구한다.
문제
조와 마티가 단위 정사각형으로 이루어진 직사각형 격자에서 양 구하기라는 게임을 한다. 먼저 조가 칸 몇 개를 연한 회색으로 칠하고, 회색 칸에는 양이 한 마리씩 있다. 이어서 마티가 남은 칸 중 하나를 검게 칠하고, 그 칸에는 늑대가 있다. 두 사람은 각자 늑대가 양에게 닿지 못하게 막는 울타리를 그리며, 더 짧은 울타리를 그린 쪽이 이긴다.
울타리는 격자선을 따라 그리고, 자기 자신과 닿지도 교차하지도 않는 닫힌 곡선 하나를 이룬다. 울타리는 직사각형을 정확히 두 부분으로 나눈다. 모든 양은 울타리가 둘러싼 부분에 있고, 늑대는 그 바깥 부분에 있다. 울타리는 직사각형 안에 들어가야 하고, 직사각형의 경계선을 따라 지나가도 된다.
칸으로 바꿔 말하면 규칙은 이렇다. 울타리 안쪽 칸은 변을 맞댄 칸을 따라 서로 이어진 한 덩어리이고, 그 덩어리는 모든 양을 포함하며 늑대는 포함하지 않는다. 울타리 바깥쪽 칸은 모두 바깥쪽 칸만 변을 맞대며 지나서 직사각형 밖으로 나갈 수 있다.
단위 정사각형의 한 변은 길이가 1이므로 울타리의 길이는 울타리가 지나는 단위 선분의 개수다. 어떤 배치에서는 조건을 만족하는 울타리가 아예 없고, 그때는 두 사람 모두 진다. 가장 짧은 울타리의 길이를 구하라. 그런 울타리가 없으면 없다고 알려라.
입력
입력은 여러 개의 테스트 케이스로 이루어지고 파일 끝에서 끝난다. 각 케이스의 첫 줄에는 직사각형의 높이 과 너비 이 주어진다 (). 다음 개 줄에는 직사각형의 각 행이 한 줄에 하나씩, 길이가 정확히 인 문자열로 주어진다. 문자 X는 늑대, O는 양, .은 빈 칸이다. 모든 케이스에는 늑대가 정확히 한 마리, 양이 한 마리 이상 있다. 테스트 케이스는 최대 20개다.
출력
각 테스트 케이스마다 양과 늑대를 갈라놓는 가장 짧은 울타리의 길이를 한 줄에 출력한다. 그런 울타리가 없으면 -1을 출력한다.