rt
#include<bits/stdc++.h>
#define ll long long
int T,n,m,k,a[200009],zhan[309][3],now,lt[609],l[400009],r[400009],top,v[609];
using namespace std;
int main()
{
cin>>T;
while(T--)
{
memset(a,0,sizeof(a));
memset(zhan,0,sizeof(zhan));
memset(lt,0,sizeof(lt));
memset(l,0,sizeof(l));
memset(r,0,sizeof(r));
top=0;
cin>>n>>m>>k;
now=n;
int i=0;
for(i=1;i<=m;i++)
{
cin>>a[i];
}
i=1;
while(i<=m)
{
if(lt[a[i]])
{
int nt=lt[a[i]];
if(zhan[nt][0]==a[i]&&zhan[nt][1]==0)
{
top++;
l[top]=nt;
zhan[nt][0]=0;
lt[a[i]]=0;
}
else
if(zhan[nt][0]==a[i]&&zhan[nt][1])
{
top++;
l[top]=now;
top++;
l[top]=now;
r[top]=nt;
zhan[nt][0]=zhan[nt][1];
zhan[nt][1]=zhan[nt][2];
zhan[nt][2]=0;
lt[a[i]]=0;
}
else
if(zhan[nt][1]==a[i]&&zhan[nt][2]==0)
{
top++;
l[top]=nt;
zhan[nt][1]=0;
lt[a[i]]=0;
}
else
if(zhan[nt][2]==a[i])
{
top++;
l[top]=nt;
zhan[nt][2]=0;
lt[a[i]]=0;
}
}
else
{
int ngm=0;
for(int j=1;j<=n;j++)
{
if(j!=now&&zhan[j][1]==0)
{
ngm=j;
break;
}
}
if(ngm)
{
top++;
l[top]=ngm;
if(zhan[ngm][0]==0)
{
lt[a[i]]=ngm;
zhan[ngm][0]=a[i];
}
else
{
lt[a[i]]=ngm;
zhan[ngm][1]=a[i];
}
}
else
{
int cnt=top+1;
top++;
for(int j=1;j<=k;j++)
v[j]=0;
for(int j=i+1;j<=m;j++)
{
if(a[j]==a[i])
{
l[cnt]=now;
top++;
l[top]=now;
i=j;
break;
}
if(zhan[lt[a[j]]][0]==a[j])
{
if(!zhan[lt[a[j]]][1])
{
l[cnt]=now;
lt[a[i]]=now;
zhan[now][0]=a[i];
top++;
l[top]=lt[a[j]];
now=lt[a[j]];
zhan[lt[a[j]]][0]=0;
lt[a[j]]=0;
i=j;
break;
}
else
{
l[cnt]=lt[a[j]];
zhan[lt[a[j]]][0]=zhan[lt[a[j]]][1];
zhan[lt[a[j]]][1]=a[i];
lt[a[i]]=lt[a[j]];
top++;
l[top]=now;
top++;
l[top]=now;
r[top]=lt[a[j]];
lt[a[j]]=0;
i=j;
break;
}
}
else
{
top++;
l[top]=lt[a[j]];
v[a[j]]++;
if(zhan[lt[a[j]]][1])
zhan[lt[a[j]]][1]=0;
else
zhan[lt[a[j]]][1]=a[j];
}
}
for(int j=1;j<=k;j++)
{
if(v[j]%2==1)
lt[j]=0;
}
}
}
i++;
}
cout<<top<<endl;
for(i=1;i<=top;i++)
if(r[i])
{
printf("2 %d %d\n",l[i],r[i]);
}
else
{
printf("1 %d\n",l[i]);
}
}
return 0;
}
#20WA