只AC了第一档和第三档,求hack
#include<bits/stdc++.h>
using namespace std;
int n,m,k,a[2000010],nxt[2000010],vis[610];
int s[310][3],ans[4000010][3],cnt,xh[310][3];
void work(){
cnt=0;
cin>>n>>m>>k;
for(int i=1;i<=m;i++){
scanf("%d",&a[i]);
}
if(k==(2*n-2)){
for(int i=1;i<=m;i++){
if(nxt[a[i]]==0){
nxt[a[i]]=1;
for(int j=1;j<n;j++){
if(s[j][0]==0){
s[j][0]=a[i];
ans[++cnt][0]=1;
ans[cnt][1]=j;
break;
}
if(s[j][1]==0){
s[j][1]=a[i];
ans[++cnt][0]=1;
ans[cnt][1]=j;
break;
}
}
}else{
for(int j=1;j<n;j++){
if(s[j][0]==a[i]){
ans[++cnt][0]=1;
ans[cnt][1]=n;
ans[++cnt][0]=2;
ans[cnt][1]=j;
ans[cnt][2]=n;
s[j][0]=s[j][1];
s[j][1]=0;
break;
}
if(s[j][1]==a[i]){
ans[++cnt][0]=1;
ans[cnt][1]=j;
s[j][1]=0;
}
}
nxt[a[i]]--;
}
}
}else{
for(int i=1;i<=m;i++){
nxt[i]=0;
}
for(int i=1;i<=2*n;i++){
vis[i]=0;
}
for(int i=1;i<=m;i++){
if(vis[a[i]]==0){
vis[a[i]]=i;
}else{
nxt[vis[a[i]]]=i;
vis[a[i]]=i;
}
}
for(int i=1;i<=m;i++){
vis[i]=0;
}
for(int i=1;i<=m;i++){
if(nxt[i]==0) nxt[i]=1e9;
}
for(int i=1;i<=n;i++){
s[i][0]=s[i][1]=s[i][2]=0;
}
int bm=0,kz=n;
for(int i=1;i<=m;i++){
if(vis[a[i]]==0){
vis[a[i]]=1;
int fl=0;
for(int j=1;j<=n;j++){
if(j==kz) continue;
if(j==bm) continue;
if(s[j][0]==0){
s[j][0]=a[i];
xh[j][0]=i;
ans[++cnt][0]=1;
ans[cnt][1]=j;
fl=1;
break;
}
if(s[j][1]==0){
s[j][1]=a[i];
xh[j][1]=i;
ans[++cnt][0]=1;
ans[cnt][1]=j;
fl=1;
break;
}
}
if(fl==1) continue;
for(int j=1;j<=n;j++){
if(j==kz) continue;
if(nxt[xh[j][0]]<nxt[xh[j][1]]){
s[j][2]=a[i];
xh[j][2]=i;
ans[++cnt][0]=1;
ans[cnt][1]=j;
fl=1;
break;
}
}
if(fl==1) continue;
ans[++cnt][0]=1;
ans[cnt][1]=kz;
s[kz][0]=a[i];
xh[kz][0]=i;
kz=0;
}else{
// cout<<s[1][0]<<" "<<s[1][1]<<" "<<s[1][2]<<endl;
int minn=2e9;
if(kz==0){
for(int j=1;j<=n;j++){
if(nxt[xh[j][0]]<minn){
minn=nxt[xh[j][0]];
bm=j;
}
}
}
vis[a[i]]--;
for(int j=1;j<=n;j++){
if(j==kz&&s[kz][0]==0) continue;
if(s[j][0]==a[i]){
if(s[j][1]==0){
ans[++cnt][0]=1;
ans[cnt][1]=j;
kz=j;
s[j][0]=0;
xh[j][0]=0;
if(j==bm){
bm=0;
}
break;
}else{
ans[++cnt][0]=1;
ans[cnt][1]=kz;
s[j][0]=s[j][1];
xh[j][0]=xh[j][1];
s[j][1]=s[j][2];
xh[j][1]=xh[j][2];
s[j][2]=0;
xh[j][2]=0;
ans[++cnt][0]=2;
ans[cnt][1]=kz;
ans[cnt][2]=j;
break;
}
}else if(s[j][1]==a[i]){
ans[++cnt][0]=1;
ans[cnt][1]=j;
s[j][1]=0;
xh[j][1]=0;
break;
}else if(s[j][2]==a[i]){
ans[++cnt][0]=1;
ans[cnt][1]=j;
s[j][2]=0;
xh[j][2]=0;
break;
}
}
}
}
}
printf("%d\n",cnt);
for(int i=1;i<=cnt;i++){
printf("%d ",ans[i][0]);
for(int j=1;j<=ans[i][0];j++){
printf("%d ",ans[i][j]);
}
printf("\n");
}
}
signed main(){
// freopen("meow.in","r",stdin);
// freopen("meow.out","w",stdout);
int t;
cin>>t;
while(t--){
work();
}
return 0;
}