```go
package main
import (
"bufio"
"fmt"
"os"
"sort"
"strconv"
)
func main() {
reader := bufio.NewReader(os.Stdin)
writer := bufio.NewWriter(os.Stdout)
defer writer.Flush()
scanner := bufio.NewScanner(reader)
scanner.Split(bufio.ScanWords)
scanner.Buffer(make([]byte, 2048*1024), 2048*1024)
if !scanner.Scan() {
return
}
t, _ := strconv.Atoi(scanner.Text())
for i := 0; i < t; i++ {
if !scanner.Scan() {
break
}
n, _ := strconv.Atoi(scanner.Text())
nonZeros := make([]int, 0, n)
zeroCount := 0
for j := 0; j < n; j++ {
scanner.Scan()
val, _ := strconv.Atoi(scanner.Text())
if val == 0 {
zeroCount++
} else {
nonZeros = append(nonZeros, val)
}
}
if len(nonZeros) == 0 {
fmt.Fprintln(writer, "No")
continue
}
fmt.Fprintln(writer, "Yes")
sort.Ints(nonZeros)
l, r := 0, len(nonZeros)-1
cur := int64(0)
first := true
for l <= r {
if !first {
writer.WriteByte(' ')
}
first = false
var val int
if cur > 0 {
val = nonZeros[l]
l++
} else {
val = nonZeros[r]
r--
}
cur += int64(val)
writer.WriteString(strconv.Itoa(val))
}
for j := 0; j < zeroCount; j++ {
if !first {
writer.WriteByte(' ')
}
first = false
writer.WriteByte('0')
}
writer.WriteByte('\n')
}
}
```