#include<bits/stdc++.h>
using namespace std;
long long T,a,b,c,d[2000001],cn,ed,nxt[2000001],id[100001],nxt1[2000001],laa[2000001],v[2000001];
vector<long long> qu[10001];
struct p{long long op,q,w;}an[4000001];
vector<long long> qu1[10001],tmp,tmp1;
void check()
{
	long long cnn=0;
	for(int i=1;i<=cn;i++)
	{
		if(an[i].op==1)
		{
			++cnn;
			if(qu1[an[i].q].size()>0&&qu1[an[i].q][qu1[an[i].q].size()-1]==d[cnn]) qu1[an[i].q].pop_back();
			else qu1[an[i].q].push_back(d[cnn]);
		}
		else
		{
			if(cnn==0)
			{
				printf("WA1");
				while(1);
			}
			if(qu1[an[i].q].size()==0||qu1[an[i].w].size()==0||an[i].q==an[i].w)
			{
				printf("WA2");
				while(1);
			}
			if(qu1[an[i].q][0]==qu1[an[i].w][0])
			{
				for(int j=0;j<qu1[an[i].q].size()-1;j++) qu1[an[i].q][j]=qu1[an[i].q][j+1];
				for(int j=0;j<qu1[an[i].w].size()-1;j++) qu1[an[i].w][j]=qu1[an[i].w][j+1];
				qu1[an[i].q].pop_back(),qu1[an[i].w].pop_back();
			}
		}
	}
	if(cnn<b)
	{
		printf("WA3");
		while(1);
	}
	for(int i=1;i<=a;i++)
	{
		if(qu1[i].size())
		{
			printf("WA4");
			while(1);
		}
	}
	printf("AC\n");
}
void work()
{
	scanf("%lld%lld%lld",&a,&b,&c);cn=0;
	for(int i=1;i<=b;i++) scanf("%lld",&d[i]);
	for(int i=1;i<=a;i++) laa[i]=0,v[i]=0;
	for(int i=1;i<=b;i++)
	{
		long long tt=(d[i]+1)/2;
		nxt1[laa[tt]]=i,nxt1[i]=0,laa[tt]=i;
	}
	for(int i=1;i<=a;i++) qu[i].clear(),qu1[i].clear(),id[i]=0;
	if(c==a*2-2)
	{
		for(int i=1;i<=b;i++)
		{
			long long tt=(d[i]+1)/2;
			if(qu[tt].empty())
			{
				qu[tt].push_back(d[i]);
				an[++cn]=p{1,tt,0};
			}
			else
			{
				if(qu[tt].size()==1)
				{
					if(qu[tt][0]==d[i]) qu[tt].clear();
					else qu[tt].push_back(d[i]);an[++cn]=p{1,tt,0};
				}
				else
				{
					if(qu[tt][0]==d[i])
					{
						qu[tt][0]=qu[tt][1],qu[tt].pop_back();
						an[++cn]=p{1,a,0};
						an[++cn]=p{2,tt,a};
					}
					else
					{
						qu[tt].pop_back();
						an[++cn]=p{1,tt,0};
					}
				}
			}
		}
	}
	else
	{
		if(a==1)
		{
			for(int i=1;i<=b;i++)
			{
				an[++cn]=p{1,1,0};
			}
		}
		else
		{
			tmp.clear();ed=a;
			for(int i=1;i<=a-1;i++) tmp.push_back(i),tmp.push_back(i);
			bool fl=0;
			for(int i=1;i<=b;i++)
			{
				if(id[d[i]])
				{
					if(qu[id[d[i]]][0]==d[i]&&qu[id[d[i]]].size()>1)
					{
						an[++cn]=p{1,ed,0};
						an[++cn]=p{2,id[d[i]],ed};
						for(int j=0;j<qu[id[d[i]]].size()-1;j++) qu[id[d[i]]][j]=qu[id[d[i]]][j+1];qu[id[d[i]]].pop_back();
						tmp.push_back(id[d[i]]);id[d[i]]=0;
					}
					else
					{
						if(fl==1&&qu[id[d[i]]].size()==1)
						{
							for(int j=0;j<2-qu[ed].size();j++) tmp.push_back(ed);
							ed=id[d[i]];
						}
						an[++cn]=p{1,id[d[i]],0};qu[id[d[i]]].pop_back();
						tmp.push_back(id[d[i]]);id[d[i]]=0;
					}
				}
				else
				{
					if(tmp.size())
					{
						qu[tmp.back()].push_back(d[i]);id[d[i]]=tmp.back();
						an[++cn]=p{1,tmp.back(),0};tmp.pop_back();
					}
					else
					{
						long long tt=d[i+1];
						if(tt==d[i])
						{
							an[++cn]=p{1,a,0},an[++cn]=p{1,a,0};
							i++;
						}
						else
						{
							bool fll=0;
							for(int j=i+1;j<nxt1[i];j++)
							{
								if(qu[id[d[j]]][0]==d[j]&&!v[id[d[j]]])
								{
									an[++cn]=p{1,id[d[j]],0};
									fll=1;qu[id[d[j]]].push_back(d[i]);id[d[i]]=id[d[j]];
									break;
								}
								if(qu[id[d[j]]][0]==d[j]&&v[id[d[j]]]) break;
								if(qu[id[d[j]]][1]==d[j]) v[id[d[j]]]=1,tmp1.push_back(id[d[j]]);
							}
							for(int j=0;j<tmp1.size();j++) v[tmp1[j]]=0;tmp1.clear();
							if(!fll)
							{
								an[++cn]=p{1,ed,1};qu[ed].push_back(d[i]);
								id[d[i]]=ed;fl=1;
							}
						}
					}
				}
			}
		}
	}
//	check();
	printf("%lld\n",cn);
	for(int i=1;i<=cn;i++)
	{
		if(an[i].op==2)
		{
			printf("%lld %lld %lld\n",an[i].op,an[i].q,an[i].w);
		}
		else printf("%lld %lld\n",an[i].op,an[i].q);
	}
}
int main()
{
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	scanf("%lld",&T);
	for(int ii=1;ii<=T;ii++) work();
	return 0;
}