#include<bits/stdc++.h>
using namespace std;
int t;
int n,m,k;
int card[100010];
struct step{
	int type;
	int u,v;
}s[200010];
struct node{
	int num;
	int head,next;
} a[200010];
int l[310][2];
bool f;
void dfs(int now,int cnt,int sum){
	if(sum==n&&cnt==0){
		for(int i=0;i<now;i++){
			printf("%d ",s[i].type);
			if(s[i].type==1) printf("%d\n",s[i].u);
			else printf("%d %d\n",s[i].u,s[i].v);
		}
		f=1;
	}
	if(f) return ;
	for(int i=1;i<n;i++){
		for(int j=i+1;j<=n;j++){
			if(a[l[i][0]].num==a[l[j][0]].num){
				s[now].type=2,s[now].u=i,s[now].v=j;
				l[i][0]=a[l[i][0]].next;
				l[j][0]=a[l[j][0]].next;
				dfs(now+1,cnt-2,sum+1);
				l[i][0]=a[l[i][0]].head;
				l[j][0]=a[l[j][0]].head;
			}
		}
	}
	for(int i=1;i<=n;i++){
		s[now].type=1,s[now].u=i;
		if(a[l[i][1]].num==card[sum]){
			l[i][1]=a[l[i][1]].head;
			dfs(now+1,cnt-2,sum+1);
			l[i][1]=a[l[i][1]].next;
		}else{
			a[l[i][1]].next=now;
			a[now].num=card[sum];
			a[now].head=l[i][1];
			l[i][1]=now;
			dfs(now+1,cnt,sum+1);
		}
	}
}
int main(){
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	scanf("%d",&t);
	while(t--){
		scanf("%d%d%d",&n,&m,&k);
		for(int i=0;i<m;i++)
			scanf("%d",&card[i]);
		f=0;
		dfs(0,n,0);
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}