#include<bits/stdc++.h>
#define For(i,a,b) for(int i=(a);i<=(b);++i)
#define Rep(i,a,b) for(int i=(a);i>=(b);--i)
using namespace std;
inline int read() {
	char c=getchar();int x=0;bool f=0;
	for(;!isdigit(c);c=getchar())f^=!(c^45);
	for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+(c^48);
	if(f)x=-x; return x;
}
const int maxn=330,maxm=2000050;
int T,n,m,k,a[maxm];
namespace s3{
	int op[33][3];
	bool its_ok=false;
	deque<int> que[5];
	void dfs(int p,int opid)
	{
		if(p>m)
		{
			For(i,1,n)
				if(!que[i].empty())
					return;
			printf("%d\n",opid-1);
			For(i,1,opid-1)
			{
				if(op[i][0]==1) printf("%d %d\n",op[i][0],op[i][1]);
				else
				{
					if(op[i][1]>op[i][2]) swap(op[i][1],op[i][2]);
					printf("%d %d %d\n",op[i][0],op[i][1],op[i][2]);
				}
			}
			its_ok=true;
			return;
		}
		For(i,1,n)
		{
			op[opid][0]=1,op[opid][1]=i;
			if(!que[i].empty()&&que[i].back()==a[p])
			{
				que[i].pop_back();
				dfs(p+1,opid+1);
				if(its_ok) return;
				que[i].push_back(a[p]);
			}
			else
			{
//				cout<<p<<' '<<opid<<endl;
//				system("pause");
				deque<int> ori[5];
				For(i,1,n) ori[i]=que[i];
				que[i].push_back(a[p]);
				if(que[i].size()==1)
				{
					int now=a[p],lst=i;
					while(1)
					{
						bool flag=false;
						For(j,1,n)
						{
							if(j!=i&&j!=lst&&!que[j].empty()&&que[j].front()==now)
							{
//								cout<<"# "<<lst<<' '<<j<<endl;
								que[lst].pop_front();
								que[j].pop_front();
								op[++opid][0]=2;
								op[opid][1]=lst;
								op[opid][2]=j;
								lst=j;
								if(que[j].empty()) goto out;
								else
								{
									now=que[j].front();
									flag=true;
									break;
								}
							}
						}
						if(!flag) break;
					}
					out:;
				}
				dfs(p+1,opid+1);
				if(its_ok) return;
				For(i,1,n) que[i]=ori[i];
			}
		}
	}
	void solve()
	{
		while(T--)
		{
			n=read(); m=read(); k=read();
			For(i,1,m) a[i]=read();
			its_ok=false;
			dfs(1,1);
		}
	}
}/*
namespace s2{
	int b[660],c[maxm];
	void solve()
	{
		while(T--)
		{
			n=read(); m=read(); k=read();
			For(i,1,m) a[i]=read();
			For(i,1,m)
			{
				if(!b[a[i]]) b[a[i]]=i;
				else
				{
					c[i]=b[a[i]];
					c[b[a[i]]]=i;
				}
			}
			For(i,1,m)
			{
				;
			}
		}
	}
}*/
int main()
{
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	T=read();
//	if(T==3)
	{
		s3::solve();
		return 0;
	}
	return 0;
}