#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
#include<iostream>
#include<map>
#include<unordered_map>
#include<cmath>
#define pii pair<int,int>
#define inf 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int maxn=1e6+10;
struct node
{
	int x;
	int y;
}p,first;
map<int, int>mp;
map<int, int>mmp;
int n,m,t,a[maxn];
vector<node>v;
bool cmp(int x,int y)
{
	return x>y;
}
int main()
{
	ios::sync_with_stdio(false);
	cin>>t;
	while(t--) 
	{
		mp.clear();
		cin>>n;
		for(int i=1;i<=2*n;i++) 
		{
			cin>>a[i];
			mp[a[i]]++;
		}
		sort(a+1,a+1+2*n,cmp);
		mp[a[1]]--;
		first.x=a[1];
		int flag=0;
		for(int i=2;i<=2*n;i++) 
		{
			v.clear();
			int tmp=a[1],f=0;
			mmp=mp;
			mmp[a[i]]--;
			first.y=a[i];
			for(int j=2;j<=2*n;j++) 
			{
				if(mmp[a[j]]==0)
					continue;
				int num=tmp-a[j];
				mmp[a[j]]--;
				if(mmp[num]==0) 
				{
					f=1;
					break;
				}
				p.x=num;
				p.y=a[j];
				v.push_back(p);
				mmp[num]--;
				tmp=a[j];
			}
			if(f==0) 
			{
				flag=1;
				break;
			}
		}
		if(flag)
		{
			cout<<"YES"<<endl;
			cout<<first.x+first.y<<endl;
			cout<<first.x<<" "<<first.y<<endl;
			for(int i=0;i<v.size();i++)
				cout<<v[i].x<<" "<<v[i].y<<endl;
		}
		else
			cout<<"NO"<<endl;
	}
	return 0;
}
   	   		 											 	 		   	