#include<bits/stdc++.h>
using namespace std;
int T,n,m,k,a[2000005],tim[2000005];
int bel[1000],pos[1000];
vector<pair<int,int> >sta[1005];
struct opts{
	int op,x,y;
};
vector<opts>vs;
vector<int>emptyStack;
set<pair<int,int> >oneStack;
set<int>goodStack;
inline void update(int id){
	if(sta[id].empty())emptyStack.emplace_back(id);
	else if(sta[id].size()==1)oneStack.emplace(sta[id][0].second,id);
	else if(sta[id].size()==2){
		if(sta[id][0].second<sta[id][1].second)
			goodStack.insert(id);
	}
}
inline void insertToEmpty(int i){
	int id=emptyStack.back();
	emptyStack.pop_back();
	sta[id].emplace_back(a[i],tim[i]);
	vs.emplace_back((opts){1,id,0});
	update(id);
	bel[a[i]]=id;
}
inline void insertToOne(int i){
	assert(oneStack.size());
	int id=oneStack.rbegin()->second;
	oneStack.erase(--oneStack.end());
	sta[id].emplace_back(a[i],tim[i]);
	vs.emplace_back((opts){1,id,0});
	update(id);
	bel[a[i]]=id;
}
inline void insertToGood(int i){
	int id=*goodStack.begin();
	goodStack.erase(id);
	sta[id].emplace_back(a[i],tim[i]);
	vs.emplace_back((opts){1,id,0});
	update(id);
	bel[a[i]]=id;
}
int main(){
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	for(cin>>T;T--;){
		cin>>n>>m>>k;
		for(int i=1;i<=m;++i){
			cin>>a[i];
			if(!pos[a[i]])pos[a[i]]=i;
			else{
				tim[pos[a[i]]]=i;
				pos[a[i]]=0;
			}
		}
		int nw=0;
		emptyStack.clear();
		goodStack.clear();
		oneStack.clear();
		for(int i=1;i<=n;++i)emptyStack.emplace_back(i);
		for(int i=1;i<=m;++i)if(bel[a[i]]){
			int id=bel[a[i]];
			bel[a[i]]=0;
			if(sta[id].size()==1){
				vs.emplace_back((opts){1,id,0});
				oneStack.erase(make_pair(i,id));
				sta[id].pop_back();
			}else if(sta[id].size()==2){
				goodStack.erase(id);
				if(sta[id][1].first==a[i]){
					vs.emplace_back((opts){1,id,0});
					sta[id].pop_back();
				}else{
					assert(emptyStack.size());
					int tmp=emptyStack[0];
					vs.emplace_back((opts){1,tmp,0});
					vs.emplace_back((opts){2,tmp,id});
					sta[id].erase(sta[id].begin());
				}
			}else if(sta[id].size()==3){
				if(sta[id][2].first==a[i]){
					vs.emplace_back((opts){1,id,0});
					sta[id].pop_back();
				}else{
					assert(emptyStack.size());
					int tmp=emptyStack[0];
					vs.emplace_back((opts){1,tmp,0});
					vs.emplace_back((opts){2,tmp,id});
					sta[id].erase(sta[id].begin());
				}
			}
			update(id);
			--nw;
		}else{
			if(nw<2*n-2){
				if(emptyStack.size()>1){
					insertToEmpty(i);
				}else{
					insertToOne(i);
				}
			}else{
				if(emptyStack.size()){
					if(oneStack.size()){
						insertToOne(i);
					}else if(goodStack.size()){
						insertToGood(i);
					}else{
						insertToEmpty(i);
					}
				}else{
					assert(oneStack.size());
					insertToOne(i);
				}
			}
			++nw;
		}
		cout<<vs.size()<<'\n';
		for(opts it:vs)
			if(it.op==1)
				cout<<"1 "<<it.x<<'\n';
			else cout<<"2 "<<it.x<<' '<<it.y<<'\n';
		vs.clear();
	}
	return 0;
}
