#include<bits/stdc++.h>
#define For(i,j,k) for(int i=(j);i<=(k);i++)
#define foR(i,j,k) for(int i=(j);i>=(k);i--)
#define mst(a,b) memset(a,b,sizeof(a)); 
#define vi vector<int>
#define mkp make_pair
#define pii pair<int,int>
#define SZ(x) ((int)x.size())
#define pb push_back
using namespace std;
int read() { int x; scanf("%d",&x); return x; }
const int P=998244353; 
int add(int x,int y) { return (x+y)%P; }
int sub(int x,int y) { return (x-y+P)%P; }
int mul(int x,int y) { return 1ull*x*y%P; }
void addmod(int &x,int y) { x=add(x,y); }
void submod(int &x,int y) { x=sub(x,y); }
void mulmod(int &x,int y) { x=mul(x,y); }
void fprint(int *a,int n) {For(i,1,n) fprintf(stderr,"%d%c",a[i]," \n"[i==n]); }
const int MN=2e6+5; 
int n,m,t,a[MN],ID1[605],ID2[605]; vector<pii>ans; 
set<int>ept,ptr; 
deque<int>st[305]; vi pos[605]; 
void ins(int x,int y) {
//	cerr<<"INS "<<x<<' '<<y<<endl;
	if(x!=n) {
		if(!SZ(st[x])) ID1[y]=x,st[x].push_back(y),ept.erase(x),ptr.insert(x); 
		else if(SZ(st[x])) {
			ID2[st[x].back()]=0; 
			if(st[x].back()!=y) {
				st[x].push_back(y),ID2[y]=x; 
			}
			else {
				st[x].pop_back(); 
				if(SZ(st[x])) ID2[st[x].back()]=x; 
				else ID1[y]=0,ptr.erase(x),ept.insert(x); 
			}
		}
	} else {
		if(!SZ(st[x])) {
			st[x].push_back(y);
		} else {
			if(st[x].back()!=y) st[x].push_back(y);
			else st[x].pop_back(); 
		}
	}
	ans.pb(mkp(x,-1)); 
}
void pp(int x,int y);
void fall(int x) {
//	assert(SZ(st[x])>=1);
	if(x==n) return st[x].pop_front(),void(); 
	ID1[st[x].front()]=0; st[x].pop_front(); 
	if(!SZ(st[x])) return ept.insert(x),ptr.erase(x),void();
	int v=st[x].front(); 
//	cerr<<x<<' '<<SZ(st[x])<<' '<<v<<endl;
	if(SZ(st[x])==1) ID2[v]=0; 
	if(!ID1[v]) ID1[v]=x; 
	else {
		int tmp=ID1[v]; ID1[v]=0; 
		pp(x,tmp); 
	}

}
void pp(int x,int y) {
//	cerr<<"PP "<<x<<' '<<y<<endl;
	fall(x),fall(y); 
	ans.pb(mkp(x,y));
}
void works() {
	n=read(),m=read(),t=read(); 
	ans.clear(),ept.clear(),ptr.clear(); 
	mst(ID1,0); mst(ID2,0); 
	For(i,1,n*2) pos[i].clear(); 
	For(i,1,m) a[i]=read(); 
	For(i,1,n-1) ept.insert(i);
	if(n==1) {
		For(i,1,m) ins(1,a[i]);
	} if(n==2) {
		For(i,1,m) {
			if(SZ(st[1])&&a[i]==st[1].back()) ins(1,a[i]);  
			else if(SZ(st[2])&&a[i]==st[2].back()) ins(2,a[i]);  
			else if(!SZ(st[1])) ins(1,a[i]); 
			else if(!SZ(st[2])) ins(2,a[i]); 
			else if(a[i+1]==st[2].back()) ins(1,a[i]); 
			else if(a[i+1]==st[1].back()) ins(2,a[i]);
			else ins(1,a[i]); 
			while(SZ(st[1])&&SZ(st[2])&&st[1].front()==st[2].front()) {
				ans.pb(mkp(1,2)); 
				st[1].pop_front(),st[2].pop_front(); 
			}
		}
	} else {
	
		For(i,1,m) {
			if(!ID1[a[i]]) {
				if(SZ(ept)) {
					int j=*ept.begin();
					ins(j,a[i]);
				}	
				else {
					if(ID2[a[i]]) { ins(ID2[a[i]],a[i]); continue; }
					int fl=0; 
					for(auto it:ptr) {
						if(SZ(st[it])==1) { ins(it,a[i]); fl=1; break; }
					}
					if(fl) continue; 
					for(auto it:ptr) {
						if(st[it].back()!=a[i+1]) { ins(it,a[i]); fl=1; break; }
					}
				}
			} else {
				ins(n,a[i]); pp(n,ID1[a[i]]); 
			}
		}
	}
	printf("%d\n",SZ(ans)); int dcnt=0; 
	for(auto it:ans) {
		if(it.second==-1) printf("%d %d\n",1,it.first),dcnt++; 
		else printf("%d %d %d\n",2,it.first,it.second); 
	}
}
int main() {
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	int T=read();
	while(T--) {
		works(); 
	}
	return 0; 
}
