Universal Cup Judging System

Universal Cup

时间限制: 4 s 内存限制: 2048 MB 总分: 100 难度: [显示] 可 Hack ✓
统计

Little Cyan Fish는 $1$부터 $n$까지의 정수로 이루어진 순열 $p_1, p_2, \ldots, p_n$을 가지고 있으며, 문제의 제목이 암시하듯 이를 오름차순으로 정렬하려고 합니다. 이번에 그가 수행할 수 있는 연산은 다음과 같습니다.

  • 한 번의 연산에서 Little Cyan Fish는 $1 \le i < j \le n$을 만족하는 두 정수 $i$와 $j$를 선택하여 $p_i$와 $p_j$를 교환할 수 있습니다.

하지만 단순한 교환만으로 순열을 정렬하는 방법은 누구나 알고 있으므로, 당연히 이 문제가 요구하는 것은 그것이 아닙니다. 대신 Little Cyan Fish는 연산의 거리를 $j - i$로 정의합니다. 순열을 정렬하는 연산 수열에 대하여, 각 $1 \le d < n$에 대해 $a_d$를 거리가 $d$인 연산의 횟수라고 합시다.

순열을 정렬하는 모든 유한한 연산 수열 중에서, Little Cyan Fish는 사전순으로 가장 작은 수열 $(a_1, a_2, \ldots, a_{n-1})$을 찾고, 이를 달성하는 최대 $5n$번의 연산으로 이루어진 연산 수열을 구성하기를 원합니다.

입력

여러 개의 테스트 케이스가 주어집니다. 입력의 첫 번째 줄에는 테스트 케이스의 개수를 나타내는 하나의 정수 $T$ ($1 \le T \le 10^6$)가 주어집니다.

각 테스트 케이스에 대하여, 첫 번째 줄에는 순열의 길이를 나타내는 하나의 정수 $n$ ($2 \le n \le 10^6$)이 주어집니다. 두 번째 줄에는 순열을 나타내는 $n$개의 정수 $p_1, p_2, \ldots, p_n$ ($1 \le p_i \le n$)이 주어집니다. $p$는 길이가 $n$인 순열임이 보장됩니다.

모든 테스트 케이스에서 $n$의 합은 $10^6$을 초과하지 않음이 보장됩니다.

출력

각 테스트 케이스에 대하여, 다음 형식으로 정답을 출력합니다.

각 테스트 케이스의 첫 번째 줄에는 사전순으로 가장 작은 수열을 나타내는 $n - 1$개의 정수 $a_1, a_2, \ldots, a_{n-1}$을 출력해야 합니다.

두 번째 줄에는 구성한 연산 수열의 연산 횟수를 나타내는 하나의 정수 $k$ ($0 \le k \le 5n$)를 출력해야 합니다.

다음 $k$개의 각 줄에는 해당 연산에서 선택한 인덱스를 나타내는 두 정수 $i$와 $j$ ($1 \le i < j \le n$)를 출력해야 합니다. 주어진 순서대로 연산을 수행했을 때 입력 순열이 정렬되어야 하며, 모든 $1 \le d < n$에 대하여 거리가 $d$인 연산이 정확히 $a_d$번 있어야 합니다.

최대 $5n$번의 연산으로 이루어진 최적의 연산 수열이 항상 존재함을 보일 수 있습니다. 올바른 연산 수열이 여러 개 존재하는 경우, 그중 아무것이나 출력해도 됩니다.

예제

입력 1

3
3
3 2 1
4
2 1 3 4
4
1 3 2 4

출력 1

0 1
1
1 3
0 1 2
3
1 4
2 4
1 4
0 3 2
5
1 3
1 4
2 4
1 4
1 3

참고

첫 번째 예제 테스트 케이스에서 Little Cyan Fish는 위치 $1$과 $3$을 교환합니다. 이는 거리가 $2$인 연산 한 번으로 순열을 정렬합니다.

두 번째 예제 테스트 케이스에서 최적의 연산 수열 중 하나는 $(1, 4)$, $(2, 4)$, $(1, 4)$입니다. 각 연산의 거리는 $3$, $2$, $3$이므로 결과 수열은 $(0, 1, 2)$가 됩니다.

세 번째 예제 테스트 케이스에서 최적의 연산 수열 중 하나는 $(2, 4)$, $(1, 4)$, $(1, 3)$, $(1, 4)$, $(2, 4)$입니다. 거리별 연산 횟수는 $(0, 3, 2)$입니다.

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.