https://codeforces.com/contest/1474/problem/C
思路:第一次的x一定是数组的最大值和某个数的组合,通过枚举找到一个可行的方法即可。

int main()
{
    int t;
    cin>>t;

    while(t--)
    {
        int n,i,j,k;
        cin>>n;
        vector<int> a(2*n);
        for(i=0;i<2*n;i++)
        cin>>a[i];
        sort(a.begin(),a.end());
        for(i=0;i<2*n-1;i++)
        {
            int x=a[i]+a[2*n-1];
            vector<int>ans;
            multiset<int>ms;
            for(auto i:a)
                ms.insert(i);
            for(j=0;j<n;j++)
            {
                auto it=ms.end();
                it--;
                int val=*it;
                int val1=x - *it;
                ms.erase(it);
                auto it1=ms.find(val1);
                if(it1==ms.end()) break;
                ans.push_back(val);
                ans.push_back(val1);
                x=max(val,val1);
                ms.erase(it1);
            }
            if(j==n)
            {
            cout<<"YES"<<endl;
            cout<<a[2*n-1]+a[i]<<"\n";
            for(j=0;j<n;j++)
            cout<<ans[2*j]<<" "<<ans[2*j+1]<<"\n";
            break;
            }    
        }
        if(i==2*n-1) cout<<"NO"<<"\n";
    }
    return 0;
}