#include <bits/stdc++.h>
#define int long long
#define For(i, a, b) for (int i = (a); i <= (b); i ++)
#define foR(i, a, b) for (int i = (a); i >= (b); i --)
using namespace std;
int T, n, m, k;
int sp, sum;
int a[2000005], p[1000], bel[1000];
int op[4000005], l[4000005], r[4000005];
int zhan[305][3];
deque <int> kong;
void clear () {
For (i, 1, 2 * n) p[i] = bel[i] = 0;
For (i, 1, n) zhan[i][1] = zhan[i][2] = 0;
sum = 0;
kong.clear ();
}
void print () {
cout << sum << '\n';
For (i, 1, sum) {
if (op[i] == 1) cout << 1 << ' ' << l[i] << '\n';
else cout << 2 << ' ' << l[i] << ' ' << r[i] << '\n';
}
}
void fang (int x) {
op[++ sum] = 1;
l[sum] = x;
}
void qing (int x, int y) {
op[++ sum] = 2;
l[sum] = x;
r[sum] = y;
}
bool jia (int x) {
while (kong.size () && zhan[kong.back ()][1]) kong.pop_back ();
if (kong.empty () ) return 0;
fang (kong.back () );
bel[x] = kong.back ();
if (zhan[bel[x] ][2]) {
zhan[bel[x] ][1] = x;
p[x] = 1;
kong.pop_back ();
} else if (!zhan[bel[x] ][1]) {
zhan[bel[x] ][2] = x;
p[x] = 2;
}
return 1;
}
void shan (int x) {
if (p[x] == 1) {
fang (bel[x]);
zhan[bel[x] ][1] = 0;
p[x] = 0;
kong.push_back (bel[x]);
bel[x] = 0;
} else {
fang (sp);
qing (bel[x], sp);
zhan[bel[x] ][2] = zhan[bel[x] ][1];
zhan[bel[x] ][1] = 0;
p[x] = 0;
p[zhan[bel[x] ][2] ] = 2;
kong.push_back (bel[x]);
bel[x] = 0;
}
}
int get (int l, int r, int c) {
int ret = 0;
For (i, l, r) if (a[i] == c) ++ ret;
return ret;
}
void solve () {
cin >> n >> m >> k;
sp = n;
clear ();
foR (i, n - 1, 1) kong.push_back (i);
For (i, 1, m) cin >> a[i];
For (i, 1, m) {
if (p[a[i] ]) shan (a[i]);
else {
if (jia (a[i]) ) continue;
int j = i + 1;
while (p[a[j] ] != 2) ++ j;
int x = zhan[bel[a[j] ] ][1], y = a[i];
int cntx = get (i, j, x), cnty = get (i, j, y);
For (k, i, j - 1) {
if (a[k] == y) {
if (cntx & 1) fang (sp);
else fang (bel[a[j] ]);
} else if (a[k] == x) {
if (cntx & 1) fang (bel[a[j] ]);
else fang (sp);
} else if (p[a[k] ]) shan (a[k]);
else jia (a[k]);
}
if (cntx & 1) {
fang (bel[a[j] ]);
zhan[bel[a[j] ] ][1] = zhan[bel[a[j] ] ][2] = 0;
kong.push_back (sp);
if (cnty & 1) {
p[y] = 2;
bel[y] = sp;
zhan[sp][2] = y;
}
sp = bel[a[j] ];
p[a[j] ] = bel[a[j] ] = p[x] = bel[x] = 0;
} else {
fang (sp);
qing (bel[a[j] ], sp);
zhan[bel[a[j] ] ][2] = x;
p[x] = 2;
if (cnty & 1) {
zhan[bel[a[j] ] ][1] = y;
p[y] = 1;
bel[y] = bel[a[j] ];
} else {
zhan[bel[a[j] ] ][1] = 0;
kong.push_back (bel[a[j] ]);
}
bel[a[j] ] = p[a[j] ] = 0;
}
i = j;
}
}
print ();
}
signed main () {
int _ = 1;
cin >> _;
while (_ --) {
solve ();
cout << '\n';
}
return 0;
}