#include<bits/stdc++.h>
using namespace std;
#define N 2000005
#define For(i,x,y)for(i=x;i<=(y);i++)
set<pair<int,int> >se;
int a[N],pos[N],last[N],opt[N],sta[N];
int read()
{
	int A;
	bool K;
	char C;
	C=A=K=0;
	while(C<'0'||C>'9')K|=C=='-',C=getchar();
	while(C>'/'&&C<':')A=(A<<3)+(A<<1)+(C^48),C=getchar();
	return(K?-A:A);
}
int main()
{
	freopen("meow.in","r",stdin);
	freopen("meow.out","w",stdout);
	int T,n,m,k,i,step;
	set<pair<int,int> >::iterator it;
	T=read();
	se.insert(make_pair(1,1));
	se.insert(make_pair(2,2));
	while(T--)
	{
		n=read(),m=read(),k=read();
		For(i,1,m)
		{
			a[i]=read();
			if(pos[a[i]])last[pos[a[i]]]=i,pos[a[i]]=0;
			else pos[a[i]]=i;
		}
		se.clear();
		step=m;
		For(i,1,m)
		if(!opt[i])
		{
			it=se.upper_bound(make_pair(last[a[i]],0));
			if(it==se.begin())
			{
				if(se.size()<n-1)
				{
					opt[i]=3;
					sta[i]=se.size()+1;
					opt[last[a[i]]]=2;
					sta[last[a[i]]]=sta[i];
					step++;
					se.insert(make_pair(last[a[i]],sta[i]));
				}
				else opt[i]=1;
			}
			else
			{
				--it;
				opt[i]=3;
				sta[i]=(*it).second;
				opt[last[a[i]]]=2;
				sta[last[a[i]]]=sta[i];
				se.insert(make_pair(last[a[i]],(*it).second));
				se.erase(it);
				step++;
			}
		}
		printf("%d\n",step);
		For(i,1,m)
		if(opt[i]==1)printf("1 %d\n",n);
		else if(opt[i]==3)printf("1 %d\n",sta[i]);
		else printf("1 %d\n2 %d %d\n",n,sta[i],n);
	}
	return 0;
}
