#include <iostream>
#include <vector>
#include <algorithm>
#include <bits/stdc++.h>
#define SPEED ios_base::sync_with_stdio(false); cin.tie(0), cout.tie(0)
using namespace std;
int helper(int x)
{
int mini = 1000, maxi = 0;
while (x > 0)
{
mini = min(mini, x % 10);
maxi = max(maxi, x % 10);
x /= 10;
}
return maxi - mini;
}
void seive(bool *prime)
{
int i, j;
prime[0] = prime[1] = 0;
for (i = 2; i <= 100000; i++)
{
if (prime[i] == 0)
continue;
for (j = 2 * i; j <= 100000; j += i)
{
prime[j] = 0;
}
}
}
int main()
{
int test;
SPEED;
cin >> test;
while (test-- > 0)
{
int n, m;
cin >> n;
vector<int> arr(n);
map<int, set<int>> myMap;
vector<vector<int>> res;
set<int> Set;
int i, j;
for (i = 0; i < n; i++)
{
cin >> arr[i];
myMap[arr[i]].insert(i);
Set.insert(arr[i]);
}
for (i = 0; i < n; i++)
{
int x = *Set.begin();
Set.erase(x);
myMap[x].erase(i);
if (x == arr[i])
continue;
int j = *myMap[x].begin();
myMap[x].erase(j);
res.push_back({i, j});
res.push_back({j, i});
res.push_back({i, j});
myMap[arr[i]].insert(j);
arr[j] = arr[i];
arr[i] = x;
}
cout << res.size() << endl;
for (i = 0; i < res.size(); i++)
{
cout << res[i][0] + 1 << " " << res[i][1] + 1 << endl;
}
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBTUEVFRCBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsgY2luLnRpZSgwKSwgY291dC50aWUoMCkKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmludCBoZWxwZXIoaW50IHgpCnsKICAgIGludCBtaW5pID0gMTAwMCwgbWF4aSA9IDA7CiAgICB3aGlsZSAoeCA+IDApCiAgICB7CiAgICAgICAgbWluaSA9IG1pbihtaW5pLCB4ICUgMTApOwogICAgICAgIG1heGkgPSBtYXgobWF4aSwgeCAlIDEwKTsKICAgICAgICB4IC89IDEwOwogICAgfQogICAgcmV0dXJuIG1heGkgLSBtaW5pOwp9Cgp2b2lkIHNlaXZlKGJvb2wgKnByaW1lKQp7CiAgICBpbnQgaSwgajsKICAgIHByaW1lWzBdID0gcHJpbWVbMV0gPSAwOwogICAgZm9yIChpID0gMjsgaSA8PSAxMDAwMDA7IGkrKykKICAgIHsKICAgICAgICBpZiAocHJpbWVbaV0gPT0gMCkKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgZm9yIChqID0gMiAqIGk7IGogPD0gMTAwMDAwOyBqICs9IGkpCiAgICAgICAgewogICAgICAgICAgICBwcmltZVtqXSA9IDA7CiAgICAgICAgfQogICAgfQp9CgppbnQgbWFpbigpCnsKICAgIGludCB0ZXN0OwogICAgU1BFRUQ7CiAgICBjaW4gPj4gdGVzdDsKICAgIHdoaWxlICh0ZXN0LS0gPiAwKQogICAgewogICAgICAgIGludCBuLCBtOwogICAgICAgIGNpbiA+PiBuOwogICAgICAgIHZlY3RvcjxpbnQ+IGFycihuKTsKICAgICAgICBtYXA8aW50LCBzZXQ8aW50Pj4gbXlNYXA7CiAgICAgICAgdmVjdG9yPHZlY3RvcjxpbnQ+PiByZXM7CiAgICAgICAgc2V0PGludD4gU2V0OwogICAgICAgIGludCBpLCBqOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCiAgICAgICAgewogICAgICAgICAgICBjaW4gPj4gYXJyW2ldOwogICAgICAgICAgICBteU1hcFthcnJbaV1dLmluc2VydChpKTsKICAgICAgICAgICAgU2V0Lmluc2VydChhcnJbaV0pOwogICAgICAgIH0KICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKQogICAgICAgIHsKICAgICAgICAgICAgaW50IHggPSAqU2V0LmJlZ2luKCk7CiAgICAgICAgICAgIFNldC5lcmFzZSh4KTsKICAgICAgICAgICAgbXlNYXBbeF0uZXJhc2UoaSk7CiAgICAgICAgICAgIGlmICh4ID09IGFycltpXSkKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBpbnQgaiA9ICpteU1hcFt4XS5iZWdpbigpOwogICAgICAgICAgICBteU1hcFt4XS5lcmFzZShqKTsKICAgICAgICAgICAgcmVzLnB1c2hfYmFjayh7aSwgan0pOwogICAgICAgICAgICByZXMucHVzaF9iYWNrKHtqLCBpfSk7CiAgICAgICAgICAgIHJlcy5wdXNoX2JhY2soe2ksIGp9KTsKICAgICAgICAgICAgbXlNYXBbYXJyW2ldXS5pbnNlcnQoaik7CiAgICAgICAgICAgIGFycltqXSA9IGFycltpXTsKICAgICAgICAgICAgYXJyW2ldID0geDsKICAgICAgICB9CiAgICAgICAgY291dCA8PCByZXMuc2l6ZSgpIDw8IGVuZGw7CiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJlcy5zaXplKCk7IGkrKykKICAgICAgICB7CiAgICAgICAgICAgIGNvdXQgPDwgcmVzW2ldWzBdICsgMSA8PCAiICIgPDwgcmVzW2ldWzFdICsgMSA8PCBlbmRsOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAwOwp9Cg==