격자 조각 자르기

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

요약
일부 대각선 자르기가 정해진 격자에서 나머지 칸의 자르기 방향을 정해, 주어진 K개의 변이 각각 회전해 축에 평행하게 만들 수 있는 조각에 속하도록 하는 방법을 찾거나 불가능함을 판정한다.
난이도

어려움10점 중 9점

유형
그래프, BFS, 구현, 시뮬레이션
정답자
아직 제출이 없습니다

문제

격자 아티스트 브루는 N×MN\times M 크기의 격자를 가지고 있다. 격자의 위에서부터 rr번째 행, 왼쪽에서부터 cc번째 열의 칸을 (r,c)(r,c)와 같이 표기한다. 브루는 격자를 여러 조각으로 자르려고 한다.

격자를 자를 때는 NMNM개의 모든 격자칸에 대해 각각 자를 방향을 정해야 한다. 각 칸을 자르는 방향은 두 대각선 방향 중 하나여야 한다.

아래 그림은 4×44\times 4 크기의 격자판을 자르는 한 가지 예시를 나타낸다.

위의 그림과 같이 자를 경우, 이 격자판은 총 99개의 조각으로 나뉘어진다.

다음 조건을 만족하는 조각을 아름다운 조각이라고 하자.

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

브루는 격자를 더 아름답게 자르는 방법에 대해 연구하던 중, 격자에 있는 변에 관심을 가지기 시작했다. 변의 정의는 아래와 같다.

  • 위아래로 인접한 두 격자칸 사이에 존재하는 길이 11의 선분을 가로변이라고 한다.
  • 좌우로 인접한 두 격자칸 사이에 존재하는 길이 11의 선분을 세로변이라고 한다.
  • 가로변과 세로변을 통틀어 변이라고 한다.

정의에 따라, N×MN\times M 크기의 격자에는 총 (N−1)M(N-1) M개의 가로변과 N(M−1)N(M-1)개의 세로변이 존재함을 알 수 있다.

브루는 NMNM개의 칸 중 일부 칸은 자를 방향을 이미 정했지만, 나머지 칸들은 아직 자를 방향을 정하지 않았다. 또한, 브루는 특정한 KK개의 변이 아름다운 조각에 속하기를 원한다. (해당 변들이 같은 조각에 속할 필요는 없다.)

위의 조건을 만족하도록 격자를 자르는 방법이 존재하는지 알아내고, 만약 존재한다면 그러한 방법을 하나 찾아보자.

입력

첫 줄에는 세 정수 NN, MM, KK가 공백으로 구분되어 주어진다. (2≤N≤502\le N\le 50; 2≤M≤502\le M\le 50; 0≤K≤(N−1)M+N(M−1)0\le K\le(N-1) M+N(M-1))

이후 NN개의 줄에 걸쳐, 그중 rr번째 줄에는 브루가 각 칸을 자를 방향을 나타내는 MM개의 문자 C_r1C\_{r1}, C_r2C\_{r2}, ⋯\cdots, C_rcC\_{rc}가 주어진다. C_rcC\_{rc}는 '/', '\', '.' 중 하나이다.

  • C_rcC\_{rc}가 '/' 또는 '\'인 경우 격자칸 (r,c)(r,c)를 자를 방향을 나타낸다.
  • C_rcC\_{rc}가 '.'인 경우 격자칸 (r,c)(r,c)를 자를 방향을 아직 정하지 않았다는 것을 의미한다.

이후 KK개의 줄에 걸쳐, 그중 ii번째 줄에는 아름다운 조각에 포함되어야 하는 ii번째 변을 나타내는 세 정수 d_id\_i, a_ia\_i, b_ib\_i가 주어진다. KK개의 변은 서로 다르다. (0≤d_i≤10\le d\_i\le 1; 1≤a_i≤N−(1−d_i)1\le a\_i\le N-(1-d\_i); 1≤b_i≤M−d_i1\le b\_i\le M-d\_i)

  • 만약 ii번째 변이 가로변일 경우, d_i=0d\_i=0이고, 해당 가로변의 위쪽에 존재하는 격자칸이 (a_i,b_i)(a\_i,b\_i)이다.
  • 만약 ii번째 변이 세로변일 경우, d_i=1d\_i=1이고, 해당 세로변의 왼쪽에 존재하는 격자칸이 (a_i,b_i)(a\_i,b\_i)이다.

출력

입력으로 주어진 KK개의 변이 모두 아름다운 조각에 속하도록 격자를 자르는 방법이 존재한다면, 첫 줄에 "YES"를 출력한다.

다음 NN개의 줄에는 격자를 자르는 방법을 출력한다. 각 줄에는 MM개의 문자를 출력하며, 각 문자는 '/' 또는 '\' 중 하나여야 한다.

만약 그러한 방법이 존재하지 않는다면 첫 줄에 "NO"를 출력한다.

예제2

  1. 예제 1

    입력
    4 4 2
    ..//
    .\./
    .\..
    \./\
    0 3 3
    1 3 1
    
    예상 출력
    YES
    \\//
    /\\/
    \\\/
    \\/\
    
  2. 예제 2

    입력
    2 3 2
    .\.
    ...
    1 2 1
    1 2 2
    
    예상 출력
    NO