아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

반복되는 미로

시간 제한4초메모리 제한512 MB

요약
무한히 반복되는 격자에서 빈 칸만 지나 출발 셀에서 원점까지 도달할 수 있는지 쿼리마다 판정합니다.
난이도

어려움10점 중 8점

유형
유니온 파인드, 그래프, BFS
정답자
아직 제출이 없습니다

문제

평면 전체를 덮는 미로가 있다. 미로는 nn행 mm열짜리 직사각형 격자인 패턴 하나를 상하좌우로 계속 이어 붙여 만든다. 패턴의 각 칸은 빈 칸이거나 막힌 칸이다.

무한 격자의 행과 열에는 음수를 포함한 정수 번호를 붙인다. 아래로 갈수록 행 번호가 커지고 오른쪽으로 갈수록 열 번호가 커진다. 좌표가 (0,0)(0, 0)인 칸을 원점이라 한다. 패턴은 뒤집거나 회전하지 않은 채로, 왼쪽 위 칸의 행 번호가 nn의 배수이고 열 번호가 mm의 배수인 모든 n×mn \times m 직사각형 영역에 그대로 복사된다. 그래서 패턴의 왼쪽 위 칸은 원점에 놓이고 오른쪽 아래 칸은 좌표가 (n−1,m−1)(n - 1, m - 1)인 칸에 놓인다.

어떤 칸에서 미로를 탈출한다는 것은 빈 칸만 밟으면서 한 번에 상하좌우로 한 칸씩 움직여 원점에 도달한다는 뜻이다.

패턴과 출발 칸 목록이 주어진다. 각 출발 칸마다 탈출이 가능한지 판정하라.

입력

첫째 줄에 패턴의 행 수와 열 수를 나타내는 두 정수 nn과 mm이 주어진다 (1≤n,m≤1001 \le n, m \le 100). 다음 nn개 줄에는 패턴의 한 행을 나타내는 길이 mm의 문자열이 주어진다. 문자 #는 막힌 칸을, .는 빈 칸을 뜻한다.

다음 줄에 출발 칸의 개수 qq가 주어진다 (1≤q≤2000001 \le q \le 200000). 이어지는 qq개 줄 중 kk번째 줄에는 kk번째 출발 칸의 행 번호와 열 번호를 나타내는 두 정수 rr과 cc가 주어진다 (−109≤r,c≤109-10^9 \le r, c \le 10^9).

원점과 모든 출발 칸은 빈 칸이다.

출력

qq개의 줄을 출력한다. kk번째 줄에는 kk번째 출발 칸에서 미로를 탈출할 수 있으면 yes를, 그렇지 않으면 no를 출력한다.

힌트

그림은 첫 번째 예제의 미로다. 색칠한 직사각형은 원점에서 시작하는 패턴 복사본이고, x로 표시한 칸이 원점이다.

예제2

  1. 예제 1

    입력
    6 9
    ..#####..
    ..#...#..
    ......#..
    ..#####..
    ..#......
    ..#...#..
    5
    1 4
    5 4
    1 -5
    5 -5
    -1000000000 0
    
    예상 출력
    yes
    no
    no
    yes
    yes
    
  2. 예제 2

    입력
    3 3
    ..#
    .##
    ###
    3
    0 0
    1 0
    3 4
    
    예상 출력
    yes
    yes
    no