퀵정렬
시간 제한2초메모리 제한512 MB
서로 겹치지 않는 인접한 쌍들을 한 단계에서 여러 개 바꿀 수 있을 때, 배열을 n단계 이내로 정렬하는 방법을 출력한다.
문제
한 줄로 놓인 카드에 수 a1, a2, ..., an이 적혀 있다. 이 배열을 비내림차순으로 정렬해야 한다. 카드가 꽤 커서 한 사람은 인접한 두 카드만 바꿀 수 있다. 하지만 카드 하나를 동시에 두 사람이 바꾸지만 않으면, 사람은 얼마든지 많이 쓸 수 있다. 그래서 한 단계에서 서로 겹치지 않는 인접한 카드 쌍들을 임의로 골라 동시에 바꿀 수 있다.
더 정확히 말하면, 한 단계에서 i1 + 2 ≤ i2, i2 + 2 ≤ i3, ..., ik−1 + 2 ≤ ik를 만족하는 인덱스 i1, i2, ..., ik를 고르고 ai1과 ai1+1, ai2와 ai2+1, ..., aik과 aik+1을 바꿀 수 있다.
목표는 주어진 배열을 n단계 이내에 비내림차순으로 정렬하는 것이다. 단계 수를 최소로 만들 필요는 없다.
입력
입력에는 여러 테스트 케이스가 들어 있다. 첫 줄에 테스트 케이스의 수 t가 주어진다. 각 테스트 케이스는 두 줄로 설명된다. 첫째 줄에는 배열의 크기 n이 주어지고, 1 ≤ n ≤ 100이다. 둘째 줄에는 배열의 원소 a1, a2, ..., an이 주어진다. 배열의 원소는 1 이상 109 이하의 정수다.
입력에 주어지는 n 값의 합은 1000을 넘지 않는다.
출력
모든 테스트 케이스의 답을 순서대로 출력한다. 각 테스트 케이스마다 배열을 정렬하는 데 쓴 단계 수 m(0 ≤ m ≤ n)을 한 줄에 출력한다. 다음 m개 줄에는 각 단계를 설명한다. 바꾸는 쌍의 수 k(0 ≤ k ≤ ⌊n/2⌋)와 각 쌍의 첫 번째 원소의 인덱스 i1, i2, ..., ik를 증가하는 순서로 출력한다.