#include <bits/stdc++.h>
using namespace std;
namespace Fastio {
enum io_flags {
  ignore_int = 1 << 0,
  char_enter = 1 << 1,
  flush_stdout = 1 << 2,
  flush_stderr = 1 << 3,
  endline = char_enter | flush_stdout
};
enum number_type_flags {
  output_double_stable = 1 << 0,
  output_double_faster = 1 << 1
};
struct Reader {
  char endch;
  Reader() { endch = '\0'; }
  Reader& operator>>(io_flags f) {
    if (f & ignore_int) {
      endch = getchar();
      while ((!isdigit(endch)) && endch != '-' && endch != EOF)
        endch = getchar();
      while (isdigit(endch = getchar()))
        ;
    }
    return *this;
  }
  Reader& operator>>(char& ch) {
    ch = getchar();
    while (ch == ' ' || ch == '\r' || ch == '\n' || ch == '\t') ch = getchar();
    return *this;
  }
  Reader& operator>>(double& lf) {
    bool flag = 0;
    endch = getchar();
    while ((!isdigit(endch)) && endch != '-' && endch != EOF) endch = getchar();
    if (endch == '-') flag = 1, endch = getchar();
    lf = endch & 15;
    while (isdigit(endch = getchar())) lf = lf * 10 + (endch & 15);
    if (endch == '.') {
      double digit = 0.1;
      while (isdigit(endch = getchar())) {
        lf += (endch & 15) * digit;
        digit *= 0.1;
      }
    }
    if (flag) lf = -lf;
    return *this;
  }
  template <typename Int>
  Reader& operator>>(Int& d) {
    bool flag = 0;
    endch = getchar();
    while ((!isdigit(endch)) && endch != '-' && endch != EOF) endch = getchar();
    if (endch == '-') flag = 1, endch = getchar();
    d = endch & 15;
    while (isdigit(endch = getchar())) d = (d << 3) + (d << 1) + (endch & 15);
    if (flag) d = -d;
    return *this;
  }
  template <typename Int>
  inline Int get() {
    bool flag = 0;
    endch = getchar();
    while ((!isdigit(endch)) && endch != '-' && endch != EOF) endch = getchar();
    if (endch == '-') flag = 1, endch = getchar();
    Int d = endch & 15;
    while (isdigit(endch = getchar())) d = (d << 3) + (d << 1) + (endch & 15);
    if (flag) d = -d;
    return d;
  }
} read;
struct Writer {
  Writer& operator<<(io_flags f) {
    if (f & char_enter) putchar(10);
    if (f & flush_stdout) fflush(stdout);
    if (f & flush_stderr) fflush(stderr);
    return *this;
  }
  Writer& operator<<(const char* ch) {
    while (*ch) putchar(*(ch++));
    return *this;
  }
  Writer& operator<<(const char ch) {
    putchar(ch);
    return *this;
  }
  template <typename Int>
  Writer& operator<<(Int x) {
    static char buffer[33];
    static int top = 0;
    if (!x) {
      putchar('0');
      return *this;
    }
    if (x < 0) putchar('-'), x = ~x + 1;
    while (x) {
      buffer[++top] = '0' | (x % 10);
      x /= 10;
    }
    while (top) putchar(buffer[top--]);
    return *this;
  }
  inline void operator()(double val, int eps_digit = 6, char endch = '\0',
                         number_type_flags flg = output_double_faster) {
    if (flg & output_double_stable) {
      static char output_format[10];
      sprintf(output_format, "%%.%dlf", eps_digit);
      printf(output_format, val);
    } else if (flg & output_double_faster) {
      if (val < 0) {
        putchar('-');
        val = -val;
      }
      (*this) << (long long)val;
      val -= (long long)val;
      putchar('.');
      double eps_number = 0.5;
      for (int i = 1; i <= eps_digit; i++) eps_number /= 10;
      val += eps_number;
      while (eps_digit--) {
        val *= 10;
        putchar((int)val | '0');
        val -= (int)val;
      }
    } else {
      (*this) << "1.#ERROR_NOT_IDENTIFIED_FLAG";
    }
    if (endch) putchar(endch);
  }
} write;
}  // namespace Fastio
using namespace Fastio;
namespace File_IO {
void init_IO() {
  freopen("Make It Ascending.in", "r", stdin);
  freopen("Make It Ascending.out", "w", stdout);
}
}  // namespace File_IO
const int N = 15 + 1;
int a[N];
int f[N][1 << N | 1], g[N][1 << N | 1], h[1 << N | 1];
int p[N];
signed main() {
  int t = read.get<int>(), n;
  int i, j, k, s, l;
  vector<int> x, y;
  while (t--) {
    scanf("%d", &n);
    for (i = 0; i < n; i++) read >> a[i];
    for (l = 0; l < n; l++) {
      for (s = 0; s < (1 << n); s++)
        if (__builtin_popcount(s) == l) {
          x.clear();
          y.clear();
          x.push_back(0);
          for (i = 0; i < n; i++)
            if (s & (1 << i))
              y.push_back(i);
            else
              x.push_back(i);
          for (i = 0; i < (1 << y.size()); i++)
            for (j = h[i] = 0; j < (int)y.size(); j++)
              if (i & (1 << j)) h[i] += a[y[j]];
          for (i = 0; i < (1 << y.size()); i++) f[0][i] = INT_MAX;
          f[0][0] = 0;
          for (i = 1; i < (int)x.size(); i++)
            for (j = 0; j < (1 << y.size()); j++) {
              f[i][j] = INT_MAX;
              if (a[x[i]] > f[i - 1][j]) {
                f[i][j] = a[x[i]];
                g[i][j] = 0;
              } else
                for (k = j; k; k = (k - 1) & j)
                  if (a[x[i]] + h[k] > f[i - 1][j ^ k] &&
                      a[x[i]] + h[k] < f[i][j]) {
                    f[i][j] = a[x[i]] + h[k];
                    g[i][j] = k;
                  }
            }
          if (f[x.size() - 1][(1 << y.size()) - 1] != INT_MAX) break;
        }
      if (s < (1 << n)) break;
    }
    write << l << endline;
    for (i = 0; i < n; i++) p[i] = i;
    for (i = (signed)x.size() - 1, k = (1 << y.size()) - 1; i > 0; i--) {
      for (j = 0; j < (signed)y.size(); j++)
        if (g[i][k] & (1 << j)) {
          write << p[y[j]] + 1 << ' ' << p[x[i]] + 1 << endline;
          for (l = y[j]; l < n; l++) --p[l];
        }
      k ^= g[i][k];
    }
  }
  return 0;
}
