무한히 반복되는 격자에서 빈 칸만 지나 출발 셀에서 원점까지 도달할 수 있는지 쿼리마다 판정합니다.
어려움8유니온 파인드그래프BFS아직 제출이 없습니다시간 제한4초메모리 제한512 MB평면 전체를 덮는 미로가 있다. 미로는 n행 m열짜리 직사각형 격자인 패턴 하나를 상하좌우로 계속 이어 붙여 만든다. 패턴의 각 칸은 빈 칸이거나 막힌 칸이다.
무한 격자의 행과 열에는 음수를 포함한 정수 번호를 붙인다. 아래로 갈수록 행 번호가 커지고 오른쪽으로 갈수록 열 번호가 커진다. 좌표가 (0,0)인 칸을 원점이라 한다. 패턴은 뒤집거나 회전하지 않은 채로, 왼쪽 위 칸의 행 번호가 n의 배수이고 열 번호가 m의 배수인 모든 n×m 직사각형 영역에 그대로 복사된다. 그래서 패턴의 왼쪽 위 칸은 원점에 놓이고 오른쪽 아래 칸은 좌표가 (n−1,m−1)인 칸에 놓인다.
어떤 칸에서 미로를 탈출한다는 것은 빈 칸만 밟으면서 한 번에 상하좌우로 한 칸씩 움직여 원점에 도달한다는 뜻이다.
패턴과 출발 칸 목록이 주어진다. 각 출발 칸마다 탈출이 가능한지 판정하라.
첫째 줄에 패턴의 행 수와 열 수를 나타내는 두 정수 n과 m이 주어진다 (1≤n,m≤100). 다음 n개 줄에는 패턴의 한 행을 나타내는 길이 m의 문자열이 주어진다. 문자 #는 막힌 칸을, .는 빈 칸을 뜻한다.
다음 줄에 출발 칸의 개수 q가 주어진다 (1≤q≤200000). 이어지는 q개 줄 중 k번째 줄에는 k번째 출발 칸의 행 번호와 열 번호를 나타내는 두 정수 r과 c가 주어진다 (−109≤r,c≤109).
원점과 모든 출발 칸은 빈 칸이다.
q개의 줄을 출력한다. k번째 줄에는 k번째 출발 칸에서 미로를 탈출할 수 있으면 yes를, 그렇지 않으면 no를 출력한다.
그림은 첫 번째 예제의 미로다. 색칠한 직사각형은 원점에서 시작하는 패턴 복사본이고, x로 표시한 칸이 원점이다.
