아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

치우친 정렬

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

요약
2^N마리의 소에 재귀적 교환 절차를 적용한다. 같은 길이의 두 절반을 2^N진수로 비교해 순서를 바꾸고, 총 이동 거리와 최종 순서를 출력한다.
난이도

보통10점 중 5점

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

문제

농부 John에게는 2N2^N마리(1≤N≤101 \le N \le 10)의 소가 있고, 각 소의 옆구리에는 1…2N1 \dots 2^N 범위의 서로 다른 정수 번호가 하나씩 칠해져 있습니다. 소들은 임의의 순서로 한 줄로 서 있으며, 줄의 첫 번째 소는 cow1\mathrm{cow}_1, 두 번째 소는 cow2\mathrm{cow}_2, 이런 식으로 이어집니다.

John은 다음 재귀 절차로 소들의 순서를 바꿉니다.

  1. 현재 줄에 소가 두 마리 이상 있으면, 길이가 같은 두 개의 절반으로 나눕니다. 먼저 왼쪽 절반에 이 절차를 그대로 적용하고, 그다음 오른쪽 절반에 적용합니다.
  2. 처리된 두 절반을 각각 2N2^N진법으로 쓴, 자릿수가 같은 두 수로 봅니다(소 한 마리가 한 자리이고, 가장 왼쪽이 최상위 자리). 두 번째(오른쪽) 수가 첫 번째(왼쪽) 수보다 작으면 두 절반을 통째로 맞바꿉니다. 즉 왼쪽 절반의 각 위치에 있는 소가 오른쪽 절반의 같은 위치에 있는 소와 자리를 교환합니다.

모든 번호가 서로 다르므로 두 절반이 같을 수는 없고, 따라서 이 비교는 항상 대소가 정해집니다.

길이가 kk인 두 절반을 맞바꿀 때마다 관련된 2k2k마리 소가 모두 정확히 kk칸씩 이동하므로, 그 교환은 누적 이동 거리에 2k22k^2을 더합니다.

처음 줄에 이 절차를 실행한 뒤, 모든 소가 이동한 총 거리와 최종 줄 순서를 출력하세요.

예로 23=82^3 = 8마리 소가 다음과 같이 서 있다고 합시다.

8 5 2 3 4 7 1 6

먼저 John은 각 절반을 따로 정리합니다.

8 5 2 3 | 4 7 1 6

각 절반에도 아직 소가 두 마리 이상 있으므로 다시 나눕니다. 왼쪽 절반부터 시작하면

8 5 | 2 3

한 번 더 나누면

8 | 5      그리고      2 | 3

이 되고, 각각 규칙 2로 처리하여 최종적으로

5 | 8      그리고      2 | 3   (그대로)

가 됩니다. 8 5를 5 8로 바꾸면 두 소가 각각 한 칸씩 이동하므로 총 거리는 22가 됩니다. 2 3은 이미 정렬되어 있으므로 총 거리는 22로 유지됩니다. 이제 왼쪽 그룹은 다음과 같습니다.

5 8 | 2 3

5 8과 2 3에 규칙 2를 적용하면, 2가 5보다 앞서므로 두 쌍을 맞바꿉니다.

2 3 5 8

이 네 마리 소가 각각 두 칸씩 이동해 88이 더해지므로 총 거리는 1010이 됩니다.

이제 오른쪽 그룹 4 7 | 1 6은 4 7과 1 6으로 나뉘며 둘 다 이미 정렬되어 있습니다. 둘을 비교하면 1이 4보다 앞서므로 맞바꿉니다.

1 6 4 7

여기서 88이 더 더해져 총 거리는 1818이 됩니다.

이제 줄은 다음과 같으며, 네 마리씩인 두 그룹에 규칙 2를 마지막으로 적용할 차례입니다.

2 3 5 8 | 1 6 4 7

1이 2보다 앞서므로 두 절반을 맞바꿉니다.

1 6 4 7 2 3 5 8

여덟 마리 소가 각각 네 칸씩 이동해 3232가 더해지므로 총 거리는 5050이 됩니다.

따라서 답은 거리 5050과 최종 줄 1 6 4 7 2 3 5 8입니다.

입력

  • 첫째 줄: 정수 NN 하나.
  • 둘째 줄부터 2N+12^N + 1째 줄까지: i+1i + 1째 줄에는 cowi\mathrm{cow}_i의 번호인 정수 하나가 있습니다.

출력

  • 첫째 줄: 모든 소가 이동한 총 거리인 정수 하나.
  • 둘째 줄부터 2N+12^N + 1째 줄까지: i+1i + 1째 줄에는 최종 줄에서 ii번째 소를 나타내는 정수 하나를 출력합니다.

예제1

  1. 예제 1

    입력
    3
    8
    5
    2
    3
    4
    7
    1
    6
    
    예상 출력
    50
    1
    6
    4
    7
    2
    3
    5
    8