#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9;
struct Node {
  int x, nj, ns;
  Node(int X = 0, int Y = 0, int Z = 0) {
    x = X;
    nj = Y;
    ns = Z;
  }
  bool operator<(Node rhs) const { return x < rhs.x; }
};
int T, n;
int a[25], nxt[25], id[25], sum[1 << 15 | 5];
Node f[16][16][1 << 15 | 5];
inline void chkmn(Node &a, Node b) { a = a < b ? a : b; }
inline void work() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]), nxt[i] = -1, id[i] = i;
  for (int i = 0; i <= n; i++)
    for (int j = 0; j <= n; j++)
      for (int s = 0; s < (1 << n); s++) f[i][j][s] = Node(INF, INF, INF);
  for (int s = 0; s < (1 << n); s++) {
    sum[s] = 0;
    for (int i = 1; i <= n; i++)
      if (s >> i - 1 & 1) sum[s] += a[i];
  }
  f[0][0][(1 << n) - 1].x = 0;
  for (int i = 1; i <= n; i++)
    for (int j = 0; j < i; j++)
      for (int s = 0; s < (1 << n); s++) {
        if (f[i - 1][j][s].x == INF) continue;
        Node now = f[i - 1][j][s];
        chkmn(f[i][j + 1][s], Node(now.x, j, s));
        if (!(s >> i - 1 & 1)) continue;
        int ts = s ^ (1 << i - 1);
        for (int t = ts;; t = (t - 1) & ts) {
          if (a[i] + sum[t] > now.x)
            chkmn(f[i][j][ts ^ t], Node(a[i] + sum[t], j, s));
          if (!t) break;
        }
      }
  for (int k = 0; k <= n; k++) {
    if (f[n][k][0].x == INF) continue;
    printf("%d\n", k);
    int i = k, s = 0;
    for (int j = n; j >= 1; j--) {
      int ni = f[j][i][s].nj, ns = f[j][i][s].ns;
      int t = s ^ ns;
      for (int p = 1; p <= n; p++)
        if (p != j && (t >> p - 1 & 1)) nxt[p] = j;
      i = ni, s = ns;
    }
    int ct = 0;
    for (int i = 1; i <= n; i++) {
      id[i] = i - ct;
      if (nxt[i] != -1) {
        printf("%d %d\n", id[i], nxt[i] < i ? id[nxt[i]] : nxt[i] - ct);
        ct++;
      }
    }
    break;
  }
}
int main() {
  scanf("%d", &T);
  while (T--) work();
  return 0;
}
