#include <bits/stdc++.h>
using namespace std;
struct custom_hash {
  static unsigned long long splitmix64(unsigned long long x) {
    x += 0x9e3779b97f4a7c15;
    x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
    x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
    return x ^ (x >> 31);
  }
  size_t operator()(unsigned long long x) const {
    static const unsigned long long FIXED_RANDOM =
        chrono::steady_clock::now().time_since_epoch().count();
    return splitmix64(x + FIXED_RANDOM);
  }
};
mt19937 random_generator(
    chrono::steady_clock::now().time_since_epoch().count());
const int maxn = 16;
const int inf = 1e9;
int t;
void read() { cin >> t; }
int n;
int dp[maxn][1 << maxn];
int a[maxn];
int sum[1 << maxn];
int par[maxn][1 << maxn];
int get_idx(int idx, vector<int> &v) {
  int ans_idx = idx;
  for (auto i : v)
    if (i < idx) ans_idx--;
  return ans_idx;
}
pair<vector<pair<int, int> >, int> solve_mask(int mask) {
  vector<int> take, del;
  for (int i = 1; i <= n; i++) {
    if (!(mask & (1 << (i - 1))))
      del.push_back(i);
    else
      take.push_back(i);
  }
  for (int i = 0; i < (1 << (int)del.size()); i++) {
    sum[i] = 0;
    for (int j = 0; j < (int)del.size(); j++)
      if (i & (1 << j)) sum[i] += a[del[j]];
    dp[1][i] = sum[i] + a[take[0]];
    par[1][i] = i;
  }
  for (int i = 2; i <= (int)take.size(); i++)
    for (int j = 0; j < (1 << (int)del.size()); j++) {
      dp[i][j] = inf;
      if (a[take[i - 1]] > dp[i - 1][j]) {
        dp[i][j] = a[take[i - 1]], par[i][j] = 0;
        continue;
      }
      for (int k = j; k > 0; k = (k - 1) & j) {
        int last = a[take[i - 1]] + sum[k];
        if (last > dp[i - 1][j - k])
          if (last < dp[i][j]) dp[i][j] = last, par[i][j] = k;
      }
    }
  pair<vector<pair<int, int> >, int> ans;
  ans.second = dp[(int)take.size()][(1 << (int(del.size()))) - 1];
  if (ans.second == inf) return ans;
  vector<int> v;
  int pos = (int)take.size(), mask1 = (1 << (int)del.size()) - 1;
  while (pos > 0) {
    int curr_mask = par[pos][mask1];
    for (int i = 0; i < (int)del.size(); i++)
      if (curr_mask & (1 << i)) {
        ans.first.push_back({get_idx(del[i], v), get_idx(take[pos - 1], v)});
        v.push_back(del[i]);
      }
    mask1 -= curr_mask;
    pos--;
  }
  return ans;
}
void solve() {
  while (t--) {
    cin >> n;
    for (int i = 1; i <= n; i++) cin >> a[i];
    int ans = 0;
    vector<pair<int, int> > v;
    for (int i = (1 << n) - 1; i >= 0; i--)
      if (__builtin_popcount(i) > ans) {
        auto curr = solve_mask(i);
        if (curr.second != inf) {
          ans = __builtin_popcount(i);
          v = curr.first;
        }
      }
    cout << n - ans << '\n';
    for (auto i : v) cout << i.first << " " << i.second << '\n';
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  read();
  solve();
}
