#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int st[305][200005];
int kp[2000005];
int head[305];
struct node{
	int op,which1,which2;
};
node ans[4000005];
int cnt;
int main()
{
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	int t;
	scanf("%d",&t);
	int ns=1;
	int ms=1;
	for(int i=1;i<=t;i++){
		int n,m,k;
		cnt=0;
		for(int j=1;j<=ns;j++){
			for(int k=1;k<=ms;k++){
				st[j][k]=0;
			}
		}
		scanf("%d%d%d",&n,&m,&k);
		ns=n;
		ms=m;
		int hkp=1;
		for(int j=1;j<=m;j++){
			scanf("%d",&kp[j]);
		}
		while(m-hkp+1){
			bool flag1=false;
			bool flag2=false;
			for(int j=1;j<=n;j++){
				if(st[j][0]==kp[hkp]){
					ans[++cnt].op=1;
					ans[cnt].which1=j;
					for(int k=0;k<head[j];k++){
						st[j][k]=st[j][k+1];
					}
					head[j]--;
					hkp++;
					flag1=true;
					break;
				}
			}
			if(flag1){
				continue;
			}
			for(int j=1;j<=n;j++){
				if(st[j][head[j]]==kp[hkp]){
					for(int k=j+1;k<=n;k++){
						if(st[k][0]==0){
							ans[++cnt].op=1;
							ans[cnt].which1=k;
//							printf("1 %d\n",k);
							hkp++;
							ans[++cnt].op=2;
							ans[cnt].which1=j;
							ans[cnt].which2=k;
//							printf("2 %d %d\n",j,k);
							hkp++;
							st[j][head[j]]=0;
							head[j]--;
							flag2=true;
							break;
						}
					}
				}
				if(flag2){
					break;
				}
			}
			if(flag2){
				continue;
			}
			int mi=1e8;
			int pos=0;
			for(int j=1;j<=n;j++){
				if(mi>head[j]){
					mi=head[j];
					pos=j;
				}
			}
			ans[++cnt].op=1;
			ans[cnt].which1=pos;
//			printf("1 %d\n",pos);
			for(int j=head[pos];j>=0;j--){
				st[pos][j+1]=st[pos][j];
			}
			head[pos]++;
			st[pos][0]=kp[hkp];
			hkp++;
//			printf("\n");
		}
		printf("%d\n",cnt);
		for(int j=1;j<=cnt;j++){
			if(ans[j].op==1){
				printf("1 %d\n",ans[j].which1);
			}else{
				printf("2 %d %d",ans[j].which1,ans[j].which2);
			}
		}
	}
	cout<<endl;
	fclose(stdin);
	fclose(stdout);
	return 0;
}

