#include<bits/stdc++.h>
using namespace std;
const int N=1e3+10;
int T;
int n;
int a[N];
struct tttt{
int id,num;
};
tttt ans[N];
tttt dd[N][N];
int c[N][N];
int cnt[N];
bool cmp(tttt x,tttt y){
return x.num<y.num;
}
int main(){
cin>>T;
while(T--){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
if(n%2==1){
cout<<"-1\n";
continue;
}
a[n+1]=0;
sort(a+1,a+n+1);
int tot=1,tt=0,maxx=0,sum=0;
for(int i=1;i<=n;i++){
if(a[i]!=a[i+1]){
maxx=max(tot,maxx);
ans[++tt].id=a[i];
ans[tt].num=tot;
tot=1;
sum+=ans[tt].num;
}
else{
++tot;
}
}
if(maxx*2>sum){
cout<<"-1\n";
for(int i=1;i<=tt;i++){
ans[i].num=ans[i].id=0;
}
continue;
}
int back=1;
int di=0;
bool f=0;
int ttt=0;
int disum=0;
while(1){
sort(ans+back,ans+tt+1,cmp);
while(back<=tt&&!ans[back].num)++back;
if(back==tt+1){
f=1;
break;
}
if(back==tt){
cout<<"-1\n";
break;
}
di++;
for(int i=tt;i>=back;i--){
if(i==back&&(tt-i+1)%2){
if(ans[i].num>maxx){
maxx=ans[i].num;
}
break;
}
else{
if(ans[i].num==maxx){
if((sum-1)<(maxx-1)*2){
break;
}
else{
maxx--;
}
}
else{
if(sum-1<maxx*2){
break;
}
}
c[di][++c[di][0]]=ans[i].id;
ans[i].num--;
sum--;
}
}
}
if(f==1){
if(c[1][0]*2==n&&di!=2){
int len=c[1][0];
for(int i=2;i<=di;i++){
for(int k=1;k<=c[1][0];k++){
int vis=0;
for(int j=1;j<=c[i][0];j++){
if(c[i][j]!=c[1][k]&&c[1][k]!=0){
vis++;
}
}
if(vis==c[i][0]&&cnt[i]<2){
c[i][++c[i][0]]=c[1][k];
c[1][k]=0;
cnt[i]++;
}
}
}
cout<<di-1<<"\n";
for(int i=2;i<=di;i++){
for(int j=0;j<=c[i][0];j++){
cout<<c[i][j]<<" ";
}
cout<<"\n";
}
}
else{
cout<<di<<"\n";
for(int i=1;i<=di;i++){
for(int j=0;j<=c[i][0];j++){
cout<<c[i][j]<<" ";
}
cout<<"\n";
}
}
}
for(int i=1;i<=di;i++){
c[i][0]=0;
}
for(int i=1;i<=tt;i++){
ans[i].num=ans[i].id=0;
}
}
return 0;
}