만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

여행 경로

시간 제한3초메모리 제한1024 MB

요약
좋은 칸(.)과 나쁜 칸(#)으로 이루어진 격자에서 나쁜 칸을 피해 두 칸을 잇는 최단 거리를 질의마다 구하고, 갈 수 없으면 -1을 출력합니다.
난이도

보통10점 중 5점

유형
BFS, 그래프, 행렬
정답자
아직 제출이 없습니다

문제

카산드라는 드디어 첫 여행사를 열었다. 그녀의 여행은 지금은 크로아티아로 한정되어 있으며, 이를 N×MN \times M 크기의 표로 생각할 수 있다. 일부 칸은 아름답고 .으로 표시되며, 나머지 칸은 추하고 #으로 표시된다. 관광객은 위, 아래, 왼쪽, 오른쪽 네 방향으로만 움직일 수 있다.

카산드라는 현재 QQ개의 여행을 계획해 두었다. 각 여행마다 추한 칸을 지나지 않고 출발점에서 목적지까지 가는 데 필요한 최소 이동 횟수를 구하려 한다. 출발점에서 목적지로 갈 수 없다면 −1-1을 출력한다.

입력

첫 줄에 자연수 NN (1≤N≤3001 \le N \le 300), MM (1≤M≤3001 \le M \le 300), QQ (1≤Q≤100 0001 \le Q \le 100\,000)가 주어진다.

다음 NN개 줄에는 문제에서 설명한 방식으로 표가 주어진다.

다음 QQ개 줄에는 네 개의 수 AiA_i, BiB_i, CiC_i, DiD_i (1≤Ai,Ci≤N1 \le A_i, C_i \le N, 1≤Bi,Di≤M1 \le B_i, D_i \le M)가 주어진다. (Ai,Bi)(A_i, B_i)는 출발점의 행과 열이고, (Ci,Di)(C_i, D_i)는 목적지의 행과 열이다.

출력

QQ개 줄을 출력한다. ii번째 줄에는 ii번째 여행의 출발점과 목적지 사이의 거리를 출력한다.

예제2

  1. 예제 1

    입력
    5 6 4
    #...#.
    ......
    #.#.#.
    ....#.
    ......
    4 1 4 1
    2 4 1 3
    5 1 3 2
    5 1 4 1
    
    예상 출력
    0
    2
    3
    1
    
  2. 예제 2

    입력
    4 4 3
    ....
    ....
    ##..
    .#..
    4 1 3 3
    2 3 1 1
    1 4 4 1
    
    예상 출력
    -1
    3
    -1