#include<iostream>
#include<vector>
using namespace std;
struct cs
{
	int x,y,z;
};
void search(vector<vector<int> >& stk,vector<int>& cd,vector<cs>& vst,bool& end,int& m)
{
	if(vst.size()>2*m||end==1)
	{
		return;
	}
	if(cd.empty()&&vst.size()>=m)
	{
		bool flag=1;
		for(vector<int> i:stk)
		{
			if(!i.empty())
			{
				flag=0;
				break;
			}
		}
		if(flag==1)
		{
			cout<<vst.size()<<endl;
			for(int i=0;i<vst.size();i++)
			{
				cout<<vst[i].x<<' '<<vst[i].y;
				if(vst[i].z!=0)
				{
					cout<<' '<<vst[i].z;
				}
				cout<<endl;
			}
			end=1;
		}
		return;
	}
	int head=cd[0];
	cd.erase(cd.begin());
	for(int i=0;i<stk.size();i++)
	{
		cs tr1;
		tr1.x=1;
		tr1.y=i+1;
		tr1.z=0;
		vst.push_back(tr1);
		if(!stk[i].empty())
		{
			int rear=stk[i].back();
			stk[i].push_back(head);
			if(rear==stk[i].back())
			{
				stk[i].pop_back();
				stk[i].pop_back();
				search(stk,cd,vst,end,m);
				stk[i].push_back(rear);
			}
			else
			{
				search(stk,cd,vst,end,m);
				stk[i].pop_back();
			}
		}
		else
		{
			stk[i].push_back(head);
			search(stk,cd,vst,end,m);
			stk[i].pop_back();
		}
		vst.pop_back();
	}
	cd.insert(cd.begin(),head);
	for(int i=0;i<stk.size();i++)
	{
		if(!stk[i].empty())
		{
			for(int j=i+1;j<stk.size();j++)
			{
				if(!stk[j].empty())
				{
					cs tr2;
					tr2.x=2;
					tr2.y=i+1;
					tr2.z=j+1;
					vst.push_back(tr2);
					int head_i=stk[i][0],head_j=stk[j][0];
					if(head_i==head_j)
					{
						stk[i].erase(stk[i].begin());
						stk[j].erase(stk[j].begin());
						search(stk,cd,vst,end,m);
						stk[i].insert(stk[i].begin(),head_i);
						stk[j].insert(stk[j].begin(),head_j);
					}
					vst.pop_back();
				}
			}
		}
	}
}
int main()
{
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	int T;
	cin>>T;
	for(;T>=1;T--)
	{
		int n,m,k;
		cin>>n>>m>>k;
		vector<int> cd;
		int temp;
		for(int i=1;i<=m;i++)
		{
			cin>>temp;
			cd.push_back(temp);
		}
		vector<vector<int> > stk(n+1);
		vector<cs> vst;
		bool end=0;
		search(stk,cd,vst,end,m);
	}
	return 0;
}