#include <bits/stdc++.h>
using namespace std;
const int N = 1 << 15, INF = 0x77777777;
template <typename T>
void read(T &x) {
  int ch = getchar();
  x = 0;
  bool f = false;
  for (; ch < '0' || ch > '9'; ch = getchar()) f |= ch == '-';
  for (; ch >= '0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0';
  if (f) x = -x;
}
template <typename T>
bool chmax(T &a, const T &b) {
  if (a < b) return a = b, 1;
  return 0;
}
template <typename T>
bool chmin(T &a, const T &b) {
  if (a > b) return a = b, 1;
  return 0;
}
int T, n, lim, pos[16], sum[N], f[16][16][N];
pair<int, int> pre[16][16][N];
void cnstr(int i, int j, int S) {
  if (!S) return;
  int now = S ^ pre[i][j][S].first;
  for (int x = 0; x < n; ++x)
    if (x != j - 1 && (now >> x & 1)) {
      printf("%d %d\n", pos[x], pos[j - 1]);
      for (int _ = x; _ < n; ++_) --pos[_];
    }
  cnstr(i - 1, pre[i][j][S].second, pre[i][j][S].first);
}
void solve() {
  read(n);
  lim = 1 << n;
  for (int i = 0; i <= n; ++i)
    for (int j = 0; j <= n; ++j) memset(f[i][j], 0x77, lim << 2);
  f[0][0][0] = 0;
  for (int i = 0; i < n; ++i) {
    read(sum[1 << i]);
    pos[i] = i + 1;
  }
  for (int S = 1; S < lim; ++S) sum[S] = sum[S & -S] + sum[S ^ (S & -S)];
  for (int i = 0; i < n; ++i)
    for (int j = 0; j < n; ++j)
      for (int S = 0; S < lim; ++S)
        if (f[i][j][S] < INF)
          for (int T = (lim - 1) ^ S; T; T = (T - 1) & ~S)
            if (sum[T] > f[i][j][S] && (T >> j)) {
              int nxj = j + __builtin_ctz(T >> j) + 1;
              if (chmin(f[i + 1][nxj][S | T], sum[T]))
                pre[i + 1][nxj][S | T] = make_pair(S, j);
            }
  for (int i = n; i; --i)
    for (int j = 1; j <= n; ++j)
      if (f[i][j][lim - 1] < INF) {
        printf("%d\n", n - i);
        cnstr(i, j, lim - 1);
        return;
      }
}
int main() {
  read(T);
  while (T--) solve();
}
