포위
시간 제한1초메모리 제한1024 MB
미르코는 격자판에서 말을 움직여 슬라브코의 말을 벽으로 가두고, 필요한 벽 칸 수의 최솟값을 구합니다.
문제
미르코와 슬라브코는 크기의 판에서 새로운 게임을 한다. 판에는 미르코의 말과 슬라브코의 보이지 않는 말, 두 개의 말이 있다. 미르코의 말은 처음에 왼쪽 위 모서리에 있다. 미르코는 슬라브코의 말이 처음 어디에 있는지 모르지만, 가능한 모든 시작 위치는 안다.
먼저 두는 사람은 미르코이다. 미르코는 한 번의 차례에 최대 10걸음까지 움직일 수 있다. 한 걸음은 말을 인접한 칸 하나로 옮기는 것이다. 두 칸이 변을 공유하면 인접한 칸이다. 미르코 다음에는 슬라브코가 말을 한 걸음 움직이거나 제자리에 머문다. 슬라브코의 말은 보이지 않으므로 미르코는 게임 중에 그 위치와 슬라브코의 움직임을 알 수 없다. 두 말은 같은 칸에 있을 수 있다. 미르코는 이미 방문한 칸에 게임 전체의 마지막 걸음에서만 들어갈 수 있다. 반면 슬라브코는 같은 칸을 원하는 만큼 몇 번이든 방문할 수 있다. 한 명이 이길 때까지 둘은 번갈아 둔다.
슬라브코는 말을 판의 첫 번째 또는 마지막 행, 또는 첫 번째 또는 마지막 열에 놓으면 이긴다. 미르코는 말로 슬라브코의 말 주변 영역을 둘러싸면 이긴다. 미르코가 마지막 걸음에서 이미 방문한 칸에 다시 서면, 그 칸을 처음 방문한 때부터 두 번째 방문할 때까지 지나간 칸마다 벽이 생기며, 두 번 방문한 칸도 포함된다. 슬라브코의 말이 벽 안쪽에 엄격히 있으면 둘러싸인 것이다.
입력
첫 줄에 판의 행 수와 열 수를 나타내는 자연수 과 이 주어진다 (, ).
다음 개 줄에는 판의 모양을 나타내는 개의 문자가 주어진다. '.'은 빈 칸이고, 소문자 'x'는 슬라브코의 말이 있을 수 있는 시작 위치이다.
출력
슬라브코의 시작 위치와 움직임에 관계없이 미르코가 반드시 슬라브코의 말을 둘러쌀 수 있도록 세워야 하는 벽 칸의 최솟값을 출력한다. 반드시 둘러쌀 수 없다면 -1을 출력한다.
힌트
첫 번째 예제 설명: 미르코는 첫 번째 차례에 아래 그림의 숫자 순서대로 칸을 방문한다.
01...
.234.
.9x5.
.876.
.....
첫 차례의 10번째 걸음에서 미르코는 2번 칸으로 다시 선다. 2번 칸에 다시 서면 2번부터 9번까지 8개 칸에 벽이 생긴다.
두 번째 예제 설명: 미르코는 슬라브코의 말을 둘러쌀 수 없다. 슬라브코가 말을 맨 아래에서 두 번째 행의 시작 위치에 두면, 미르코의 10걸음 뒤에 슬라브코가 말을 마지막 행으로 옮겨 이긴다.
세 번째 예제 설명: 미르코가 벽 30개로 슬라브코의 말을 둘러싸는 방법 중 하나는 아래 그림의 순서대로 움직이는 것이다.
0 1 2 3 4 . . .
29 . . . 5 6 7 .
28 . . . . . 8 9
27 . . x . . . 10
26 . . . x . . 11
25 . . x . . . 12
24 . . . . . . 13
23 22 . . . . . 14
. 21 20 19 18 17 16 15
미르코는 30번째 걸음에서 0번 칸으로 돌아온다. 이 30칸을 지나는 데 미르코는 3번의 차례가 필요하므로, 벽이 완성되기 전에 슬라브코는 2번 움직일 수 있다. 슬라브코는 그 2번의 움직임 동안 반드시 둘러싸인 영역 안에 있다.