
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;
deque<int> dq[350];
int dqsiz[350],cur,freedq;
int t,n,m,k;
int a[1000000];
vector<pair<int,int> > ans;
void cam(int fi,int se){
ans.push_back(make_pair(fi,se));
}
int main(){
scanf("%d",&t);
while(t--){
memset(dqsiz,0,sizeof(dqsiz));
memset(a,0,sizeof(a));
for(int i=1;i<=349;i++){
while(!dq[i].empty()){
dq[i].pop_front();
}
}
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=m;i++){
cin>>a[i];
}
if(n==1){
for(int i=1;i<=m;i++){
cout<<"1 1\n";
}
continue;
}
cur=1,freedq=n;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
for(int k=j+1;k<=n;k++){
if(!dq[j].empty()&&!dq[k].empty()&&dq[j].back()==dq[k].back()){
dq[j].pop_back();
dq[k].pop_back();
cam(j,k);
}
}
}
for(int j=1;j<=n;j++){
if(dqsiz[j]==0){
freedq=j;
break;
}
}
bool isbreak=0;
for(int j=1;j<=n;j++){
if(dq[j].empty())continue;
int tmp=dq[j].front();
if(tmp==a[i]){
dq[j].pop_front();
dqsiz[j]--;
isbreak=1;
cam(0,j);
break;
}
}
if(isbreak)continue;
isbreak=0;
for(int j=1;j<=n;j++){
if(dq[j].empty())continue;
int tmp=dq[j].back();
if(tmp==a[i]){
dq[j].pop_back();
dqsiz[j]--;
isbreak=1;
cam(0,freedq);
cam(j,freedq);
break;
}
}
if(isbreak)continue;
if(dqsiz[cur]<2){
dq[cur].push_front(a[i]);
dqsiz[cur]++;
cam(0,cur);
}
else if(cur<=n-1){
cur=1;
while(dqsiz[cur]>=2&&cur<=n){
cur++;
}
dq[cur].push_front(a[i]);
dqsiz[cur]++;
cam(0,cur);
}
else{
int nxt=a[i+1],pos=0;
isbreak=0;
for(int j=1;j<=n;j++){
if(dq[j].empty())continue;
int tmp=dq[j].back();
if(tmp==nxt){
pos=j;
isbreak=1;
break;
}
}
if(isbreak){
dq[pos].push_front(a[i]);
dqsiz[pos]++;
cam(0,pos);
continue;
}
dq[freedq].push_front(a[i]);
dqsiz[freedq]++;
cam(0,freedq);
}
}
for(int j=1;j<=n;j++){
for(int k=j+1;k<=n;k++){
if(!dq[j].empty()&&!dq[k].empty()&&dq[j].back()==dq[k].back()){
dq[j].pop_back();
dq[k].pop_back();
cam(j,k);
}
}
}
cout<<ans.size()<<'\n';
for(auto ed:ans){
if(ed.first!=0) cout<<2<<" "<<ed.first<<" "<<ed.second<<'\n';
else cout<<1<<" "<<ed.second<<'\n';
}
ans.clear();
}
return 0;
}