#P16582. [Euc2024]Make Triangle

[Euc2024]Make Triangle

题目描述

给定 nn 个正整数 x1,x2,,xnx_1,x_2,\ldots,x_n,以及三个正整数 na,nb,ncn_a,n_b,n_c,满足

na+nb+nc=n.n_a+n_b+n_c=n.

你需要把这 nn 个数划分为三个组,使得:

  • 第一组恰好包含 nan_a 个数;
  • 第二组恰好包含 nbn_b 个数;
  • 第三组恰好包含 ncn_c 个数;
  • 设三组元素之和分别为 sa,sb,scs_a,s_b,s_c,则 sa,sb,scs_a,s_b,s_c 能够作为一个面积为正的三角形的三条边。

请判断是否存在这样的划分。若存在,请构造任意一种。

输入格式

每个输入包含多组测试数据。

第一行包含一个整数 tt1t1000001\le t\le 100000),表示测试数据组数。

每组测试数据:

  • 第一行包含四个整数 n,na,nb,ncn,n_a,n_b,n_c,其中
3n200000,3\le n\le 200000, 1na,nb,ncn2,1\le n_a,n_b,n_c\le n-2,

na+nb+nc=nn_a+n_b+n_c=n

  • 第二行包含 nn 个整数 x1,x2,,xnx_1,x_2,\ldots,x_n1xi1091\le x_i\le 10^9)。

保证所有测试数据中 nn 的总和不超过 200000200000

输出格式

对于每组测试数据,若不存在合法划分,输出 NO

否则输出 YES,并继续输出三行:

  • 第一行输出 nan_a 个整数,表示第一组;
  • 第二行输出 nbn_b 个整数,表示第二组;
  • 第三行输出 ncn_c 个整数,表示第三组。

na+nb+nc=nn_a+n_b+n_c=n 个整数必须恰好构成原序列 x1,x2,,xnx_1,x_2,\ldots,x_n 的一个排列,并且三组元素和必须能构成面积为正的三角形。

若存在多种方案,输出任意一种。

样例

输入

4
6 2 2 2
1 1 1 1 1 1
5 3 1 1
1 1 1 1 1
6 2 2 2
1 1 1 1 1 3
8 1 2 5
16 1 1 1 1 1 1 12

输出

YES
1 1
1 1
1 1
NO
NO
YES
16
12 1
1 1 1 1 1

说明

第一组测试数据中,每组都放入两个 11,三组元素和均为 22,可以构成边长为 2,2,22,2,2 的正三角形。

第二、三组测试数据不存在合法划分。

第四组测试数据中,三组元素和分别为 16,13,516,13,5,可以构成面积为正的三角形。