//R<3S
#include <bits/stdc++.h>
#define hell 1000000007
#define PI 3.14159265358979323844
#define mp make_pair
#define pb push_back
#define fi first 
#define se second
#define ALL(v) v.begin(), v.end()
#define SORT(v) sort(ALL(v))  
#define REVERSE(v) reverse(ALL(v))
#define endl "\n"
#define vecmax(v) max_element(all(v))
#define vecmin(v) min_element(all(v))
#define GCD(m,n) __gcd(m,n)
#define LCM(m,n) m*(n/GCD(m,n))
#define rep(i, n)    for(int i = 0; i < (n); ++i)
#define repA(i, a, n)  for(int i = a; i <= (n); ++i)
#define repD(i, a, n)  for(int i = a; i >= (n); --i)
#define trav(x) for(auto i : x)
#define sz(a) (int)a.size()
#define sl(a) (int)a.length()
#define int long long
#define ld long double 
#define pii std::pair<int, int> 
#define pll std::pair<ll, ll>  
#define vi vector<int>  
#define vl vector<ll>
#define vvi vector<vi > 
#define vii vector<pii >
#define mii map<int,int>
#define mll map<ll,ll>


using namespace std;

void solve()
  {
	int n;
	cin>>n;
	int a[2*n];
	multiset<int,greater<int>> s,m1,m2;
	rep(i,2*n)
	{
		cin>>a[i];
		s.insert(a[i]);
		m1.insert(a[i]);
		
	}
	int maxm = *s.begin();
	s.erase(s.begin());
	m1.erase(m1.begin());
	trav(s)
	{
		vii v;
		bool ok = true;
		int p = i;
		int mxm = maxm;
		m2=m1;
		m2.erase(m2.find(i));
		v.pb({mxm,p});
		while(!m2.empty())
		{
			int curr = *m2.begin();
			m2.erase(m2.begin());
			if(m2.find(mxm-curr)==m2.end()){ ok = false;break;}
			m2.erase(m2.find(mxm-curr));
			v.pb({curr,mxm-curr});
			mxm=curr;
			
		}
		if(ok)
		{
			cout<<"YES"<<endl;
			cout<<p+maxm<<endl;
			rep(j,sz(v))
			{
				cout<<v[j].fi<<" "<<v[j].se<<endl;
			}
			return;
		}
		v.clear();
		
	}
	cout<<"NO"<<endl;
	
	
	
  }



signed main()
{
   std::ios_base::sync_with_stdio(false);
   cin.tie(0);
   cout.tie(0);
   int t;
   t=1;
   cin>>t;
   while(t--)
    {
        solve();
    }


   return 0;
}
