#include<bits/stdc++.h>
using namespace std;
const int N=305,M=2000005;
int t,n,m,num[21],pos[N<<1],a[M],nex[M],l[N],r[N],ans[M];
pair<int,int>Ans[M];vector<int>v[N];
set<pair<int,int> >S1,S2;set<pair<int,int> >::iterator it;
int read(){
	int x=0;char c=getchar();
	while ((c<'0')||(c>'9'))c=getchar();
	while ((c>='0')&&(c<='9'))x=x*10+c-'0',c=getchar();
	return x;
}
void write(int x,char c='\0'){
	while (x)num[++num[0]]=x%10,x/=10;
	if (!num[0])putchar('0');
	while (num[0])putchar(num[num[0]--]+'0');
	putchar(c);
}
bool check(int k){
	return ((l[k]>=r[k])||(v[k][r[k]-1]<v[k][r[k]]));
}
void addS(int k){
	S1.insert(make_pair((l[k]<=r[k] ? v[k][l[k]] : 0),k));
	S2.insert(make_pair((check(k) ? m+1 : v[k][r[k]]),k));
}
void delS(int k){
	S1.erase(make_pair((l[k]<=r[k] ? v[k][l[k]] : 0),k));
	S2.erase(make_pair((check(k) ? m+1 : v[k][r[k]]),k));
}
void add(int x){
	int k=1;
	if (n>1){
		it=--S2.end();
		if ((*it).second==(*S1.begin()).second)it--;
		if (nex[x]<(*it).first)k=(*it).second;
		else k=(*S1.begin()).second;
	}
	delS(k);
	pos[a[x]]=ans[x]=k;
	r[k]++,v[k].push_back(nex[x]);
	addS(k);
}
void del(int x){
	int k=pos[a[x]];
	delS(k);
	if (v[k][r[k]]==x){
		r[k]--,v[k].pop_back();
		ans[x]=k,Ans[x]=make_pair(0,0);
	}
	else{
		l[k]++;
		ans[x]=(*S1.begin()).second;
		Ans[x]=make_pair(k,ans[x]);
	}
	addS(k);
}
bool Check(){
	for(int i=1;i<=n;i++){
		l[i]=0,r[i]=-1;
		v[i].clear();
	}
	for(int i=1;i<=m;i++){
		if ((ans[i]<1)||(ans[i]>n))return 0;
		int k=ans[i];
		if ((l[k]<=r[k])&&(v[k][r[k]]==a[i]))r[k]--,v[k].pop_back();
		else r[k]++,v[k].push_back(a[i]);
		if ((nex[i]>m)&&(Ans[i].first)){
			int k1=Ans[i].first,k2=Ans[i].second;
			if ((k1<1)||(k1>n)||(k2<1)||(k2>n))return 0;
			if ((l[k1]>r[k1])||(l[k2]>r[k2])||(v[k1][l[k1]]!=v[k2][l[k2]]))return 0;
			l[k1]++,l[k2]++;
		}
	}
	for(int i=1;i<=n;i++)
		if (l[i]<=r[i])return 0;
	return 1;
}
int main(){
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	t=read();
	while (t--){
		n=read(),m=read(),read();
		for(int i=1;i<=m;i++)a[i]=read();
		for(int i=1;i<(n<<1);i++)pos[i]=m+1;
		for(int i=m;i;i--){
			nex[i]=pos[a[i]];
			if (pos[a[i]]>m)pos[a[i]]=i;
			else pos[a[i]]=m+1;
		}
		S1.clear(),S2.clear();
		for(int i=1;i<=n;i++){
			l[i]=0,r[i]=-1;
			v[i].clear(),addS(i);
		}
		for(int i=1;i<=m;i++){
			if (nex[i]>m)del(i);
			else add(i);
		}
		int s=m;
		for(int i=1;i<=m;i++)
			if ((nex[i]>m)&&(Ans[i].first))s++;
		//assert(Check());
		write(s,'\n');
		for(int i=1;i<=m;i++){
			write(1,' '),write(ans[i],'\n');
			if ((nex[i]>m)&&(Ans[i].first))
				write(2,' '),write(Ans[i].first,' '),write(Ans[i].second,'\n');
		}
	}
	return 0;
}
