#include<bits/stdc++.h>
using namespace std;
int T;
int n,m,k;
int a[2000005];
vector<pair<int,pair<int,int> > > ans;
queue<int> q;
int p[605];
void clear(queue<int> q){
while(!q.empty()) q.pop();
}
bool isTop[605];
deque<int> st[305];
void base(int c){
if(p[c]!=-1){
ans.push_back({1,{p[c],0}});
isTop[c]=0;
st[p[c]].pop_back();
q.push(p[c]);
if(!st[p[c]].empty()) isTop[st[p[c]].back()]=1;
p[c]=-1;
}
else{
p[c]=q.front();
q.pop();
ans.push_back({1,{p[c],0}});
if(!st[p[c]].empty()) isTop[st[p[c]].back()]=0;
st[p[c]].push_back(c);
isTop[c]=1;
}
}
int main(){
scanf("%d",&T);
while(T--){
memset(a,0,sizeof(a));
memset(p,-1,sizeof(p));
memset(isTop,0,sizeof(isTop));
ans.clear();
clear(q);
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=m;i++) scanf("%d",&a[i]);
int sp=n;
for(int i=1;i<n;i++) q.push(i),q.push(i);
for(int i=1;i<=n;i++) st[i].clear();
for(int i=1;i<=m;i++){
if(p[a[i]]!=-1){
if(isTop[a[i]]){
ans.push_back({1,{p[a[i]],0}});
isTop[a[i]]=0;
st[p[a[i]]].pop_back();
q.push(p[a[i]]);
if(!st[p[a[i]]].empty()) isTop[st[p[a[i]]].back()]=1;
p[a[i]]=-1;
}
else{
ans.push_back({1,{sp,0}});
ans.push_back({2,{p[a[i]],sp}});
st[p[a[i]]].pop_front();
q.push(p[a[i]]);
p[a[i]]=-1;
}
}
else{
if(!q.empty()){
p[a[i]]=q.front();
q.pop();
ans.push_back({1,{p[a[i]],0}});
if(!st[p[a[i]]].empty()) isTop[st[p[a[i]]].back()]=0;
st[p[a[i]]].push_back(a[i]);
isTop[a[i]]=1;
}
else{
int x=-1,j;
for(j=i+1;j<=m;j++){
if(!isTop[a[j]]){
x=j;
break;
}
}
x=a[j];
if(x==a[i]){
ans.push_back({1,{sp,0}});
for(++i;i<j;i++){
base(a[i]);
}
ans.push_back({1,{sp,0}});
continue;
}
int y=st[p[x]].back();
int cnt=0;
for(int k=i+1;k<j;k++){
if(a[k]==y) cnt++;
}
if(cnt%2==0){
st[p[x]].push_back(a[i]);
ans.push_back({1,{p[x],0}});
isTop[a[i]]=1;
isTop[y]=0;
p[a[i]]=p[x];
for(++i;i<j;i++){
if(a[i]!=y){
base(a[i]);
}
else{
ans.push_back({1,{sp,0}});
}
}
ans.push_back({1,{sp,0}});
ans.push_back({2,{p[x],sp}});
p[x]=-1;
}
else{
ans.push_back({1,{sp,0}});
q.push(sp);
isTop[a[i]]=1;
p[a[i]]=sp;
st[sp].push_back(a[i]);
for(++i;i<j;i++){
if(a[i]!=y){
base(a[i]);
}
else{
ans.push_back({1,{p[x],0}});
}
}
sp=p[x];
ans.push_back({1,{sp,0}});
st[sp].pop_front();
p[x]=-1;
p[y]=-1;
isTop[y]=0;
}
}
}
}
printf("%ld\n",ans.size());
for(auto p:ans){
if(p.first==1){
printf("1 %d\n",p.second.first);
}
else{
printf("2 %d %d\n",p.second.first,p.second.second);
}
}
}
return 0;
}