울타리

늑대 한 마리와 여러 마리 양이 있는 작은 격자에서 모든 양을 안에 두고 늑대를 밖에 두는 가장 짧은 닫힌 울타리 길이를 구한다.

보통6그래프BFS최단 경로구현아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

조와 마티가 단위 정사각형으로 이루어진 직사각형 격자에서 양 구하기라는 게임을 한다. 먼저 조가 칸 몇 개를 연한 회색으로 칠하고, 회색 칸에는 양이 한 마리씩 있다. 이어서 마티가 남은 칸 중 하나를 검게 칠하고, 그 칸에는 늑대가 있다. 두 사람은 각자 늑대가 양에게 닿지 못하게 막는 울타리를 그리며, 더 짧은 울타리를 그린 쪽이 이긴다.

울타리는 격자선을 따라 그리고, 자기 자신과 닿지도 교차하지도 않는 닫힌 곡선 하나를 이룬다. 울타리는 직사각형을 정확히 두 부분으로 나눈다. 모든 양은 울타리가 둘러싼 부분에 있고, 늑대는 그 바깥 부분에 있다. 울타리는 직사각형 안에 들어가야 하고, 직사각형의 경계선을 따라 지나가도 된다.

칸으로 바꿔 말하면 규칙은 이렇다. 울타리 안쪽 칸은 변을 맞댄 칸을 따라 서로 이어진 한 덩어리이고, 그 덩어리는 모든 양을 포함하며 늑대는 포함하지 않는다. 울타리 바깥쪽 칸은 모두 바깥쪽 칸만 변을 맞대며 지나서 직사각형 밖으로 나갈 수 있다.

단위 정사각형의 한 변은 길이가 1이므로 울타리의 길이는 울타리가 지나는 단위 선분의 개수다. 어떤 배치에서는 조건을 만족하는 울타리가 아예 없고, 그때는 두 사람 모두 진다. 가장 짧은 울타리의 길이를 구하라. 그런 울타리가 없으면 없다고 알려라.

입력

입력은 여러 개의 테스트 케이스로 이루어지고 파일 끝에서 끝난다. 각 케이스의 첫 줄에는 직사각형의 높이 MM과 너비 NN이 주어진다 (1M,N101 \le M, N \le 10). 다음 MM개 줄에는 직사각형의 각 행이 한 줄에 하나씩, 길이가 정확히 NN인 문자열로 주어진다. 문자 X는 늑대, O는 양, .은 빈 칸이다. 모든 케이스에는 늑대가 정확히 한 마리, 양이 한 마리 이상 있다. 테스트 케이스는 최대 20개다.

출력

각 테스트 케이스마다 양과 늑대를 갈라놓는 가장 짧은 울타리의 길이를 한 줄에 출력한다. 그런 울타리가 없으면 -1을 출력한다.