#include <bits/stdc++.h>
using namespace std;
const int M = 15;
const int MM = (1 << M) + 5;
const int INF = 0x3f3f3f3f;
int sum[MM];
int lb[MM][M];
int dp[MM][M + 1][M];
vector<int> ans;
inline int lowbit(int x) { return x & (-x); }
inline void cmin(int &x, int y) {
  if (x > y) x = y;
}
void solve() {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) scanf("%d", &sum[1 << i]);
  int mask = (1 << n) - 1;
  for (int i = 1; i <= mask; i++) sum[i] = sum[i ^ lowbit(i)] + sum[lowbit(i)];
  for (int s = 0; s <= mask; s++)
    for (int i = 0; i <= n; i++)
      for (int j = 0; j < n; j++) dp[s][i][j] = INF;
  dp[0][0][0] = 0;
  for (int s = 0; s <= mask; s++)
    for (int i = 0; i <= n; i++)
      for (int j = 0; j < n; j++) {
        if (dp[s][i][j] == INF) continue;
        int cs = mask ^ s;
        for (int ss = cs; ss; ss = (ss - 1) & cs)
          if (sum[ss] > dp[s][i][j] && lb[ss][j] != -1)
            cmin(dp[s ^ ss][i + 1][lb[ss][j]], sum[ss]);
      }
  int ans = 0, p = -1;
  for (int i = 0; i <= n; i++)
    for (int j = 0; j < n; j++)
      if (dp[mask][i][j] != INF && ans < i) {
        ans = i;
        p = j;
      }
  printf("%d\n", n - ans);
  int s = mask;
  stack<int> sts, stp;
  for (int i = ans; i > 0; i--) {
    sts.push(s);
    stp.push(p);
    bitset<15> bs(s);
    for (int ss = s; ss >= 0; ss = (ss - 1) & s) {
      if (ss & (1 << p)) continue;
      int f = 0;
      for (int j = 0; j <= p; j++)
        if (dp[ss][i - 1][j] < dp[s][i][p]) {
          int cs = s ^ ss;
          if (lb[cs][j] == -1 || dp[s][i][p] != sum[cs]) continue;
          s = ss;
          p = j;
          f = 1;
          break;
        }
      if (f) break;
    }
  }
  s = 0;
  int used = 0;
  while (!sts.empty()) {
    int ss = sts.top();
    sts.pop();
    p = stp.top();
    stp.pop();
    ss ^= used;
    int c = 0, b = -1;
    for (int i = 0; i < n; i++) {
      if (s & (1 << i)) continue;
      c++;
      if (i == p) b = c;
    }
    c = 0;
    for (int i = 0; i < n; i++) {
      if (s & (1 << i)) continue;
      c++;
      if (ss & (1 << i)) {
        if (i == p) continue;
        printf("%d %d\n", c, b);
        if (c < b) b--;
        c--;
        s ^= (1 << i);
      }
    }
    used |= ss;
  }
}
int main() {
  int mask = (1 << M) - 1;
  for (int i = 1; i <= mask; i++) {
    lb[i][0] = __builtin_ctz(i);
    for (int j = 1; j < M; j++) {
      int ss = i & (mask ^ ((1 << (j + 1)) - 1));
      if (!ss)
        lb[i][j] = -1;
      else
        lb[i][j] = __builtin_ctz(ss);
    }
  }
  int t;
  scanf("%d", &t);
  while (t--) solve();
  return 0;
}
