#include<stdio.h>
#include<algorithm>
#include<math.h>
#include<string.h>
#include<vector>
#include<map>
#include<set>
using namespace std;

#define pb push_back
#define fi first
#define se second
typedef long long ll;
typedef double db;
const int N=386,M=2e6+86;

int T;
int n,m,K,a[M],stk[N][2],len[N],op[M<<1][3],tot;

void solve1()
{
	tot=0;
	memset(len,0,sizeof(len));
	for(int i=1;i<=m;i++)
	{
		int num=(a[i]+1)>>1;
		if(len[num]==0) op[++tot][0]=1,op[tot][1]=num,stk[num][len[num]++]=a[i];//puts("1");
		else if(len[num]==1&&stk[num][0]==a[i]) op[++tot][0]=1,op[tot][1]=num,len[num]--;//puts("2");
		else if(len[num]==1&&stk[num][0]!=a[i]) op[++tot][0]=1,op[tot][1]=num,stk[num][len[num]++]=a[i];//puts("3");
		else if(len[num]==2&&stk[num][1]==a[i]) op[++tot][0]=1,op[tot][1]=num,len[num]--;//puts("4");
		else op[++tot][0]=1,op[tot][1]=n,op[++tot][0]=2,op[tot][1]=num,stk[num][0]=stk[num][--len[num]];//puts("5");
	}
	printf("%d\n",tot);
	for(int i=1;i<=tot;i++)
		if(op[i][0]==1) printf("1 %d\n",op[i][1]);
		else printf("2 %d %d\n",op[i][1],n);
}

int s,st,b[N];
bool vis[N];
vector<int> v[N];
void solve2()
{
	tot=0;
	memset(vis,0,sizeof(vis));
	for(int i=1;i<=n;i++)
		b[i]=(i+1)>>1;
	s=n;
	for(int i=1;i<=m;i++)
	{
		if(!vis[a[i]]) op[++tot][0]=1;
	}
}

template<typename T>
inline void read(T &x)
{
	T k=1;x=0;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')k=-1;ch=getchar();}
	while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
	x*=k;
}

int main()
{
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	read(T);
	while(T--)
	{
		read(n),read(m),read(K);
		for(int i=1;i<=m;i++)
			read(a[i]);
		solve1();
	}
	return 0;
}

