#include<bits/stdc++.h>
#define MAXN 2000005
#define ll long long
using namespace std;
int T,fT;
int a[MAXN];
int main(){
	freopen("meow.in","r",stdin);
freopen("meow.out","w",stdout);
	scanf("%d",&T);fT=T;
	while(T--){
		int n,m,k,cnt=0;scanf("%d%d%d",&n,&m,&k);
		for(int i=1;i<=m;i++)scanf("%d",&a[i]);
		if(fT%10==1){
			int stck[605][2];
			memset(stck,0,sizeof(stck));
			for(int i=1;i<=m;i++){
				int num=(a[i]+1)/2;
				if(stck[num][0]){
					if(stck[num][1]){
						if(stck[num][0]==a[i]){
							cnt+=2;
							stck[num][0]=stck[num][1];
							stck[num][1]=0;
						}
						else{
							cnt++;
							stck[num][0]=0;
						}
					}
					else{
						if(stck[num][0]==a[i]){
							cnt++;
							stck[num][0]=0;
						}
						else{
							cnt++;
							stck[num][1]=a[i];
						}
					}
				}
				else{
					cnt++;
					stck[num][0]=a[i];
				}
			}
			printf("%d\n",cnt);
			for(int i=1;i<=m;i++){
				int num=(a[i]+1)/2;
				if(stck[num][0]){
					if(stck[num][1]){
						if(stck[num][0]==a[i]){
							printf("1 %d\n",n);
							printf("2 %d %d\n",num,n);
							stck[num][0]=stck[num][1];
							stck[num][1]=0;
						}
						else{
							printf("1 %d\n",num);
							stck[num][0]=0;
						}
					}
					else{
						if(stck[num][0]==a[i]){
							printf("1 %d\n",num);
							stck[num][0]=0;
						}
						else{
							printf("1 %d\n",num);
							stck[num][1]=a[i];
						}
					}
				}
				else{
					printf("1 %d\n",num);
					stck[num][0]=a[i];
				}
			}
		}
		else{
			int id[605],stck[605][2];
			memset(stck,0,sizeof(stck));
			int rest=0,restid=-1,cnt=0;
			for(int i=1;i<=k;i++)id[i]=i;
			for(int i=1;i<=m;i++){
				int num=(id[a[i]]+1)/2;	
				if(i==m){
					for(int i=1;i<=n;i++){
						if(stck[i][0]==a[i]){
							cnt++;
							break;
						}
					}
				}
				if(stck[num][0]){
					if(stck[num][1]){
						if(stck[num][0]==a[i]){
							if(num==n){
								if(restid==-1){
									restid=a[i];
									id[a[i]]=n;
									stck[n][1]=a[i];cnt++;
								}
								else{
									swap(id[restid],id[a[i]]);
									stck[n][1]=a[i];cnt++;
								}
								continue;
							}cnt+=2;
							stck[num][0]=stck[num][1];
							stck[num][1]=0;
						}
						else{cnt++;
							stck[num][0]=0;
						}
					}
					else{		
						if(stck[num][0]==a[i]){cnt++;
							stck[num][0]=0;
						}
						else{
							if(rest){
								if(restid==-1){
									restid=a[i];
									id[a[i]]=n;
									stck[n][1]=a[i];cnt++;
								}
								else{
									swap(id[restid],id[a[i]]);
									stck[n][1]=a[i];cnt++;
								}
							}
							else{cnt++;
								stck[num][1]=a[i];	
							}
						}
					}
				}
				else{cnt++;
					stck[num][0]=a[i];
				}
				if(stck[n][0]==0)rest=0;
				else rest=1;
			}
			printf("%d\n",cnt);
			for(int i=1;i<=m;i++){
				int num=(id[a[i]]+1)/2;	
				if(i==m){
					for(int i=1;i<=n;i++){
						if(stck[i][0]==a[i]){
							printf("1 %d\n",i);
							break;
						}
					}
				}
				if(stck[num][0]){
					if(stck[num][1]){
						if(stck[num][0]==a[i]){
							if(num==n){
								if(restid==-1){
									restid=a[i];
									id[a[i]]=n;
									stck[n][1]=a[i];
									printf("1 %d\n",n);
								}
								else{
									swap(id[restid],id[a[i]]);
									stck[n][1]=a[i];
									printf("1 %d\n",n);
								}
								continue;
							}
							printf("1 %d\n",n);
							printf("2 %d %d\n",num,n);
							stck[num][0]=stck[num][1];
							stck[num][1]=0;
						}
						else{
							printf("1 %d\n",num);
							stck[num][0]=0;
						}
					}
					else{		
						if(stck[num][0]==a[i]){
							printf("1 %d\n",num);
							stck[num][0]=0;
						}
						else{
							if(rest){
								if(restid==-1){
									restid=a[i];
									id[a[i]]=n;
									stck[n][1]=a[i];
									printf("1 %d\n",n);
								}
								else{
									swap(id[restid],id[a[i]]);
									stck[n][1]=a[i];
									printf("1 %d\n",n);
								}
							}
							else{
								printf("1 %d\n",num);
								stck[num][1]=a[i];	
							}
						}
					}
				}
				else{
					printf("1 %d\n",num);
					stck[num][0]=a[i];
				}
				if(stck[n][0]==0)rest=0;
				else rest=1;
			}
		}
	}
	return 0;
}
/*
2 
2 8 3
1 2 3 2 3 1 2 2
*/