#include <bits/stdc++.h>
#include <climits>
#define F first
#define S second
#define all(v) v.begin(),v.end()
#define li long int
#define lli long long int
#define pb push_back
#define loop(a,b,i) for(lli i=a ; i<b ; i++)
#define rev_loop(a,b,i) for(lli i=a ; i>=b ; i--)
#define MAX(a,b) (a>b)?a:b
#define lele(arr, n) loop(0,n,i) cin>>arr[i];
#define VAL 10005
#define N 1005

using namespace std;

void solve(){
    int n;
    cin>>n;
    long int arr[2*n], mx=0;
    loop(0, 2*n, i){ 
        cin>>arr[i];
        if(arr[i] > arr[mx]) mx = i;
    }
    int i;
    bool flag;
    for(i=0 ; i<2*n ; i++){                      // O(n)
        if(i == mx) continue;
        multiset<int> tmp;
        loop(0, 2*n, j){                        // O(n)
            if(j == i || j == mx) continue;
            tmp.insert(arr[j]);
        }
        long int lastMx = arr[mx], curMx;
        flag=true;
        while(!tmp.empty()){
            curMx = *tmp.rbegin();
            tmp.erase(tmp.find(curMx));
            if(tmp.find(lastMx - curMx) == tmp.end()){
                flag = false;
                break;
            }
            tmp.erase(tmp.find(lastMx - curMx));
            lastMx = curMx;
        }
        if(flag) break;
    }
    if(!flag){ 
        cout<<"NO\n";
        return;
    }
    cout<<"YES\n";
    cout<<arr[mx] + arr[i]<<endl;
    cout<<arr[mx]<<" "<<arr[i]<<endl;
    multiset<int> tmp;
    loop(0, 2*n, j){                        // O(n)
        if(j == i || j == mx) continue;
        tmp.insert(arr[j]);
    }
    long int lastMx = arr[mx];
    while(!tmp.empty()){
        long int x = *tmp.rbegin(), y = *tmp.find(lastMx - x);
        cout<<x<<" "<<y<<"\n";
        tmp.erase(tmp.find(x));
        tmp.erase(tmp.find(lastMx - x));
        lastMx = x;
    }
    return;
}

int main() 
{ 
    int t;
    cin>>t;
    while(t--){
        solve();
    }
    return 0;
}