#include<bits/stdc++.h>
using namespace std;
map<int,int>mp;
queue<int>q;
map<int,int>::iterator mt;
void init(){
    mt=mp.end();
    mt--;
}
bool erase(int u,int v){
    if(!mp[u])return 0;
    q.push(u);
    mp[u]--;
    if(!mp[v])return 0;
    q.push(v);
    mp[v]--;
    while((*mt).second==0 and mt!=mp.begin()){
 //       cerr<<(*mt).first<<endl;
        mt--;
    }
    
    return 1;
}
void add(){
    while(!q.empty()){
        mp[q.front()]++;
        q.pop();
    }
}
int main(){
	    int t;
    cin>>t;
    while(t--){
        int n;
        cin>>n;
        int a[2*n+5],m=0;
        
        for(int i=1;i<=2*n;i++){
            cin>>a[i];
            mp[a[i]]++;
        }
        bool ok=0;
        
        for(auto it:mp){
            
            init();
            
            int x=(*mt).first,t=1;
            if(!erase(it.first,(*mt).first)){
            add(); continue;}
           
            
       //     cerr<<x+it.first<<endl;
            for(int i=1;i<n;i++){
        //        cerr<<"x"<<x<<endl;
                int p=x;
                x=(*mt).first;
                if(!erase((*mt).first,p-(*mt).first)){
                    t=0;
                    break;
                }
                
            }
            if(t){
                ok=1;
                break;
            }
            add();
        }
        if(ok){
            cout<<"YES"<<endl;
            int u=q.front();
            q.pop();
            cout<<u+q.front()<<endl;
            cout<<u<<' '<<q.front()<<endl;
            q.pop();
            while(!q.empty()){
                u=q.front();
                q.pop();
                cout<<u<<' '<<q.front()<<endl;
                q.pop();
            }
        }else cout<<"NO"<<endl;
        mp.clear();
    }
}
