#include<bits/stdc++.h>
#define I inline
#define RI register int
#define N 15000
#define LL long long 
#define ull unsigned long long 
#define mod 998244353
#define debug puts("debug")
#define mem cout<<abs(&m1-&m2)/1024.0<<1024.0<<endl
using namespace std;
I int read()
{
	RI res=0,f=1;char ch=getchar();
	while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}
	while(isdigit(ch))res=(res<<1)+(res<<3)+(ch&15),ch=getchar();
	return res*f;
}
int T,n,k,m,a[N];
bool flag;
int stk[150][150],s[150][1500],num[N];
int pnum[N],q[1500][1500];
struct node{
	int op;
	int l,r;
}Ans[N];
int tp,op;
I void Solve2(){
	
}
I void get(){
	bool fg=0;
	
	for(RI i=1;i<=n;i++)pnum[i]=num[i];
	for(RI i=1;i<=n;i++)for(RI j=1;j<=pnum[i];j++)q[i][j]=stk[i][j];
//	while(1){
//	  fg=0;
//	  for(RI i=1;i<=n;i++){
//	  	  int p=pnum[i];pnum[i]=0;
//	  	  for(RI j=1;j<p;j++){
//	  	  	if(q[i][j]==q[i][j+1])j++,fg=1;
//	  	  	else s[i][++pnum[i]]=q[i][j];
//	      }
//		  for(RI j=1;j<=pnum[i];j++)q[i][j]=s[i][j];
//	  } 
//	  for(RI i=1;i<=n;i++){
//	  	for(RI j=i+1;j<=n;j++){
//	  		 if(q[i][1]==q[j][1]){
//				 fg=1;
//	  		 	 Ans[++tp].op=2;
//	  		 	 Ans[tp].l=i;Ans[tp].r=j;
//	  		 	 q[i][1]=q[i][2];
//	  		 	 for(RI k=2;k<=pnum[i];k++)q[i][k-1]=q[i][k];pnum[i]--;
//	  		 	 q[j][1]=q[j][2];
//	  		 	 for(RI k=2;k<=pnum[j];k++)q[j][k-1]=q[j][k];pnum[j]--;
//			   }
//		  }
//	  }
//	if(!fg)break;
//	}
	while(1)
	{
		fg=0;
		for(RI i=1;i<=n;i++){
			int p=pnum[i];pnum[i]=0;
			for(RI j=1;j<p;j++){
				if(q[i][j]==q[i][j+1])j++,fg=1;
				else s[i][++pnum[i]]=q[i][j];
			}
			for(RI j=1;j<=pnum[i];j++)q[i][j]=s[i][j];
		}
		for(RI i=1;i<=n;i++){
			if(!pnum[i])continue;
			for(RI j=i+1;j<=n;j++){
				if(!pnum[j])continue;
				if(q[i][1]==q[j][1]){
					fg=1;Ans[++tp].op=2;
					Ans[tp].l=i;Ans[tp].r=j;
					q[i][1]=q[i][2];
					for(RI k=2;k<=pnum[i];k++)q[i][k-1]=q[i][k];pnum[i]--;
					q[j][1]=q[j][2];
					for(RI k=2;k<=pnum[j];k++)q[j][k-1]=q[j][k];pnum[j]--;
				}
			}
		}
		if(!fg)break;
	}

	if(tp>m*2){tp=m;return;} 
	for(RI i=1;i<=n;i++)if(pnum[i])return;
	cout<<tp<<endl;
	for(RI i=1;i<=tp;i++){
		if(Ans[i].op==1)printf("1 %d\n",Ans[i].l);
		else printf("2 %d %d\n",Ans[i].l,Ans[i].r);
	}flag=1;
	return ;
}
I void dfs(int x){
	if(flag)return ;
	
	if(x==m+1){get();return;}
	for(RI i=1;i<=n;i++){
		num[i]++;stk[i][num[i]]=a[x];
		Ans[++tp].op=1;Ans[tp].l=i;
		dfs(x+1);tp--;
		stk[i][num[i]]=0;num[i]--;
	}
} 
int main()
{
	freopen("meow.in","r",stdin);freopen("meow.out","w",stdout);
	T=read();
	while(T--){
		n=read();m=read();k=read();
		flag=0;for(RI i=1;i<=m;i++)a[i]=read();
		printf("%d\n",m);
		for(RI i=1;i<=m;i++)printf("1 1\n");
	}
	return 0;
}