만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

하쿠나 마타타 정렬

시간 제한2초메모리 제한1024 MB

요약
1부터 n까지의 질량이 담긴 배열이 주어질 때, 질량 차이가 1 이하인 두 딱정벌레를 교환해 오름차순으로 정렬하는 순서를 출력합니다.
난이도

보통10점 중 5점

유형
정렬, 구현, 배열
정답자
아직 제출이 없습니다

문제

아프리카 계곡을 즐겁게 산책한 뒤 티몬과 품바는 점심을 먹기로 했다. 두 친구는 돌 밑에서 nn마리의 딱정벌레를 꺼내 근처 통나무 위에 올려 두었다. 딱정벌레의 질량은 11부터 nn까지의 서로 다른 정수이다. 품바는 점심을 더 즐겁게 먹기 위해 질량이 오름차순인 순서로 딱정벌레를 먹자고 제안했다.

티몬과 품바는 딱정벌레를 질량의 오름차순으로 정렬하기 위해 하쿠나 마타타 정렬을 쓴다. 한 번의 이동에서 두 친구는 질량 차이가 1 이하인 딱정벌레 두 마리를 고른 뒤 자리를 맞바꾼다. 예를 들어 품바가 질량 2인 딱정벌레를 고르면, 티몬은 질량 1 또는 질량 3인 딱정벌레를 고를 수 있다. 두 친구는 이 정렬을 여러 번 써 왔기 때문에 이 정렬이 항상 동작한다는 것을 알고 있다.

자주는 이 과정을 가까이에서 지켜보았다. 그는 이런 방식을 처음 보았고, 딱정벌레를 이렇게 정렬할 수 있다는 것이 신기했다. 당신의 과제는 딱정벌레의 초기 배치를 입력받아, 질량의 오름차순으로 정렬하는 이동 순서를 출력하는 프로그램을 작성하는 것이다.

입력

첫 줄에는 딱정벌레의 수 nn이 주어진다(1≤n≤1001 \le n \le 100). 둘째 줄에는 공백으로 구분된 nn개의 서로 다른 정수 mim_i(1≤mi≤n1 \le m_i \le n)가 주어진다. 여기서 mim_i는 번호가 ii인 딱정벌레의 질량이다.

출력

첫 줄에 이동 횟수 tt를 출력한다. 이어서 tt개의 줄에 이동 순서를 출력한다. ss번째 줄에는 두 정수 ii와 jj를 출력하는데, 이는 ss번째 이동에서 품바가 위치 ii의 딱정벌레를 집고 티몬이 위치 jj의 딱정벌레를 집었다는 뜻이다. 이동 횟수가 50000을 넘지 않는다면 어떤 방법을 출력해도 된다.

예제1

  1. 예제 1

    입력
    3
    2 3 1
    
    예상 출력
    2
    1 3
    2 3