#include<cstdio>
int T;
namespace meow_1{
    int st[2000005][10];
    struct Data{
        int op,s1,s2;
    }res[2000005];
    int main(){
        for(int I=1;I<=T;I++){
            int n,m,k;
            scanf("%d%d%d",&n,&m,&k);
            res[0].op=0;
            for(int i=1;i<=n;i++){
                st[i][0]=0;
            }
            for(int i=1;i<=m;i++){
                int now;
                scanf("%d",&now);
                int ns=now/2+now%2;
                if(st[ns][0]==0){
                    st[ns][0]++;
                    st[ns][st[ns][0]]=now;
                    // printf("1 %d\n",ns);
                    res[0].op++;
                    res[res[0].op].op=1;
                    res[res[0].op].s1=ns;
                    continue;
                }
                if(st[ns][st[ns][0]]!=now){
                    if(st[ns][1]==now){
                        st[ns][0]--;
                        for(int j=1;j<=st[ns][0];j++){
                            st[ns][j]=st[ns][j+1];
                        }
                        // printf("1 %d\n",n);
                        // printf("2 %d %d\n",ns,n);
                        res[0].op++;
                        res[res[0].op].op=1;
                        res[res[0].op].s1=n;
                        res[0].op++;
                        res[res[0].op].op=2;
                        res[res[0].op].s1=ns;
                        res[res[0].op].s2=n;
                        continue;
                    }
                    st[ns][0]++;
                    st[ns][st[ns][0]]=now;
                    // printf("1 %d\n",ns);
                    res[0].op++;
                    res[res[0].op].op=1;
                    res[res[0].op].s1=ns;
                    continue;
                }
                if(st[ns][st[ns][0]]==now){
                    st[ns][0]--;
                    // printf("1 %d\n",ns);
                    res[0].op++;
                    res[res[0].op].op=1;
                    res[res[0].op].s1=ns;
                    continue;
                }
            }
            printf("%d\n",res[0].op);
            for(int i=1;i<=res[0].op;i++){
                if(res[i].op==1){
                    printf("%d %d\n",res[i].op,res[i].s1);
                }
                if(res[i].op==2){
                    printf("%d %d %d\n",res[i].op,res[i].s1,res[i].s2);
                }
            }
        }
        return 0;
    } // meow_1::main()
} // meow_1
// cannot solve other subtasks, ran away. 
namespace meow_2345{
    int st[2000005][10];
    struct Data{
        int op,s1,s2;
    }res[2000005];
    int main(){
        for(int I=1;I<=T;I++){
            int n,m,k;
            scanf("%d%d%d",&n,&m,&k);
            res[0].op=0;
            for(int i=1;i<=n;i++){
                st[i][0]=0;
            }
            for(int i=1;i<=m;i++){
                int now;
                scanf("%d",&now);
                int ns=now/2+now%2;
                if(st[ns][0]==0){
                    st[ns][0]++;
                    st[ns][st[ns][0]]=now;
                    // printf("1 %d\n",ns);
                    res[0].op++;
                    res[res[0].op].op=1;
                    res[res[0].op].s1=ns;
                    continue;
                }
                if(st[ns][st[ns][0]]!=now){
                    if(st[ns][1]==now){
                        st[ns][0]--;
                        for(int j=1;j<=st[ns][0];j++){
                            st[ns][j]=st[ns][j+1];
                        }
                        // printf("1 %d\n",n);
                        // printf("2 %d %d\n",ns,n);
                        res[0].op++;
                        res[res[0].op].op=1;
                        res[res[0].op].s1=n;
                        res[0].op++;
                        res[res[0].op].op=2;
                        res[res[0].op].s1=ns;
                        res[res[0].op].s2=n;
                        continue;
                    }
                    st[ns][0]++;
                    st[ns][st[ns][0]]=now;
                    // printf("1 %d\n",ns);
                    res[0].op++;
                    res[res[0].op].op=1;
                    res[res[0].op].s1=ns;
                    continue;
                }
                if(st[ns][st[ns][0]]==now){
                    st[ns][0]--;
                    // printf("1 %d\n",ns);
                    res[0].op++;
                    res[res[0].op].op=1;
                    res[res[0].op].s1=ns;
                    continue;
                }
            }
            printf("%d\n",res[0].op);
            for(int i=1;i<=res[0].op;i++){
                if(res[i].op==1){
                    printf("%d %d\n",res[i].op,res[i].s1);
                }
                if(res[i].op==2){
                    printf("%d %d %d\n",res[i].op,res[i].s1,res[i].s2);
                }
            }
        }
        return 0;
    } // meow_2345::main()
} // meow_2345
int main(){
    freopen("meow.in","r",stdin);
    freopen("meow.out","w",stdout);
    scanf("%d",&T);
    if(T%10==1){
        return meow_1::main();
    }
    if(T%10!=1){
        return meow_2345::main();
    }
    return 0;
}