#include <bits/stdc++.h>
#pragma GCC optimize ("O3")
#define lesgooo ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#define lop(i, n) for(ll i = 0; i < (ll)n; i++)
#define alop(i,v) for(auto &i: v)
#define ll long long
#define ld long double
//#define endl '\n'
#define all(v) v.begin(),v.end()
#define mem(dp, x) memset(dp, x, sizeof(dp))
#define sq(x) ((x) * (x))
#define pb push_back
using namespace std;
const ll mod = 1e9 + 7;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
ll random(ll l, ll r) {
return uniform_int_distribution<ll>(l, r)(rng);
}
typedef unsigned long long ull;
ull modmul(ull a, ull b, ull M) {
ull ret = a * b - M * ull(1.L / M * a * b);
return ret + M * (ret < 0) - M * (ret >= (ll)M);
}
ull modpow(ull b, ull e, ull mod) {
ull ans = 1;
for (;e; b = modmul(b, b, mod), e /= 2) {
if (e & 1) ans = modmul(ans, b, mod);
}
return ans;
}
void dfs(int node, vector<pair<int,int>>&edges, vector<vector<int>>&adj ) {
for (auto x:adj[node]) {
edges.push_back({node,x});
dfs(x,edges,adj);
}
}
int main() {
ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
ll t; cin >> t;
while (t--) {
ll n; cin >> n;
vector<int>m(n);
priority_queue<pair<int,int>> pq;
for (int i = 0;i<n;i++) {
cin>>m[i];
if (m[i] > 0) pq.push({m[i],i});
}
vector<vector<int>>adj(n);
vector<int>par(n);
int rt = -1;
int prev = -1;
while (!pq.empty()) {
pair<int,int> pr = pq.top();
pq.pop();
if (rt == -1) {rt =pr.second; prev = rt; par[rt] = -1;}
else {
int nd = pr.second;
par[nd] = prev;
adj[prev].push_back(nd);
prev = nd;
}
}
vector<bool>vis(n,0);
int st = 0;
int node = prev;
while (node != -1) {
for (int i = st; i<m[node];i++) {
if (i == node) {vis[i] = 1; continue;}
if (!vis[i]) {
adj[node].push_back(i);
par[i] = node;
vis[i] = 1;
}
}
st = m[node];
node = par[node];
}
cout<<rt<<'\n';
vector<pair<int,int>>edges;
dfs(rt,edges,adj);
for (auto x:edges) cout<<x.first<<" "<<x.second<<'\n';
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNwcmFnbWEgR0NDIG9wdGltaXplICgiTzMiKQojZGVmaW5lIGxlc2dvb28gaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKSwgY2luLnRpZSgwKSwgY291dC50aWUoMCkKI2RlZmluZSBsb3AoaSwgbikgZm9yKGxsIGkgPSAwOyBpIDwgKGxsKW47IGkrKykKI2RlZmluZSBhbG9wKGksdikgZm9yKGF1dG8gJmk6IHYpCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgbGQgbG9uZyBkb3VibGUKLy8jZGVmaW5lIGVuZGwgJ1xuJwojZGVmaW5lIGFsbCh2KSB2LmJlZ2luKCksdi5lbmQoKQojZGVmaW5lIG1lbShkcCwgeCkgbWVtc2V0KGRwLCB4LCBzaXplb2YoZHApKQojZGVmaW5lIHNxKHgpICgoeCkgKiAoeCkpCiNkZWZpbmUgcGIgcHVzaF9iYWNrCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CmNvbnN0IGxsIG1vZCA9IDFlOSArIDc7Cm10MTk5Mzcgcm5nKGNocm9ubzo6c3RlYWR5X2Nsb2NrOjpub3coKS50aW1lX3NpbmNlX2Vwb2NoKCkuY291bnQoKSk7CgpsbCByYW5kb20obGwgbCwgbGwgcikgewogICAgcmV0dXJuIHVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbjxsbD4obCwgcikocm5nKTsKfQoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgdWxsOwoKdWxsIG1vZG11bCh1bGwgYSwgdWxsIGIsIHVsbCBNKSB7CiAgICB1bGwgcmV0ID0gYSAqIGIgLSBNICogdWxsKDEuTCAvIE0gKiBhICogYik7CiAgICByZXR1cm4gcmV0ICsgTSAqIChyZXQgPCAwKSAtIE0gKiAocmV0ID49IChsbClNKTsKfQp1bGwgbW9kcG93KHVsbCBiLCB1bGwgZSwgdWxsIG1vZCkgewogICAgdWxsIGFucyA9IDE7CiAgICBmb3IgKDtlOyBiID0gbW9kbXVsKGIsIGIsIG1vZCksIGUgLz0gMikgewogICAgICAgIGlmIChlICYgMSkgYW5zID0gbW9kbXVsKGFucywgYiwgbW9kKTsKICAgIH0KICAgIHJldHVybiBhbnM7Cgp9CnZvaWQgZGZzKGludCBub2RlLCB2ZWN0b3I8cGFpcjxpbnQsaW50Pj4mZWRnZXMsICB2ZWN0b3I8dmVjdG9yPGludD4+JmFkaiApIHsKICAgIGZvciAoYXV0byB4OmFkaltub2RlXSkgewogICAgICAgIGVkZ2VzLnB1c2hfYmFjayh7bm9kZSx4fSk7CiAgICAgICAgZGZzKHgsZWRnZXMsYWRqKTsKICAgIH0KfQppbnQgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oMCksIGNpbi50aWUoMCksIGNvdXQudGllKDApOwoKICAgIGxsIHQ7IGNpbiA+PiB0OwogICAgd2hpbGUgKHQtLSkgewogICAgICAgIGxsIG47IGNpbiA+PiBuOwogICAgICAgIHZlY3RvcjxpbnQ+bShuKTsKICAgICAgICBwcmlvcml0eV9xdWV1ZTxwYWlyPGludCxpbnQ+PiBwcTsKICAgICAgICBmb3IgKGludCBpID0gMDtpPG47aSsrKSB7CiAgICAgICAgICAgIGNpbj4+bVtpXTsKICAgICAgICAgICAgaWYgKG1baV0gPiAwKSBwcS5wdXNoKHttW2ldLGl9KTsKICAgICAgICB9CiAgICAgICAgdmVjdG9yPHZlY3RvcjxpbnQ+PmFkaihuKTsKICAgICAgICB2ZWN0b3I8aW50PnBhcihuKTsKICAgICAgICBpbnQgcnQgPSAtMTsKICAgICAgICBpbnQgcHJldiA9IC0xOwogICAgICAgIHdoaWxlICghcHEuZW1wdHkoKSkgewogICAgICAgICAgICBwYWlyPGludCxpbnQ+IHByID0gcHEudG9wKCk7CiAgICAgICAgICAgIHBxLnBvcCgpOwogICAgICAgICAgICBpZiAocnQgPT0gLTEpIHtydCA9cHIuc2Vjb25kOyBwcmV2ID0gcnQ7IHBhcltydF0gPSAtMTt9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgaW50IG5kID0gcHIuc2Vjb25kOwogICAgICAgICAgICAgICAgcGFyW25kXSA9IHByZXY7CiAgICAgICAgICAgICAgICBhZGpbcHJldl0ucHVzaF9iYWNrKG5kKTsKICAgICAgICAgICAgICAgIHByZXYgPSBuZDsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2ZWN0b3I8Ym9vbD52aXMobiwwKTsKICAgICAgICBpbnQgc3QgPSAwOwogICAgICAgIGludCBub2RlID0gcHJldjsKICAgICAgICB3aGlsZSAobm9kZSAhPSAtMSkgewogICAgICAgICAgICBmb3IgKGludCBpID0gc3Q7IGk8bVtub2RlXTtpKyspIHsKICAgICAgICAgICAgICAgIGlmIChpID09IG5vZGUpIHt2aXNbaV0gPSAxOyBjb250aW51ZTt9CiAgICAgICAgICAgICAgICBpZiAoIXZpc1tpXSkgewogICAgICAgICAgICAgICAgICAgIGFkaltub2RlXS5wdXNoX2JhY2soaSk7CiAgICAgICAgICAgICAgICAgICAgcGFyW2ldID0gbm9kZTsKICAgICAgICAgICAgICAgICAgICB2aXNbaV0gPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHN0ID0gbVtub2RlXTsKICAgICAgICAgICAgbm9kZSA9IHBhcltub2RlXTsKICAgICAgICB9CiAgICAgICAgY291dDw8cnQ8PCdcbic7CiAgICAgICAgdmVjdG9yPHBhaXI8aW50LGludD4+ZWRnZXM7CiAgICAgICAgZGZzKHJ0LGVkZ2VzLGFkaik7CiAgICAgICAgZm9yIChhdXRvIHg6ZWRnZXMpIGNvdXQ8PHguZmlyc3Q8PCIgIjw8eC5zZWNvbmQ8PCdcbic7CiAgICB9Cn0KCg==