#include<bits/stdc++.h>
using namespace std;

struct Node {
	int x,y;
};

int n,t,k;
vector<int> V;

bool fg(vector<int> a, int x) {
	multiset<int> S;
	int key = x;
	for(auto it : a) {
		S.insert(it);
	}
	vector<Node> ans;
	for(int i = 0;i < n; ++i) {
		auto it1 = S.end();
		it1--;
		int y = x - *it1;
		S.erase(it1);
		auto it2 = S.find(y);
		if(it2 == S.end()) {
			return true;
		}
		S.erase(it2);
		ans.push_back({x-y,y});
		x = max(x-y,y);
	}
	puts("YES");
	printf("%d\n",key);
	for(int i = 0,len = ans.size();i < len; ++i) {
		printf("%d %d\n",ans[i].x,ans[i].y);
	}
	return false;
}


int main()
{
	scanf("%d",&t);
	while(t--) {
		V.clear();
		scanf("%d",&n);
		for(int i = 0;i < 2 * n; ++i) {
			scanf("%d",&k);
			V.push_back(k);
		}
		sort(V.begin(),V.end());
		bool is = true;
		for(int i = 0;i < 2 * n - 1; ++i) {
			int x = V[i] + V[2 * n - 1];
			is = fg(V,x);
			if(!is)
				break;
		}
		if(is) {
			puts("NO");
		}
	}
	
	return 0;
}