교대 탈출
시간 제한8초메모리 제한512 MB
Bob이 자기 차례에 모든 벽의 유무를 뒤집을 수 있는 격자에서, Alice가 최적으로 두는 Bob을 상대로 토큰을 판 밖으로 내보낼 수 있는지 판정한다.
문제
Alice와 Bob이 보드 게임을 하고 있다. 이 게임은 H행 W열의 칸이 그려진 판과 말 하나로 진행한다. 판의 왼쪽 위 칸을 1행 1열로 두고, 아래쪽으로 행을, 오른쪽으로 열을 센다.
서로 이웃한 칸 사이의 변과 칸이 판 바깥과 맞닿는 변에는 벽을 둘 수 있으며, 게임을 시작할 때 각 변에 벽이 있는지 없는지가 정해져 있다. 또 게임을 시작할 때 말은 판의 어느 한 칸에 놓여 있다.
Alice와 Bob은 번갈아 가며 차례를 진행한다. 게임은 Alice의 차례부터 시작한다. Alice의 목표는 말을 판 바깥으로 움직여 미로에서 탈출시키는 것이다. Alice가 한 차례에 할 수 있는 행동은 말을 지금 있는 칸에서 상하좌우로 이웃한 칸 중 사이의 변에 벽이 없는 방향의 칸으로 옮기는 것이다. 말이 있는 칸이 판 바깥과 맞닿아 있고 그 사이의 변에 벽이 없다면 그쪽으로 말을 탈출시킬 수 있다.
한편 Bob의 목표는 말의 탈출을 방해하는 것이다. Bob은 자기 차례에 벽의 유무를 뒤집거나, 아무것도 하지 않고 차례를 마치는 것 중 하나를 고를 수 있다. 벽의 유무를 뒤집기로 했다면 판의 모든 칸의 변에 대해 벽의 유무가 뒤집힌다.
판의 초기 상태와 말의 초기 위치가 주어질 때, Alice와 Bob이 모두 최적으로 행동했을 때 Alice가 말을 판에서 탈출시킬 수 있는지 판정하라. 단, Alice의 차례에 말이 4방향 모두 벽으로 둘러싸여 있다면 탈출할 수 없는 것으로 본다.
입력
입력은 40개 이하의 데이터 세트로 이루어진다. 각 데이터 세트는 다음 형식으로 주어진다.
H W R C
Horz1,1 Horz1,2 ... Horz1,W
Vert1,1 Vert1,2 ... Vert1,W+1
...
VertH,1 VertH,2 ... VertH,W+1
HorzH+1,1 HorzH+1,2 ... HorzH+1,W
첫 줄에는 네 정수 H, W (1 ≤ H, W ≤ 500), R, C (1 ≤ R ≤ H, 1 ≤ C ≤ W)가 주어진다. 이는 판이 H행 W열의 칸으로 이루어지고 말의 초기 위치가 R행 C열이라는 뜻이다.
이어지는 2H + 1개 줄에는 판의 초기 상태가 주어진다.
2i번째 줄 (1 ≤ i ≤ H + 1)은 W개 정수 Horz``i,1, Horz``i,2, ..., Horz``i,W를 포함한다. Horz``i,j는 i행 j열 칸의 위쪽 변에 벽이 있으면 1, 없으면 0이다. 단, Horz``H+1,j는 H행 j열 칸의 아래쪽 변에 벽이 있는지를 나타낸다.
2i + 1번째 줄 (1 ≤ i ≤ H)은 W + 1개 정수 Vert``i,1, Vert``i,2, ..., Vert``i,W+1을 포함한다. Vert``i,j는 i행 j열 칸의 왼쪽 변에 벽이 있으면 1, 없으면 0이다. 단, Vert``i,W+1은 i행 W열 칸의 오른쪽 변에 벽이 있는지를 나타낸다.
입력의 끝은 네 개의 0으로 이루어진 한 줄로 표시된다.
출력
각 데이터 세트에 대해 Alice가 말을 판에서 탈출시킬 수 있으면 Yes, 없으면 No를 한 줄에 출력하라.
힌트
1번째 데이터 세트에서 Alice는 다음과 같이 움직여 말을 탈출시킬 수 있다.

- 초기 상태
- Alice가 말을 왼쪽으로 옮긴다
- Bob은 탈출을 막기 위해 벽을 뒤집는다
- Alice가 말을 위로 옮긴다
Bob이 다음 차례에 벽의 유무를 뒤집든 뒤집지 않든, Alice는 그다음 차례에 말을 탈출시킬 수 있다.