나선

K개의 나선이 이동 거리 1,1,2,2,... 규칙으로 N×M 격자 위를 움직일 때, 각 칸에 가장 먼저 도달한 나선의 걸음 수를 출력한다. 10^100걸음까지 고려한다.

보통6구현시뮬레이션수학배열아직 제출이 없습니다시간 제한1초메모리 제한64 MB

문제

NNMM열짜리 표가 있다. 표는 처음에 비어 있고, 그 위에 나선 KK개가 놓여 있다. 각 나선은 자기 출발 칸에서 움직이기 시작하며, 회전 방향은 시계 방향과 반시계 방향 중 하나다.

나선 하나는 다음 규칙으로 움직인다.

  • 1단계에서 나선은 출발 칸에 있다.
  • 그 뒤로는 직선 구간을 차례대로 지나간다. 구간의 길이는 순서대로 1,1,2,2,3,3,4,4,1, 1, 2, 2, 3, 3, 4, 4, \dots이고, 길이가 LL인 구간에서는 같은 방향으로 한 칸씩 LL번 움직인다.
  • 첫 구간의 방향은 위쪽, 즉 행 번호가 줄어드는 쪽이다.
  • 구간이 끝날 때마다 방향이 한 번 꺾인다. 시계 방향 나선은 위, 오른쪽, 아래, 왼쪽 순서를 반복하고, 반시계 방향 나선은 위, 왼쪽, 아래, 오른쪽 순서를 반복한다.

나선은 모두 동시에 움직이고, 한 단계마다 각자 한 칸씩 나아간다. 나선이 표 밖으로 나갔다가 나중에 다시 표 안으로 들어오기도 한다.

정확히 1010010^{100}단계가 지난 뒤, 각 칸의 값은 어떤 나선이 그 칸을 처음 밟은 단계 번호다.

그림 1

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

그림 2

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

입력

첫째 줄에 NN, MM (1N,M501 \le N, M \le 50)과 KK (1KN×M1 \le K \le N \times M)가 주어진다.

다음 KK개 줄에는 정수 XiX_i, YiY_i, TiT_i (1XiN1 \le X_i \le N, 1YiM1 \le Y_i \le M, 0Ti10 \le T_i \le 1)가 주어진다. XiX_iYiY_iii번째 나선이 출발하는 칸의 행 번호와 열 번호이고, TiT_i가 0이면 시계 방향, 1이면 반시계 방향이다. 출발 칸이 같은 나선은 없다.

출력

NN개 줄에 걸쳐 한 줄에 MM개의 수를 공백 하나로 구분해 출력한다. ii번째 줄의 jj번째 수는 iijj열 칸의 값이다.

힌트

세 번째 예제를 그림으로 설명하면 다음과 같다.

세 번째 예제

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