막힌 칸과 빈 칸으로 이루어진 n x n 격자에서 두 빈 칸 사이를 이동할 수 있는 가장 큰 정사각형 상자의 크기를 묻는 q개의 질의에 답한다.
어려움9유니온 파인드BFS이분 탐색행렬아직 제출이 없습니다시간 제한8초메모리 제한512 MB비행기 조립 라인이 들어갈 새 격납고의 건설 도면을 검토한다. 격납고 바닥은 n개의 행과 n개의 열로 이루어진 정사각형 격자이고, 각 칸은 빈 칸이거나 막힌 칸이다. 행은 위에서 아래로 1부터 n까지, 열은 왼쪽에서 오른쪽으로 1부터 n까지 번호가 붙어 있다.
비행기 부품이 담긴 큰 화물은 바닥 위의 여러 위치 사이를 자유롭게 옮길 수 있어야 한다. 화물은 격자에 맞춰 놓인 정사각형이고 항상 한 칸을 중심으로 놓인다. 따라서 홀수 k에 대해 크기가 k인 화물은 연속한 k개의 행과 연속한 k개의 열이 겹치는 칸을 모두 덮는다. 화물은 한 번에 위, 아래, 왼쪽, 오른쪽 중 한 방향으로 한 칸씩 옮길 수 있고, 옮긴 뒤에도 격자 안에 완전히 들어와 있어야 하며 막힌 칸을 덮어서는 안 된다.
칸의 쌍 Ak와 Bk가 q개 주어진다. 각 쌍마다 Ak를 중심으로 놓았다가 바닥 위를 옮겨서 Bk를 중심으로 놓을 수 있는 화물의 최대 크기를 구한다.
첫째 줄에 격납고 바닥의 한 변 길이 n (2≤n≤1000)이 주어진다.
다음 n개의 줄에는 바닥의 한 행을 나타내는 길이 n의 문자열이 주어진다. 문자 #은 막힌 칸, 문자 .은 빈 칸이다.
다음 줄에 질의의 개수 q (1≤q≤300000)가 주어진다. 이어지는 q개의 줄에는 각각 네 정수 rAk, cAk, rBk, cBk (1≤rAk,cAk,rBk,cBk≤n)가 주어진다. 앞의 두 수는 칸 Ak의 행 번호와 열 번호이고, 뒤의 두 수는 칸 Bk의 행 번호와 열 번호이다. Ak와 Bk는 항상 서로 다른 칸이고, 두 칸은 항상 빈 칸이다.
q개의 줄을 출력한다. k번째 줄에는 Ak에서 Bk까지 옮길 수 있는 화물의 최대 크기 sk를 정수 하나로 출력한다. Ak에서 Bk까지 옮길 수 있는 화물이 없으면 sk는 0이다. 크기가 1인 화물은 한 칸만 덮으므로, sk가 0인 경우는 크기 1인 화물조차 Ak에서 Bk로 옮길 수 없는 경우뿐이다.