빠짐없이 덮기

점이 있는 칸과 빈 칸으로 이루어진 격자를 네 종류의 선 조각으로 채우되, 맞닿은 변에서 선이 일치하고 격자 테두리에 닿지 않게 채울 수 있는지 판정한다.

어려움8그래프DFS백트래킹조합론아직 제출이 없습니다시간 제한1초메모리 제한1024 MB

문제

이브는 퍼즐을 좋아한다. 최근에 산 퍼즐은 꽤 어렵다. 퍼즐판은 RRCC열의 직사각형 격자이고, 일부 칸에는 점이 찍혀 있으며 나머지 칸은 비어 있다. 퍼즐에는 네 종류의 조각이 들어 있고, 종류마다 R×CR \times C개씩 있다.

조각에는 저마다 선이 그려져 있다. 1번 조각은 칸 안쪽의 점 하나에서 선이 뻗어 나와 한 변의 한가운데에 닿는다. 2번 조각은 마주 보는 두 변의 한가운데를 잇는 직선이다. 3번 조각은 이웃한 두 변의 한가운데를 잇는 꺾인 선이다. 4번 조각은 한 변에서 나와 칸 안쪽을 돌아 같은 변으로 되돌아오는 선이어서, 그 변과 두 점에서 만난다. 이 두 점은 변의 한가운데가 아니라 한가운데를 사이에 두고 양쪽으로 떨어져 있다.

퍼즐의 목표는 조각 몇 개를 써서 격자를 빈틈없이 덮는 것이다. 즉, 모든 칸이 조각 하나로 덮여야 한다. 조각은 90도, 180도, 270도 회전해서 놓을 수 있다. 대신 다음 세 조건을 지켜야 한다.

  1. 1번 조각은 점이 찍힌 칸에만 놓을 수 있고, 나머지 종류는 빈 칸에만 놓을 수 있다.
  2. 변을 맞대고 있는 두 칸에 대해, 두 조각의 선이 그 변과 만나는 지점이 정확히 일치해야 한다.
  3. 조각의 선은 격자의 테두리에 닿을 수 없다.

이브는 퍼즐이 엉성하게 만들어져서 답이 아예 없는 것은 아닌지 의심하기 시작했다. 이 퍼즐을 풀 수 있는지 판정하라.

입력

첫째 줄에 퍼즐판의 행 수 RR과 열 수 CC가 주어진다 (1R,C201 \le R, C \le 20). 다음 RR개 줄에는 길이가 CC인 문자열이 한 줄씩 주어져 퍼즐판의 각 행을 나타낸다. 소문자 o는 점이 찍힌 칸이고, 하이픈 -은 빈 칸이다. 점이 찍힌 칸은 최대 15개이다.

출력

퍼즐을 풀 수 있으면 대문자 Y를, 풀 수 없으면 대문자 N을 한 줄에 출력한다.