#include <bits/stdc++.h>
int T, n, a[20], dp[20][33000][20], sum[33000], preu[20][33000][20],
    prep[20][33000][20];
int main() {
  scanf("%d", &T);
  for (; T; --T) {
    scanf("%d", &n);
    int L = 1 << n;
    for (int i = 0; i < n; ++i) scanf("%d", a + i);
    for (int i = 1; i < L; ++i) {
      sum[i] = 0;
      for (int j = 0; j < n; ++j)
        if ((i >> j) & 1) sum[i] += a[j];
    }
    for (int i = 0; i <= n; ++i)
      for (int j = 0; j < L; ++j)
        for (int k = 0; k <= n; ++k) dp[i][j][k] = 0x3f3f3f3f;
    dp[0][0][0] = 0;
    for (int i = 0; i < n; ++i)
      for (int u = 0; u < L; ++u)
        for (int p = 0; p < n; ++p)
          if (dp[i][u][p] < 0x3f3f3f3f) {
            int s = u ^ (L - 1);
            for (int q = s; q; q = (q - 1) & s) {
              if (sum[q] <= dp[i][u][p] || ((q >> p) == 0)) continue;
              int r = p + __builtin_ctz(q >> p) + 1;
              if (sum[q] < dp[i + 1][u | q][r]) {
                dp[i + 1][u | q][r] = sum[q];
                preu[i + 1][u | q][r] = u;
                prep[i + 1][u | q][r] = p;
              }
            }
          }
    int ansi, ansp, f = 0;
    for (int i = n; i; --i) {
      for (int p = 0; p <= n; ++p)
        if (dp[i][L - 1][p] < 0x3f3f3f3f) {
          ansi = i;
          ansp = p;
          f = 1;
          break;
        }
      if (f) break;
    }
    std::vector<int> ansx, ansy;
    int nu = L - 1, np = ansp;
    for (int i = ansi; i; --i) {
      int pu = preu[i][nu][np], pp = prep[i][nu][np];
      for (int j = 0; j < n; ++j)
        if ((pu ^ nu) & (1 << j))
          if (j != np - 1) ansx.push_back(j), ansy.push_back(np - 1);
      nu = pu;
      np = pp;
    }
    printf("%d\n", (int)ansx.size());
    for (int i = 0; i < (int)ansx.size(); ++i) {
      int f = ansx[i], t = ansy[i];
      for (int j = 0; j < i; ++j) f -= ansx[j] < ansx[i];
      for (int j = 0; j < i; ++j) t -= ansx[j] < ansy[i];
      printf("%d %d\n", f + 1, t + 1);
    }
  }
  return 0;
}
