#include<bits/stdc++.h>
using namespace std;

#define int long long 

inline int read(){
	int x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+(ch-48);ch=getchar();}
	return x*f;
}	

const int maxn=3e2+10;

int t,n,m,k,id;
int vis[maxn][3],up[maxn],idx[maxn];
int cnt[maxn];
int a[2000010];

void clear(){
	for(int i=1;i<=n;i++){
		up[i]=idx[i]=cnt[i]=0;	
	}
}

signed main(){
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	t=read();
	id=t%10;
	while(t--){
		n=read(),m=read(),k=read();
		clear();
		if(id==1){
			int num=0;
			queue <int> q1,q2;
			for(int i=1;i<=n;i++) q1.push(i);
			for(int i=1;i<=m;i++){
				int u=read();
				if(!up[u]){
					if(num<n-1){
						int v=q1.front();q1.pop();
						idx[u]=v,up[u]=1;vis[v][++cnt[v]]=u;
						num++;
						q2.push(v);
						printf("1 %lld\n",v);
					}
					else{
						int v;
						while(!q2.empty()&&cnt[q2.front()]!=1) q2.pop();
						v=q2.front();
						idx[u]=v;up[u]=2;vis[v][++cnt[v]]=u;
						printf("1 %lld\n",v);
					}
				}
				else{
					if(up[u]==1){
						int pre=idx[u];
						int v=q1.front();q1.pop();
						printf("1 %lld\n",v);
						printf("2 %lld %lld\n",pre,v);q1.push(v);
						up[u]=0;
						if(cnt[pre]==2){
							up[vis[pre][2]]=1;q2.push(pre);	
						}
						else q1.push(pre),num--;
						cnt[pre]--;
					}
					else{
						int pre=idx[u];
						printf("1 %lld\n",pre);
						up[u]=0;
						if(cnt[pre]==2){
							q2.push(pre);	
						}
						else q1.push(pre),num--;
						cnt[pre]--;
					}
				}
			}
		}
		else{
			for(int i=1;i<=m;i++) cout<<"1 1"<<endl;
		}
	}
	return 0;
}