//🍪🍪🍪

#include <bits/stdc++.h>

using namespace std;
using ll = long long;
using ld = long double;

const int MAXN = 1e5 + 23;
const int MAX_LOG = 24;
const int INF = 1e9 + 23;
const ll BIGINF = 1e17 + 23;
const int MOD = 1e9 + 7;

// #define SINGLE_TEST
// #define ULTRA_MEGA_COOL_RAND
#define int long long
// #define PRAGM
#define all(x) x.begin(), x.end()
#define rng(i, a, b) for(ll i = a; i < b; i++)
#define rev(i, a, b) for(ll i = a; i > b; i--)
#define rep(i, a) rng(i, 0, a)
#define help ios_base::sync_with_stdio(false);cin.tie(nullptr);
#define me cout.tie(nullptr);
#define fileIO(x) freopen(((string)x + ".in").c_str(), "r", stdin);freopen(((string)x + ".out").c_str(), "w", stdout);
#ifdef PRAGM
#pragma GCC optimize("Ofast,no-stack-protector,unroll-loops,fast-math,O3")
#pragma GCC target("sse,sse2,sse3,ssse3,sse4,tune=native")
#endif

inline bool check(int ans, int d) {
    vector<int> div;
    for (int j = 1; j * j <= ans; j++) {
        if (ans % j) continue;
        div.push_back(j);
        div.push_back(ans / j);
    }
    sort(all(div));
    if (div[1] - div[0] >= d) {
        return true;
    }
    return false;
}

inline bool prime(int n) {
    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0) return false;
    }
    return true;
}

inline void solve() {
    int n;
    cin >> n;
    n *= 2;
    vector<int> arr(n);
    rep(i, n) cin >> arr[i];
    sort(all(arr));

    bool flag = false;
    int res = 0;
    vector<pair<int, int>> ans;
    rep(i, n - 1) {
        ans.clear();
        res = arr[i] + arr[n - 1];
        multiset<int> st(all(arr));
        ans.push_back({arr[i], arr[n - 1]});
        st.erase(st.lower_bound(arr[i]));
        st.erase(st.lower_bound(arr[n - 1]));
        int cur = arr[n - 1], ind = n - 2;
        vector<bool> used(2 * n);
        used[i] = true;
        used[n - 1] = true;

        while (ind > 0) {
            if (st.find(arr[ind]) == st.end()) {
                ind--;
                continue;
            }
            st.erase(st.lower_bound(arr[ind]));
            auto lb = st.lower_bound(cur - arr[ind]);
            if (lb == st.end() || *lb != cur - arr[ind]) break;
            ans.push_back({*lb, arr[ind]});
            st.erase(lb);
            cur = arr[ind];
            ind--;
        }
        if (ans.size() == n / 2) {
            flag = true;
            break;
        }
    }
    if (!flag) {
        cout << "NO\n";
    } else {
        cout << "YES\n" << res << "\n";
        for (auto &i : ans) {
            cout << i.first << " " << i.second << "\n";
        }
    }
}

signed main() {
    help me

#ifdef ULTRA_MEGA_COOL_RAND
    srand(clock());
#endif

    int cases = 1;
#ifndef SINGLE_TEST
    cin >> cases;
#endif
    while (cases--)
        solve();
    return 0;
}