#include<iostream>
#include<cstdio>
#define maxn 305
#define maxm 2000005
#define maxk 605
using namespace std;
int T,n,m,k,x,a[maxm],sta[maxn][5],p[maxk],top;
struct anss{int typ,op1,op2;}ans[maxm*2]; int cnt=0;
void sub13(){
	while(T--){
		scanf("%d%d%d",&n,&m,&k); for(int i=1;i<=k;i++) p[i]=-1;
		for(int i=1;i<=n;i++) sta[i][0]=sta[i][1]=0; cnt=0;
		for(int i=1;i<=m;i++){
			scanf("%d",&x); int pos=(x-1)/2+1;
			if(p[x]==0){
				ans[++cnt].typ=1; ans[cnt].op1=n;
				ans[++cnt].typ=2; ans[cnt].op1=pos; ans[cnt].op2=n;
				p[x]=-1;
				if(sta[pos][1]){sta[pos][0]=sta[pos][1]; sta[pos][1]=0; p[sta[pos][0]]=0;}
			}else if(p[x]==1){ans[++cnt].typ=1; ans[cnt].op1=pos; p[x]=-1;}
			else if(!sta[pos][0]){ans[++cnt].typ=1; ans[cnt].op1=pos; sta[pos][0]=x; p[x]=0;}
			else{ans[++cnt].typ=1; ans[cnt].op1=pos; sta[pos][1]=x; p[x]=1;}
		} printf("%d\n",cnt);
		for(int i=1;i<=cnt;i++) if(ans[i].typ==1) printf("%d %d\n",ans[i].typ,ans[i].op1);
			else printf("%d %d %d\n",ans[i].typ,ans[i].op1,ans[i].op2);
	}
}
void sub46(){
	while(T--){
		scanf("%d%d%d",&n,&m,&k); for(int i=1;i<=k;i++) p[i]=-1;
		for(int i=1;i<=n;i++) sta[i][0]=sta[i][1]=0; cnt=0; top=0;
		for(int i=1;i<=m;i++) scanf("%d",&a[i]);
		for(int i=1;i<=m;i++){
			if(sta[2][1]&&sta[2][1]==a[i]){sta[2][1]=0; ans[++cnt].typ=1; ans[cnt].op1=2;}
			else if(top!=0&&sta[1][top]==a[i]){ans[++cnt].typ=1; ans[cnt].op1=1; top--;}
			else if(top!=0&&sta[1][1]==a[i]){
				ans[++cnt].typ=1; ans[cnt].op1=2;
				ans[++cnt].typ=2; ans[cnt].op1=1; ans[cnt].op2=2;
				if(top==2) sta[1][1]=sta[1][top]; top--;
			}else if(top!=2){ans[++cnt].typ=1; ans[cnt].op1=1; sta[1][++top]=a[i];}
			else{
				if(a[i+1]==sta[1][1]){
					ans[++cnt].typ=1; ans[cnt].op1=1;
					ans[++cnt].typ=1; ans[cnt].op1=2;
					ans[++cnt].typ=2; ans[cnt].op1=1; ans[cnt].op2=2;
					sta[1][1]=sta[1][2]; sta[1][2]=a[i];
				}else if(a[i+1]==sta[1][2]){
					ans[++cnt].typ=1; ans[cnt].op1=2;
					ans[++cnt].typ=1; ans[cnt].op1=1;
					st[2][1]=a[i]; top--;
				}else{
					ans[++cnt].typ=1; ans[cnt].op1=2; ans[++cnt].typ=1; ans[cnt].op1=2;
				} i++;
			}
		}
	}
}
int main(){
	freopen("meow.in","r",stdin); freopen("meow.out","w",stdout);
	scanf("%d",&T); if(T%10==1){sub13(); return 0;} if(T%10==2){sub46(); return 0;}
	return 0;
}
/*
By qzhwlzy
T2 meow
------code------
points 1~3 -> 15pts
starts at  12:14
ends   at  12:35
----------------
*/

