만드는 중입니다

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

미궁 한 바퀴

면접 대비

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

요약
좌측 상단에서 출발해 나머지 세 모서리를 방문하고 돌아올 수 있는지 판정한다. 입구를 제외한 방은 한 번 지나가면 무너진다.
난이도

보통10점 중 6점

유형
그래프, DFS, 백트래킹, 구현
정답자
아직 제출이 없습니다

문제

탐험가 타로가 미궁의 도면을 손에 넣었다. 미궁의 바닥은 2차원 격자 모양이고, 도면의 각 칸은 방 하나에 대응하며 들어갈 수 있는 방인지 아닌지가 적혀 있다. 입구는 북서쪽 구석, 즉 도면의 왼쪽 위에 하나뿐이다. 나머지 세 구석인 남서쪽, 남동쪽, 북동쪽 방에는 보물 상자가 하나씩 놓여 있다. 상자를 손에 넣으려면 상자가 놓인 방으로 이동해야 한다.

타로는 입구 방에서 출발해 북, 남, 동, 서로 인접한 방 중 들어갈 수 있는 방으로 이동하기를 반복한다. 상자 세 개를 모두 모은 다음 입구 방으로 돌아오는 것이 목표다. 문제는 미궁이 낡을 대로 낡았다는 점이다. 입구를 제외하면 들어갈 수 있는 방도 바닥이 약해서, 한 번 지나가면 무너져 내리고 그 방에는 다시 들어갈 수 없다. 입구 방은 무너지지 않는다. 상자 세 개를 모두 모으고 입구로 돌아올 수 있는지 판정하라.

입력

입력은 최대 100개의 데이터 집합으로 이루어지고, 각 데이터 집합의 형식은 다음과 같다.

N M
c1,1...c1,M
...
cN,1...cN,M

첫 줄에는 남북 방향의 방 개수 NN과 동서 방향의 방 개수 MM이 주어진다. NN과 MM은 2≤N≤502 \le N \le 50, 2≤M≤502 \le M \le 50을 만족하는 정수다. 이어지는 NN개의 줄에는 길이가 MM인 문자열이 한 줄에 하나씩 주어진다. ii번째 문자열의 jj번째 문자 ci,jc_{i,j}는 북쪽에서 ii번째, 서쪽에서 jj번째인 방 (i,j)(i, j)의 상태를 나타낸다. 들어갈 수 있는 방이면 마침표(.), 들어갈 수 없는 방이면 우물 정자(#)다. 입구는 방 (1,1)(1, 1)이고, 보물 상자는 방 (N,1)(N, 1), (N,M)(N, M), (1,M)(1, M)에 놓여 있다. 이 네 방은 모두 들어갈 수 있다. 타로는 주어진 N×MN \times M개의 방 밖으로 나갈 수 없다.

0이 두 개 적힌 줄이 나오면 입력이 끝난다.

출력

각 데이터 집합마다 보물 상자를 모두 모으고 입구 방으로 돌아올 수 있으면 YES를, 그렇지 않으면 NO를 한 줄에 출력한다.

예제5

  1. 예제 1

    입력
    3 3
    ...
    .#.
    ...
    5 5
    ..#..
    .....
    #....
    .....
    .....
    3 8
    ..#.....
    ........
    .....#..
    3 5
    ..#..
    .....
    ..#..
    4 4
    ....
    ....
    ..##
    ..#.
    0 0
    
    예상 출력
    YES
    NO
    YES
    NO
    NO
    
  2. 예제 2

    입력
    2 2
    ..
    ..
    2 3
    ...
    ...
    3 2
    ..
    ..
    ..
    2 3
    .#.
    ...
    3 2
    ..
    #.
    ..
    0 0
    
    예상 출력
    YES
    YES
    YES
    NO
    NO
    
  3. 예제 3

    입력
    4 4
    ....
    .##.
    ....
    ....
    5 5
    .....
    .###.
    .#.#.
    .###.
    .....
    4 4
    ....
    #.#.
    ....
    ....
    4 4
    .#..
    ....
    ..#.
    ....
    0 0
    
    예상 출력
    YES
    YES
    NO
    NO
    
  4. 예제 4

    입력
    4 7
    ..#.#..
    .......
    .......
    .......
    4 7
    ..#.#..
    .......
    .......
    ..#.#..
    5 7
    ...#...
    .#...#.
    .......
    .#...#.
    ...#...
    0 0
    
    예상 출력
    YES
    YES
    YES
    
  5. 예제 5

    입력
    5 5
    ..#..
    ..#..
    .....
    ..#..
    ..#..
    3 5
    ..#..
    .....
    ..#..
    3 9
    ....#....
    .........
    ....#....
    5 9
    ....#....
    ....#....
    .........
    ....#....
    ....#....
    0 0
    
    예상 출력
    NO
    NO
    NO
    NO