만드는 중입니다

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

샤워실 바닥 깔기 (Large)

면접 대비

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

요약
2^K × 2^K 격자에서 배수구 칸 하나를 비워 두고 L자 타일로 채우되, 문제가 정한 재귀 배치와 번호 부여 규칙을 그대로 따라 출력한다.
난이도

보통10점 중 6점

유형
분할 정복, 재귀, 구현, 시뮬레이션
정답자
아직 제출이 없습니다

문제

오늘은 민규가 훈련소에 입소하는 날이다. 행사를 모두 마치고 생활관에서 쉬려는데 교관이 들어와 민규를 불렀다. 따라갔더니 김준서를 아느냐고 물었다. 그 녀석이 샤워실 바닥을 깔면서 배수구 자리까지 막아 버렸으니, 같은 학교 출신인 민규가 바닥을 다시 깔라는 것이었다.

샤워실 바닥은 정사각형이고 한 변의 길이는 2의 거듭제곱이다. 준서는 2×22 \times 2 크기의 타일로 바닥을 전부 채웠는데, 이렇게 채우면 배수구가 놓일 칸을 비울 수 없다. 대신 세 칸을 차지하는 ㄱ자 모양 타일을 쓰면 배수구 칸 하나만 남기고 바닥을 모두 덮을 수 있다. ㄱ자 타일은 2×22 \times 2 정사각형에서 한 칸을 뺀 모양이고, 네 방향 중 어느 쪽으로든 돌려서 놓을 수 있다.

배수구 칸을 뺀 모든 칸을 ㄱ자 타일로 겹치지 않게 덮는 배치를 구하라.

입력

첫째 줄에 바닥의 크기를 정하는 자연수 KK (1≤K≤7)(1 \le K \le 7)가 주어진다. 바닥의 한 변의 길이는 2K2^K이다.

둘째 줄에 배수구의 위치를 나타내는 자연수 xx, yy (1≤x,y≤2K)(1 \le x, y \le 2^K)가 공백으로 구분되어 주어진다. 가장 왼쪽 아래 칸이 (1,1)(1, 1), 가장 오른쪽 위 칸이 (2K,2K)(2^K, 2^K)이다.

출력

바닥의 배치도를 2K2^K줄에 걸쳐 출력한다. 첫 줄이 y=2Ky = 2^K인 행이고 마지막 줄이 y=1y = 1인 행이다. 각 줄에는 x=1x = 1부터 x=2Kx = 2^K까지의 칸을 공백 하나로 구분해 출력한다. 배수구가 있는 칸은 −1-1로, 나머지 칸은 그 칸을 덮는 타일의 번호로 적는다.

배치하는 방법은 여러 가지이므로 다음 규칙으로 답 하나를 정한다. 이 규칙을 그대로 따른 배치만 정답으로 인정한다.

타일은 다음 재귀 규칙으로 놓는다.

  • 한 변의 길이가 11인 정사각형에는 배수구 칸만 있으므로 타일을 놓지 않는다.
  • 한 변의 길이가 2k2^k (k≥1)(k \ge 1)인 정사각형은 한 변의 길이가 2k−12^{k-1}인 사분면 네 개로 나눈다. 이 정사각형의 중심에 닿는 칸이 각 사분면마다 하나씩 있는데, 배수구가 들어 있지 않은 세 사분면의 그 칸 세 개를 ㄱ자 타일 하나로 덮는다. 그다음 방금 덮은 칸 세 개를 각각 자기 사분면의 배수구로 보고, 사분면 네 개에 같은 규칙을 다시 적용한다.

타일 번호는 배치가 모두 끝난 뒤에 매긴다. yy가 작은 행부터 훑고 같은 행에서는 xx가 작은 칸부터 훑으면서, 아직 번호가 없는 타일을 만날 때마다 11, 22, 33, ... 을 차례로 붙인다.

1≤K≤71 \le K \le 7에서 이 배치는 항상 존재하고, 타일 번호는 1900019000을 넘지 않는다.

예제3

  1. 예제 1

    입력
    1
    2 2
    
    예상 출력
    1 -1
    1 1
    
  2. 예제 2

    입력
    2
    1 1
    
    예상 출력
    4 4 5 5
    4 3 3 5
    1 1 3 2
    -1 1 2 2
    
  3. 예제 3

    입력
    2
    3 2
    
    예상 출력
    4 4 5 5
    4 3 3 5
    1 3 -1 2
    1 1 2 2