#include<bits/stdc++.h>
using namespace std;
int n,m,k;
const int N=2000005;
int a[N];
//int pt[N];
//int ck[1000];
int st[4][N];
int l[4],r[4],tot[4];
int op;
struct node {
	int s,s1,s2;
}way[N<<1];
void add(int stk,int t){
	st[stk][++r[stk]]=a[t];
	tot[stk]++;
	way[++op].s=1;
	way[op].s1=stk;
	way[op].s2=0;
}
void del(int stk,int t){
	add(stk,t);
	r[stk]-=2;
	tot[stk]-=2;
}
void print(){
	printf("%d\n",op);
	for(int i=1;i<=op;i++)
		if(way[i].s==1)
			printf("1 %d\n",way[i].s1);
		else 
			printf("2 %d %d\n",way[i].s1,way[i].s2);
}
int main(){
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	int T;
	scanf("%d",&T);
	if(T%10==2){
		while(T--){
			scanf("%d%d%d",&n,&m,&k);	
			for(int i=1;i<=m;i++){
				scanf("%d",&a[i]);
			}
			for(int i=1;i<=m;i++)
				st[1][m]=st[2][m]=0;
			l[1]=l[2]=1;
			r[1]=r[2]=tot[1]=tot[2]=op=0;
			for(int i=1;i<=m;i++){
				if(a[i]==st[1][r[1]]) del(1,i);
				else if(a[i]==st[2][r[2]]) del(2,i);         
				else if(tot[1]==0) add(1,i);
				else if(tot[2]==0) add(2,i);
				else if(a[i+1]==a[i]) add(1,i);
				else if(a[i+1]==st[1][r[1]]) add(2,i);
				else if(a[i+1]==st[2][r[1]]) add(1,i);
			}
			print();
		}
	}
	return 0;
}
/*
1002
2 6 3
1 2 3 2 3 1
*/
