SWAP-C Sort

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

요약
모든 서로 다른 두 위치의 원소를 정확히 한 번씩 교환해서 순열을 정렬할 수 있는지 판별하고, 가능하면 교환 순서 하나를 출력한다.
난이도

어려움10점 중 8점

유형
조합론, 수학, 그리디, 구현
정답자
아직 제출이 없습니다

문제

길이 nn의 순열 P=P_1,P_2,⋯ ,P_nP = P\_1, P\_2, \cdots, P\_n이 주어진다. 순열 PP에는 11 이상 nn 이하의 정수가 정확히 한 번씩 등장한다.

1≤i<j≤n1 \le i < j \le n인 모든 쌍 (i,j)(i, j)에 대해 P_iP\_i와 P_jP\_j를 교환하는 동작을 정확히 한 번씩, 총 n(n−1)2\frac{n(n-1)}{2}번의 동작을 수행하여 PP를 정렬할 수 있는지 판별하고, 가능하다면 그러한 방법을 아무거나 하나 출력하시오.

입력

첫 번째 줄에는 순열의 길이 nn이 주어진다. (2≤n≤10002 \le n \le 1000)

두 번째 줄에는 P_1,P_2,⋯ ,P_nP\_1, P\_2, \cdots, P\_n의 값이 순서대로 공백으로 구분되어 주어진다.

출력

첫 번째 줄에 문제의 조건에 맞게 PP를 정렬할 수 있으면 1, 아니면 0을 출력한다.

정렬할 수 있는 경우, 그러한 n(n−1)2\frac{n(n-1)}{2}번의 동작을 순서대로 한 줄에 하나씩 출력한다. ii번째 원소와 jj번째 원소를 교환할 때, ii와 jj를 공백으로 구분하여 출력한다. ii와 jj의 대소 관계는 상관 없다.

예제2

  1. 예제 1

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

    입력
    5
    3 1 5 4 2
    
    예상 출력
    0