#include<bits/stdc++.h>
using namespace std;
long long read()
{
	long long sum=0,fh=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')fh=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){sum=(sum<<3)+(sum<<1)+(ch^48);ch=getchar();}
	return sum*fh;
}
int T;
#define Maxm 4000010
#define Maxn 310
struct Node{
	int op;
	int x;
	int y;
}stk[Maxm];
int top;
int a[Maxm];
namespace Sub1{
	int S[Maxn][2];
	void ins(int op,int x,int y)
	{
		++top;
		stk[top].op=op;
		stk[top].x=x;
		stk[top].y=y;
	}
	void solve()
	{
		while(T-->0)
		{
//			memset(S,0,sizeof(S));
			top=0;
			int n=read();
			int m=read();
			int k=read();
			for(int i=1;i<=m;++i)
			{
				int x=read();
				int buc=(x+1)/2;
				if(S[buc][1]==x)
				{
					ins(1,buc,0);
					S[buc][1]=0;
				}
				else if(S[buc][0]==x)
				{
					ins(1,n,0);
					ins(2,buc,n);
					S[buc][0]=S[buc][1];
				}
				else if(!S[buc][0])
				{
					S[buc][0]=x;
					ins(1,buc,0);
				}
				else 
				{
					ins(1,buc,0);
					S[buc][1]=x;
				}
			}
			printf("%d\n",top);
			for(int i=1;i<=top;++i)
			{
				printf("%d ",stk[i].op);
				if(stk[i].op==1)
				{
					printf("%d\n",stk[i].x);
				}
				else
				{
					printf("%d %d\n",stk[i].x,stk[i].y);
				}
			}
		}
	}
}
/*namespace Sub2{
	void ins(int op,int x,int y)
	{
		++top;
		stk[top].op=op;
		stk[top].x=x;
		stk[top].y=y;
	}
	int S[4][4];
	int a[Maxm];
	void solve()
	{
		while(T-->0)
		{
			int n=read();
			int m=read();
			int k=read();
			int tot=0;
			for(int i=1;i<=m;++i)
			{
				a[i]=read();
			}
			for(int i=1;i<=m;++i)
			{
//				a[i]=read();
				if(tot==0)
				{
					ins(1,1,0);
					S[1][1]=a[i];
					tot++;
				}
				else if(tot==1)
				{
					if(S[2][1])
					{
						ins(1,2,0);
						if(a[i]==S[2][1])S[2][1]=0,tot=0;
						else S[2][2]=a[i],tot=2;
					}
					else
					{
						ins(1,1,0);
						if(a[i]==S[1][1])S[1][1]=0,tot=0;
						else S[1][2]=a[i],tot=2;
					}
				}
				else if(tot==2)
				{
					if(S[1][1]&&S[2][1])
					{
						bool F=0;
						for(int j=1;j<=2;++j)
						{
							if(S[j][1]==a[i])
							{
								F=1;
								ins(1,j,0);
								S[j][1]=0;
								tot=1;
								break;
							}
						}
						if(!F)
						{
							for(int j=1;j<=2;++j)
							{
								if(S[j][1]==a[i+1])
								{
									ins(1,3-j,0);
									S[3-j][2]=a[i];
									tot=3;
								}
							}
						}
					}
					else
					{
						for(int j=1;j<=2;++j)
						{
							if(S[j][2]==a[i])
							{
								ins(1,,0);
							}
						}
					}
				}
				else if(tot==3)
				{
					if(S[1][3])
					{
					}
					else if(S[2][3])
					{
					}
					else o
				}
			}
		}
	}
}*/
int main()
{
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	T=read();
	if(T&1)
	{
		Sub1::solve();
	}
	/*else if(T%10==2)
	{
		Sub2::solve();
	}
	else 
	{
		while(T-->0)
		{
			int n=read();
			int m=read();
			int k=read();
			for(int i=1;i<=m;++i)
			{
				a[i]=read();
			}	
			for(int i=1;i<=m;++i)
			{	
			}
		}
	}*/
//	int T=read();
	return 0;
}
/*
1
3 12 4
1 2 4 3 2 1 2 4 3 4 4 2
*/
