提交时间:2024-11-03 12:39:20
运行 ID: 34036
#include<bits/stdc++.h> using namespace std; #define int long long const int MAXN=2000010; int read(){int x=0,f=1;char c=getchar();while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();}while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();return x*f;} int n,m,a[MAXN],p[MAXN],cnt,a1[MAXN],a2[MAXN],a3[MAXN]; void add(int x,int y,int z){a1[++cnt]=x,a2[cnt]=y,a3[cnt]=z;} void swp(int x,int y){ if(x>y)swap(x,y); add(1,x,y); swap(a[x],a[y]); swap(p[a[x]],p[a[y]]); } void slv(){ cnt=0; n=read(),m=read(); for(int i=1;i<=n;i++)a[i]=read(),p[a[i]]=i; if(a[n]==1){printf("-1\n");return;} if(n==2){ if(a[1]<a[2])printf("0\n"); else printf("-1\n"); return; } if(n==1){ printf("0\n"); return; } if(a[1]!=1){ add(1,p[1],n); swap(a[1],a[p[1]]); swap(p[1],p[a[p[1]]]); } for(int it=1;it<=n;it++)if(a[it]!=it){ swp(it,p[it]); } printf("%lld\n",cnt); for(int i=1;i<=cnt;i++){ printf("%lld %lld %lld\n",a1[i],a2[i],a3[i]); } } signed main(){ int _=read();while(_--) slv(); return 0; }