#include<bits/stdc++.h>
using namespace std;
#define N 2333
#define M 2000200
typedef long long ll;
int n,m,K,a[M],p[N],nxt[M];
int tot,opt[M<<1],ansx[M<<1],ansy[M<<1];
deque<int> q[N];
inline void Add(int x){
	//cerr<<" Add: "<<x<<endl;
	++tot;opt[tot]=1,ansx[tot]=x;
}
inline void Del(int x,int y){
	//cerr<<" Del: "<<x<<" "<<y<<endl;
	++tot;opt[tot]=2,ansx[tot]=x,ansy[tot]=y;
}
void Solve(){
	cin>>n>>m>>K;
	for(int i=1;i<=m;++i){
		cin>>a[i];
		nxt[i]=0;
	}
	for(int i=1;i<=n;++i){
		q[i].clear();
	}
	for(int i=1;i<=K;++i){
		p[i]=0;
	}
	tot=0;
	vector<int> tmp(K+1);
	for(int i=m;i>=1;--i){
		if(tmp[a[i]]){
			nxt[i]=tmp[a[i]];
			tmp[a[i]]=0;
		}
		else{
			tmp[a[i]]=i;
		}
	}
	unordered_set<int> S;
	for(int i=1;i<=n;++i){
		S.insert(i);
	}
	for(int i=1;i<=m;++i){
		int u=a[i];
		//cerr<<" ?? "<<u<<" "<<nxt[i]<<endl;
		if(!nxt[i]){
			int x=p[u];
			p[u]=0;
			if(a[q[x].back()]==u){
				Add(x);
				q[x].pop_back();
			}
			else{
				assert(!S.empty());
				assert(a[q[x].front()]==u);
				int y=*S.begin();
				assert(y<=n);
				Add(y);
				Del(x,y);
				q[x].pop_front();
			}
			if(q[x].empty()){
				S.insert(x);
			}
		}
		else{
			bool ok=false;
			for(int j=1;j<=n;++j){
				if(q[j].empty())continue;
				if(nxt[i]<nxt[q[j].back()]){
					Add(j),p[u]=j,q[j].push_back(i);
					ok=true;
					break;
				}
			}
			if(!ok){
				int pos=0;
				for(int j=1;j<=n;++j){
					if(q[j].empty())continue;
					if(nxt[i]>nxt[q[j].back()]&&
					(q[j].size()==1||nxt[q[j].back()]>nxt[(*-- --q[j].end())])){
						if(!pos||nxt[q[j].front()]>nxt[q[pos].front()]){
							pos=j;
						}
					}
				}
				if(pos){
					assert(pos<=n);
					Add(pos),p[u]=pos,q[pos].push_back(i);
					ok=true;
				}
			}
			if(!ok){
				assert(!S.empty());
				int x=*S.begin();
				S.erase(x);
				assert(x<=n);
				Add(x);
				q[x].push_back(i);
				p[u]=x;
			}
		}
	}
	cout<<tot<<'\n';
	for(int i=1;i<=tot;++i){
		if(opt[i]==1){
			cout<<1<<' '<<ansx[i]<<'\n';
		}
		else{
			cout<<2<<' '<<ansx[i]<<' '<<ansy[i]<<'\n';
		}
	}
}
int main(){
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0);
	int T;
	cin>>T;
	while(T--){
		Solve();
	}
	return 0;
}
