#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=4009;
int T,n,a[N],top,stack[N][N],maxn=0;
struct node{int a,b;}b[N];
bool cmp(node x,node y){return x.b>y.b;}
int main()
{
scanf("%d",&T);
while(T--)
{
for(int i=1;i<=maxn;i++)
stack[i][0]=0;
scanf("%d",&n); top=0;
for(int i=1;i<=n;i++)
scanf("%d",&a[i]);
if(n&1) {printf("-1\n");continue;}
sort(a+1,a+n+1); a[0]=-1;
for(int i=1;i<=n;i++)
{
if(a[i]!=a[i-1])
b[++top]=node{a[i],0};
b[top].b++;
}
sort(b+1,b+top+1,cmp),maxn=b[1].b;
if(maxn>n/2){printf("-1\n");continue;}
for(int i=1;i<=top;i++)
for(int j=1;j<=b[i].b;j++)
stack[j][++stack[j][0]]=i;
int p=1,q=maxn;
while(p<q)
{
while(!(stack[p][0]&1)&&p<q) p++;
while(!(stack[q][0]&1)&&p<q) q--;
if(p>=q) break;
if(stack[p][0]!=stack[q][0])
stack[q][++stack[q][0]]=stack[p][stack[p][0]--],p++,q--;
else
{
for(int o=p-1;o>=1;o--)
{
while(p<=q&&stack[o][0]>=stack[p][0]+2)
stack[p][++stack[p][0]]=stack[o][stack[o][0]--],p++;
if(p>q) break;
}
if(p>q) break;
for(int o=q+1;;o++)
{
if(o>maxn) stack[++maxn][0]=0;
while(p<=q&&stack[q][0]>=stack[o][0]+2)
{
int u=stack[o][0],v,w;
sort(stack[o]+1,stack[o]+u+1);
for(v=stack[q][0];v>=1;v--)
{
while(stack[o][u]!=stack[q][v]&&u>0) u--;
if(!u) break; else continue;
}
if(stack[o][u]==stack[q][v]&&u>0) break;
swap(stack[q][v],stack[q][stack[q][0]]);
stack[o][++stack[o][0]]=stack[q][stack[q][0]--],q--;
}
if(p>q) break;
}
}
}
printf("%d\n",maxn);
for(int i=1;i<=maxn;i++)
{
printf("%d ",stack[i][0]);
for(int j=1;j<=stack[i][0];j++)
printf("%d ",b[stack[i][j]].a);
printf("\n");
}
}
return 0;
}