#include <bits/stdc++.h>
using namespace std;
int T, n;
int a[16], sum[1 << 15], id[16];
pair<int, int> pre[16][16][1 << 15];
int f[16][16][1 << 15];
void opt(int x) {
  for (int i = x; i < n; i++) id[i]--;
}
void print(int i, int pos, int s) {
  if (!s) return;
  int lst = pre[i][pos][s].first, t = lst ^ s;
  for (int k = 0; k < n; k++)
    if (k != (pos - 1) && (1 << k & t)) {
      printf("%d %d\n", id[k], id[pos - 1]);
      opt(k);
    }
  print(i - 1, pre[i][pos][s].second, lst);
}
void solve() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%d", &a[i]);
  int S = 1 << n;
  for (int i = 1; i < S; i++) sum[i] = a[__builtin_ctz(i)] + sum[i & (i - 1)];
  for (int i = 0; i <= n; i++)
    for (int j = 0; j <= n; j++) memset(f[i][j], 0x7f, sizeof(int) * S);
  f[0][0][0] = 0;
  for (int i = 0; i < n; i++)
    for (int s = 0; s < S; s++)
      for (int j = 0; j < n; j++) {
        if (f[i][j][s] == 0x7f7f7f7f) continue;
        int t = (S - 1) ^ s;
        for (int k = t; k; k = (k - 1) & t) {
          if (sum[k] <= f[i][j][s] || !(k >> j)) continue;
          int pos = j + __builtin_ctz(k >> j) + 1;
          if (f[i + 1][pos][s | k] > sum[k]) {
            f[i + 1][pos][s | k] = sum[k];
            pre[i + 1][pos][s | k] = make_pair(s, j);
          }
        }
      }
  for (int i = 0; i < n; i++) id[i] = i + 1;
  for (int i = n; i; i--)
    for (int j = 1; j <= n; j++)
      if (f[i][j][S - 1] != 0x7f7f7f7f) {
        printf("%d\n", n - i);
        print(i, j, S - 1);
        return;
      }
}
int main() {
  scanf("%d", &T);
  while (T--) solve();
  return 0;
}
