/*
 * @Autor: Kadia
 * @Date: 2021-01-19 23:14:00
 * @LastEditors: Kadia
 * @Connect: 544692713@qq.com
 * @LastEditTime: 2021-01-19 23:58:07
 */
#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
const int mod=1000000007;
const int inf=0x3f3f3f3f;
ll power(ll x,ll y,int mod){ll ans=1;while(y){if(y&1)ans=(ans*x)%mod;x=(x*x)%mod;y>>=1;}return ans%mod;}
ll power(ll x,ll y){ll ans=1;while(y){if(y&1)ans*=x;x*=x;y>>=1;}return ans;}
void exgcd(ll a,ll b,ll *x,ll *y){if(b==0){*x=1;*y=0;return ;}exgcd(b,a%b,x,y);ll savex=*x;*x=*y;*y=savex-a/b*(*y);}
ll gcd(ll a,ll b){return llabs(b?gcd(b,a%b):a);}
ll congruence(ll a, ll m, ll mod){m %= mod;ll tmp = gcd(a, mod);a /= tmp;mod /= tmp, m /= tmp;ll x, y;exgcd(a, mod, &x, &y);return (m * ((x + mod) % mod))%mod;}
int a[10005];
int vis[1000005];
int tmpvis[1000005];
int n;
bool check(priority_queue<int> que,int tmpsum)
{
    int savesum=tmpsum;
    memset(tmpvis,0,sizeof(tmpvis));
    for(int i=1;i<=2*n;i++)
        tmpvis[a[i]]++;
    vector<pair<int,int> >save;
    for(int i=1;i<=n;i++)
    {
        while(!tmpvis[que.top()])
            que.pop();
        save.push_back(make_pair(que.top(),tmpsum-que.top()));
        tmpvis[que.top()]--;
        if(tmpvis[tmpsum-que.top()])
            tmpvis[tmpsum-que.top()]--;
        else
            return false;
        tmpsum=max(que.top(),tmpsum-que.top());
        que.pop();
    }
    cout << "YES" << endl ;
    cout << savesum << endl ;
    for(int i=0;i<n;i++)
        cout << save[i].first << " " << save[i].second << endl ;
    return true;
}
int main()
{
    int t;
    cin >> t;
    while(t--)
    {
        cin >> n;
        priority_queue<int>que;
        int maxnum=0;
        for(int i=1;i<=2*n;i++)
        {
            cin >> a[i];
            que.push(a[i]);
            vis[a[i]]++;
            if(a[i]>a[maxnum])
                maxnum=i;
        }
        bool ok=false;
        for(int i=1;i<=2*n;i++)
        {
            if(i==maxnum)
                continue;
            int tmpsum=a[maxnum]+a[i];
            if(check(que,tmpsum))
            {
                ok=true;
                break;
            }
        }
        if(!ok)
            cout << "NO" << endl ;
        for(int i=1;i<=2*n;i++)
            vis[a[i]]=0;
    }
    return 0;
}