#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
const int N=610,M=2000010;
int n,m,k,a[M],tx[N],ty[N],ex,ep,ext,ton[N],tp;
int in[N],tim[N],ti;
vector<pair<int,int>>ans;
void addans(int x,int y){ans.emplace_back(x,y);}
void solve()
{
	for(int i=1;i<n;i++) ton[++tp]=i;
	ext=n;
	for(int i=1;i<=m;i++)
	{
		int x=a[i];
		if(x==ex)
		{
			addans(0,ep);
			ex=ep=0;
			continue;
		}
		if(in[x])
		{
			int p=in[x];
			if(!ty[p]) addans(0,p),tx[p]=0;
			else if(ty[p]==x)
			{
				if(ep==p)//special case
				{
					addans(0,p);
					ton[++tp]=ext;
					tx[ext]=ex,ty[ext]=0,in[ex]=ext;
					ext=p;
					ex=tx[p],ep=p,in[ex]=0;
					tx[p]=ty[p]=0;
				}
				else
				{
					addans(0,p),ton[++tp]=p;
					ty[p]=0;
				}
			}
			else
			{
				addans(0,ext),addans(p,ext);
				if(!ty[p]){tx[p]=0;continue;}
				if(ep==p)
				{
					tx[p]=ty[p],ty[p]=ex;
					in[ex]=ep,ex=ep=0;
				}
				else ton[++tp]=p,tx[p]=ty[p],ty[p]=0;
			}
			in[x]=0;
		}
		else
		{
			if(tp)
			{
				int p=ton[tp];
				if(!tx[p]) tx[p]=x;
				else ty[p]=x,tp--;
				addans(0,p);
				in[x]=p;
			}
			else
			{
				int r=i+1;
				while(r<=m && a[r]!=a[i]) r++;
				ep=0;++ti;
				ex=a[i];
				for(int j=i+1;j<r;j++)
				{
					if(ty[in[a[j]]]==a[j]) tim[in[a[j]]]=ti;
					else if(tim[in[a[j]]]!=ti && tx[in[a[j]]]==a[j]){ep=in[a[j]];break;}
				}
				if(!ep)
				{
					for(int j=1;j<=n;j++) if(j!=ext && tim[j]!=ti){ep=j;break;}
				}
				if(!ep)
				{
					for(int j=i+1;j<r;j++)
						if(tx[in[a[j]]]==a[j]){ep=in[a[j]];break;}
					if(!ep) ep=ext;
					addans(0,ext);//special case: ep!=ext
					continue;
				}
				addans(0,ep);
			}
		}
	}
}
void clear()
{
	if(tp!=n-1) cerr<<"Wrong.."<<endl;
	for(int i=1;i<=m;i++) a[i]=0;
	for(int i=1;i<=n;i++) tx[i]=ty[i]=0;
	for(int i=1;i<=k;i++) in[i]=0;
	for(int i=1;i<=tp;i++) ton[i]=0;
	for(int i=1;i<=k;i++) tim[i]=0;
	tp=ex=ep=ti=0;
	ans.clear();
}
int main()
{
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	int T;scanf("%d",&T);
	while(T --> 0)
	{
		scanf("%d%d%d",&n,&m,&k);
		for(int i=1;i<=m;i++) scanf("%d",&a[i]);
		solve();
		printf("%d\n",(int)ans.size());
		for(auto x:ans) if(x.first==0) printf("1 %d\n",x.second);
		else printf("2 %d %d\n",x.first,x.second);
		clear();
	}
	return 0;
}
