//Utkarsh.25dec #include <bits/stdc++.h> #define ll long long int #define pb push_back #define mp make_pair #define mod 1000000007 #define vl vector <ll> #define all(c) (c).begin(),(c).end() using namespace std; ll power(ll a,ll b) {ll res=1;a%=mod; assert(b>=0); for(;b;b>>=1){if(b&1)res=res*a%mod;a=a*a%mod;}return res;} ll modInverse(ll a){return power(a,mod-2);} const int N=500023; bool vis[N]; vector <int> adj[N]; int A[N]; vector <pair<int,int>> ans; long long readInt(long long l,long long r,char endd){ long long x=0; int cnt=0; int fi=-1; bool is_neg=false; while(true){ char g=getchar(); if(g=='-'){ assert(fi==-1); is_neg=true; continue; } if('0'<=g && g<='9'){ x*=10; x+=g-'0'; if(cnt==0){ fi=g-'0'; } cnt++; assert(fi!=0 || cnt==1); assert(fi!=0 || is_neg==false); assert(!(cnt>19 || ( cnt==19 && fi>1) )); } else if(g==endd){ if(is_neg){ x= -x; } if(!(l <= x && x <= r)) { cerr << l << ' ' << r << ' ' << x << '\n'; assert(1 == 0); } return x; } else { assert(false); } } } string readString(int l,int r,char endd){ string ret=""; int cnt=0; while(true){ char g=getchar(); assert(g!=-1); if(g==endd){ break; } cnt++; ret+=g; } assert(l<=cnt && cnt<=r); return ret; } long long readIntSp(long long l,long long r){ return readInt(l,r,' '); } long long readIntLn(long long l,long long r){ return readInt(l,r,'\n'); } string readStringLn(int l,int r){ return readString(l,r,'\n'); } string readStringSp(int l,int r){ return readString(l,r,' '); } void Merge(vector <int> L,vector <int> R) { int a=L.size(), b=R.size(); a--,b--; while(true) { if(b==-1) break; if(R[b]>L[a]) { b--; continue; } else { int indx=upper_bound(all(L),R[b])-L.begin(); swap(L[indx],R[b]); ans.pb(mp(indx+1,a+1+b+1)); swap(A[indx+1],A[a+1+b+1]); } } } int sumN=0; void solve() { ans.clear(); int n=readInt(2,1000,'\n'); sumN+=n; assert(sumN<=1000); int vis[n+1]={0}; for(int i=1;i<=n;i++) { if(i==n) A[i]=readInt(1,n,'\n'); else A[i]=readInt(1,n,' '); vis[A[i]]=1; } for(int i=1;i<=n;i++) assert(vis[i]==1); while(true) { int i=1; vector <int> L, R; L.pb(A[1]); for(i=2;i<=n;i++) { if(A[i]<A[i-1]) break; L.pb(A[i]); } if(i==n+1) break; int j=i; R.pb(A[i]); for(j=i+1;j<=n;j++) { if(A[j]<A[j-1]) break; R.pb(A[j]); } Merge(L,R); } cout<<ans.size()<<'\n'; for(auto it:ans) cout<<it.first<<' '<<it.second<<'\n'; } int main() { #ifndef ONLINE_JUDGE freopen("input.txt", "r", stdin); freopen("output.txt", "w", stdout); #endif ios_base::sync_with_stdio(false); cin.tie(NULL),cout.tie(NULL); int T=readInt(1,1000,'\n'); while(T--) solve(); assert(getchar()==-1); cerr << "Time : " << 1000 * ((double)clock()) / (double)CLOCKS_PER_SEC << "ms\n"; }