#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <map>
#include <climits>
#include <numeric>
#include <set>
#include <cassert>

using namespace std;

bool simulate(multimap<int, int> s, int sum, bool print = false) {
    if (print)
        cout << sum << "\n";
    assert(sum != 0);

    while (!s.empty()) {
        auto l = (--s.end());
        int rem = sum - l->first;
        auto it = s.find(rem);

        if (l->first == rem) {// possible
            if (s.count(rem) >= 2) {
                sum = l->first;
                if (print)
                    cout << l->first << " ";
                s.erase(l);
                it = s.find(rem);
                assert(it != s.end());
                if (print)
                    cout << it->first << "\n";
                s.erase(it);
            }
            else {
                return false;
            }
        }
        else if (it != s.end()) {
            sum = max(it->first, l->first);
            if (print)
                cout << l->first << " " << it->first << "\n";
            s.erase(l);
            s.erase(it);
        }
        else {
            return false;
        }
    }
    return true;
}

int main() {
    int tests = 1;
    cin >> tests;
    while (tests--) {
        int n;
        cin >> n;
        vector<int> arr(2 * n);
        //sort(arr.begin(), arr.end());
        multimap<int, int> s;
        for (int i = 0; i < arr.size(); i++) {
            cin >> arr[i];
            s.emplace(arr[i], i + 1);
        }
        bool done = false;
        int mex = (--s.end())->first;
        for (auto it = s.begin(); it != s.end(); it++) {
            bool poss = simulate(s, it->first + mex);
            if (poss) {
                cout << "YES\n";
                simulate(s, it->first + mex, true);
                done = true;
                break;
            }
        }

        if (!done) {
            cout << "NO\n";
        }
    }
    return 0;
}