#include<bits/stdc++.h>
#define mod 998244353
#define LL long long

using namespace std;

const int M = 2e6 + 10;
int n, m, k, op, top;
int a[M];

struct node{
	int t, s, s1, s2;
}opt[M << 1];

struct stack {
	int stk[M];
	int buttom, tp;
	
	void init() {
		buttom = 0, tp = -1;
	}
	
	void add(int x) {
		if (stk[tp] == x && buttom <= tp) tp --;
		else stk[++ tp] = x;
	}
	
	int top() {
		if (buttom <= tp) {
			return stk[tp];
		}else return -1;
	}
	
	int butt() {
		if (buttom <= tp) {
			return stk[buttom];
		}
		return -1;
	}
	void destory() {
		buttom ++;
	}
	
	bool empty() {
		if (buttom <= tp) return false;
		return true;
	}
	
	void jk() {
		cout << "jk:" << '\n';
		for (int i = buttom;i <= tp;i ++) cout << stk[i] << ' '; cout << '\n';
	}
	
}st1;

int main() {
	freopen("meow.in", "r", stdin);
	freopen("meow.out","w",stdout);
	
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	
	int _; cin >> _;
	while (_ --) {
		op = 0; top = 0;
		
		cin >> n >> m >> k;
		
		for (int i = 1;i <= m;i ++) {
			cin >> a[i];
		}
		
		// if (n == 2) {
			
		st1.init();
		
		for (int i = 1;i <= m;i ++) {
			op ++;
			if (st1.empty()) {
				st1.add(a[i]);
				opt[++ top].t = 1;
				opt[top].s = 1;
				// cout << 1 << ' ' << 1 << '\n';
			}
			else if (st1.top() == a[i]) {
				opt[++ top].t = 1;
				opt[top].s = 1;
				// cout << 1 << ' ' << 1 << '\n';
				st1.add(a[i]);
			}
			else if (st1.butt() == a[i]) {
				op ++;
				opt[++ top].t = 1;
				opt[top].s = 2;
				opt[++ top].t = 2;
				opt[top].s1 = 1; opt[top].s2 = 2;
				// cout << 1 << ' ' << 2 << '\n';
				// cout << 2 << ' ' << 1 << ' ' << 2 << '\n';
				st1.destory();	
			}
			else {
				st1.add(a[i]);
				opt[++ top].t = 1;
				opt[top].s = 1;
				// cout << 1 << ' ' << 1 << '\n';
			}
			
			//st1.jk();
		}
			
		cout << op << '\n';
		
		for (int i = 1;i <= top;i ++) {
			cout << opt[i].t << ' ';
			if (opt[i].t == 1) {
				cout << opt[i].s << '\n';
			}
			if (opt[i].t == 2) {
				cout << opt[i].s1 << ' ' << opt[i].s2 << '\n';
			}
		}
		
	}
	
	return 0;
}