#include<bits/stdc++.h>
using namespace std;
const int maxn=2005;
int q,n,m,k,cnt;
int a[maxn],nxt[maxn],pre[maxn],t[305],id[maxn];
int ans[maxn];
set<int>s;
vector<int>st[305];
bool b[305];
void rd(int &rex)
{
	char c=getchar();int f=1;rex=0;
	while(c<'0'||c>'9')c=='-'&&(f=-1),c=getchar();
	while(c>='0'&&c<='9')rex=rex*10+c-'0',c=getchar();
	rex*=f;
}
int main()
{
	freopen("meow.in","r",stdin); freopen("meow.out","w",stdout);
	rd(q);
	while(q--)
	{
		rd(n);rd(m);rd(k);
		for(int i=1;i<=n;i++)
		memset(b,0,sizeof(b));
		for(int i=1;i<=m;i++)rd(a[i]);//,printf("%d ",a[i]);
		for(int i=m;i;i--)nxt[i]=t[a[i]],t[a[i]]=i;
		memset(t,0,sizeof(t));
		for(int i=1;i<=m;i++)pre[i]=t[a[i]],t[a[i]]=i;
//		for(int i=1;i<=m;i++)printf("%d ",nxt[i]);
		for(int i=1;i<=m;i++)
		{
			if(b[a[i]]){ans[i]=id[pre[i]],b[a[i]]=1,s.erase(i),st[id[pre[i]]].erase(--st[id[i]].end());if(!st[id[pre[i]]].empty())s.insert(*--st[id[pre[i]]].end());continue;}
			s.insert(nxt[i]),b[a[i]]=1;
			if((*s.begin())>i&&s.size()<=n){id[i]=++cnt;continue;}
			cout<<*s.begin()<<' '<<*++s.begin();
			int lst=*--s.lower_bound(i);
			st[id[lst]].push_back(nxt[i]);
			b[lst]=0,id[i]=id[pre[lst]];
			ans[i]=id[pre[lst]];
			s.erase(lst);
		}
		for(int i=1;i<=m;i++)printf("%d ",id[i]);
		putchar('\n');
		for(int i=1;i<=m;i++)printf("1 %d\n",ans[i]);
	}
	return 0;
}/*1
2 4 2
1 2 1 2
*/
