#include <iostream>
#include <string>
#include <algorithm>
#include <map>
#include <vector>
#include <cmath>
#include <queue>
#include <set>
#include <bitset>

using namespace std;

typedef long long ll;
ll MOD = 1000000007;

bool simulate(vector<int> arr, int x)
{
	while (!arr.empty())
	{
		int i1 = arr.size() - 1;
		int a1 = arr[i1];
		arr.erase(arr.begin() + i1);
		auto iter2 = find(arr.begin(), arr.end(), x - a1);
		if (iter2 == arr.end())
		{
			return false;
		}
		else
		{
			int i2 = iter2 - arr.begin();
			int a2 = arr[i2];
			arr.erase(arr.begin() + i2);
			x = a1;
		}
	}
	return true;
}

void simulateAndPrint(vector<int> arr, int x)
{
	while (!arr.empty())
	{
		int i1 = arr.size() - 1;
		int a1 = arr[i1];
		arr.erase(arr.begin() + i1);
		auto iter2 = find(arr.begin(), arr.end(), x - a1);
		int i2 = iter2 - arr.begin();
		int a2 = arr[i2];
		arr.erase(arr.begin() + i2); 
		x = a1;

		cout << a1 << " " << a2 << endl;
	}
}

void solve(int testCase)
{
	int n;
	cin >> n; 
	vector<int> a;
	int in;
	for (int i = 0; i < 2 * n; i++)
	{
		cin >> in;
		a.push_back(in);
	}

	sort(a.begin(), a.end());
	vector<int> copy;
	for (int other = 2 * n - 2; other >= 0; other--)
	{
		copy.clear();
		for (int i = 0; i < 2 * n; i++)
			copy.push_back(a[i]);

		int x = a[2 * n - 1] + a[other];

		if (simulate(copy, x))
		{
			copy.clear();
			for (int i = 0; i < 2 * n; i++)
				copy.push_back(a[i]);

			int x = a[2 * n - 1] + a[other];
			cout << "YES" << endl;
			cout << x << endl;

			simulateAndPrint(copy, x);
			return;
		}
	}
	cout << "NO" << endl;
}
 
int main()
{
	int t;
	cin >> t;
	//t = 1;
	while (t--)
	{
		solve(t);
	}
	return 0;
}