#include<bits/stdc++.h>
using namespace std;

constexpr int maxn=310,maxm=2000010;

int a[maxm],lst[maxn*2],nxt[maxm];
deque<int>stk[maxn];

int main()
{
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	ios::sync_with_stdio(false),cin.tie(0);
	int T;
	cin>>T;
	while(T--)
	{
		int i,j,n,m,k;
		vector<tuple<int,int,int>>ans;
		cin>>n>>m>>k;
		for(i=1;i<=m;i++) cin>>a[i];
		memset(lst,0,sizeof lst);
		for(i=m;i>=1;i--)
		{
			nxt[i]=lst[a[i]];
			if(nxt[i]) lst[a[i]]=0;
			else lst[a[i]]=i;
		}
		for(i=1;i<=m;i++)
		{
			if(!nxt[i])
			{
				if(i==nxt[stk[lst[a[i]]].back()])
				{
					ans.emplace_back(1,lst[a[i]],0);
					stk[lst[a[i]]].pop_back();
				}
				else if(i==nxt[stk[lst[a[i]]].front()])
				{
					stk[lst[a[i]]].pop_front();
					for(j=n;j>=1;j--)
					{
						if(stk[j].empty())
						{
							ans.emplace_back(1,j,0);
							ans.emplace_back(2,lst[a[i]],j);
							break;
						}
					}
					if(j>m)
					{
						cout<<"fail1\n";
						return 0;
					}
				}
				else
				{
					cout<<"fail2\n";
					return 0;
				}
			}
			else
			{
				auto put=[&](int j)
				{
					ans.emplace_back(1,j,0);
					stk[j].push_back(i);
					lst[a[i]]=j;
				};
				for(j=1;j<=n;j++)
				{
					if(!stk[j].empty()&&nxt[stk[j].back()]>nxt[i])
					{
						put(j);
						break;
					}
				}
				if(j<=n) continue;
				for(j=1;j<=n;j++)
				{
					if(!stk[j].empty())
					{
						if(stk[j].size()>=2&&nxt[stk[j].back()]<nxt[stk[j][stk[j].size()-2]]) continue;
						put(j);
						break;
					}
				}
				if(j<=n) continue;
				for(j=1;j<=n;j++)
				{
					if(stk[j].empty())
					{
						put(j);
						break;
					}
				}
				if(j<=n) continue;
				cout<<"fail3\n";
				return 0;
			}
		}
		for(i=1;i<=n;i++)
		{
			if(!stk[i].empty())
			{
				cout<<"fail4\n";
				return 0;
			}
		}
		cout<<ans.size()<<'\n';
		for(auto it:ans)
		{
			int op,s1,s2;
			tie(op,s1,s2)=it;
			if(op==1) cout<<1<<' '<<s1<<'\n';
			else cout<<2<<' '<<s1<<' '<<s2<<'\n';
		}
	}
	return 0;
}