#include "bits/stdc++.h"
// #pragma GCC optimize("O3,unroll-loops")
// #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt")
using namespace std;
using ll = long long int;
mt19937_64 rng(chrono::high_resolution_clock::now().time_since_epoch().count());

struct input_checker {
	string buffer;
	int pos;

	const string all = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
	const string number = "0123456789";
	const string upper = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	const string lower = "abcdefghijklmnopqrstuvwxyz";

	input_checker() {
		pos = 0;
		while (true) {
			int c = cin.get();
			if (c == -1) {
				break;
			}
			buffer.push_back((char) c);
		}
	}

	int nextDelimiter() {
		int now = pos;
		while (now < (int) buffer.size() && buffer[now] != ' ' && buffer[now] != '\n') {
			now++;
		}
		return now;
	}

	string readOne() {
		assert(pos < (int) buffer.size());
		int nxt = nextDelimiter();
		string res;
		while (pos < nxt) {
			res += buffer[pos];
			pos++;
		}
		// cerr << res << endl;
		return res;
	}

	string readString(int minl, int maxl, const string &pattern = "") {
		assert(minl <= maxl);
		string res = readOne();
		assert(minl <= (int) res.size());
		assert((int) res.size() <= maxl);
		for (int i = 0; i < (int) res.size(); i++) {
			assert(pattern.empty() || pattern.find(res[i]) != string::npos);
		}
		return res;
	}

	int readInt(int minv, int maxv) {
		assert(minv <= maxv);
		int res = stoi(readOne());
		assert(minv <= res);
		assert(res <= maxv);
		return res;
	}

	long long readLong(long long minv, long long maxv) {
		assert(minv <= maxv);
		long long res = stoll(readOne());
		assert(minv <= res);
		assert(res <= maxv);
		return res;
	}

	void readSpace() {
		assert((int) buffer.size() > pos);
		assert(buffer[pos] == ' ');
		pos++;
	}

	void readEoln() {
		assert((int) buffer.size() > pos);
		assert(buffer[pos] == '\n');
		pos++;
	}

	void readEof() {
		assert((int) buffer.size() == pos);
	}
};

int main()
{
	ios::sync_with_stdio(false); cin.tie(0);

	input_checker inp;
	
	int t = inp.readInt(1, 1000); inp.readEoln();
	int sumN = 0;
	while (t--) {
		int n = inp.readInt(1, 1000); inp.readEoln();
		sumN += n;
		vector<int> p(n);
		for (int i = 0; i < n; ++i) {
			p[i] = inp.readInt(1, n);
			if (i+1 < n) inp.readSpace();
			else inp.readEoln();
		}

		vector<array<int, 2>> ans;
		auto fix = [&] (int L1, int R1, int L2, int R2) {
			while (L1 < L2) {
				if (p[L1] < p[L2]) {
					++L1;
					continue;
				}
				// Move p[L1] as far right as possible
				int pos = lower_bound(begin(p)+L2, begin(p)+R2+1, p[L1]) - begin(p);
				ans.push_back({L1+1, pos});
				swap(p[L1], p[pos-1]);
			}
		};
		int R1 = 0, R2 = 0;
		while (1) {
			while (R1+1 < n and p[R1] < p[R1+1]) ++R1;
			if (R1+1 == n) break;
			R2 = R1+1;
			while (R2+1 < n and p[R2] < p[R2+1]) ++R2;
			fix(0, R1, R1+1, R2);
			R1 = R2;
		}
		assert(size(ans) <= n*n);
		cout << size(ans) << '\n';
		for (auto [x, y] : ans) cout << x << ' ' << y << '\n';
		for (int i = 0; i < n; ++i) assert(p[i] == i+1);
	}
	assert(sumN <= 1000);
	inp.readEof();
}