#include<bits/stdc++.h>
using namespace std;
vector<int>g[305];
int s[305];
int t,n,m,a,k,step;
struct data
{
	int r,x,y;
}cz[4000005];
void xq(int x)
{
	if(g[x][s[x]])
	for(int i=1;i<=n;i++)
	{
		if(x==i)continue;
		if(g[i][s[i]]==g[x][s[x]])
		{
			data h;
			h.r=2,h.x=x,h.y=i;
			cz[++step]=h;
			s[i]++,s[x]++;
			xq(i),xq(x);
		}
	}
	return;
}
int main()
{
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	scanf("%d",&t);
	for(int q=1;q<=t;q++)
	{
		scanf("%d %d %d",&n,&m,&k);
		step=0;
		for(int i=1;i<=n;i++)
		{
			g[i].clear();
			g[i].push_back(0);
			s[i]=0;
		}
		for(int i=1;i<=m;i++)
		{
			scanf("%d",&a);
			bool flag=0;
			for(int j=1;j<=n;j++)
			{
				if(g[j][g[j].size()-1]==a)
				{
					g[j].pop_back();
					flag=1;
					data h;
					h.r=1,h.x=j;
					cz[++step]=h;
					break;
				}
			}
			if(!flag)
			for(int j=1;j<=n&&!flag;j++)
			{
				if(g[j][s[j]]==a)
				{
					for(int k=1;k<=n&&!flag;k++)
					{
						if(g[k].size()==(1+s[k]))
						{
							
							data h;
							h.r=1,h.x=k;
							cz[++step]=h;
							s[j]++;
							h.r=2,h.x=j,h.y=k;
							cz[++step]=h;
							flag=1;xq(j);
						}
					}
				}
			}
			if(!flag)
			{
				for(int j=1;j<=n;j++)
				{
					if(g[j][g[j].size()-1]==a)
					{
						g[j].push_back(a);
						data h;
						h.r=1,h.x=j;
						cz[++step]=h;
						flag=1;
						break;
					}
				}
			
			}
			if(!flag)
			{
				g[1].push_back(a);
				if(!s[1])s[1]=1;
				data h;
				h.r=1,h.x=1;
				cz[++step]=h;
			}
		}
		printf("%d\n",step);
		for(int i=1;i<=step;i++)
		{
			if(cz[i].r==1)printf("1 %d\n",cz[i].x);
			else
			printf("2 %d %d\n",cz[i].x,cz[i].y);
		}
	}
	return 0;
}
