프랙탈
시간 제한1초메모리 제한128 MB
너비가 주어진 블록 프랙탈을 (0,1)에서 (width,1)까지 그리고, 수직선 x가 선분과 만나는 모든 정수 y를 오름차순으로 출력한다.
문제
프랙탈은 전체 모양의 패턴이 도형의 각 부분에서 자기 자신과 똑같이 반복되는 기하학적 도형입니다. 아래에서 설명하는 간단한 "블록 프랙탈"을 생각해 봅시다. 프랙탈이 성장하는 각 단계에서 프랙탈의 모든 선분은 길이가 같은 세 부분으로 나뉩니다. 첫 번째와 마지막 부분은 곧게 유지되지만, 가운데 부분은 그 부분의 너비와 같은 높이를 가진 정사각형 모양의 "돌기(bump)"로 바뀝니다. (선분이 향할 수 있는 네 가지 방향을 고려해야 합니다. 지금 그리고 있는 선분이 어느 방향을 향하는지에 따라 돌기는 위, 아래, 왼쪽 또는 오른쪽으로 튀어나올 수 있습니다.)
이 프랙탈을 데카르트 좌표평면 위에 그리고 을 왼쪽 아래 모서리로 둡니다. 프랙탈의 왼쪽 아래 끝점은 , 오른쪽 아래 끝점은 에 놓입니다. 예를 들어 너비가 인 레벨 프랙탈에서 가장 높은 부분은 에서 로 이어지는 선분입니다.
왼쪽 아래 모서리가 에 놓인 "블록 프랙탈"의 선분들이 지나가는 정수 좌표점을 추적하는 프로그램을 작성하세요. 세로선 가 프랙탈의 선분과 만나는 모든 정수 좌표를 구하면 됩니다.
디버깅이나 흥미를 위해 프랙탈을 그림으로 그려 봐도 좋지만, 한 화면에 담기 어려울 만큼 큰 프랙탈이 주어질 수도 있습니다.
입력
한 줄에 세 정수 레벨 , 너비 , x좌표 가 공백으로 구분되어 주어집니다. 너비는 의 거듭제곱이며, 프랙탈의 모든 모서리가 정수 격자점 위에 놓일 만큼 충분히 큽니다(즉 는 의 배수입니다). 너비는 을 넘지 않습니다. 는 인 정수입니다.
출력
점 가 프랙탈의 선분 위에 놓이는 모든 정수 값을 오름차순으로 정렬하여 공백으로 구분해 한 줄에 출력하세요.