#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;
int t,n,m,k;
int a[N],top=0;
int q[N][4];
stack<int>pai;
stack<int>s;
stack<int>ansf;
stack<int>s1f;
stack<int>s2f;
stack<int>s1;
stack<int>s2;
stack<int>ans;
inline ll read(){
	ll x=0;
	bool f=true;
	char ch=getchar();
	for(;!isdigit(ch);ch=getchar())
		if(ch=='-')f=false;
	for(;isdigit(ch);ch=getchar())
		x=(x<<1)+(x<<3)+ch-'0';
	return f?x:~(x-1);
}

inline void clear(stack<int>&l){
	while(!l.empty()){
		l.pop();
	}
}
int main(){
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	t=read();
	while(t--){
		clear(s);
		clear(s1);
		clear(s2);
		clear(pai);
		clear(s1f);
		clear(s2f);
		clear(ans);
		clear(s2f);
		memset(q,0,sizeof(q));
		n=read(),m=read(),k=read();
		for(int i=0;i<m;i++){
			int x=read();
			pai.push(x);
		}
		while(!pai.empty()){
			s.push(pai.top());
			pai.pop();
		}
		bool m=true;
		int now=0;
		while(!s.empty()){
			if(m){
				now=s.top();
				s.pop();
			}
			m=true;
			bool f=true;
			for(int i=1;i<=n-1;i++){
				if(q[i][1]==0&&q[i][0]==now){
					ans.push(1);
					s1.push(i);
					f=false;
				}
			}
			if(!f)continue;
			for(int i=1;i<=n-1;i++){
				if(q[i][1]==0&&q[i][0]==0){
					q[i][0]=now;
					ans.push(1);
					s1.push(i);
					f=false;
				}
			}
			if(!f)continue;
			for(int i=1;i<=n-1;i++){
				if(q[i][1]==now&&q[i][0]){
					q[i][1]=0;
					ans.push(1);
					s1.push(i);
					f=false;
				}
				if(q[i][1]==0&&q[i][0]==now){
					q[i][0]=0;
					ans.push(1);
					s1.push(i);
					f=false;
				}
			}
			if(!f)continue;
			for(int i=1;i<=n-1;i++){
				if(q[i][1]==0&&q[i][0]){
					q[i][1]=now;
					ans.push(1);
					s1.push(i);
					f=false;
				}
			}
			if(!f)continue;
			for(int i=1;i<=n-1;i++){
				if(q[i][0]==now){
					q[i][0]=q[i][1];
					ans.push(2);
					s2.push(n);
					s2.push(i);
					m=false;
					f=false;
				}
			}
		}
		printf("%lld\n",ans.size());
		while(!ans.empty()){
			ansf.push(ans.top());
			ans.pop();
		}
		while(!s1.empty()){
			s1f.push(s1.top());
			s1.pop();
		}
		while(!s2.empty()){
			s2f.push(s2.top());
			s2.pop();
		}
		while(!ansf.empty()){
			if(ansf.top()==1){
				printf("1 %d\n",s1f.top());
				s1f.pop();
			}else{
				printf("2 %d",s2f.top());
				s2f.pop();
				printf(" %d\n",s2f.top());
				s2f.pop();
			}
			ansf.pop();
		}
	}
	return 0;
}