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

const int M=2e6+5;

int T,n,m,k;
int a[M],op[M<<1][3];

namespace Subtask1
{
	const int N=700;
	
	int tot;
	int vis[N],cnt[N],st[N][2];//0 ding 1 di
	
	void solve()
	{
		while(T--)
		{	
			memset(cnt,0,sizeof(cnt));
			memset(vis,0,sizeof(vis));
			memset(st,0,sizeof(st));
			
			tot=0;
			scanf("%d %d %d",&n,&m,&k);
			for(int i=1;i<=m;i++)
				scanf("%d",&a[i]);
			
			int kong=1;
			for(int i=1;i<=m;i++)
			{
				if(vis[a[i]])
				{
					int id=vis[a[i]];
					if(st[id][0]==a[i])
					{
						tot++;
						op[tot][0]=1,op[tot][1]=id;
//						printf("1 %d\n",id);
						vis[a[i]]=st[id][0]=0;
						kong=id;
						cnt[id]--;
					}
					else if(st[id][1]==a[i])
					{
						tot++;
						op[tot][0]=1,op[tot][1]=n;
//						printf("1 %d\n",n);
						tot++;
						op[tot][0]=2,op[tot][1]=id,op[tot][2]=n;
//						printf("2 %d %d\n",id,n);
						st[id][1]=st[id][0];
						vis[a[i]]=st[id][0]=0;
						kong=id;
						cnt[id]--;
					}
				}
				else 
				{
					tot++;
					st[kong][1-cnt[kong]]=a[i];
					vis[a[i]]=kong;
					cnt[kong]++;
					op[tot][0]=1,op[tot][1]=kong;
					kong=kong%(n-1)+1;
				}
			}
			
			printf("%d\n",tot);
			for(int i=1;i<=tot;i++)
				if(op[i][0]==1)
					printf("%d %d\n",op[i][0],op[i][1]);
				else 
					printf("%d %d %d\n",op[i][0],op[i][1],op[i][2]);
		}
	}
} 

namespace Subtask2
{
	bool vis[10];
	
	void solve()
	{
		while(T--)
		{
			int tot=0;
			memset(vis,0,sizeof(vis));
			
			scanf("%d %d %d",&n,&m,&k);
			for(int i=1;i<=m;i++)
				scanf("%d",&a[i]);
			for(int i=1;i<=m;i++)
			{
				if(!vis[a[i]])
				{
					tot++;
					op[tot][0]=1,op[tot][1]=1;
					vis[a[i]]=true;
				}
				else 
				{
					tot++;
					op[tot][0]=1,op[tot][1]=2;
					tot++;
					op[tot][0]=2,op[tot][1]=1,op[tot][2]=2;
					vis[a[i]]=false;
				}
			}
			printf("%d\n",tot);
			for(int i=1;i<=tot;i++)
				if(op[i][0]==1)
					printf("%d %d\n",op[i][0],op[i][1]);
				else 
					printf("%d %d %d\n",op[i][0],op[i][1],op[i][2]);
			
		}
	}
}

namespace Subtask3
{
	const int N=700;
	
	int tot;
	int vis[N],cnt[4];//0 ding 1 di
	deque<int> q[4];
	
	void solve()
	{
		while(T--)
		{	
			memset(cnt,0,sizeof(cnt));
			memset(vis,0,sizeof(vis));
			
			tot=0;
			scanf("%d %d %d",&n,&m,&k);
			for(int i=1;i<=m;i++)
				scanf("%d",&a[i]);
			
			for(int i=1;i<=m;i++)
			{
				if(!vis[a[i]])
				{
					int id,idnow;
					bool ok=0;
					for(int j=1;j<=2;j++)
					{
						if(!q[j].empty()&&a[i+1]!=q[j].front())idnow=j;
						if(cnt[j]!=2)
						{
							id=j,ok=true;
							break;
						}
					}
					if(ok)
					{
						tot++;
						op[tot][0]=1,op[tot][1]=id;
						cnt[id]++;
						q[id].push_front(a[i]);
						vis[a[i]]=true;
					}
					else 
					{
						tot++;
						op[tot][0]=1,op[tot][1]=idnow;
						cnt[idnow]++;
						q[idnow].push_front(a[i]);
						vis[a[i]]=true;
					}
				}
				else 
				{
					for(int j=1;j<=2;j++)
					{
						if(!q[j].empty()&&q[j].front()==a[i])
						{
							vis[a[i]]=false;
							q[j].pop_front();
							cnt[j]--;
							
							tot++;
							op[tot][0]=1,op[tot][1]=j;
							break;
						}
						if(!q[j].empty()&&q[j].back()==a[i])
						{
							vis[a[i]]=false;
							q[j].pop_back();
							cnt[j]--;
							
							tot++;
							op[tot][0]=1,op[tot][1]=3;
							tot++;
							op[tot][0]=2,op[tot][1]=j,op[tot][2]=3;
							break;
						}
					}
				}
			}
			
			printf("%d\n",tot);
			for(int i=1;i<=tot;i++)
				if(op[i][0]==1)
					printf("%d %d\n",op[i][0],op[i][1]);
				else 
					printf("%d %d %d\n",op[i][0],op[i][1],op[i][2]);
		}
	}
} 

int main()
{
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	
	scanf("%d",&T);
	if(T==1001)Subtask1::solve();
	else if(T==1002)Subtask2::solve();
	else Subtask3::solve();
	
}
/*
3
3 10 5
1 2 3 4 5 4 1 3 5 2

*/