#include<bits/stdc++.h>
using namespace std;
const int N=305,M=2e6+5;
int n,m,k;
int a[M],c[M];
int koishi[M];
int b[N][4];
int vis[M],vis2[M];
set<int> st0,st1,st2;
set<int>::iterator it;
int add(int x) {
	if(vis2[x]) {
//		cerr<<"a";
		int t=vis2[x];
		vis2[x]=0;
		b[t][2]=0;
		st2.erase(t);
		st1.insert(t);
		return t;
	}
	if(vis[x]) {
		int t=vis[x];
		if(!b[t][2]) {
//		cerr<<"b";
//		cerr<<t<<endl;
			vis[x]=0;
			b[t][1]=0;
			st1.erase(t);
			st0.insert(t);
			return t;
		}
	}
	
	if(vis[x]&&st0.size()) {
//		cerr<<"c";
		int t=vis[x];
		vis[x]=0;
		
		b[t][1]=b[t][2];
		b[t][2]=0;
		st2.erase(t);
		st1.insert(t);
		
		vis[b[t][1]]=t;
		vis2[b[t][1]]=0;
		
		vis[x]=vis2[x]=0;
		
		int t2=*st0.begin();
		return t2;
	}
	if(!vis[x]) {
		if(st1.size()) {
//		cerr<<"d";
			int t=*st1.begin();
			b[t][2]=x;
			st1.erase(t);
			st2.insert(t);
			
			vis2[x]=t;
			return t;
		}
		if(st0.size()) {
//		cerr<<"e";
			int t=*st0.begin();
			b[t][1]=x;
			st0.erase(t);
			st1.insert(t);
			
			vis[x]=t;
			return t;
		}
		return -1;
	}
	
	int t=vis[x];
	int t2;
	for(it=st1.begin();it!=st1.end();it++) {
		if(c[koishi[b[t][2]]]>c[koishi[x]]) break;
	}
	if(it==st1.end()) it--;
	
	t2=*it;
	b[t][1]=b[t][2];
	b[t][2]=b[t2][1];
	b[t2][1]=0;
//	cerr<<x<<" "<<t<<" "<<t2<<endl;
//	cerr<<b[t][1]<<" "<<b[t][2]<<endl;
	
	st1.erase(t2);
	st0.insert(t2);
	
	vis[b[t][1]]=t;
	vis2[b[t][1]]=0;
	
	vis2[b[t][2]]=t;
	vis[b[t][2]]=0;
	
	vis[x]=vis2[x]=0;
	
	c[koishi[b[t][2]]]=t;
//	cerr<<b[t][2]<<" : "<<koishi[b[t][2]]<<" -> "<<t<<endl;
	return t2;
}
//void Print() {
//	for(int i=1;i<=n;i++) {
//		cerr<<i<<" : \n";
//		cerr<<b[i][1]<<" "<<b[i][2]<<endl;
//		cerr<<vis[b[i][1]]<<" "<<vis2[b[i][2]]<<endl;
//		cerr<<vis2[b[i][1]]<<" "<<vis[b[i][2]]<<endl;
//		cerr<<endl;
//	}
//	return;
//}
vector<pair<int,int> > ans;
vector<int> v[N];
int main() {
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	int T;
	scanf("%d",&T);
	while(T--) {
		scanf("%d%d%d",&n,&m,&k);
		for(int i=1;i<=m;i++) scanf("%d",&a[i]),c[i]=0;
		for(int i=1;i<=k;i++) vis[i]=vis2[i]=b[i][1]=b[i][2]=0;
		st0.clear();
		st1.clear();
		st2.clear();
		for(int i=1;i<=n;i++) st0.insert(i);
		
		for(int i=1;i<=k;i++) koishi[i]=0;
		
		for(int i=1;i<=m;i++) {
//			cerr<<"=================\n";
//			cerr<<i<<" "<<a[i]<<endl;
			c[i]=add(a[i]);
			koishi[a[i]]=i;
//			Print();
		}
		ans.clear();
		for(int i=1;i<=n;i++) vis[i]=0,v[i].clear();
//		for(int i=1;i<=m;i++) cerr<<c[i]<<" ";
//		cerr<<endl;
		
		for(int i=1;i<=m;i++) {
			int x=a[i];
			int p=c[i];
			ans.push_back(make_pair(p,0));
			int sz=v[p].size();
			if(sz>=1&&v[p][sz-1]==x) {
				v[p].pop_back();
				continue;
			}
			
			if(vis[x]) {
				ans.push_back(make_pair(vis[x],p));
				vis[x]=0;
			}
			else {
				v[p].push_back(x);
				vis[x]=p;
			}
		}
		int sz=ans.size();
		printf("%d\n",sz);
		for(int i=0;i<sz;i++) {
			if(ans[i].second) {
				printf("2 %d %d\n",ans[i].first,ans[i].second);
			}
			else printf("1 %d\n",ans[i].first);
		}
	}
	return 0;
}
/*
5
3 10 5
1 2 3 4 5 2 3 4 5 1
3 10 5
1 2 3 4 5 2 3 4 5 1
*/
/*
!!!
*/
