WA
思路是如果能选就尽量选剩余多的,尽量削减众数数量
int n, t;
int a[2000001];
int o;
struct node {
int x, s;
};
vector<node> mp;
bool cmp(node a, node b) {
return a.s > b.s;
}
vector<int> ans[2000001];
signed main() {
t = read();
while (t--) {
n = read();
mp.clear();
o = 0;
for (int i = 1; i <= n; i++)a[i] = read(),ans[i].clear();
sort(a + 1, a + n + 1);
for (int i = 1; i <= n; i++) {
if (a[i] != a[i - 1])mp.push_back({ a[i],0 });
mp[mp.size() - 1].s++;
}
sort(mp.begin(), mp.end(), cmp);
int all = n;
if (mp[0].s > all / 2)while (mp.size() > 1)mp.erase(mp.begin()+mp.size()-1);
for (int l = 1; mp.size() > 1; l++) {
o++;
for (int i = 0; i < mp.size() - mp.size() % 2; i++) {
mp[i].s--, all--;
if (mp[0].s > all / 2) {
mp[i].s++; all++;
break;
}
ans[l].push_back(mp[i].x);
}sort(mp.begin(), mp.end(), cmp);
while (mp.size() && !mp[mp.size() - 1].s)mp.erase(mp.end() - 1);
}if (mp.size() == 1) {
writeln(-1);
}
else {
writeln(o);
for (int i = 1; ans[i].size(); i++) {
writesp(ans[i].size());
for (int j : ans[i]) {
writesp(j);
}putchar('\n');
}
}
}
return 0;
}