#include<bits/stdc++.h>
using namespace std;
const int N=2e6+5;
vector<int> vec[N];
pair<int,int> las[N];
set<int> se;
int n,m,k,a[N],L[N],now;
struct que{int ff,x,y;};
vector<que> res;
void work1(int x,int z){
//	cout<<x<<' '<<z<<' '<<111<<' '<<now<<endl;
    if(!vec[x].size()){
        vec[x].push_back(z);
        las[z]=make_pair(x,0);
    }
    else{
        if(vec[x].back()==z){
            las[z]=make_pair(0,0);
            vec[x].pop_back();
            if(vec[x].size()<2&&x!=now)se.insert(x);
        }
        else{
            vec[x].push_back(z);
            las[z]=make_pair(x,(int)vec[x].size()-1);
            if(vec[x].size()>=2)se.erase(x);
        }
    }
}
void work2(int x,int y){
//	cout<<x<<' '<<y<<endl;
//	if(x==y)exit(1);
//	if(vec[x][0]!=vec[y][0])exit(1);
	las[vec[x][0]]=make_pair(0,0);
    vec[x].erase(vec[x].begin());
    vec[y].erase(vec[y].begin());
    if(vec[x].size()<2&&x!=now)se.insert(x);
    if(vec[y].size()<2&&y!=now)se.insert(y);
    for(int t:vec[x])las[t].second--;
    for(int t:vec[y])las[t].second--;
}
void Joseph_Stalin(){
    cin>>n>>m>>k;
    for(int i=1;i<=k;i++)las[i]=make_pair(0,0);
    for(int i=1;i<=n;i++)vec[i].clear();
    se.clear();
    for(int i=1;i<=m;i++)cin>>a[i];
    for(int i=1;i<n;i++)se.insert(i);
    now=n;
    res.clear();
    for(int i=1;i<=k;i++)las[i]=make_pair(0,0);
    for(int i=1;i<=m;i++){
//    	cout<<now<<endl;
//    	cout<<"!!!"<<endl;
//    	for(int x:se)cout<<x<<' ';
//    	cout<<endl;
//    	cout<<a[i]<<' '<<i<<' '<<555<<endl;
//    	for(int j=1;j<=n;j++,cout<<endl)for(int x:vec[j])cout<<x<<' ';
//    	cout<<"???"<<endl;
        int t=a[i];
        if(las[t].first){
            if(las[t].second==0){
                res.push_back((que){1,now,0});
                res.push_back((que){2,now,las[t].first});
                int p=las[t].first;
                work1(now,t);
                work2(now,p);
            }
            else{
                int x=las[t].first;
                res.push_back((que){1,x,0});
                work1(x,t);
            }
        }
        else{
            if(se.size()){
//            	cout<<666<<endl;
                int x=*se.begin();
                res.push_back((que){1,x,0});
                work1(x,t);
            }
            else{
                set<int> V;
                for(int j=i+1;j<=m;j++){
                    int y=a[j];
                    if(las[y].second==0){
                        if(V.find(las[y].first)!=V.end()){
                            res.push_back((que){1,now,0});
                            work1(now,t);
                            int ff=0;
                            for(int p=i+1;p<j;p++)L[a[p]]=las[a[p]].first;
                            for(int p=i+1;p<j;p++){
                                int tmp=a[p];
                                if(L[tmp]!=las[y].first){
                                    res.push_back((que){1,L[tmp],0});
                                    work1(L[tmp],tmp);
                                }
                                else{
                                    if(!ff){
                                        res.push_back((que){1,L[tmp],0});
                                        work1(L[tmp],tmp);
                                        ff=1;
                                    }
                                    else{
                                        res.push_back((que){1,now,0});
                                        work1(now,tmp);
                                    }
                                }
                            }
                            res.push_back((que){1,las[y].first,0});
                            if(vec[now].size()<2)se.insert(now);
                            now=las[y].first;
                            work1(las[y].first,y);
                            se.erase(now);
                        }
                        else{
//                        	cout<<las[y].first<<' '<<y<<' '<<222<<endl;
                            res.push_back((que){1,las[y].first,0});
                            work1(las[y].first,t);
                            for(int p=i+1;p<j;p++)L[a[p]]=las[a[p]].first;
                            for(int p=i+1;p<j;p++){
                                int tmp=a[p];
                                res.push_back((que){1,L[tmp],0});
                                work1(L[tmp],tmp);
                            }
                            res.push_back((que){1,now,0});
                            int p=las[y].first;
                            work1(now,y);
                            res.push_back((que){2,p,now});
                            work2(p,now);
                        }
                        i=j;
                        break;
                    }
                    else V.insert(las[y].first);
                }
            }
        }
    }
//    for(int i=1;i<=n;i++)if(vec[i].size())exit(2);
    cout<<res.size()<<'\n';
    for(que i:res){
        if(i.ff==1)cout<<1<<' '<<i.x<<'\n';
        else cout<<2<<' '<<i.x<<' '<<i.y<<'\n';
    }
    for(int i=1;i<=n;i++)vec[i].clear();
    for(int i=1;i<=k;i++)las[i]=make_pair(0,0);
}
int _;
int main(){
     freopen("meow.in","r",stdin);
     freopen("meow.out","w",stdout);
    ios::sync_with_stdio(0);
    cin>>_;
    while(_--)Joseph_Stalin();
}
/*
1
4 20 7
1 2 3 4 5 6 7 2 2 2 2 4 6 1 2 5 3 1 7 1

*/