#include <bits/stdc++.h>
#define rep(i, x, y) for (int i = x; i <= y; i++)
#define per(i, x, y) for (int i = x; i >= y; i--)
#define pb push_back
#define pii pair<int, int>
#define mkp make_pair
#define fi first
#define se second
using namespace std;

typedef long long ll;
const int N = 305, M = 2e6 + 5;
int T, n, m, K, a[M], pos[N * 2], st[N][2];
vector<pii> ans;

void sol1() {
  queue<int> q;  // vacant
  rep(i, 1, n - 1) q.push(i);
  rep(i, 1, K) pos[i] = 0;
  rep(i, 1, m) {
    scanf("%d", &a[i]);
    if (!pos[a[i]]) {
      while (q.size()) {
        int p = q.front(); q.pop();
        if (st[p][1] == 0) {
          (st[p][0] == 0) ? st[p][0] = a[i] : st[p][1] = a[i];
          pos[a[i]] = p;
          ans.pb(mkp(p, 0));
          if (st[p][1] == 0)
            q.push(p);
          break;
        }
      }
    } else {
      int p = pos[a[i]];
      if (st[p][0] == a[i]) {
        ans.pb(mkp(n, 0));
        ans.pb(mkp(p, n));
        st[p][0] = st[p][1], st[p][1] = 0; q.push(p);
      } else {
        ans.pb(mkp(p, 0));
        st[p][1] = 0; q.push(p);
      }
      pos[a[i]] = 0;
    }
  }
}

// int getnxt(int x) {
//   int p = x;
//   while (p < n && a[p] == a[p + 1]) {
//     ans.pb(mkp(1, 0));
//     ans.pb(mkp(1, 0));
//     p += 2;
//   } return p;
// }
// void sol2() {
//   if (n == 2) {
//     p = getnxt(1);
//     while (p <= n) {
//       if (!st[1][1] && !st[2][1]) {
//         if (st[1][0] == a[p]) {
//           ans.pb(mkp(1, 0)); st[1][0] = 0;
//           p = getnxt(p + 1); continue;
//         }
//         if (st[2][0] == a[p]) {
//           ans.pb(mkp(2, 0)); st[2][0] = 0;
//           p = getnxt(p + 1); continue;
//         }
//         q = getnxt(p + 1);
//         if (st[1][0] == a[q]) {
//           ans.pb(mkp(2, 0)); st[2][1] = a[p];
//           ans.pb() st[1][0] = 0;
//         }
//       }
      
//     }
//   }
// }

int main() {
  freopen("meow.in", "r", stdin);
  freopen("meow.out", "w", stdout);

  scanf("%d", &T);
  while (T--) {
    ans.clear();
    scanf("%d%d%d", &n, &m, &K);
    memset(st, 0, sizeof(st));
    if (K == 2 * n - 2) sol1();
    // else sol2();
    printf("%d\n", (int)ans.size());
    for (int i = 0; i < (int)ans.size(); i++) {
      if (ans[i].se == 0) printf("1 %d\n", ans[i].fi);
      else printf("2 %d %d\n", ans[i].fi, ans[i].se);
    }
  }
  return 0;
}
