#include<bits/stdc++.h>
using namespace std;
const int Max_M=2e6,Max_N=3e2,Max_K=6e2;
int T,n,m,K,Em=0,a[Max_M+5],f[Max_N+5][5],sz[Max_N+5],bln[Max_K+5],lst[Max_K+5],nxt[Max_M+5];
int Top,Q[Max_N+5];
int cnt,ans[Max_M*2+5][5];
int Read(){
	int num=0; char ch=getchar();
	for(;ch<'0'||ch>'9';ch=getchar());
	for(;ch>='0'&&ch<='9';num=num*10+ch-'0',ch=getchar());
	return num;
}
void Print(int x){
	if(x>=10) Print(x/10);
	putchar((x%10)+'0');
}
void Print1(int x){
	++cnt; ans[cnt][0]=1; ans[cnt][1]=x;
}
void Print2(int x,int y){
	++cnt; ans[cnt][0]=2; ans[cnt][1]=x; ans[cnt][2]=y;
}
void Find(){
	Em=0;
	for(int i=1;i<=n&&!Em;i++)
	 if(sz[i]==0) Em=i;
}
void Solv(){
	n=Read(),m=Read(),K=Read(); cnt=0;
	for(int i=1;i<=m;i++) a[i]=Read();
	for(int i=m;i>=1;i--){
		if(!lst[a[i]]) lst[a[i]]=i;
		else nxt[i]=lst[a[i]];
	}
	for(int i=1;i<=K;i++) lst[a[i]]=0;
	for(int i=1;i<=m;i++){
		if(bln[a[i]]){
			int now=bln[a[i]];
			if(a[f[now][0]]==a[i]&&f[now][1]){
				Print1(Em);
				Print2(now,Em);
				for(int j=0;j<=sz[now]-2;j++)
				 f[now][j]=f[now][j+1];
			} else Print1(now);
			f[now][sz[now]-1]=0;
			--sz[now]; bln[a[i]]=0;
		} else {
			bool flg=false;
			for(int j=1;j<n&&!flg;j++)
			 if(sz[j]<2){
			 	Print1(j);
			 	bln[a[i]]=j;
			 	flg=true;
			 	f[j][sz[j]++]=i;
			 }
			if(!flg){
				for(int j=1;j<n&&!flg;j++)
				 if(nxt[f[j][0]]<nxt[f[j][1]]){
				 	Print1(j);
				 	bln[a[i]]=j;
				 	flg=true;
				 	f[j][sz[j]++]=i;
				 }	
			}
			if(!flg) f[Em][sz[Em]++]=i,Print1(Em),bln[a[i]]=Em;
		}
		Find();
	}
	Print(cnt),puts("");
	for(int i=1;i<=cnt;i++){
		if(ans[i][0]==1) Print(1),putchar(' '),Print(ans[i][1]),puts("");
		else Print(2),putchar(' '),Print(ans[i][1]),putchar(' '),Print(ans[i][2]),puts("");
	}
}
int main(){
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	T=Read();
	for(int t=1;t<=T;t++) Solv();
	return 0;
}
