#include <bits/stdc++.h>
using namespace std;

const int M=2e6+5;
const int N=305;
const int K=610;

struct dododo {
	int op;
	int x,y;
};

int n,m,k;
int a[M];
int b[M];
int c[M];
deque<int>q[N];
int op;
int T;
int cnt;
dododo ans[M*2];
int res;
int mp[K];


int get(int x) {
	return (x-1)%(n-1)+1;
}

void subtask1() {
	for(int i=1; i<=cnt; i++) {
		if(c[i]%2==0) {
			int k=get(b[i]);
			for(int j=1; j<=c[i]; j++) {
				++op;
				ans[op].op=1;
				ans[op].x=k;
			}
		} else {
			int k=get(b[i]);
			for(int j=1; j<=c[i]-1; j++) {
				++op;
				ans[op].op=1;
				ans[op].x=k;
			}
			if(mp[b[i]]==1) {
				++op;
				ans[op].op=1;
				ans[op].x=n;
				++op;
				ans[op].op=2;
				ans[op].x=get(b[i]);
				ans[op].y=n;
				mp[b[i]]=0;
			} else {
				++op;
				ans[op].op=1;
				ans[op].x=get(b[i]);
				mp[b[i]]=1;
			}
		}
	}
}

int main() {
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	cin>>T;
	while(T--) {
		op=0;
		cnt=0;
		res=0;
		//OK=0;
		for(int i=1; i<=m; i++) b[i]=c[i]=0;
		scanf("%d%d%d",&n,&m,&k);
		for(int i=1; i<=m; i++)
			scanf("%d",&a[i]);

		for(int i=1; i<=m; i++) {
			if(a[i]!=a[i-1])
				b[++cnt]=a[i],c[cnt]=1;
			else c[cnt]++;
		}
		
		if(n==1) {
			for(int i=1; i<=m; i++) {
				++op;
				ans[i].op=1;
				ans[i].x=1;
			}
		}
		else if(k==2*n-2) subtask1();
		//if(n==2&&k==3) subtask2();
//		if(m<=14) subtask3();
	
		printf("%d\n",op);
		for(int i=1; i<=op; i++) {
			if(ans[i].op==1) {
				printf("%d %d\n",ans[i].op,ans[i].x);
			}
			if(ans[i].op==2) {
				printf("%d %d %d\n",ans[i].op,ans[i].x,ans[i].y);
			}
		}
	}

	return 0;
}