#include<bits/stdc++.h>
using namespace std;
struct str{
	int op;
	int s1;
	int s2;
};
queue<str> ans;
vector<int> card;
int stk[400][10];
/*
T1Êý¾ÝºÃ³ô
114514f
*/ 
int gs[700];
int gsum=0;
int main(){
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int t;
	cin>>t;
	for(int i=1;i<=t;i++){
		int n,m,k,c;
		cin>>n>>m>>k;
		for(int i=1;i<=m;i++){
			cin>>c;
			card.push_back(c);
		}
		if(k==n*2-2){//deal with k=2n-2
			for(int j=0;j<m;j++){
				int num=card[j]+1;
				str step;
				if(stk[num/2][2]==num){
					step.op=1;
					step.s1=(num/2);
					ans.push(step);
					stk[num/2][2]=0;
				}else if(stk[num/2][1]==0){
					stk[num/2][1]=num;
					step.op=1;
					step.s1=(num/2);
					ans.push(step);
				}else if(stk[num/2][2]==0){
					stk[num/2][2]=num;
					step.op=1;
					step.s1=(num/2);
					ans.push(step);
				}else{
					step.op=1;
					step.s1=n;
					ans.push(step);
					stk[num/2][1]=stk[num/2][2];
					stk[num/2][2]=0;
					step.op=2;
					step.s1=num/2;
					step.s2=n;
					ans.push(step);
				}
			}
		}else{//deal with k=2n-1
			str step;
			int space=n;
			for(int j=0;j<m;j++){
				int num=card[j];
				if(gs[num]==0){
					if(k-gsum>1){
						for(int k=1;k<=n;k++){
							if(k==space){
								continue;
							}
							if(stk[k][1]==0){
								gs[num]=k;
								gsum+=1;
								stk[k][1]=num;
								step.op=1;
								step.s1=k;
								ans.push(step);
								break;
							}else if(stk[k][2]==0){
								gs[num]=k;
								gsum+=1;
								stk[k][2]=num;
								step.op=1;
								step.s1=k;
								ans.push(step);
								break;
							}
						}
					}else{//1 2 3 4 5 6 7 .....
						int k=j+1;
						bool tf[500];
						for(;k<m;k++){
							if(card[k]==num){
								break;
							}
							if(stk[gs[card[k]]][1]==card[k]){
								break;
							}
							tf[gs[card[k]]]=(1-tf[gs[card[k]]]);
						}
						if(card[k]==num){
							step.op=1;
							step.s1=space;
							ans.push(step);
							for(int x=j+1;x<k;x++){
								step.op=1;
								step.s1=gs[card[x]];
								ans.push(step);
								stk[gs[card[x]]][2]=0;
								gs[card[x]]=0;
								gsum-=1;
							}
							step.op=1;
							step.s1=space;
							ans.push(step);
							j=k;
						}else{
							if(tf[stk[gs[card[k]]][2]]==0){
								step.op=1;
								step.s1=gs[card[k]];
								ans.push(step);
								stk[gs[card[k]]][1]=stk[gs[card[k]]][2];
								stk[gs[card[k]]][2]=num;
								for(int x=j+1;x<k;x++){
									if(card[x]==stk[gs[card[k]]][2]){
										step.op=1;
										step.s1=gs[card[x]];
										ans.push(step);
										continue;
									}
									if(gs[card[x]]!=0){
										step.op=1;
										step.s1=gs[card[k]];
										ans.push(step);
										stk[gs[card[k]]][2]=0;
										gsum-=1;
										gs[card[k]]=0;
									}else{
										for(int l=1;l<=n;l++){
											if(l==space){
												continue;
											}
											if(stk[l][2]==0){
												step.op=1;
												step.s1=l;
												ans.push(step);
												stk[l][2]=card[x];
												gsum+=1;
												gs[card[k]]=l;
												break;
											}
										}
									}
								}
								step.op=1;
								step.s1=space;
								ans.push(step);
							}else{
								step.op=1;
								step.s1=space;
								ans.push(step);
								for(int x=j+1;x<k;x++){
									if(gs[card[x]]!=0){
										step.op=1;
										step.s1=gs[card[k]];
										ans.push(step);
										stk[gs[card[k]]][2]=0;
										gsum-=1;
										gs[card[k]]=0;
									}else{
										for(int l=1;l<=n;l++){
											if(l==space){
												continue;
											}
											if(stk[l][2]==0){
												step.op=1;
												step.s1=l;
												ans.push(step);
												stk[l][2]=card[x];
												gsum+=1;
												gs[card[k]]=l;
												break;
											}
										}
									}
								}
								step.op=1;
								step.s1=gs[card[k]];
								ans.push(step);
								stk[gs[card[k]]][1]=0;
								space=gs[card[k]];
								gs[card[k]]=0;
							}
							j=k;
						}
					}	
				}else{
					if(stk[gs[num]][1]==num){
						step.op=1;
						step.s1=space;
						ans.push(step);
						step.op=2;
						step.s1=gs[num];
						step.s2=space;
						ans.push(step);
						stk[gs[num]][1]=stk[gs[num]][2];
						stk[gs[num]][2]=0;
						gs[num]=0;
						gsum-=1;
					}else{
						step.op=1;
						step.s1=gs[num];
						ans.push(step);
						stk[gs[num]][2]=0;
						gs[num]=0;
						gsum-=1;
					}
				}
			}
		}
		card.clear();
		cout<<ans.size()<<endl;
		while(!ans.empty()){
			if(ans.front().op==1){
				cout<<"1 "<<ans.front().s1<<endl;
			}else{
				cout<<"2 "<<ans.front().s1<<" "<<ans.front().s2<<endl;
			}
			ans.pop();
		}
	}
}
