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

const int N = 600 + 10;
deque<int> q[N];
int pos[N];
// int a[N];
int ai;
set<int> fl1, fl2;

int main(void)
{
    freopen("meow.in", "r", stdin);
    freopen("meow.out", "w", stdout);
    int T;
    scanf("%d", &T);
    while (T--)
    {
        int n, m, k;
        scanf("%d%d%d", &n, &m, &k);
        for (int i = 1; i < n; i++)
            fl1.insert(i);


        string ans;
        int anscnt = 0;
        for (int i = 1; i <= m; i++)
        {
            scanf("%d", &ai);
            if (pos[ai])
            {
                // printf("1 %d\n", pos[ai]);
                int t = pos[ai];
                auto &dq = q[t];
                if (dq.size() == 1)
                {
                    // printf("1 %d\n", t);

                    anscnt++;
                    ans += string("1 ") + to_string(t) + '\n';

                    dq.pop_back();
                    fl1.insert(t);
                    fl2.erase(t);
                }
                else
                {
                    if (dq.back() == ai)
                    {
                        // printf("1 %d\n", t);
                        anscnt++;
                        ans += string("1 ") + to_string(t) + '\n';
                        dq.pop_back();
                    }
                    else
                    {
                        // printf("1 %d\n", n);
                        // printf("2 %d %d\n", t, n);

                        anscnt++;
                        ans += string("1 ") + to_string(n) + '\n';

                        anscnt++;
                        ans += string("2 ") + to_string(t) + ' ' + to_string(n) + '\n';
                        dq.pop_front();
                    }
                    // fl1.erase(t);
                    fl2.insert(t);
                }
                pos[ai] = 0;
            }
            else
            {
                if (!fl1.empty())
                {
                    int x = *fl1.begin();
                    fl1.erase(fl1.begin());
                    fl2.insert(x);
                    pos[ai] = x;
                    q[x].push_back(ai);
                    // printf("1 %d\n", x);

                    anscnt++;
                    ans += string("1 ") + to_string(x) + '\n';
                }
                else if (!fl2.empty())
                {
                    int x = *fl2.begin();
                    fl2.erase(fl2.begin());
                    pos[ai] = x;
                    q[x].push_back(ai);
                    // printf("1 %d\n", x);

                    anscnt++;
                    ans += string("1 ") + to_string(x) + '\n';
                }
                else
                {
                    // puts("1 1");

                    anscnt++;
                    ans += string("1 1") + '\n';
                }
            }
        }
        printf("%d\n%s", anscnt, ans.c_str());
    }
}