← Home
 ```go
package main

import (
	"fmt"
	"strconv"
	"strings"
)

func main() {
	var n int
	fmt.Scan(&n)
	a := make([]int, n)
	for i := 0; i < n; i++ {
		fmt.Scan(&a[i])
	}

	if a[n-1] == 1 {
		fmt.Println("NO")
		return
	}

	if n >= 2 && a[n-1] == 0 && a[n-2] == 0 {
		allOnes := true
		for i := 0; i < n-2; i++ {
			if a[i] != 1 {
				allOnes = false
				break
			}
		}
		if allOnes {
			fmt.Println("NO")
			return
		}
	}

	fmt.Println("YES")
	if n == 1 {
		fmt.Println("0")
		return
	}

	prefix := buildPrefix(a[:n-1])
	fmt.Printf("(%s)->%d\n", prefix, a[n-1])
}

func buildPrefix(a []int) string {
	m := len(a)
	if m == 0 {
		return ""
	}
	var sb strings.Builder
	if a[m-1] == 1 {
		for i := 0; i < m; i++ {
			if i > 0 {
				sb.WriteString("->")
			}
			sb.WriteString(strconv.Itoa(a[i]))
		}
		return sb.String()
	} else {
		if a[0] == 0 {
			for i := 0; i < m; i++ {
				if i > 0 {
					sb.WriteString("->")
				}
				sb.WriteString(strconv.Itoa(a[i]))
			}
			return sb.String()
		} else {
			p := 0
			for p < m && a[p] == 1 {
				p++
			}
			sb.WriteString("(")
			for i := 0; i < p; i++ {
				if i > 0 {
					sb.WriteString("->")
				}
				sb.WriteString(strconv.Itoa(a[i]))
			}
			sb.WriteString(")->")
			for i := p; i < m; i++ {
				if i > p {
					sb.WriteString("->")
				}
				sb.WriteString(strconv.Itoa(a[i]))
			}
			return sb.String()
		}
	}
}
```