#include<bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define fi first #define len(s) (int)s.size() #define se second const int N=1e5+5,mod=1e9+7,INF=0x3f3f3f3f,P=998244353; const double pi=acos(-1.0),E=exp(1),esp=1e-10; void solve() { int n; cin>>n; vector<int>a(n+1),b(n+1); vector<pair<int,int>>ans; int len=(n+1)/2; map<int,set<int>>pos; for(int i=1;i<=n;i++) { cin>>a[i]; pos[a[i]].insert(i); b[i]=a[i]; } sort(b.begin()+1,b.end()); for(int i=2;i<=(n+1)/2;i++) if(b[i]+b[n+1-i]!=b[1]+b[n]) { cout<<"NO\n"; return ; } cout<<"YES\n"; int val=b[1]+b[n]; if(n%2) { int x=*pos[val/2].begin(); if(x!=len) { pos[a[len]].erase(len); pos[a[len]].insert(x); a[x]=a[len]; a[len]=val/2; ans.pb({len,x}); } pos[val/2].erase(x); } for(int i=1;i<=n/2;i++) { pos[a[i]].erase(i); if(a[i]+a[n+1-i]!=val) { int t=val-a[i]; int pos1=*pos[t].begin(); pos[t].erase(pos1); pos[a[n-i+1]].erase(n-i+1); pos[a[n-i+1]].insert(pos1); a[pos1]=a[n-i+1]; ans.pb({pos1,n-i+1}); } else pos[a[n-i+1]].erase(n-i+1); } cout<<ans.size()<<'\n'; for(auto [x,y]:ans) cout<<x<<' '<<y<<'\n'; } int main() { ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); int t=1;cin>>t; while(t--) solve(); return 0; }
全部评论
(0) 回帖