아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

밭 물주기

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

요약
허수아비를 제외한 모든 칸을 세 칸짜리 트로미노로 덮되 필드 경계를 넘는 타일이 R 곱하기 C개를 넘지 않게 배치합니다.
난이도

어려움10점 중 8점

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

문제

사라는 큰 직사각형 땅을 가진 농부이다. 땅은 5R5R개의 행과 5C5C개의 열로 된 칸 격자이다. 다섯 행마다 가로 울타리가 있고, 다섯 열마다 세로 울타리가 있다. 울타리는 땅을 R×CR \times C개의 5×55 \times 5 구역으로 나누며, 각 구역을 밭이라고 부른다.

새가 작물을 쪼는 것을 막으려고 어떤 밭에는 허수아비가 있다. 허수아비는 칸 하나를 차지하고, 각 5×55 \times 5 밭에는 허수아비가 많아 봐야 하나이다.

가뭄이 오면 사라는 살수기로 작물에 물을 준다. 살수기에는 주 노즐 하나와 옆 노즐 둘이 있다. 살수기 하나는 칸 세 개를 차지하고 그 세 칸에 물을 준다. 옆 노즐 둘은 주 노즐의 상하좌우로 맞닿은 칸에 놓인다. 따라서 살수기 모양은 다음 여섯 가지뿐이다.

  • 세로로 이어진 세 칸
  • 가로로 이어진 세 칸
  • 2×22 \times 2에서 칸 하나를 뺀 기역자 모양 (네 방향)

허수아비가 없는 모든 칸에는 살수기 노즐이 정확히 하나씩 있어야 한다. 허수아비가 있는 칸에는 노즐을 놓을 수 없다. 땅 밖에도 노즐을 놓을 수 없다.

한 살수기가 적시는 세 칸이 같은 5×55 \times 5 밭에 속할 필요는 없다. 이웃 밭에 걸쳐 있으면, 같은 살수기가 적시는 이웃 밭의 두 칸 사이 울타리에 구멍을 뚫어야 한다. 구멍을 뚫는 일은 힘드므로 구멍 수는 R×CR \times C 이하여야 한다.

올바른 배치는 항상 존재한다. 구멍 수가 R×CR \times C 이하인 올바른 배치를 출력한다.

입력

첫째 줄에 정수 RR과 CC가 주어진다. 1≤R,C≤1001 \le R, C \le 100.

다음 6R−16R-1개 줄에 각각 6C−16C-1개 문자가 주어진다. 밭과 그 사이 울타리를 나타낸다. 울타리는 실제로는 두께가 없지만 입력에서는 문자로 표시한다.

빈 칸은 ., 허수아비는 #(ASCII 35), 세로 울타리는 |(ASCII 124), 가로 울타리는 -, 울타리 교차점은 +이다.

출력

입력과 같은 크기의 격자를 출력한다. 울타리 구멍은 _로 표시한다. 입력의 빈 칸 .은 영문 소문자 a부터 z로 바꾸되 다음을 지킨다.

  1. 같은 살수기가 적시는 세 칸은 같은 글자이다. 밭이 달라도 같다.
  2. 같은 밭에서 맞닿은 두 칸이 다른 살수기에 속하면 글자가 달라야 한다.
  3. 다른 밭에서 맞닿은 두 칸이 다른 살수기에 속하고 그 사이 울타리에 구멍이 있으면 글자가 달라야 한다.
  4. 다른 밭에 속한 맞닿은 두 칸은, 위 규칙을 지키는 한 같은 글자여도 된다.

구멍 수는 R×CR \times C 이하여야 한다.

예제1

  1. 예제 1

    입력
    2 2
    .....|.....
    .....|.....
    ...#.|.....
    .....|.....
    .....|.....
    -----+-----
    .....|.....
    .....|.....
    .....|.....
    .....|.....
    .....|.....
    
    예상 출력
    aaacc|dxxxa
    bbbce|dyyya
    ddd#e|dzzza
    ccbae|fccbb
    cbbaa|ffcdb
    -----+---_-
    ssrrr|tttdd
    saaax_xxeee
    yxbbb|zdaaa
    yxccc|zdbbb
    yxddd|zdccc