#include<bits/stdc++.h>
using namespace std;
int la[2000100];
int a[2000100];		
int lat[1000];
int n,m,k;
int o1[4000100],o2[4000100];
int LA[1000];
int BA[1000];
struct sc{
	int s[6];
	int top;
	int id;
	void em(){
		top=0;
	}
	void pop(){
		if(top==1){
			LA[a[s[top]]]=0;
			BA[a[s[top]]]=0;
			top--;
		}
		else{
			LA[a[s[top]]]=0;
			top--;
		}
	}
	void base(){
		if(top==1){
			LA[a[s[top]]]=0;
			BA[a[s[top]]]=0;
			top--;
		}
		else {
			BA[a[s[1]]]=0;
			s[1]=s[2];
			BA[a[s[1]]]=id;
			top=1;
		}
	}
	void push(int i){
		if(top==0){
			BA[a[i]]=LA[a[i]]=id;
			top=1;
			s[1]=i;
		}
		else{
			LA[s[1]]=0;
			LA[a[i]]=id;
			top=2;
			s[2]=i;	
		}
	}
} sta[400];
int read(){
	char c=getchar();
	while(c<'0'||c>'9')c=getchar();
	int a=0;
	while(c>='0'&&c<='9')a=(a<<1)+(a<<3)+(c^48),c=getchar();
	return a;
}
#define ADD(i,j) {\
	o1[++op]=i;\
	o2[op]=j;\
}

int main(){
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	int t;
	for(int i=1;i<=400;i++)
	sta[i].id=i;
	scanf("%d",&t);
	while(t--){
		scanf("%d%d%d",&n,&m,&k);
		for(int i=1;i<=k;i++)
		lat[i]=1e9,BA[i]=LA[i]=0;
		for(int i=1;i<=m;i++)
		a[i]=read();
		for(int i=m;i;i--){
			la[i]=lat[a[i]];
			lat[a[i]]=i;
		}
		for(int i=1;i<=n;i++)
		sta[i].em();
		int op=0;
		for(register int i=1;i<=m;i++){	
			int ma=0,mf;
			if(LA[a[i]]){
				ADD(-1,LA[a[i]]);
				sta[LA[a[i]]].pop();
				goto END;
			}
			for(register int j=1;j<=n;j++){
			if(sta[j].top==0){
				ADD(-1,j)
				if(BA[a[i]]){
					ADD(j,BA[a[i]])
					sta[BA[a[i]]].base();
				}
				else sta[j].push(i);
				goto END;
			}	
			if(sta[j].top==1&&la[sta[j].s[1]]>ma){
				ma=la[sta[j].s[1]];
				mf=j;
			}
			}
		ADD(-1,mf)
		sta[mf].push(i);
			END:;
		}	
		printf("%d\n",op);
		for(int i=1;i<=op;i++){
			if(o1[i]==-1)printf("1 %d\n",o2[i]);
			else printf("2 %d %d\n",o1[i],o2[i]);
		}
	}
	return 0;
}