#include<bits/stdc++.h>
using namespace std;
int t;
int s[301][1001];
int top[301];
	int down[301];
	int num[301];
	int op=0;
	int opt[2002][3];
int op1(int s1)
{
	s[s1][top[s1]]=top[0];
	top[0]++;
	num[0]--;
	top[s1]--;
	num[s1]++;
	if(s[s1][top[s1]+1]==s[s1][top[s1]+2])
	{
		top[s1]+=2;
		num[s1]-=2;
	}
	op++;
	opt[op][0]=1;
		opt[op][1]=s1;
		printf("%d %d\n",1,s1);
		return 0;
}
int op2(int s1,int s2)
{
	if(s[s1][down[s1]]==s[s2][down[s2]])
	{
		down[s1]--;
		down[s2]--;
		num[s1]--;
		num[s2]--;
		op++;
		opt[op][0]=2;
		opt[op][1]=s1;
		opt[op][2]=s2;
		printf("%d %d %d\n",2,s1,s2);
	}
	return 0;
}
bool isempty(int n)
{
	for(int i=0;i<=n;i++)
	if(num[i]!=0)return false;
	return true;
}
int m()
{
	int n,m,k;
	cin>>n>>m>>k;
/*	int s[n+1][m+1];
	int top[n+1];
	int down[n+1];
	int num[n+1];*/
//	int opl[2*m+1][3];
	for(int i=1;i<=m;i++)
		cin>>s[0][i];
	for(int i=0;i<=300;i++)
	{
		top[i]=m;
		down[i]=m;
		num[i]=0;
	}
//	memset(top,m,sizeof(top));
//	memset(down,m,sizeof(down));
//	memset(num,0,sizeof(num));
	top[0]=1;
	num[0]=m;
	while(!isempty(n)){
	if(s[0][top[0]]==s[0][top[0]+1])
	{
		op1(1);
		op1(1);
	}
//	else
//	{
		for(int i=1;i<=n;i++)
		{
		if(s[0][top[0]]==s[i][top[0]+1])op1(i);
		else
		if(num[i]==0)op1(i);}
//	}
	for(int i=1;i<=n;i++)
		for(int j=n+1;j<=n;j++)op2(i,j);
	}
	cout<<op;
	return 0;
}
int main()
{
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	cin>>t;
	for(int i=1;i<=t;i++)
	{
		m();
	}
	return 0;
}