스왑
시간 제한1초메모리 제한256 MB
순열이 주어질 때 각 k = 2..n에서 위치 k와 floor(k/2)를 바꿀지 정해, 만들 수 있는 순열 중 사전순으로 가장 앞선 것을 구한다.
문제
부터 까지의 정수가 한 번씩 나타나는 길이 의 수열 이 주어진다.
두 수를 바꾸는 "스왑" 연산으로 이 수열을 고칠 수 있다. 순서로 를 하나씩 늘려 가면서, 각 마다 와 를 바꿀지 바꾸지 않을지 고를 수 있다. 이미 지나간 로는 돌아가지 못한다.
수열 이 수열 보다 사전순으로 앞선다는 것은, 인 모든 에 대해 이고 인 가 존재한다는 뜻이다.
순서대로 "스왑" 연산을 골라 만들 수 있는 수열 중 사전순으로 가장 앞선 수열은 무엇일까?
입력
첫 줄에 정수 이 주어진다.
둘째 줄에 수열을 이루는 개의 정수가 공백으로 구분되어 주어진다. 이 수열은 부터 까지의 정수를 한 번씩 담은 순열이다.
출력
첫 줄에 순서대로 "스왑" 연산을 골라 만들 수 있는 수열 중 사전순으로 가장 앞선 수열을 나타내는 개의 정수를 공백으로 구분해 출력한다.