小红的数组重排
题号:NC276110
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
Special Judge, 64bit IO Format: %lld

题目描述

\,\,\,\,\,\,\,\,\,\,给出一个数字 n 和一个长度为 n 的数组 [a_1,a_2,\dots,a_n] 。现在你可以以任意方式重新排列数组 a,问是否存在重排后的数组 a 满足:a_1 \times a_2 < a_2 \times a_3 < \cdots < a_{n-1} \times a_n

输入描述:

\,\,\,\,\,\,\,\,\,\,第一行输入一个整数 n\left( 3 \leq n \leq 5 \times 10^5\right) 代表数组中的元素数量。
\,\,\,\,\,\,\,\,\,\,第二行输入 n 个整数 a_1, a_2, \cdots, a_n\left(0 \leq a_i \leq 10^9 \right) 代表数组元素。

输出描述:

\,\,\,\,\,\,\,\,\,\,若存在符合题意的排列后的数组 a,在一行上输出 \rm YES ,随后在第二行上输出这个数组;否则,直接输出 \rm NO 。
\,\,\,\,\,\,\,\,\,\,如果存在多个解决方案,您可以输出任意一个。
示例1

输入

复制
4
7 2 5 1

输出

复制
YES
1 5 2 7

说明

\,\,\,\,\,\,\,\,\,\,重排后满足: 1 \times 5 < 5 \times 2 < 2 \times 7
示例2

输入

复制
6
1 1 4 5 1 4

输出

复制
NO