#include<bits/stdc++.h>
using namespace std;
#define ll long long

inline int read()
{
    int x=0,f=1;char s=getchar();
    while(s<'0'||s>'9')
    {
        if(s=='-') f=-1;
        s=getchar();
    }
    while(s>='0'&&s<='9')
    {
        x=x*10+s-'0';
        s=getchar();
    }
    return x*f;
}

const int N=2e6+5;
int n,m,k,a[N];

namespace subtask1
{

vector<int> v[305];
int s[N];
void check()
{
    for(int i=1;i<=n;i++) v[i].clear();
    for(int i=1;i<=m;i++)
    {
        v[s[i]].push_back(a[i]);
        if(v[s[i]].size()>=2&&v[s[i]].back()==v[s[i]][v[s[i]].size()-1])
        {
            v[s[i]].pop_back();
            v[s[i]].pop_back();
        }
    }
    if(n==2)
    {
        if(v[1].size()!=v[2].size()) return;
        for(int i=0;i<v[1].size();i++)
            if(v[1][i]!=v[2][i]) return;
        int op=m+v[1].size();
        cout<<op<<endl;
        for(int i=1;i<=m;i++) printf("1 %d\n",s[i]);
        for(int i=0;i<v[1].size();i++) printf("2 1 2\n");
        exit(0);
    }
}

void dfs(int x)
{
    if(x>m)
    {
        check();
        return;
    }
    for(int i=1;i<=n;i++)
    {
        s[x]=i;
        dfs(x+1);
    }
}

void main()
{
    dfs(1);
}
}

namespace subtask2
{
int sta[305][305],top[305];
vector<pair<int,int> > ans;
inline void pushstk(int sid,int x)
{
    ans.push_back(make_pair(1,sid));
    sta[sid][++top[sid]]=a[x];
    if(top[sid]>=2)
    {
        if(sta[sid][top[sid]]==sta[sid][top[sid]-1]) top[sid]-=2;
    }
}

inline void del(int sid,int x)
{
    ans.push_back(make_pair(1,n));
    ans.push_back(make_pair(2,sid));
    sta[sid][1]=sta[sid][2];
    top[sid]--;
}

void main()
{
    for(int i=1;i<=m;i++)
    {
        int id=a[i];
        int sid=(id+1)>>1;
        if(top[sid]==0) pushstk(sid,i);
        else
        {
            if(top[sid]==1) pushstk(sid,i);
            else
            {
                if(sta[sid][2]==id) pushstk(sid,i);
                else del(sid,i);
            }
        }
    }
    cout<<ans.size()<<endl;
    for(auto x:ans)
    {
        int op=x.first,sid=x.second;
        if(op==1) printf("1 %d\n",sid);
        else printf("2 %d %d\n",sid,n);
    }
}
}
int main()
{
    freopen("meow.in","r",stdin);
    freopen("meow.out","w",stdout);
    int T=read();
    while(T--)
    {
        n=read(),m=read(),k=read();
        for(int i=1;i<=m;i++) a[i]=read();
        if(k==2*n-2) subtask2::main();
        else subtask1::main();
    }
    return 0;
}
