#include <bits/stdc++.h>
using namespace std;
int unx() {
  int x = 0, n = 0;
  char c = getchar();
  for (; !isdigit(c); c = getchar()) n = (c == '-');
  for (; isdigit(c); c = getchar()) x = x * 10 + c - '0';
  return (n) ? -x : x;
}
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
int rnd(int l, int r) { return l + rng() % (r - l + 1); }
const int N = 16;
const int INF = 1e9;
int n, a[N];
vector<int> mask[N];
int f[N][1ll << N], g[N][1ll << N], s[1ll << N];
void solve() {
  for (int i = 1, _c = n = unx(); i <= _c; ++i) a[i] = unx();
  for (int i = 0, _c = n; i <= _c; ++i) mask[i].clear();
  for (int i = 0, _c = (1ll << n) - 1; i <= _c; ++i) {
    mask[__builtin_popcount(i)].push_back(i);
  }
  for (int now = 0, _c = n - 1; now <= _c; ++now) {
    for (auto &v : mask[now]) {
      vector<int> x, y;
      for (int i = 1, _c = n; i <= _c; ++i) {
        if ((v >> (i - 1) & 1ll))
          y.push_back(i);
        else
          x.push_back(i);
      }
      int len = y.size();
      for (int i = 0, _c = (1 << len) - 1; i <= _c; ++i) {
        if (!i)
          s[i] = 0;
        else {
          for (int j = 1, _c = len; j <= _c; ++j)
            if ((i >> (j - 1) & 1ll)) {
              s[i] = s[(i & ~(1ll << (j - 1)))] + a[y[j - 1]];
              break;
            }
        }
      }
      for (int i = 0, _c = (1ll << len) - 1; i <= _c; ++i) f[0][i] = INF;
      f[0][0] = 0;
      int rem = n - len;
      for (int i = 1, _c = n - len; i <= _c; ++i) {
        int val = a[x[i - 1]];
        for (int j = 0, _c = (1ll << len) - 1; j <= _c; ++j) {
          f[i][j] = INF;
          if (val > f[i - 1][j]) {
            f[i][j] = min(f[i][j], val);
            g[i][j] = 0;
            continue;
          } else {
            for (int sub = j; sub; sub = (sub - 1) & j) {
              if (val + s[sub] > f[i - 1][j ^ sub]) {
                if (f[i][j] > val + s[sub]) {
                  f[i][j] = val + s[sub];
                  g[i][j] = sub;
                }
              }
            }
          }
        }
      }
      if (f[rem][(1ll << len) - 1] != INF) {
        int st = (1ll << len) - 1;
        cout << now << '\n';
        vector<pair<int, int>> ans;
        for (int i = rem, _c = 1; i >= _c; --i) {
          int id = x[i - 1];
          int cur = g[i][st];
          for (int j = 1, _c = len; j <= _c; ++j) {
            if ((cur >> (j - 1) & 1ll)) {
              ans.push_back(make_pair(id, y[j - 1]));
            }
          }
          st ^= cur;
        }
        vector<int> pos(n + 1);
        for (int i = 1, _c = n; i <= _c; ++i) pos[i] = i;
        for (auto &v : ans) {
          cout << pos[v.second] << ' ' << pos[v.first] << '\n';
          for (int i = v.second, _c = n; i <= _c; ++i) pos[i]--;
        }
        return;
      }
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  if (fopen("F.in", "r")) freopen("F.in", "r", stdin);
  int test;
  test = unx();
  while (test--) {
    solve();
  }
}
