나선
시간 제한1초메모리 제한64 MB
K개의 나선이 이동 거리 1,1,2,2,... 규칙으로 N×M 격자 위를 움직일 때, 각 칸에 가장 먼저 도달한 나선의 걸음 수를 출력한다. 10^100걸음까지 고려한다.
문제
행 열짜리 표가 있다. 표는 처음에 비어 있고, 그 위에 나선 개가 놓여 있다. 각 나선은 자기 출발 칸에서 움직이기 시작하며, 회전 방향은 시계 방향과 반시계 방향 중 하나다.
나선 하나는 다음 규칙으로 움직인다.
- 1단계에서 나선은 출발 칸에 있다.
- 그 뒤로는 직선 구간을 차례대로 지나간다. 구간의 길이는 순서대로 이고, 길이가 인 구간에서는 같은 방향으로 한 칸씩 번 움직인다.
- 첫 구간의 방향은 위쪽, 즉 행 번호가 줄어드는 쪽이다.
- 구간이 끝날 때마다 방향이 한 번 꺾인다. 시계 방향 나선은 위, 오른쪽, 아래, 왼쪽 순서를 반복하고, 반시계 방향 나선은 위, 왼쪽, 아래, 오른쪽 순서를 반복한다.
나선은 모두 동시에 움직이고, 한 단계마다 각자 한 칸씩 나아간다. 나선이 표 밖으로 나갔다가 나중에 다시 표 안으로 들어오기도 한다.
정확히 단계가 지난 뒤, 각 칸의 값은 어떤 나선이 그 칸을 처음 밟은 단계 번호다.

그림 1: 반시계 방향으로 움직이는 나선

그림 2: 시계 방향으로 움직이는 나선
입력
첫째 줄에 , ()과 ()가 주어진다.
다음 개 줄에는 정수 , , (, , )가 주어진다. 와 는 번째 나선이 출발하는 칸의 행 번호와 열 번호이고, 가 0이면 시계 방향, 1이면 반시계 방향이다. 출발 칸이 같은 나선은 없다.
출력
개 줄에 걸쳐 한 줄에 개의 수를 공백 하나로 구분해 출력한다. 번째 줄의 번째 수는 행 열 칸의 값이다.
힌트
세 번째 예제를 그림으로 설명하면 다음과 같다.

보기 편하도록 첫 번째 나선이 남긴 수에는 A를, 두 번째 나선이 남긴 수에는 B를 붙였다. 첫 번째 나선은 20단계까지, 두 번째 나선은 21단계까지만 그렸다. 회색 칸이 표에 속한 칸이고, 나머지 칸은 표 밖이지만 나선이 표 밖에서 어떻게 움직이는지 보이려고 함께 그렸다.