먼지 청소기
시간 제한3초메모리 제한1024 MB
행과 열을 청소하면 먼지가 0으로 바뀌는 N×M 격자에서, 먼지량이 k 이하인 칸만 지나는 두 칸 사이의 최단 거리를 구합니다.
문제
Paolo는 큰 창고의 관리인으로 일한다. 그의 업무 중 두 가지는 청소기를 돌리는 것과 창고 안의 물건을 옮기는 것이다. Paolo는 청소에 대해 실용적인 편이라, 먼지가 너무 쌓여 물건을 더 이상 옮길 수 없게 될 때까지 기다린다. 상황을 더 나쁘게 만드는 것은 그가 최근 직접 청소하는 대신 로봇 청소기를 풀어놓기 시작했다는 점이다. 이 로봇 청소기는 고장 나서 방향을 바꿀 수 없다. 벽에 부딪혀 배터리가 다할 때까지 직선으로만 움직인다.
창고는 격자로 나타낼 수 있다. 행은 1번부터 번까지, 열은 1번부터 번까지 번호가 매겨져 있다. 처음에는 모든 칸의 먼지가 0 단위이다. 이후 일이 지나간다. 매일은 모든 칸의 먼지가 1씩 늘어나면서 시작한다. 그다음 아래 세 가지 중 정확히 하나가 일어난다.
- 형태의 사건은 Paolo가 번 행을 따라 로봇 청소기를 풀어놓는다는 뜻이다. 그러면 그 행의 모든 칸의 먼지가 0이 된다.
- 형태의 사건은 Paolo가 번 열을 따라 로봇 청소기를 풀어놓는다는 뜻이다. 그러면 그 열의 모든 칸의 먼지가 0이 된다.
- 형태의 사건은 Paolo가 칸에서 칸으로 무언가를 옮겨야 한다는 뜻이다. 는 그 물건의 먼지 내성이다. 물건은 먼지가 단위 이하인 칸 위로만 옮길 수 있다. 예를 들어 또는 칸의 먼지가 단위를 넘으면 이 임무는 완료할 수 없다.
3번 사건마다 Paolo가 물건을 옮기는 데 필요한 최소 걸음 수를 출력한다. 한 걸음에는 변을 공유하는 인접한 칸으로 이동한다. 가장자리에 있는 칸은 인접한 칸이 네 개보다 적다. 물건을 옮길 수 없다면 을 출력한다.
입력
첫 줄에 세 정수 , , 가 주어진다 (, ).
이어지는 개의 줄은 각각 하나의 사건을 나타낸다. 각 줄은 사건의 종류 로 시작하며, 는 1, 2, 3 중 하나이다. 이면 같은 줄에 행 번호 ()이 주어진다. 이면 열 번호 ()가 주어진다. 이면 같은 줄에 , , , , 의 다섯 정수가 주어진다 (, , ).
종류 3의 사건마다 과 는 서로 다른 칸이다. 종류 3의 사건은 적어도 하나 있다.
출력
종류 3의 사건마다 물건을 옮기는 데 필요한 최소 걸음 수를 한 줄에 출력한다. 옮길 수 없다면 을 출력한다.