#include<bits/stdc++.h>
#define fi first
#define se second
#define pb push_back
#define pii pair<int,int>
#define mkp make_pair
#define N 305
#define K 605
#define M 2000005
#define INF 0x3f3f3f3f
using namespace std;
int n,m,k,pos[K],a[M],nxt[M],top[N],in[N],id[N];
struct Y{int op,x,y;};vector<Y>ans;
pii stk[N][4];
struct Pat{
	int vis[N];
	queue<int>q;
	void clear(){
		while(!q.empty())q.pop();
		memset(vis,0,sizeof(vis));
	}
	void insert(int nw){
		q.push(nw);vis[nw]=0;
	}
	void del(int nw){
		vis[nw]=1;
	}
	int top(){
		while(vis[q.front()])q.pop();
		return q.front();
	}
	int check(){
		if(q.empty())return 0;
		int nw=q.front();q.pop();
		while(vis[q.front()])q.pop();
		q.push(nw);
		if(q.size()==1)return 0;
			return 1;
	}
	int empty(){while(vis[q.front()])q.pop();return q.empty();}
}empty;
void solve(){
	scanf("%d %d %d",&n,&m,&k);empty.clear();ans.clear();
	memset(in,0,sizeof(in));
	memset(top,0,sizeof(top));
	memset(id,0,sizeof(id));
	for(int i=1;i<=k;i++)pos[i]=INF;
	for(int i=1;i<=m;i++)scanf("%d",&a[i]);
	for(int i=m;i>=1;i--)nxt[i]=pos[a[i]],pos[a[i]]=i;
	int tot=0,num=0;
	for(int i=1;i<=n;i++)empty.insert(i);
	for(int i=1;i<=m;i++){
		if(in[a[i]]){
			int nw=id[a[i]];
			if(in[a[i]]==1||top[nw]==1){
				//printf("1 %d\n",nw);
				ans.pb(Y{1,nw,0});
				top[nw]--;in[a[i]]=0,id[a[i]]=0;
				if(!top[nw])empty.insert(nw);
			}
				else{
					//printf("1 %d\n",empty.top());
					int qaq=empty.top();
					ans.pb(Y{1,qaq,0});
					ans.pb(Y{2,nw,qaq});
					//printf("2 %d %d\n",nw,empty.top());
					top[nw]--;for(int i=1;i<=top[nw];i++)stk[nw][i]=stk[nw][i+1];
					if(top[nw])in[stk[nw][1].fi]=2;
					if(!top[nw])empty.insert(nw);
				}
			continue;
		}
		if(num<=2*n-2||empty.empty()){
			int flag=0;pii mx=mkp(0,0);
			for(int j=1;j<=n;j++)
				if(top[j]==1){
					if(stk[j][1].se<=nxt[i])flag=j;
					if(stk[j][1].se>=mx.se)mx=mkp(j,stk[j][1].se);
				}
			if(flag){
				in[a[i]]=1;id[a[i]]=flag;
				stk[flag][++top[flag]]=mkp(a[i],nxt[i]);
				ans.pb(Y{1,flag,0});
			}
			else{
				if(empty.check()){
					int nw=empty.top();empty.del(nw);
					stk[nw][++top[nw]]=mkp(a[i],nxt[i]);
					in[a[i]]=2,id[a[i]]=nw;
					ans.pb(Y{1,nw,0});
				}
				else{
					int nw=mx.fi;
					stk[nw][++top[nw]]=mkp(a[i],nxt[i]);
					in[a[i]]=1;id[a[i]]=nw;
					ans.pb(Y{1,nw,0});
				}
			}
		}
		else{
			int nw=0;
			for(int j=1;j<=n;j++)
				if(top[j]==2){
					if(stk[j][2].se>=nxt[i])nw=j;
					if(stk[j][1].se<stk[j][2].se)nw=j;
				}
			if(!nw){nw=empty.top();empty.del(nw);}
			in[a[i]]=top[nw]==0?2:1;id[a[i]]=nw;
			stk[nw][++top[nw]]=mkp(a[i],nxt[i]);
			ans.pb(Y{1,nw,0});
		}
	}
	printf("%d\n",ans.size());
	for(auto p:ans){
		if(p.op==1)printf("%d %d\n",p.op,p.x);
			else printf("%d %d %d\n",p.op,p.x,p.y);
	}
}
signed main(){
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	int T;scanf("%d",&T);while(T--)solve();
	return 0;
}
