#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int s[305][900005],a[2000005];
int head[305]={},tail[305]={};
long long n,m,k,ans;
struct ff
{
	int num,x,y;
}u[4000005];
int f(int i)
{
	for(int j=1;j<=n;j++)		
	{
		if(a[i]==s[j][tail[j]])
		{
			return j;
		}
	}
	int h1=0,h2=0;
	for(int j=1;j<=n;j++)
	{
		if(tail[j]<head[j]) h1=j;
		if(a[i]==s[j][head[j]]) h2=j;
		if(h1&&h2) break;
	}
	if(h1&&h2)
	{
		return h1;
	}
	int p=f(i+1);
	for(int j=1;j<=n;j++)
	{
		if(j!=p)
		{
			return j;
		}
	}
	return n;
}
int main()
{
 	freopen("meow.in","r",stdin);
 	freopen("meow.out","w",stdout);
 	int T;
 	cin>>T;
 	while(T--)
 	{
 		ans=0;
 		cin>>n>>m>>k;
 		memset(head,0,sizeof head);
 		memset(tail,0,sizeof tail);
 		for(int i=1;i<=m;i++)
 		{
 			scanf("%d",&a[i]);
		}
		s[1][1]=a[1];
		tail[1]=1;
		u[++ans].num=1,u[ans].x=1;
		int p=0,h1,h2,j;
		for(int i=2;i<=m;i++)
		{
			
			p=0;
			for(int j=1;j<=n;j++)
			{
				if(tail[j]>0&&a[i]==s[j][tail[j]])
				{
					u[++ans].num=1,u[ans].x=j;
					tail[j]--;
					p=1;
					break;
				}
			}
			if(p) 
			{
				p=0;continue;
			}
			h1=0,h2=0;
			for(int j=1;j<=n;j++)
			{
				if(tail[j]<=head[j]) h1=j;
				if(a[i]==s[j][head[j]]) h2=j;
				if(h1&&h2) break;
			}
			if(h1&&h2)
			{
				u[++ans].num=1,u[ans].x=h1;
				u[++ans].num=2,u[ans].x=h1,u[ans].y=h2;
				head[h2]++;
				continue;
			}
			p=f(i+1);
			for(j=1;j<=n;j++)
			{
				if(j!=p)
				{
					u[++ans].num=1,u[ans].x=j;
					s[j][++tail[j]]=a[i];
					break;
				}
			}
		}
		cout<<ans<<endl;
		for(int i=1;i<=ans;i++)
		{
			if(u[i].num==1)
			{
				printf("1 %d\n",u[i].x);
			}
			else
			{
				printf("1 %d %d\n",u[i].x,u[i].y);
			}
		}
	}
 	return 0;
}
