하쿠나 마타타 정렬
시간 제한2초메모리 제한1024 MB
1부터 n까지의 질량이 담긴 배열이 주어질 때, 질량 차이가 1 이하인 두 딱정벌레를 교환해 오름차순으로 정렬하는 순서를 출력합니다.
문제
아프리카 계곡을 즐겁게 산책한 뒤 티몬과 품바는 점심을 먹기로 했다. 두 친구는 돌 밑에서 마리의 딱정벌레를 꺼내 근처 통나무 위에 올려 두었다. 딱정벌레의 질량은 부터 까지의 서로 다른 정수이다. 품바는 점심을 더 즐겁게 먹기 위해 질량이 오름차순인 순서로 딱정벌레를 먹자고 제안했다.
티몬과 품바는 딱정벌레를 질량의 오름차순으로 정렬하기 위해 하쿠나 마타타 정렬을 쓴다. 한 번의 이동에서 두 친구는 질량 차이가 1 이하인 딱정벌레 두 마리를 고른 뒤 자리를 맞바꾼다. 예를 들어 품바가 질량 2인 딱정벌레를 고르면, 티몬은 질량 1 또는 질량 3인 딱정벌레를 고를 수 있다. 두 친구는 이 정렬을 여러 번 써 왔기 때문에 이 정렬이 항상 동작한다는 것을 알고 있다.
자주는 이 과정을 가까이에서 지켜보았다. 그는 이런 방식을 처음 보았고, 딱정벌레를 이렇게 정렬할 수 있다는 것이 신기했다. 당신의 과제는 딱정벌레의 초기 배치를 입력받아, 질량의 오름차순으로 정렬하는 이동 순서를 출력하는 프로그램을 작성하는 것이다.
입력
첫 줄에는 딱정벌레의 수 이 주어진다(). 둘째 줄에는 공백으로 구분된 개의 서로 다른 정수 ()가 주어진다. 여기서 는 번호가 인 딱정벌레의 질량이다.
출력
첫 줄에 이동 횟수 를 출력한다. 이어서 개의 줄에 이동 순서를 출력한다. 번째 줄에는 두 정수 와 를 출력하는데, 이는 번째 이동에서 품바가 위치 의 딱정벌레를 집고 티몬이 위치 의 딱정벌레를 집었다는 뜻이다. 이동 횟수가 50000을 넘지 않는다면 어떤 방법을 출력해도 된다.