#include<cstdio>
#include<vector>
using namespace std;

struct node{
    int opt,x,y;
};
#define N 305
#define M 2000005
int T;
int n,m,k,x;
int a[N];
int vis[N<<1],st[3][N],tot[N];
vector<node> g; 
void work1()
{
	for (int i=1 ; i<=n ; i++)
	    tot[i]=st[1][i]=st[2][i]=0;
	for (int i=1 ; i<=k ; i++)
	    vis[i]=0;
	for (int i=1 ; i<=m ; i++){
		scanf("%d",&x);
		int num=x>n-1? x-n+1:x; 
		if (!vis[x]){
			g.push_back((node){1,num,0});
			tot[num]++;
			if (tot[num]==1){
				st[1][num]=x;
				vis[x]=1;
			}else{
				st[2][num]=x;
				vis[st[1][num]]=2;
				vis[x]=1;
			}
		}else if (vis[x]==1){
			g.push_back((node){1,num,0});
			tot[num]--;
	        if (tot[num]>0) vis[st[1][num]]=1;
	        vis[x]=0;
		}else{
		//	printf("1 %d\n",n);
			g.push_back((node){1,n,0});
		//	printf("2 %d %d\n",num,n);
			g.push_back((node){2,num,n});
			tot[num]--;
			st[1][num]=st[2][num];
			vis[st[1][num]]=1;
			vis[x]=0;
		}
	}
	printf("%d\n",g.size());
	for (int i=0 ; i<g.size() ; i++)
	    if (g[i].opt==1) printf("1 %d\n",g[i].x);
	    else printf("2 %d %d\n",g[i].x,g[i].y);
	g.clear();
}
void work2()
{
		for (int i=1 ; i<=n ; i++)
	    tot[i]=st[1][i]=st[2][i]=0;
	for (int i=1 ; i<=k ; i++)
	    vis[i]=0;
	for (int i=1 ; i<=m ; i++){
		scanf("%d",&x);
		int num=x>n-1? x-n+1:x;
		if (x==2*n-1){
			g.push_back((node){1,n,0});
		}
		else if (!vis[x]){
			g.push_back((node){1,num,0});
			tot[num]++;
			if (tot[num]==1){
				st[1][num]=x;
				vis[x]=1;
			}else{
				st[2][num]=x;
				vis[st[1][num]]=2;
				vis[x]=1;
			}
		}else if (vis[x]==1){
			g.push_back((node){1,num,0});
			tot[num]--;
	        if (tot[num]>0) vis[st[1][num]]=1;
	        vis[x]=0;
		}else{
		//	printf("1 %d\n",n);
			g.push_back((node){1,n,0});
		//	printf("2 %d %d\n",num,n);
			g.push_back((node){2,num,n});
			tot[num]--;
			st[1][num]=st[2][num];
			vis[st[1][num]]=1;
			vis[x]=0;
		}
	}
	printf("%d\n",g.size());
	for (int i=0 ; i<g.size() ; i++)
	    if (g[i].opt==1) printf("1 %d\n",g[i].x);
	    else printf("2 %d %d\n",g[i].x,g[i].y);
	g.clear();
}
int main()
{
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	scanf("%d",&T);
	while (T--){
		scanf("%d%d%d",&n,&m,&k);
		if (k==2*n-2) work1();
		else work2();
    }
	return 0;
}