// Java solution for problem I // Author: Grzegorz Guspiel import java.io.*; import java.util.*; class U { static boolean debug = false; static void out(String s) { System.out.println(s); } static void out_(String s) { System.out.print(s); } static void d(String s) { if (debug) out(s); } static void d_(String s) { if (debug) out_(s); } static void azzert(boolean b) { if (!b) throw new RuntimeException(); } } class IntReader { BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer tokenizer = new StringTokenizer(""); int next() throws IOException { while (!tokenizer.hasMoreTokens()) { tokenizer = new StringTokenizer(reader.readLine()); } return Integer.parseInt(tokenizer.nextToken()); } } class Move { final int a; final int b; Move(int a, int b) { U.d("new move " + a + " " + b); this.a = a; this.b = b; } } public class i { static IntReader reader = new IntReader(); int[] t; ArrayList moves = new ArrayList(); void attack(int p1, int p3) { U.azzert((p3 - p1) % 2 == 0); moves.add(new Move(p1 + 1, p3)); moves.add(new Move(p1, p3 - 1)); int p2 = (p1 + p3) / 2; int tmp = t[p1]; t[p1] = t[p3]; t[p3] = t[p2]; t[p2] = tmp; } void swap(int a, int b) { moves.add(new Move(a, b)); int tmp = t[a]; t[a] = t[b]; t[b] = tmp; } void recu(int n) { if (n == 2) { if (t[1] == 1) return; swap(1, 2); return; } if (U.debug && false) { U.out_("recu " + n + ": "); for (int i = 1; i <= n; i++) U.out_(" " + t[i]); U.out(""); } int best = n; for (int i = 1; i <= n; i++) if (t[i] > t[best]) best = i; U.d("best " + best); if (best == 1) { swap(1, 2); best++; } while (best * 2 - 1 <= n) { attack(1, best * 2 - 1); best = best * 2 - 1; } if (best != n) { attack(best - (n - best), n); } recu(n - 1); } void solve() throws IOException { int n = reader.next(); t = new int[n + 10]; for (int i = 1; i <= n; i++) t[i] = reader.next(); recu(n); U.out("" + moves.size()); for (Move move : moves) U.out(move.a + " " + move.b); } public static void main(String[] args) throws IOException { int z = reader.next(); for (int zz = 0; zz < z; zz++) { new i().solve(); } } }