#include <bits/stdc++.h>
using namespace std;
const long long MOD = 998244353;
const long long INF = 1e18;
const long double E = 1e-8;
mt19937_64 rnd(time(0));
long long n, m, k, d, h, p, T, a[1000001];
pair<long long, pair<long long, long long> > lst;
long long dp[16][33000][16];
pair<long long, long long> fr[16][33000][16];
long long sm[33000];
long long nxt[33000][16];
vector<long long> v[33000];
long long binpow(long long h, long long r, long long md = MOD) {
  long long l = 1;
  while (r) {
    if (r & 1) l *= h, l %= md;
    h *= h;
    h %= md;
    r /= 2;
  }
  return l;
}
long long gcd(long long x, long long y) {
  if (x < y) swap(x, y);
  while (x && y) {
    x %= y;
    swap(x, y);
  }
  return x + y;
}
string one_own_string(long long h) {
  string d = "";
  long long j = n;
  while (j--) {
    d += (h % 2 + '0');
    h /= 2;
  }
  reverse(d.begin(), d.end());
  return d;
}
struct fenwick_tree {
  long long f[20];
  void clear() {
    for (int i = 0; i < 20; i++) f[i] = 0;
  }
  void upd(int h) {
    for (int i = h; i < 20; i += (i & (-i))) f[i]++;
  }
  long long get(int h) {
    long long ans = 0;
    for (int i = h; i > 0; i -= (i & -i)) ans += f[i];
    return ans;
  }
};
fenwick_tree f;
void solve() {
  cin >> n;
  for (int i = 1; i <= n; i++) cin >> a[i];
  f.clear();
  long long m = (1ll << n);
  v[0].clear();
  v[0].push_back(0);
  for (int i = 1; i < m; i++) {
    v[i].clear();
    sm[i] = 0;
    for (int j = 0; j <= 15; j++) nxt[i][j] = 0;
    long long x = i;
    vector<long long> ww;
    for (int j = 1; j <= n; j++) {
      if (x % 2 == 1) {
        sm[i] += a[j];
        ww.push_back(j);
        v[i].push_back(j);
      }
      x /= 2;
    }
    long long r = 0;
    for (int j = 0; j <= n; j++) {
      while (r < ww.size() && ww[r] <= j) r++;
      if (r == ww.size())
        nxt[i][j] = -1;
      else
        nxt[i][j] = ww[r];
    }
  }
  for (int i = 0; i <= n; i++)
    for (int j = 0; j < m; j++)
      for (int u = 0; u <= n; u++)
        dp[i][j][u] = 1e18, fr[i][j][u] = make_pair(-1, -1);
  dp[0][0][0] = 0;
  for (int i = 0; i < n; i++) {
    bool t = 0;
    for (int j = 0; j < m; j++)
      for (auto u : v[j])
        if (dp[i][j][u] != 1e18) {
          t = 1;
          if (j == m - 1) lst = make_pair(i, make_pair(j, u));
          long long msk = ((1ll << n) - 1) ^ j;
          for (long long nmsk = msk; nmsk > 0; nmsk = ((nmsk - 1) & msk))
            if (nxt[nmsk][u] != -1) {
              if (sm[nmsk] > dp[i][j][u] &&
                  dp[i + 1][j | nmsk][nxt[nmsk][u]] > sm[nmsk]) {
                dp[i + 1][j | nmsk][nxt[nmsk][u]] =
                    min(dp[i + 1][j | nmsk][nxt[nmsk][u]], sm[nmsk]);
                fr[i + 1][j | nmsk][nxt[nmsk][u]] = make_pair(j, u);
              }
            }
        }
    if (!t) {
      cout << n - (i - 1) << "\n";
      vector<pair<long long, long long> > qq;
      long long i = lst.first, j = lst.second.first, u = lst.second.second;
      while (i > 0) {
        vector<long long> w;
        long long msk = (j ^ fr[i][j][u].first), o = 0;
        while (msk) {
          o++;
          if (msk % 2) w.push_back(o);
          msk /= 2;
        }
        for (int e = 0; e < w.size(); e++) {
          if (w[e] != u) qq.push_back(make_pair(u, w[e]));
        }
        long long jj, ii, uu;
        uu = fr[i][j][u].second;
        jj = fr[i][j][u].first;
        ii = i - 1;
        i = ii, j = jj, u = uu;
      }
      for (int i = 0; i < qq.size(); i++) {
        cout << qq[i].second - f.get(qq[i].second) << " "
             << qq[i].first - f.get(qq[i].first) << "\n";
        f.upd(qq[i].second);
      }
      return;
    }
  }
  for (int u = 1; u <= n; u++)
    if (dp[n][m - 1][u] != 1e18) {
      lst = make_pair(n, make_pair(m - 1, u));
      break;
    }
  cout << n - lst.first << "\n";
  vector<pair<long long, long long> > qq;
  long long i = lst.first, j = lst.second.first, u = lst.second.second;
  while (i > 0) {
    vector<long long> w;
    long long msk = (j ^ fr[i][j][u].first), o = 0;
    while (msk) {
      o++;
      if (msk % 2) w.push_back(o);
      msk /= 2;
    }
    for (int e = 0; e < w.size(); e++) {
      if (w[e] != u) qq.push_back(make_pair(u, w[e]));
    }
    long long jj, ii, uu;
    uu = fr[i][j][u].second;
    jj = fr[i][j][u].first;
    ii = i - 1;
    i = ii, j = jj, u = uu;
  }
  for (int i = 0; i < qq.size(); i++) {
    cout << qq[i].second - f.get(qq[i].second) << " "
         << qq[i].first - f.get(qq[i].first) << "\n";
    f.upd(qq[i].second);
  }
  return;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  long long t = 1;
  cin >> t;
  while (t--) {
    solve();
  }
  return 0;
}
