#include<bits/stdc++.h>
#define ll long long
using namespace std;
int const gm=3e6;
int n,m,k;
deque<int> dqu[900];
map<int,int> r;
int ka[gm];
int w[gm];
int ne[gm];
struct nn{
	int a,b,c;
};
/*	if(dqu[i].empty() && flag){
			flag=false;
			if(xiaod[kk]){
				nn t;
				t.a=2;t.b=xiaod[kk];t.c=i;
				tt.push(t);
				dqu[t.b].pop_front();
				if(!dqu[t.b].empty()){
					xiaod[dqu[t.b].front()]=t.b;
				}else{
					xiaot[kk]=0;
				}
				dfs(x+1);
				return false;
			}else{
				xiaod[kk]=i;
			}
		}*/
queue<nn> tt;
void p(nn x){
	if(x.a==1){
		cout<<x.a<<" "<<x.b<<endl;
	}else{
		cout<<x.a<<" "<<x.b<<" "<<x.c<<"\n";
	}
}
bool dfs(int x){
	if(x==m+1){
		bool f=true;
		for(int i=1;i<=n;i++){
			f&=dqu[i].empty();
		}
		if(f){
			cout<<tt.size()<<endl;
			while(!tt.empty()){
				p(tt.front());
				tt.pop();
			}
			exit(0);
		}
		return true;
	}
	int kk=ka[x];
	for(int i=1;i<=n;i++){
		nn t;
		t.a=1;t.b=i;
		tt.push(t);
		if(!dqu[i].empty()){
			if(dqu[i].back()==kk){
				dqu[i].pop_back();
				dfs(x+1);
				dqu[i].push_back(kk);
				return false;
			}
		}else{
			for(int j=1;j<=n;j++){
				if(!dqu[j].empty()){
					if(dqu[j].front()==kk){
						dqu[j].pop_front();
						nn t;
						t.a=2;t.b=i;t.c=j;
						tt.push(t);
						dfs(x+1);
						dqu[j].push_front(kk);
						return false;
					}
				}
			}
		}
		dqu[i].push_back(kk);
		dfs(x+1);
		tt.pop();
		if(!dqu[i].empty())
			dqu[i].pop_back();
	}
	return false;
}
int main(){
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	int t;
	scanf("%d",&t);
	while(t--){
		map<int,bool> xiao;
		scanf("%d%d%d",&n,&m,&k);
		for(int i=1;i<=m;i++){
			scanf("%d",&ka[i]);
			if(w[ka[i]]){
				ne[i]=w[ka[i]];
				ne[w[ka[i]]]=i;
				w[ka[i]]=0;
			}else{
				w[ka[i]]=i;
			}
		}
		dfs(1);	
	}
	return 0;
}