#include <bits/stdc++.h>
using namespace std;
namespace Base {
const int inf = 0x3f3f3f3f, INF = 0x7fffffff;
const long long infll = 0x3f3f3f3f3f3f3f3fll, INFll = 0x7fffffffffffffffll;
template <typename T>
void read(T &x) {
  x = 0;
  int fh = 1;
  double num = 1.0;
  char ch = getchar();
  while (!isdigit(ch)) {
    if (ch == '-') fh = -1;
    ch = getchar();
  }
  while (isdigit(ch)) {
    x = x * 10 + ch - '0';
    ch = getchar();
  }
  if (ch == '.') {
    ch = getchar();
    while (isdigit(ch)) {
      num /= 10;
      x = x + num * (ch - '0');
      ch = getchar();
    }
  }
  x = x * fh;
}
template <typename T>
void chmax(T &x, T y) {
  x = x < y ? y : x;
}
template <typename T>
void chmin(T &x, T y) {
  x = x > y ? y : x;
}
}  // namespace Base
using namespace Base;
const int N = 15, L = (1 << N);
int bit[L], f[N + 1][N + 1][L], g[N + 1][N + 1][L], frm[N + 1][N + 1][L],
    a[N + 1], n, sum[L], cnt[N], dp[N + 1][1 << N], dpid[N + 1][1 << N];
void init() {
  for (int i = 1; i < (1 << N); i++)
    if (i & 1)
      bit[i] = 0;
    else
      bit[i] = bit[i / 2] + 1;
  memset(f, inf, sizeof(f));
  memset(dp, inf, sizeof(dp));
}
void solve() {
  read(n);
  for (int i = 0; i < n; i++) read(a[i]);
  for (int i = 1; i < (1 << n); i++)
    sum[i] = sum[i - (1 << bit[i])] + a[bit[i]];
  f[0][0][0] = 0;
  dp[0][0] = 0, dpid[0][0] = -1;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j <= n; j++)
      for (int k = 0; k < (1 << n); k++) {
        if (dp[j][k] == inf) continue;
        int t = (1 << n) - 1 - k;
        if (((1 << i) & t) == 0) continue;
        t = (t - (1 << i));
        for (int p = t; p >= 0; p = (p == 0) ? -1 : (p - 1) & t)
          if (sum[p] + a[i] > dp[j][k]) {
            int q = p + k + (1 << i);
            if (f[i][j + 1][q] > sum[p] + a[i]) {
              f[i][j + 1][q] = sum[p] + a[i];
              g[i][j + 1][q] = p;
              frm[i][j + 1][q] = dpid[j][k];
            }
          }
      }
    for (int j = 0; j <= n; j++)
      for (int k = 0; k < (1 << n); k++)
        if (f[i][j][k] < dp[j][k]) dp[j][k] = f[i][j][k], dpid[j][k] = i;
  }
  memset(cnt, 0, sizeof(cnt));
  for (int i = n; i >= 1; i--)
    if (dp[i][(1 << n) - 1] != inf) {
      int ans = n - i, j = (1 << n) - 1, t = i, p = dpid[i][(1 << n) - 1];
      printf("%d\n", ans);
      while (j != 0) {
        int k = g[p][t][j], to = p;
        p = frm[p][t][j];
        j = j - k - (1 << to), t--;
        while (k != 0) {
          printf("%d %d\n", bit[k] + 1 - cnt[bit[k]], to + 1 - cnt[to]);
          for (int q = bit[k]; q <= n; q++) cnt[q]++;
          k = k - (1 << bit[k]);
        }
      }
      break;
    }
  for (int i = 0; i <= n; i++)
    for (int j = 0; j <= n; j++)
      for (int k = 0; k < (1 << n); k++) dp[j][k] = f[i][j][k] = inf;
}
int main() {
  init();
  int opt;
  read(opt);
  while (opt--) {
    solve();
  }
  return 0;
}
