#include<bits/stdc++.h>
using namespace std;
#define ll long long 
const int N=2000005;
const int M=305;
const int MOD=998244353;
int T;
int n,m,k;
int a;
deque<int> st[M];
int sum;
struct node{
	int op,l,r;
}ans[N];
void cl(){
	for(int i=1;i<=n;i++){
		if(st[i].size()==0)continue;
		for(int j=1;j<=n;j++){
			if(st[j].size()==0||i==j)continue;
			if(st[i].front()==st[j].front()){
				ans[++sum].op=2;
				ans[sum].l=i;
				ans[sum].r=j;
				st[i].pop_front();
				st[j].pop_front();
				cl();
			}
		}
	}
}
int main(){
	freopen("meow.in","r",stdin);freopen("meow.out","w",stdout);
	scanf("%d",&T);
	while(T--){
		sum=0;
		scanf("%d%d%d",&n,&m,&k);
		for(int i=1;i<=m;i++){
			scanf("%d",&a);
			bool t=1;
			for(int j=1;j<=n;j++){
				if(st[j].size()>0&&st[j].back()==a){
					ans[++sum].op=1;
					ans[sum].l=j;
					st[j].pop_back();
					t=0;
					break;
				}
			}
			if(!t)continue;
			int op=0;
			for(int j=1;j<=n;j++)if(st[j].size()==0)op++;
			if(op>0){
				int t1=0,t2=0;
				for(int j=1;j<=n;j++){
					if(st[j].size()>0&&st[j].front()==a&&t1==0)t1=j;
					if(st[j].size()==0&&t2==0)t2=j;
					if(t1&&t2)break;
				}
				if(t1){
					st[t1].pop_front();
					ans[++sum].op=1;
					ans[sum].l=t2;
					ans[++sum].op=2;
					ans[sum].l=t1;
					ans[sum].r=t2;
					cl();
				}
				else{
					st[t2].push_back(a);
					ans[++sum].op=1;
					ans[sum].l=t2;
				}
			}
			else{
				st[1].push_back(a);
				ans[++sum].op=1;
				ans[sum].l=1;
			}
		}
		printf("%d\n",sum);
		for(int i=1;i<=sum;i++){
			if(ans[i].op==1) printf("1 %d\n",ans[i].l);
			else printf("2 %d %d\n",ans[i].l,ans[i].r);
		}
	}
	return 0;
}