좌측 상단에서 출발해 나머지 세 모서리를 방문하고 돌아올 수 있는지 판정한다. 입구를 제외한 방은 한 번 지나가면 무너진다.
보통6그래프DFS백트래킹구현면접 대비아직 제출이 없습니다시간 제한2초메모리 제한512 MB탐험가 타로가 미궁의 도면을 손에 넣었다. 미궁의 바닥은 2차원 격자 모양이고, 도면의 각 칸은 방 하나에 대응하며 들어갈 수 있는 방인지 아닌지가 적혀 있다. 입구는 북서쪽 구석, 즉 도면의 왼쪽 위에 하나뿐이다. 나머지 세 구석인 남서쪽, 남동쪽, 북동쪽 방에는 보물 상자가 하나씩 놓여 있다. 상자를 손에 넣으려면 상자가 놓인 방으로 이동해야 한다.
타로는 입구 방에서 출발해 북, 남, 동, 서로 인접한 방 중 들어갈 수 있는 방으로 이동하기를 반복한다. 상자 세 개를 모두 모은 다음 입구 방으로 돌아오는 것이 목표다. 문제는 미궁이 낡을 대로 낡았다는 점이다. 입구를 제외하면 들어갈 수 있는 방도 바닥이 약해서, 한 번 지나가면 무너져 내리고 그 방에는 다시 들어갈 수 없다. 입구 방은 무너지지 않는다. 상자 세 개를 모두 모으고 입구로 돌아올 수 있는지 판정하라.
입력은 최대 100개의 데이터 집합으로 이루어지고, 각 데이터 집합의 형식은 다음과 같다.
N M
c1,1...c1,M
...
cN,1...cN,M
첫 줄에는 남북 방향의 방 개수 N과 동서 방향의 방 개수 M이 주어진다. N과 M은 2≤N≤50, 2≤M≤50을 만족하는 정수다. 이어지는 N개의 줄에는 길이가 M인 문자열이 한 줄에 하나씩 주어진다. i번째 문자열의 j번째 문자 ci,j는 북쪽에서 i번째, 서쪽에서 j번째인 방 (i,j)의 상태를 나타낸다. 들어갈 수 있는 방이면 마침표(.), 들어갈 수 없는 방이면 우물 정자(#)다. 입구는 방 (1,1)이고, 보물 상자는 방 (N,1), (N,M), (1,M)에 놓여 있다. 이 네 방은 모두 들어갈 수 있다. 타로는 주어진 N×M개의 방 밖으로 나갈 수 없다.
0이 두 개 적힌 줄이 나오면 입력이 끝난다.
각 데이터 집합마다 보물 상자를 모두 모으고 입구 방으로 돌아올 수 있으면 YES를, 그렇지 않으면 NO를 한 줄에 출력한다.