//attention 512MB!!!
//Kolomi_suki
#include <bits/stdc++.h>
using namespace std;
int T;
int n,m,k;
int cnt[700];
int kc[700][700];
struct node{
	int x,y;
}p[500050];
int ans[500050];
int pcnt;
int sta[400];
bool cmp(node a,node b){
	return a.x<b.x;
}
int main(){
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	ios::sync_with_stdio(0);
	cin>>T;
	while(T--){
		cin>>n>>m>>k;
		pcnt=0;
		memset(cnt,0,sizeof(cnt));
		int a;
		for(int i=1;i<=m;i++){
			cin>>a;		
			kc[a][++cnt[a]]=i;
		}
		for(int i=1;i<=605;i++){
			for(int f=1;f<=cnt[i]/2;f++){
				p[++pcnt].x=kc[i][f];
				p[pcnt].y=kc[i][cnt[i]-f+1];
			}
		}
		sort(p+1,p+pcnt+1,cmp);
		for(int i=1;i<=pcnt;i++){//bian li dui zi
			for(int j=1;j<=n;j++){//bian li zhan
				if(sta[j]==0 or p[sta[j]].y<p[i].x){
					sta[j]=i;
					ans[p[i].x]=j;
					ans[p[i].y]=j;
					//cout<<"1 "<<j<<endl;
					break;
				}
				else if(p[sta[j]].y>p[i].y){
					sta[j]=i;
					ans[p[i].x]=j;
					ans[p[i].y]=j;
					//cout<<"1 "<<j<<endl;
					break;
				}
			}
		}
		cout<<m<<endl;
		for(int i=1;i<=m;i++){
			cout<<"1 "<<ans[i]<<endl;
		}
	}
	return 0;
}
