#include <bits/stdc++.h>
using namespace std;

const int N=2e6+5;
int n,m,k,a[N],b[N],sz[N],tp[N];

void doit(){
	int o=0,tga=-1,tgb=0;
	vector<pair<int,int> >ans;
	cin>>n>>m>>k;
	if(k%2==0) k++;
	for(int i=0;i<k;i+=2) b[i]=b[i+1]=++o,tp[o]=-1,sz[o]=0;
	for(int i=1;i<=m;i++) scanf("%d",&a[i]),a[i]--,sz[a[i]]++,tgb=max(tgb,a[i]);
	for(int i=1;i<=m;i++){
		sz[a[i]]--;
		if(tga==-1&&sz[a[i]]==0) tga=a[i];
	}
	for(int i=1;i<=m;i++){
		if(a[i]==tga) a[i]=tgb;
		else if(a[i]==tgb) a[i]=tga;	
	}
	for(int i=1;i<=o;i++) sz[i]=0;
	for(int i=1,x;i<=m;i++){
		x=a[i];
		if(x==k-1){
//			puts("?");
			ans.push_back(make_pair(o,0));
			sz[o]^=1;
		}
		else{
			if(tp[b[x]]==x){
//				puts("~");
				ans.push_back(make_pair(b[x],0));
				tp[b[x]]^=1;
				sz[b[x]]--;
				if(sz[b[x]]==0) tp[b[x]]=-1;
			}
			else{
				if(sz[b[x]]<2){
//					puts("!");
					sz[b[x]]++;
					tp[b[x]]=x;
					ans.push_back(make_pair(b[x],0));
				}
				else if(sz[o]){
//					puts("@");
					tp[b[x]]^=1;
					sz[b[x]]++;
					ans.push_back(make_pair(b[x],0));	
				}
				else{
//					puts("#");
					ans.push_back(make_pair(o,0));
					ans.push_back(make_pair(b[x],o));
					sz[b[x]]--;
					if(sz[b[x]]==0) tp[b[x]]=-1;
				}
			}
		}
//		for(int i=1;i<=o;i++) cout<<sz[i]<<" ";puts("");
	}
	cout<<ans.size()<<endl;
//	for(int i=1;i<=o;i++) if(sz[i]) {puts("NO");return ;}//cout<<sz[i]<<" ";puts("");
	for(auto x:ans){
		if(x.second==0) printf("1 %d\n",x.first);
		else printf("2 %d %d\n",x.first,x.second);	
	}
	
}

signed main(){
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);	
	int t;
	cin>>t;
	while(t--) doit();
}