#include <bits/stdc++.h>
#pragma GCC target("avx2")
#pragma GCC optimization("O3")
#pragma GCC optimization("unroll-loops")
using namespace std;
template <class T1, class T2>
ostream &operator<<(ostream &os, const pair<T1, T2> &p) {
  os << "{" << p.first << "," << p.second << "}";
  return os;
}
const int N = 3e5 + 5;
const int oo = 1e9 + 7;
int a[N];
int32_t main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n;
  cin >> n;
  int tot1 = 0;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    tot1 += a[i];
  }
  bool res = a[1];
  for (int i = 2; i <= n; i++) {
    res = !res or a[i];
  }
  if (res == 0) {
    cout << "YES\n" << a[1];
    for (int i = 2; i <= n; i++) cout << "->" << a[i];
    cout << "\n";
  } else if (a[n] == 1 or n <= 2 or (a[n - 2] == 1 and tot1 == n - 2)) {
    cout << "NO\n";
  } else if (a[n - 2] == 0) {
    cout << "YES\n" << a[1];
    for (int i = 2; i <= n - 3; i++) cout << "->" << a[i];
    cout << "->(" << a[n - 2] << "->" << a[n - 1] << ")->" << a[n] << "\n";
  } else {
    int zero = -1;
    for (int i = n - 3; i >= 1; i--)
      if (a[i] == 0) {
        zero = i;
        break;
      }
    assert(zero != -1);
    cout << "YES\n";
    if (zero > 1) {
      cout << a[1];
      for (int i = 2; i < zero; i++) {
        cout << "->" << a[i];
      }
      cout << "->";
    }
    cout << "(" << a[zero] << "->((" << a[zero + 1];
    for (int i = zero + 2; i <= n - 2; i++) cout << "->" << a[i];
    cout << ")->" << a[n - 1] << "))->" << a[n] << "\n";
  }
}
