#include <bits/stdc++.h>
 
#define ll long long
#define ld long double
#define ull unsigned ll
#define ioi exit(0);
 
#define inf (ll)1e18+7
 
#define F first
#define S second
 
#define pb push_back
#define ppb pop_back
 
#define lb(x) lower_bound(x)
#define ub(x) upper_bound(x)
 
#define sz(x) x.size()
 
#define all(x) x.begin(),x.end()
 
#define NFS ios_base :: sync_with_stdio(0), cin.tie(0), cout.tie(0);
 
const int N = 3e3 + 30;
 
using namespace std;   

int a[N];
map<int, int> mp;

void solve(){
	
	int n;
	cin >> n;
	
	for(int i = 1; i <= 2 * n; i++){
		cin >> a[i];
	}
	
	sort(a + 1, a + 1 + (n * 2));
	
	for(int i = 1; i < 2 * n; i++){
		int x = a[2 * n];
		mp.clear();
		for(int j = 1; j < 2 * n; j++){
			mp[a[j]]++;
			
		}
		mp[a[i]]--;
		
		bool ok = 1;
		for(int j = 2 * n - 1; j >= 1; --j){
            if(j == i || !mp[a[j]]){
                continue;
            }
            int k = x - a[j];
            if(!mp.count(k) || !mp[k] || mp[k] == 1 && k == a[j]){
                ok = 0;
                break;
            }
            x = a[j];
            mp[k]--;
            mp[a[j]]--;
        }
		if(ok){
			cout << "YES" << '\n' << a[n * 2] + a[i] << '\n' << a[n * 2] << ' ' << a[i] << '\n';
			mp.clear();
			for(int j = 1; j <= 2 * n; ++j){
                mp[a[j]]++;
            }
            
            mp[a[i]]--;
            mp[a[n * 2]]--;
            
            ok = 1;
            x = a[n * 2];
			for(int j = 2 * n - 1; j >= 1; --j){
                if(j == i || !mp[a[j]]){
                    continue;
                }
                int k = x - a[j];
                cout << min(k, a[j]) << ' ' << max(k, a[j]) << '\n';
                x = a[j];
                mp[k]--;
                mp[a[j]]--;
            }
			return;
		}
	}
	
	cout << "NO" << '\n';

}

int main(){
 
    NFS
	    
    int tt;
    cin >> tt;
    
    while(tt--){
    	solve();
    }
    
	ioi
}