격자 조각 자르기
시간 제한1초메모리 제한1024 MB
일부 대각선 자르기가 정해진 격자에서 나머지 칸의 자르기 방향을 정해, 주어진 K개의 변이 각각 회전해 축에 평행하게 만들 수 있는 조각에 속하도록 하는 방법을 찾거나 불가능함을 판정한다.
문제
격자 아티스트 브루는 크기의 격자를 가지고 있다. 격자의 위에서부터 번째 행, 왼쪽에서부터 번째 열의 칸을 와 같이 표기한다. 브루는 격자를 여러 조각으로 자르려고 한다.
격자를 자를 때는 개의 모든 격자칸에 대해 각각 자를 방향을 정해야 한다. 각 칸을 자르는 방향은 두 대각선 방향 중 하나여야 한다.
아래 그림은 크기의 격자판을 자르는 한 가지 예시를 나타낸다.

위의 그림과 같이 자를 경우, 이 격자판은 총 개의 조각으로 나뉘어진다.
다음 조건을 만족하는 조각을 아름다운 조각이라고 하자.
- 조각을 적당히 회전해, 해당 조각의 경계를 구성하는 모든 선분이 축 또는 축과 평행하도록 할 수 있어야 한다.
- 조각을 자르는 방법에 따라, 조각의 내부에 구멍이나 잘린 흔적이 있을 수 있다. 이러한 경우, 해당 부분을 이루는 선분들 역시 모두 축 또는 축과 평행하도록 조각을 회전할 수 있어야 한다. 아래 그림에서 왼쪽은 내부에 구멍을, 오른쪽은 내부에 잘린 흔적을 포함하는 아름다운 조각의 예시이다. (해당 조각은 초록색으로 표시되어 있다.)

브루는 격자를 더 아름답게 자르는 방법에 대해 연구하던 중, 격자에 있는 변에 관심을 가지기 시작했다. 변의 정의는 아래와 같다.
- 위아래로 인접한 두 격자칸 사이에 존재하는 길이 의 선분을 가로변이라고 한다.
- 좌우로 인접한 두 격자칸 사이에 존재하는 길이 의 선분을 세로변이라고 한다.
- 가로변과 세로변을 통틀어 변이라고 한다.
정의에 따라, 크기의 격자에는 총 개의 가로변과 개의 세로변이 존재함을 알 수 있다.
브루는 개의 칸 중 일부 칸은 자를 방향을 이미 정했지만, 나머지 칸들은 아직 자를 방향을 정하지 않았다. 또한, 브루는 특정한 개의 변이 아름다운 조각에 속하기를 원한다. (해당 변들이 같은 조각에 속할 필요는 없다.)
위의 조건을 만족하도록 격자를 자르는 방법이 존재하는지 알아내고, 만약 존재한다면 그러한 방법을 하나 찾아보자.
입력
첫 줄에는 세 정수 , , 가 공백으로 구분되어 주어진다. (; ; )
이후 개의 줄에 걸쳐, 그중 번째 줄에는 브루가 각 칸을 자를 방향을 나타내는 개의 문자 , , , 가 주어진다. 는 '/', '\', '.' 중 하나이다.
- 가
'/'또는'\'인 경우 격자칸 를 자를 방향을 나타낸다. - 가
'.'인 경우 격자칸 를 자를 방향을 아직 정하지 않았다는 것을 의미한다.
이후 개의 줄에 걸쳐, 그중 번째 줄에는 아름다운 조각에 포함되어야 하는 번째 변을 나타내는 세 정수 , , 가 주어진다. 개의 변은 서로 다르다. (; ; )
- 만약 번째 변이 가로변일 경우, 이고, 해당 가로변의 위쪽에 존재하는 격자칸이 이다.
- 만약 번째 변이 세로변일 경우, 이고, 해당 세로변의 왼쪽에 존재하는 격자칸이 이다.
출력
입력으로 주어진 개의 변이 모두 아름다운 조각에 속하도록 격자를 자르는 방법이 존재한다면, 첫 줄에 "YES"를 출력한다.
다음 개의 줄에는 격자를 자르는 방법을 출력한다. 각 줄에는 개의 문자를 출력하며, 각 문자는 '/' 또는 '\' 중 하나여야 한다.
만약 그러한 방법이 존재하지 않는다면 첫 줄에 "NO"를 출력한다.