샤워실 바닥 깔기 (Small)
시간 제한2초메모리 제한512 MB
2^K × 2^K 격자에서 배수구 한 칸을 비워 두고 L자 타일로 덮되, 인쇄 순서에서 번호가 사전순으로 가장 작게 나오는 배치를 구한다.
문제
민규가 훈련소에 입소한 첫날, 교관이 민규를 불러 샤워실 바닥을 다시 깔라고 했다. 먼저 바닥을 깐 사람이 배수구 자리까지 타일로 막아버렸기 때문이다.
샤워실 바닥은 정사각형이고 한 변의 길이는 2의 거듭제곱이다. 앞사람은 크기의 정사각형 타일만 써서 바닥을 전부 덮었는데, 이 타일로는 배수구 자리 한 칸만 비워 둘 수 없다. 그래서 민규는 네 칸짜리 정사각형 타일 대신 세 칸을 차지하는 ㄱ자 타일을 쓰기로 했다. ㄱ자 타일은 정사각형에서 한 칸을 뺀 모양이고, 90도씩 돌려서 네 방향 중 어느 방향으로든 놓을 수 있다.
바닥의 크기와 배수구의 위치가 주어진다. 배수구 칸만 비워 두고 나머지 칸을 ㄱ자 타일로 겹치지 않게 빈틈없이 덮는 방법을 찾아라. 타일은 바닥 밖으로 나갈 수 없다.
입력
첫째 줄에 자연수 가 주어진다 (). 바닥의 한 변의 길이는 이다.
둘째 줄에 배수구의 위치를 나타내는 두 자연수 와 가 공백으로 구분되어 주어진다 (). 가장 왼쪽 아래 칸이 이고 가장 오른쪽 위 칸이 이다.
출력
개의 줄을 출력한다. 번째 줄에는 인 가로줄을 부터 까지 왼쪽에서 오른쪽으로, 값 사이를 공백 하나로 구분해 출력한다. 즉 위쪽 줄을 먼저 출력한다. 배수구 칸에는 -1을 출력하고, 나머지 칸에는 그 칸을 덮는 타일의 번호를 출력한다.
타일 배치는 여러 가지가 나올 수 있으므로 다음 규칙으로 답 하나를 정한다. 먼저 출력하는 순서대로, 즉 위쪽 줄부터 각 줄에서는 왼쪽부터 칸을 훑으면서 아직 번호가 없는 타일을 만날 때마다 번부터 차례대로 번호를 붙인다. 타일은 모두 개이므로 번호는 부터 까지 쓴다. 이렇게 번호를 붙였을 때, 출력할 숫자를 출력 순서대로 이어 붙인 수열이 사전순으로 가장 작은 배치를 출력한다.
덮는 방법이 존재하지 않으면 -1만 출력한다.