#include<iostream>
#include<vector>
using namespace std;
int main() {
int T;
cin>>T;
while(T--) {
vector<int>x[1000002],z(1000002);
int n;
cin>>n;
if(n%2) {
cout<<"-1\n";
for(int j=1,i=0,t; j<=n; ++j) {
cin>>t;
}
continue;
}
z.clear();
for(int j=1,i=0,t; j<=n; ++j) {
cin>>t;++z[t];
}
for(int j=1; j<=1000000; ++j) {
if(z[j]){
x[z[j]].push_back(j);}
}int mx=0;
for(int j=1000000; j>=0; --j) {
if(!x[j].empty()){mx=j;break;}
}int mxx=mx;
vec:
vector<int>v[mx+1];int p=0;
if(2*mx>n){cout<<"-1\n";
goto ctn;}
for(int j=mx,t,q; j>0; --j) {
for(auto t:x[j]){
if(p>=mx){p=0;}
q=p;--q;
if(q<=0){q=mx;--q;}
if(p<j&&v[p].size()%2||mx!=mxx){goto ps;}
for(int i=0;i<mx;++i,++p){
if(p>=mx){p=0;}
if(v[p].size()%2){break;}
}ps:
for(int i=0;i<j;++i,++p){
if(p>=mx){p=0;}
v[p].push_back(t);
}if(p>=mx){p=0;}
}
}
for(int j=mx-1; j>=0; --j) {
if(v[j].size()%2) {
++mx;
goto vec;
}
}
cout<<mx<<'\n';
for(int j=mx-1; j>=0; --j) {
cout<<v[j].size()<<' ';
for(auto i:v[j]){
cout<<i<<' ';
}
cout<<'\n';
}
ctn:
}
return 0;
}