만드는 중입니다

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

도움닫기

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

요약
격자에서 달리기 뒤 멀리뛰기를 반복해 시작 칸 S에서 도착 칸 E로 갈 수 있는지 판정합니다.
난이도

보통10점 중 6점

유형
그래프, BFS, 시뮬레이션
정답자
아직 제출이 없습니다

문제

세로로 NN칸, 가로로 MM칸 크기의 격자가 주어진다. 격자의 각 칸은 빈 칸 또는 함정이다. 이 격자에서 점프는 도움닫기와 멀리뛰기를 차례로 하는 것으로 이루어진다.

  1. (도움닫기) 1 이상의 정수 xx를 고른 뒤, 현재 칸에서 상하좌우 중 한 방향을 골라 1칸씩 xx번 이동한다. 이동하는 동안 함정이 있는 칸으로 가거나 격자 밖으로 나가서는 안 된다.
  2. (멀리뛰기) 이어서 0 이상 x+1x + 1 이하의 정수 yy를 고른 뒤, 같은 방향으로 yy칸만큼 뛰어 이동한다. 도착한 칸에 함정이 있거나 격자 밖으로 나가서는 안 된다.

격자의 시작 빈 칸에서 출발해 점프를 임의의 횟수만큼 반복해서 끝 빈 칸에 도착할 수 있는지 판별하라.

입력

첫 번째 줄에 테스트 케이스의 개수 TT가 주어진다. (1≤T≤10 0001 \le T \le 10\,000)

이후 TT개의 테스트 케이스가 주어지며, 각 테스트 케이스는 다음과 같은 형태이다.

첫 번째 줄에 정수 NN, MM이 차례대로 주어진다. (1≤N,M≤2 0001 \le N, M \le 2\,000)

두 번째 줄부터 NN개의 줄에 걸쳐 격자의 각 행을 나타내는 길이 MM의 문자열이 주어진다. 각 문자는 ., #, S, E 중 하나이며, 의미는 다음과 같다.

  • .: 빈 칸
  • #: 함정
  • S: 시작 빈 칸
  • E: 끝 빈 칸

각 테스트 케이스의 격자에는 S와 E가 정확히 하나씩 있다.

모든 테스트 케이스의 N×MN \times M의 합은 4 000 0004\,000\,000 이하이다.

출력

각 테스트 케이스에 대해 한 줄씩 출력한다. E가 적힌 빈 칸에 도달할 수 있으면 YES를, 도달할 수 없으면 NO를 출력한다.

예제1

  1. 예제 1

    입력
    3
    4 5
    S..#.
    ####.
    .E###
    .#...
    2 3
    S#.
    .#E
    3 3
    S..
    .#.
    ..E
    
    예상 출력
    YES
    NO
    YES