격납고 화물 운반

막힌 칸과 빈 칸으로 이루어진 n x n 격자에서 두 빈 칸 사이를 이동할 수 있는 가장 큰 정사각형 상자의 크기를 묻는 q개의 질의에 답한다.

어려움9유니온 파인드BFS이분 탐색행렬아직 제출이 없습니다시간 제한8초메모리 제한512 MB

문제

비행기 조립 라인이 들어갈 새 격납고의 건설 도면을 검토한다. 격납고 바닥은 nn개의 행과 nn개의 열로 이루어진 정사각형 격자이고, 각 칸은 빈 칸이거나 막힌 칸이다. 행은 위에서 아래로 11부터 nn까지, 열은 왼쪽에서 오른쪽으로 11부터 nn까지 번호가 붙어 있다.

비행기 부품이 담긴 큰 화물은 바닥 위의 여러 위치 사이를 자유롭게 옮길 수 있어야 한다. 화물은 격자에 맞춰 놓인 정사각형이고 항상 한 칸을 중심으로 놓인다. 따라서 홀수 kk에 대해 크기가 kk인 화물은 연속한 kk개의 행과 연속한 kk개의 열이 겹치는 칸을 모두 덮는다. 화물은 한 번에 위, 아래, 왼쪽, 오른쪽 중 한 방향으로 한 칸씩 옮길 수 있고, 옮긴 뒤에도 격자 안에 완전히 들어와 있어야 하며 막힌 칸을 덮어서는 안 된다.

칸의 쌍 AkA_kBkB_kqq개 주어진다. 각 쌍마다 AkA_k를 중심으로 놓았다가 바닥 위를 옮겨서 BkB_k를 중심으로 놓을 수 있는 화물의 최대 크기를 구한다.

입력

첫째 줄에 격납고 바닥의 한 변 길이 nn (2n10002 \le n \le 1000)이 주어진다.

다음 nn개의 줄에는 바닥의 한 행을 나타내는 길이 nn의 문자열이 주어진다. 문자 #은 막힌 칸, 문자 .은 빈 칸이다.

다음 줄에 질의의 개수 qq (1q3000001 \le q \le 300\,000)가 주어진다. 이어지는 qq개의 줄에는 각각 네 정수 rAkr_{A_k}, cAkc_{A_k}, rBkr_{B_k}, cBkc_{B_k} (1rAk,cAk,rBk,cBkn1 \le r_{A_k}, c_{A_k}, r_{B_k}, c_{B_k} \le n)가 주어진다. 앞의 두 수는 칸 AkA_k의 행 번호와 열 번호이고, 뒤의 두 수는 칸 BkB_k의 행 번호와 열 번호이다. AkA_kBkB_k는 항상 서로 다른 칸이고, 두 칸은 항상 빈 칸이다.

출력

qq개의 줄을 출력한다. kk번째 줄에는 AkA_k에서 BkB_k까지 옮길 수 있는 화물의 최대 크기 sks_k를 정수 하나로 출력한다. AkA_k에서 BkB_k까지 옮길 수 있는 화물이 없으면 sks_k00이다. 크기가 11인 화물은 한 칸만 덮으므로, sks_k00인 경우는 크기 11인 화물조차 AkA_k에서 BkB_k로 옮길 수 없는 경우뿐이다.