만드는 중입니다

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

진주

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

요약
진주 문자열을 격자 위의 닫힌 경로로 배치하여, 마시우 규칙과 세 가지 제약을 지키는 사전순으로 가장 작은 경로를 찾습니다.
난이도

보통10점 중 7점

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

문제

니콜리의 보석 가게는 흑진주와 백진주로 이루어진 목걸이를 판매한다. 진주는 길이가 kk인 끈에 단단히 붙어 있으며, 끈의 각 단위 길이마다 진주가 하나 있거나 비어 있다. 목걸이는 격자로 나뉜 직사각형 벨벳 판 위에 진열된다. 각 격자 칸에는 진주가 놓이거나, 빈 끈이 놓이거나, 아무것도 놓이지 않는다. 끈의 모든 구간은 가로 또는 세로 방향이다. 제대로 진열된 목걸이는 칸들을 잇는 닫힌 경로이며, 자기 자신과 교차하지 않는다.

이 진열은 퍼즐 '마스유(Masyu)'의 규칙을 따른다. 목걸이를 경로를 따라 놓을 때(끈의 단위와 격자 칸의 간격이 일치할 때) 진주는 다음 조건을 만족해야 한다.

  • 백진주는 경로의 꺾임이 있는 칸에 놓을 수 없다. 또한 진주를 지나는 경로를 이어 주는 양옆 인접 두 칸 중 적어도 하나에는 꺾임이 있어야 한다.
  • 흑진주는 반드시 경로의 꺾임이 있는 칸에 놓여야 한다. 또한 흑진주를 지나는 경로를 이어 주는 두 칸 어디에도 꺾임이 없어야 한다.

니콜리의 고객은 까다로워서 조건을 세 가지 더 건다. 첫째, 목걸이 길이의 절반 이상은 빈 끈이 아니라 진주여야 한다. 둘째, 흑진주 개수가 백진주 개수의 두 배 이상이어야 한다. 셋째, 두 진주 사이에 빈 끈이 5 단위보다 길게 이어지면 안 된다.

니콜리는 이 조건을 모두 지킨 목걸이를 만들어도, 위 규칙대로 진열하지 못하는 경우가 있다. 그럴 때 도와달라.

입력

첫 줄에는 정수 kk, nn, mm이 주어진다. kk(5≤k≤605 \leq k \leq 60)는 끈의 길이이고, nn과 mm(5≤n,m≤505 \leq n,m \leq 50)은 각각 격자의 행 수와 열 수이다. 왼쪽 위 칸은 1행 1열이다.

둘째 줄에는 B, W, .로만 이루어진 길이 kk의 문자열이 주어진다. B는 흑진주, W는 백진주, .은 빈 끈을 뜻한다. 첫 문자는 항상 진주(B 또는 W)이다.

셋째 줄에는 첫 진주가 놓인 격자 칸의 행 rr과 열 cc(1≤r≤n1 \leq r \leq n, 1≤c≤m1 \leq c \leq m)가 주어진다.

출력

목걸이를 격자 안에 진열할 수 있으면, 그 배치의 경로를 출력한다. 첫 진주는 rr행 cc열에 있고, 경로는 입력 문자열과 같은 순서로 진주와 빈 끈을 나타낸다. 각 문자는 N, S, E, W 중 하나로, 현재 칸에서 경로가 나아가는 방향(북, 남, 동, 서)이다. 경로는 닫혀 있어야 하며 자기 자신과 교차해서는 안 된다.

조건을 만족하는 경로가 여러 개면 사전순으로 가장 작은 설명을 출력한다. 마스유 조건을 만족하는 경로가 없으면 impossible을 출력한다.

예제2

  1. 예제 1

    입력
    16 5 6
    B.B.B.BW.WB..WB.
    3 1
    
    예상 출력
    EENNEESSSSWWWWNN
    
  2. 예제 2

    입력
    6 5 5
    W..B.B
    3 3
    
    예상 출력
    impossible