#include <bits/stdc++.h>
#pragma GCC optimize("O2")
#pragma GCC optimize("O3")
#pragma GCC optimize("01")
#pragma GCC optimize("Ofast")
#define pb push_back
#define pf push_front
#define elif else if
#define endl '\n'
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
pair < int , int > inf{numeric_limits<int>::max() , 0};
//author -Who_Am_I
int fast_pow(int a, int b){int res = 1;while(b){if (b & 1)res *= a;a *= a;b >>= 1;}return res;}
bool bool_bin_search(vector < int > &ar , int l , int r , int searching_element){while (l <= r){int mid = (l + r) / 2;if (ar[mid] == searching_element)return 1;if (ar[mid] > searching_element)r = mid - 1;else l = mid + 1;}return 0;}
template < typename T1 >  ostream &operator << (std::ostream &out, vector < T1 > &ar){for (auto i = 0;i < ar.size();++i) out << ar[i] << " ";return out;}
template < typename T1 >  istream &operator >> (std::istream &in , vector < T1 > &ar){for (auto i = 0;i < ar.size();++i) in >> ar[i];return in;}

template < typename T1 , typename T2 , typename T3 >
struct node{T1 first;T2 second;T3 third;};


char tab = '\t';

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    int t;
    cin >> t;
    while (t--){
        int n;
        cin >> n;
        vector < int > ar(n << 1);
        cin >> ar;
        bool HP = false;
        sort(ar.begin() , ar.end());
        for (auto i = 0;i < ar.size();++i) {
            int x = ar[i] + ar.back();
            bool check = false;
            multiset < int > st;
            vector < int > res;
            for (auto &i : ar)
                st.emplace(i);
            for (auto j = 0; j < n; ++j) {
                auto it = st.end();
                --it;
                int second_item = x - *it;
                st.erase(it);
                auto item2 = st.find(second_item);
                if (item2 == st.end()){
                    check = true;
                    break;
                }
                res.pb(x - second_item);
                res.pb(second_item);
                x = max(x - second_item, second_item);
                st.erase(item2);
            }
            if (check)
                continue;
            if (!res.empty()){
                cout << "YES" << endl;
                cout << ar[i] + ar.back() << endl;
                for (auto i = 0;i < res.size();++i){
                    cout << res[i] << " ";
                    ++i;
                    cout << res[i] << endl;
                }
                HP = true;
                break;
            }
        }
        if (!HP)
            cout << "NO" << endl;
    }
    return 0;
}
