/********   All Required Header Files ********/
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <sstream>
#include <queue>
#include <deque>
#include <bitset>
#include <iterator>
#include <list>
#include <stack>
#include <map>
#include <set>
#include <functional>
#include <numeric>
#include <utility>
#include <limits>
#include <time.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>

using namespace std;
/*******  All Required define Pre-Processors and typedef Constants *******/
#define ll long long int
#define ull unsigned long long int
#define li long int
#define uli unsigned long int
#define MOD 1e10+7
#define all(a) a.begin(),a.end()
#define FOR(i,j,k,l) for(int i=j;i<k;i+=l)
#define RFOR(i,j,k,l) for(int i=j;i>=k;i-=l)
#define REP(i,j) FOR(i,0,j,1)
#define RREP(i,j) FOR(i,j,0,1)
#define PB push_back
#define _finout ios::sync_with_stdio(0);cin.tie(0)
typedef vector<int> VI;
typedef vector<char> VC;
typedef vector<string> VS;
typedef vector<VI> VVI;
typedef vector<ll> VL;
typedef set<int> SETI;
typedef map<int,int> MPII;
typedef multiset<int> MSETI;
// const int N = (int)(2*1e5 +10);
long long sq(int x){return 1ll * x*x;}
// ll dp[N];
// ll lev[N];
// VL adj[N];
bool isprime(long long int num){
    for(long long int i=2;i<=sqrt(num);i++){
        if (num%i == 0) return false;
    }
    return true;
}
vector<int> check(int n,vector<int>a,int x){
    MSETI s;
    for(auto e:a) s.insert(e);
    vector<int> res;
    for(int i=0;i<n;i++){
        auto it1 = s.end();
        it1--;
        int y = x - *it1;
        s.erase(it1);
        auto it2 = s.find(y);
        if(it2==s.end()) return {};
        res.push_back(x-y);
        res.push_back(y);
        x = max(x-y,y);
        s.erase(it2);
    }
    return res;
}
void solve()
{
    int n;
    cin >> n;
    vector<int> a(2 * n);
    for (int i = 0; i < 2 * n; i++)
        cin >> a[i];
    sort(a.begin(), a.end());
    for (int i = 0; i < 2 * n - 1; i++)
    {
        int x = a[i] + a[2 * n - 1];
        vector<int> res = check(n, a, x);
        if (res.size())
        {
            cout << "YES\n";
            cout << x << "\n";
            for (int j = 0; j < n; j++)
            {
                cout << res[2 * j] << " " << res[2 * j + 1] << "\n";
            }
            return;
        }
    }
    cout << "NO\n";
}
int main(){
    _finout;
    int T;
    cin>>T;
    while(T--){
        solve();
    }
}
