#include<bits/stdc++.h>
using namespace std;
const int N=2000010;
int T,n,m,k,a[N],wei[1000],nowshu,ttemp,ans;
deque<int> s[1000];
struct zyx{
int op,one,two;
}c[N];
inline int read(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
return x*f;
}
void write(int x){
if(x<0)putchar('-'),x=-x;
if(x>9)write(x/10);
putchar(x%10+'0');
return;
}
int empty_stack_num(){
for(int i=1;i<=n;i++)
if(s[i].empty())return i;
return 114514;
}
int sz1_stack_num(){
for(int i=1;i<=n;i++)
if(s[i].size()==1)return i;
return 114514;
}
int pd(){
int temp=0;
for(int i=1;i<=n;i++){
if(s[i].size()==0)temp++;
// cout<<"s["<<i<<"]为"<<s[i].size()<<"\n";
}
return temp;
}
void work(){
T=read();
while(T--){
n=read(),m=read(),k=read();
if(n==1){
while(m--)printf("1 1\n");
continue;
}
memset(a,0,sizeof a);
for(int i=1;i<=m;i++)a[i]=read();
memset(wei,-1,sizeof wei);
ans=0;
for(int i=1;i<=m;i++){
// cout<<"i="<<i<<",a[i]="<<a[i]<<'\n';
// for(int j=1;j<=n;j++){
// cout<<s[j].size()<<" ";
// }
// cout<<'\n';
if(wei[a[i]]==-1){
// cout<<"现在没有a[i]\n";
int sn=sz1_stack_num();
if(sn!=114514){
// printf("1 %d\n",sn);
c[++ans]=(zyx){1,sn,0};
s[sn].push_front(a[i]);
wei[a[i]]=sn;
continue;
}
if(pd()>1){
// cout<<"这里这里\n";
// cout<<"pd()不成立\n";
// int sn=sz1_stack_num();
// if(sn!=114514){
// printf("1 %d\n",sn);
// c[++ans]=(zyx){1,sn,0};
//// cout<<"将"<<a[i]<<"放入"<<sn<<'\n';
// s[sn].push_front(a[i]);
// wei[a[i]]=sn;
// continue;
// }
int esn=empty_stack_num();
if(esn!=114514){
// printf("1 %d\n",esn);
c[++ans]=(zyx){1,esn,0};
s[esn].push_front(a[i]);
wei[a[i]]=esn;
continue;
}
}
else{
// cout<<"只有一个空栈,其他全部为满\n";
for(int j=i+1;j<=m;j++){
if(a[i]==a[j]){
// cout<<"j="<<j<<'\n';
for(int fir=i+1;fir<=j;fir++){
// cout<<"fir="<<fir<<'\n';
// cout<<"a[fir]="<<a[fir]<<'\n';
// cout<<"wei[a[fir]]="<<wei[a[fir]]<<'\n';
int di=s[wei[a[fir]]].back();
if(di==a[fir]){
// cout<<"fir="<<fir<<'\n';
int din=s[wei[a[fir]]].front(),cishu=0;
for(int k=i+1;k<fir;k++){
if(a[k]==din)cishu++;
}
if(cishu%2==0){
// cout<<"偶数清空出锅\n";
int esn=empty_stack_num();
// printf("1 %d\n",wei[a[fir]]);
c[++ans]=(zyx){1,wei[a[fir]],0};
s[wei[a[fir]]].push_front(a[i]);
wei[a[i]]=wei[a[fir]];
for(int z=i+1;z<fir;z++){
if(a[z]==din){
// printf("1 %d\n",esn);
c[++ans]=(zyx){1,esn,0};
continue;
}
if(wei[a[z]]==-1){
sn=sz1_stack_num();
// printf("1 %d\n",sn);
c[++ans]=(zyx){1,sn,0};
s[sn].push_front(a[z]);
wei[a[z]]=sn;
}
else{
// printf("1 %d\n",wei[a[z]]);
c[++ans]=(zyx){1,wei[a[z]],0};
s[wei[a[z]]].pop_front();
wei[a[z]]=-1;
}
}
// printf("1 %d\n",esn);
c[++ans]=(zyx){1,esn,0};
// printf("2 %d %d\n",wei[a[fir]],esn);
c[++ans]=(zyx){2,wei[a[fir]],esn};
s[wei[a[fir]]].pop_back();
wei[a[fir]]=-1;
// for(int i=1;i<=n;i++){
// cout<<s[i].size()<<" ";
// }
// cout<<'\n';
}
else{
int esn=empty_stack_num();
// printf("1 %d\n",esn);
c[++ans]=(zyx){1,esn,0};
s[esn].push_front(a[i]);
wei[a[i]]=esn;
for(int z=i+1;z<fir;z++){
if(a[z]==din){
// printf("1 %d\n",wei[a[z]]);
c[++ans]=(zyx){1,wei[a[z]],0};
continue;
}
if(wei[a[z]]==-1){
for(int temp=1;temp<=n;temp++){
if(s[temp].size()==1&&temp!=esn){
sn=temp;
break;
}
}
// printf("1 %d\n",sn);
c[++ans]=(zyx){1,sn,0};
s[sn].push_front(a[z]);
wei[a[z]]=sn;
}
else{
// printf("1 %d\n",wei[a[z]]);
c[++ans]=(zyx){1,wei[a[z]],0};
s[wei[a[z]]].pop_front();
wei[a[z]]=-1;
}
}
// printf("1 %d\n",wei[a[fir]]);
c[++ans]=(zyx){1,wei[a[fir]],0};
s[wei[a[fir]]].clear();
// cout<<"di="<<di<<",din="<<din<<'\n';
wei[di]=-1;
wei[din]=-1;
// cout<<"出来了\n";
}
i=fir;
break;
}
}
break;
}
}
continue;
}
}
else{
// cout<<"这边\n";
if(s[wei[a[i]]].front()==a[i]){
// printf("1 %d\n",wei[a[i]]);
c[++ans]=(zyx){1,wei[a[i]],0};
s[wei[a[i]]].pop_front();
}
else{
int esn=empty_stack_num();
// printf("1 %d\n",esn);
c[++ans]=(zyx){1,esn,0};
// printf("2 %d %d\n",wei[a[i]],esn);
c[++ans]=(zyx){2,wei[a[i]],esn};
s[wei[a[i]]].pop_back();
wei[a[i]]=-1;
}
continue;
}
// cout<<"3333,"<<s[3].front()<<" "<<s[3].back()<<'\n';
}
cout<<ans<<'\n';
for(int i=1;i<=ans;i++){
if(c[i].op==1){
printf("1 %d\n",c[i].one);
}
else if(c[i].op==2){
printf("2 %d %d\n",c[i].one,c[i].two);
}
}
}
return;
}
int main(){
work();
return 0;
}
/*
1
3 10 5
1 2 3 4 5 1 3 5 2 4
1
4 28 7
1 2 3 4 5 6 7 6 5 6 5 4 2 4 2 1 1 5 4 6 5 4 7 1 2 3 5 4
*/
你说的对,但是《喵了个喵》是由 中国收钱协会 €€£ 自主研发的一款全新开放世界休闲抑智类。游戏发生在一个被称作 NOIP 的幻想世界,在这里,被 CFF 选中的人将被授予代码之力。你将扮演一位名为「OIer」的神秘角色,在自由的旅行中邂逅性格各异、能力独特的 n个双端队列,和他们一起击败RE,找回失散的分数——同时,逐步发掘「AC」的真相。 快和我们一起踏上P8866 [NOIP2022] 喵了个喵 的奇妙旅程吧!