#include <iostream>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
vector<int> check(int n, vector<int> a, int x)
{
multiset<int> 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); Original Position in Igorl solution
auto it2 = s.find(y);
s.erase(it1); // Shifted Position
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()
{
int t;
cin >> t;
for (int c = 0; c < t; c++)
{
solve();
}
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8c2V0PgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnZlY3RvcjxpbnQ+IGNoZWNrKGludCBuLCB2ZWN0b3I8aW50PiBhLCBpbnQgeCkKewogICAgbXVsdGlzZXQ8aW50PiBzOwogICAgZm9yIChhdXRvIGUgOiBhKQogICAgICAgIHMuaW5zZXJ0KGUpOwogICAgdmVjdG9yPGludD4gcmVzOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCiAgICB7CiAgICAgICAgYXV0byBpdDEgPSBzLmVuZCgpOwogICAgICAgIGl0MS0tOwogICAgICAgIGludCB5ID0geCAtICppdDE7CiAgICAgICAgLy8gcy5lcmFzZShpdDEpOwkJCQlPcmlnaW5hbCBQb3NpdGlvbiBpbiBJZ29ybCBzb2x1dGlvbgogICAgICAgIGF1dG8gaXQyID0gcy5maW5kKHkpOwogICAgICAgIHMuZXJhc2UoaXQxKTsJCQkJCS8vIFNoaWZ0ZWQgUG9zaXRpb24KICAgICAgICBpZiAoaXQyID09IHMuZW5kKCkpCiAgICAgICAgICAgIHJldHVybiB7fTsKICAgICAgICByZXMucHVzaF9iYWNrKHggLSB5KTsKICAgICAgICByZXMucHVzaF9iYWNrKHkpOwogICAgICAgIHggPSBtYXgoeCAtIHksIHkpOwogICAgICAgIHMuZXJhc2UoaXQyKTsKICAgIH0KICAgIHJldHVybiByZXM7Cn0KCnZvaWQgc29sdmUoKQp7CiAgICBpbnQgbjsKICAgIGNpbiA+PiBuOwogICAgdmVjdG9yPGludD4gYSgyICogbik7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IDIgKiBuOyBpKyspCiAgICAgICAgY2luID4+IGFbaV07CiAgICBzb3J0KGEuYmVnaW4oKSwgYS5lbmQoKSk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IDIgKiBuIC0gMTsgaSsrKQogICAgewogICAgICAgIGludCB4ID0gYVtpXSArIGFbMiAqIG4gLSAxXTsKICAgICAgICB2ZWN0b3I8aW50PiByZXMgPSBjaGVjayhuLCBhLCB4KTsKICAgICAgICBpZiAocmVzLnNpemUoKSkKICAgICAgICB7CiAgICAgICAgICAgIGNvdXQgPDwgIllFU1xuIjsKICAgICAgICAgICAgY291dCA8PCB4IDw8ICJcbiI7CiAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgbjsgaisrKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBjb3V0IDw8IHJlc1syICogal0gPDwgIiAiIDw8IHJlc1syICogaiArIDFdIDw8ICJcbiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIGNvdXQgPDwgIk5PXG4iOwp9CgppbnQgbWFpbigpCnsKICAgIGludCB0OwogICAgY2luID4+IHQ7CiAgICBmb3IgKGludCBjID0gMDsgYyA8IHQ7IGMrKykKICAgIHsKICAgICAgICBzb2x2ZSgpOwogICAgfQp9