#include<bits/stdc++.h>
using namespace std;
int used[1000001];
int used1[1000001];
void solve(){
    int n;cin>>n;
    set<int,greater<int> >s;
    int a[2*n+1];

    for(int i=1;i<=2*n;i++){
        cin>>a[i];
        s.insert(a[i]);
        used[a[i]]++;
        used1[a[i]]++;
    }
    sort(a+1,a+2*n+1);

    for(int i=1;i<2*n;i++){
        int x=a[i]+a[2*n];
        set<int,greater<int> >st=s;
        used[a[2*n]]--;
        used[a[i]]--;
        if(used[a[2*n]]==0)
        st.erase(a[2*n]);
        if(used[a[i]]==0)st.erase(a[i]);
        vector<int>ans;
        ans.push_back(a[2*n]),ans.push_back(a[i]);
        x=a[2*n];

        bool ind=true;
        while(!st.empty()){

            int k=*st.begin();

            used[k]--;
            if(used[k]==0)
            st.erase(st.begin());

            if(st.find(x-k)==st.end()){
                ind=false;
                break;
            }

            ans.push_back(k),ans.push_back(x-k);
            used[x-k]--;
            if(used[x-k]==0)
            st.erase(x-k);
            x=max(k,x-k);
        }
        if(ind){
            cout<<"YES\n";
            cout<<a[2*n]+a[i]<<"\n";
            for(int k=0;k<ans.size();k+=2){
                cout<<ans[k]<<' '<<ans[k+1]<<"\n";
            }
            for(int i=1;i<=2*n;i++){
                used[a[i]]=used1[a[i]]=0;
            }

            return;
        }
        for(int i=1;i<=2*n;i++)used[a[i]]=used1[a[i]];
    }
    for(int i=1;i<=2*n;i++){
        used[a[i]]=used1[a[i]]=0;
    }
    cout<<"NO\n";
}
int main(){
    int t;cin>>t;
    while(t--)solve();
}
