카드
시간 제한1초메모리 제한16 MB
소수로 정해지는 섞기 동작을 거쳐 두 번째 더미가 N부터 1까지 나오도록 첫 번째 더미의 초기 배열을 구한다.
문제
루카스는 카드 게임을 좋아하며, 카드를 섞는 새로운 방법을 고안했다.
번부터 번까지 번호가 매겨진 카드 장이 어떤 순서로 첫 번째 더미에 쌓여 있다. 두 번째 더미는 처음에 비어 있다. 정확히 번의 연산을 수행한다. 를 번째 소수라고 하자(, , , ). 번째 연산에서는 다음을 한다.
- 첫 번째 더미의 맨 위 카드 장을 한 장씩 맨 아래로 옮긴다.
- 그런 다음 첫 번째 더미의 맨 위 카드를 두 번째 더미의 맨 위에 올려놓는다.
예를 들어 첫 번째 더미가 위에서 아래로 일 때 로 연산을 수행하면, 먼저 맨 위 장을 아래로 옮겨 가 되고, 이어서 맨 위 카드 를 두 번째 더미에 올려 첫 번째 더미는 가 된다.
모든 번의 연산을 마쳤을 때 두 번째 더미가 위에서 아래로 이 되도록(즉 카드 번이 두 번째 더미의 맨 아래에 오도록) 첫 번째 더미의 카드 순서를 정하라.
입력
정수 하나가 주어진다(). 첫 번째 더미에 있는 카드의 수이다.
출력
개의 줄을 출력한다. 번째 줄에는 첫 번째 더미에서 위치 에 있는 카드의 번호 를 출력한다. 위치 은 맨 위 카드, 위치 은 맨 아래 카드이다.
힌트
처음 네 소수는 이다. 첫 번째 더미가 위에서 아래로 로 놓여 있을 때, 네 번의 연산 동안 더미는 다음과 같이 변한다.
연산 (): 카드 를 맨 아래로 옮긴 뒤 카드 을 꺼낸다. 연산 (): 두 번 옮기면 맨 위 카드가 가 되어 이를 꺼낸다. 연산 과 에서는 각각 카드 과 를 꺼낸다. 두 번째 더미는 아래에서 위로 로 채워지며, 위에서부터 읽으면 이다.