#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=305,maxm=200005;
int n,m,S,a[maxm],k,t[maxm],used[maxn],nxt[maxn],out1[maxm<<1],out2[maxm<<1],out3[maxm<<1],tim[maxn],s=0,p=0;
deque<int> st[maxn];
stack<int> lastout[maxn];
void dfs(int x,int s){
	if(p) return;
	if(x==m+1){
		while(1){
			for(int i=1;i<=n;i++){
				for(int j=1;j<i;j++){
					if(!st[i].empty()&&!st[j].empty()&&st[i].back()==st[j].back()){
						out2[s++]=2;out2[s]=i;out2[s]=j;
						st[i].pop_back();st[j].pop_back();
					}
				}
			}
			for(int i=1;i<=n;i++) if(!st[i].empty()) continue;
			p=1;S=s;
			break;
		}
		return;
	}
	for(int i=1;i<=n;i++){
		out1[s]=1;out2[s]=i;
		if(st[i].front()==a[x]){
			st[i].pop_front();
			dfs(x+1,s+1);
			st[i].push_front(a[x]);
		}
		else{
			st[i].push_front(a[x]);
			dfs(x+1,s+1);
			st[i].pop_front();
		}
	}
}
int main(){
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	int TTTTTTT;
	scanf("%d",&TTTTTTT);
	while(TTTTTTT--){
		scanf("%d%d%d",&n,&m,&k);
		for(int i=1;i<=m;i++) scanf("%d",&a[i]);
		if(k==2*n-2){
			s=0;
			for(int x=1;x<=m;x++){
				int t=a[x]+1>>1;
				if(st[t].empty()||st[t].front()!=a[x]&&st[t].back()!=a[x]){
					s++;
					st[t].push_front(a[x]);
					continue;
				}
				if(!st[t].empty()&&st[t].front()==a[x]){
					s++;
					st[t].pop_front();
					continue;
				}
				if(!st[t].empty()&&st[t].back()==a[x]){
					s+=2;
					st[t].pop_back();
					continue;
				}
			}
			printf("%d\n",s);
			for(int x=1;x<=m;x++){
				int t=a[x]+1>>1;
				if(st[t].empty()||st[t].front()!=a[x]&&st[t].back()!=a[x]){
					printf("1 %d\n",t);
					st[t].push_front(a[x]);
					continue;
				}
				if(!st[t].empty()&&st[t].front()==a[x]){
					printf("1 %d\n",t);
					st[t].pop_front();
					continue;
				}
				if(!st[t].empty()&&st[t].back()==a[x]){
					printf("1 %d\n2 %d %d\n",n,n,t);
					st[t].pop_back();
					continue;
				}
			}
			continue;
		}
//		if(n<=3&&m<=14){
//			S=0;
//			S--;
//			dfs(1,1);
//			printf("%d\n",S);
//			for(int i=1;i<=S;i++){
//				printf("%d ",out1[i]);
//				if(out1[i]&1) printf("%d\n",out2[i]);
//				else printf("%d %d\n",out2[i],out3[i]);
//			}
//			continue;
//		}
		for(int i=1;i<=m;i++){
			if(tim[a[i]]==0) tim[a[i]]=i;
			else nxt[tim[a[i]]]=i,nxt[i]=tim[a[i]],tim[a[i]]=0;
		}
		for(int i=1;i<=n;i++) lastout[i].push(0);
		for(int i=1;i<=m;i++){
			if(nxt[i]<i){
				int p=0,pp=0;
				for(int j=1;j<=n;j++){
					if(st[j].empty()) p=j;
					else if(st[j].back()==a[i]) pp=j;
				}
				if(!p){
					if(pp==0){
						cout<<"Spasmodic:"<<i<<endl;
						return 0;
					}
					for(int j=1;j<=n;j++){
						if(st[j].front()==a[i]) pp=j;
					}
					out1[++s]=1;out2[s]=pp;st[pp].pop_front();
				}
				else{
					if(pp==0){
						cout<<"Igallta:"<<i<<endl;
						return 0;
					}
					out1[++s]=1;out2[s]=p;
					out1[++s]=2;out2[s]=p;out3[s]=pp;used[pp]=1;st[pp].pop_back();
				}
			}
			else{
				int maxx=-1,maxi=0;
				for(int j=1;j<=n;j++){
					int K=0;
					while(!lastout[j].empty()&&used[lastout[j].top()]) lastout[j].pop();
					K=lastout[j].top();
					if(K>nxt[i]) continue;
					if(K>maxx) maxx=K,maxi=j;
				}
				if(maxi==0){
					cout<<"Rrhar'il:"<<i<<endl;
					return 0;
				}
				out1[++s]=1;out2[s]=maxi;
				lastout[maxi].push(nxt[i]);st[maxi].push_front(a[i]);
			}
		}
		printf("%d\n",s);
		for(int i=1;i<=s;i++){
			printf("%d ",out1[i]);
			if(out1[i]&1) printf("%d\n",out2[i]);
			else printf("%d %d\n",out2[i],out3[i]);
		}
	}
	return 0;
}
