#include<bits/stdc++.h>
#define maxi 300005
#define f first
#define s second
#define mp make_pair
#define pb push_back
#define ll long long
#define si(n) scanf("%d",&n)
#define sll(n) scanf("%lld",&n)
#define TRACE
#ifdef TRACE
#define trace1(x)                cerr << #x << ": " << x << endl;
#define trace2(x, y)             cerr << #x << ": " << x << " | " << #y << ": " << y << endl;
#define trace3(x, y, z)          cerr << #x << ": " << x << " | " << #y << ": " << y << " | " << #z << ": " << z << endl;
#define trace4(a, b, c, d)       cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " << #d << ": " << d << endl;
#define trace5(a, b, c, d, e)    cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " << #d << ": " << d << " | " << #e << ": " << e << endl;
#define trace6(a, b, c, d, e, f) cerr << #a << ": " << a << " | " << #b << ": " << b << " | " << #c << ": " << c << " | " << #d << ": " << d << " | " << #e << ": " << e << " | " << #f << ": " << f << endl;
#else
#define trace1(x)
#define trace2(x, y)
#define trace3(x, y, z)
#define trace4(a, b, c, d)
#define trace5(a, b, c, d, e)
#define trace6(a, b, c, d, e, f)
#endif
#define gc getchar
ll mpow(ll a, ll n,ll mod){
	ll ret=1;ll b=a;
	while(n) {
		if(n&1)	ret=(ret*b)%mod;
		b=(b*b)%mod;
		n>>=1;
	}
	return (ll)ret;
}
void solve();
int dbg=1;
using namespace std;
int main(){
	//cin.sync_with_stdio(false);
	int t=1;
	si(t);
	for(int i=0;i<t;i++){
		//printf("Case #%d: ",i+1);
		solve();
	}
	return 0;
}
vector<pair<int, int> > ans;
vector<int> arr;
vector<int> cnt;
int n;
int isPossible(int index)
{
	ans.clear();
	int x = arr[2*n-1];
	cnt[arr[index]]--;
	cnt[arr[2*n-1]]--;
	ans.pb(mp(arr[2*n-1], arr[index]));
	for(int i=2*n-2;i>=0;i--)
	{
		if(cnt[arr[i]]){
			cnt[arr[i]]--;
			if(cnt[x-arr[i]])
			{
				cnt[x-arr[i]]--;
				ans.pb(mp(arr[i], x-arr[i]));
				x = arr[i];
			}
			else
				return 0;
		}
	}
	return 1;
}
void reset()
{
	for(int i=0;i<2*n;i++)
		cnt[arr[i]] = 0;
	for(int i=0;i<2*n;i++)
		cnt[arr[i]]++;
}
void solve(){
	cin>>n;
	arr.clear();
	cnt.clear();
	arr.resize(2*n);
	cnt.resize(1e6+5);
	for(int i=0;i<2*n;i++){
		cin>>arr[i];
		cnt[arr[i]]++;
	}
	sort(arr.begin(), arr.end());
	for(int i=0;i<2*n-1;i++)
		if(isPossible(i))
		{
			cout<<"YES"<<endl;
			cout<<ans[0].f+ans[0].s<<endl;
			for(int i=0;i<n;i++)
				cout<<ans[i].f<<" "<<ans[i].s<<endl;
			return;
		}
		else reset();
	cout<<"NO"<<endl;
}
