#include<bits/stdc++.h>
using namespace std;
const int maxn = 1010;
int a[maxn*2];
int main(){
    int t;scanf("%d",&t);
    while(t--){
        int n;scanf("%d",&n);
        for(int i=1;i<=2*n;i++){
            scanf("%d",&a[i]);
        }
        sort(a+1,a+1+2*n);
        reverse(a+1,a+1+2*n);
        int delans=-1;
        for(int del=2;del<=2*n;del++){
            multiset<int> mst;
            int now=a[1];
            for(int i=2;i<=2*n;i++){
                if(i==del) continue;
                mst.insert(a[i]);
            }
            bool f=false;
            while(mst.size()>0){
                int bg=*mst.rbegin();
                mst.erase(mst.find(bg));
               // cout<<now<<" "<<bg<<endl;
                if(mst.find(now-bg)==mst.end()){
                    f=true;break;
                }
                mst.erase(mst.find(now-bg));
                //cout<<now<<" "<<bg<<" "<<now-bg<<endl;
                now=bg;
            }
            if(f==false){
                delans=del;break;
            }
        }
       // cout<<delans<<endl;
        if(delans==-1) puts("NO");
        else{
            puts("YES");
            printf("%d\n",a[1]+a[delans]);
            printf("%d %d\n",a[1],a[delans]);
            int now=a[1];
            multiset<int> mst;
            for(int i=2;i<=2*n;i++){
                if(i==delans)continue;
                mst.insert(a[i]);
            }
            while(mst.size()>0){
                int bg=*mst.rbegin();
                mst.erase(mst.find(bg));
                mst.erase(mst.find(now-bg));
                printf("%d %d\n",bg,now-bg);
                now=bg;
            }
        }
    }
    return 0;
}
