#include<bits/stdc++.h>
using namespace std;
const int N=2e6+110,M=810;//check!!!
int read(){
	int x=0,f=1;char c=getchar();
	while(c>'9' || c<'0'){if(c=='-')f=-1;c=getchar();}
	while(c>='0' && c<='9'){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
	return x*f;
}
int opt,ans[N<<1],rcd1[N<<1],rcd2[N<<1];//ans
int n,m,k,T,a[N];
int wz[M];
int num[M],dx[M],top[M];
set<int>s;//kong zhan
//duo ce qing kong
void solve(){
	memset(num,0,sizeof(num));
	memset(wz,0,sizeof(wz));
	memset(dx,0,sizeof(dx));
	memset(top,0,sizeof(top));//watch for time
	opt=0;
	n=read(),m=read(),k=read();
	int doczz=0,czz=n;
	for(int i=1;i<=m;i++)a[i]=read();
	for(int i=1;i<n;i++)s.insert(i);
	for(int i=1;i<=m;i++){
		int u=a[i];
		if(!wz[u]){
			if(!s.empty()){
				set<int>::iterator id=s.begin();
				ans[++opt]=1;
				rcd1[opt]=*id;
				if(num[*id]==0){
					num[*id]++;
					top[*id]=u;
					wz[u]=*id;
				}
				else{
					num[*id]++;
					dx[*id]=top[*id];
					top[*id]=u;
					wz[u]=*id;
					s.erase(id);
				}
			}
			else{
				int v=a[i+1];
				if(v==u){ans[++opt]=1;rcd1[opt]=1;ans[++opt]=1;rcd1[opt]=1;i++;}
				else if(top[wz[v]]==v){
					doczz=1;ans[++opt]=1;rcd1[opt]=czz;
					
					s.insert(czz);
					num[czz]=1;
					top[czz]=u;
					wz[u]=czz;
				}
				else{
					ans[++opt]=1;rcd1[opt]=wz[v];
					ans[++opt]=1;rcd1[opt]=czz;
					ans[++opt]=2;rcd1[opt]=czz,rcd2[opt]=wz[v];
					
					dx[wz[v]]=top[wz[v]];
					top[wz[v]]=u;
					wz[v]=0;
					
					i++;
				}
			}
		}
		else{
			if(top[wz[u]]==u){
				ans[++opt]=1;rcd1[opt]=wz[u];
				if(num[wz[u]]==2){
					num[wz[u]]--;
					s.insert(wz[u]);
					top[wz[u]]=dx[wz[u]];
				}
				else{
					num[wz[u]]--;
					if(doczz)czz=wz[u];
					s.erase(czz);
				}
				wz[u]=0;
			}
			else{
				ans[++opt]=1;
				rcd1[opt]=czz;
				ans[++opt]=2;
				rcd1[opt]=wz[u];
				rcd2[opt]=czz;
				
				num[wz[u]]--;
				s.insert(wz[u]);
				
				wz[u]=0;
			}
		}
	}
	printf("%d\n",opt);
	for(int i=1;i<=opt;i++){
		printf("%d ",ans[i]);
		if(ans[i]==1)printf("%d\n",rcd1[i]);
		else printf("%d %d\n",rcd1[i],rcd2[i]);
	}
	return;
}
int main(){
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	T=read();
	while(T--)solve();
	return 0;
}
/*
1
2 6 3
1 2 3 1 2 3
*/