#include<bits/stdc++.h>
using namespace std;
int T,n,m,k,x;
namespace S1{
	queue<int> vc;
	deque<int> d[1005];
	int loc[1005],ans[2000005][3];
	int len;
	void solve(){
		for (; T; T--){
			scanf("%d%d%d",&n,&m,&k);
			for (int i=1; i<n; i++) vc.push(i);
			for (int i=1; i<=m; i++){
				scanf("%d",&x);
				if (!loc[x]){
					int u=vc.front(); vc.pop();
					ans[++len][0]=1,ans[len][1]=u;
					d[u].push_back(x); loc[x]=u;
					if (d[u].size()<2) vc.push(u);
				} else {
					if (d[loc[x]].front()==x){
						ans[++len][0]=1,ans[len][1]=n;
						ans[++len][0]=2,ans[len][1]=loc[x],ans[len][2]=n;
						d[loc[x]].pop_front();
						if (d[loc[x]].size()==1) vc.push(loc[x]);
						loc[x]=0;
					} else {
						ans[++len][0]=1,ans[len][1]=loc[x];
						d[loc[x]].pop_back();
						if (d[loc[x]].size()==1) vc.push(loc[x]);
						loc[x]=0;
					}
				}
			}
			printf("%d\n",len);
			for (int i=1; i<=len; i++){
				printf("%d ",ans[i][0]);
				if (ans[i][0]==1) printf("%d\n",ans[i][1]);
				else printf("%d %d\n",ans[i][1],ans[i][2]);
			}
			len=0;
			for (int i=1; i<=n; i++) while (!d[i].empty()) d[i].pop_back();
			for (int i=1; i<=k; i++) loc[i]=0;
			while (!vc.empty()) vc.pop();
		}
	}
}
int main(){
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	scanf("%d",&T);
	S1::solve();
	return 0;
}
/*
2
2 4 2
1 2 1 2
3 12 4
1 2 1 3 4 1 2 4 3 3 1 3
*/