#include <bits/stdc++.h>
using namespace std;
bool N[100000];
int test[100000];
bool x[10000];
int P[100000];
bool imp(bool x, bool y) {
  if (x && !y)
    return false;
  else
    return true;
}
int hasta(int n) {
  if (test[n] != -1) return test[n];
  test[n] = imp(hasta(n - 1), N[n]);
  return test[n];
}
int main() {
  memset(test, -1, sizeof(test));
  memset(x, 0, sizeof(x));
  memset(P, 0, sizeof(P));
  int n, a, b;
  int ind, p, J, m, z, k;
  memset(N, 0, sizeof(N));
  N[0] = 1;
  bool sepuede = true, caso100 = false;
  cin >> n;
  if (n % 3 != 0) {
    a = n % 3;
    b = n / 3;
  } else {
    a = 3;
    b = n / 3 - 1;
  }
  p = 0;
  J = 0;
  z = 0;
  for (int i = 1; i <= n; i++) {
    cin >> N[i];
    if (N[i] == 0) z += 1;
    if (N[i] == p)
      P[J] += 1;
    else {
      p = (p + 1) % 2;
      J += 1;
      P[J] += 1;
    }
  }
  if (n <= 3) {
    if (hasta(n))
      cout << "NO";
    else {
      cout << "YES" << endl;
      for (int i = 1; i <= n; i++) {
        cout << N[i];
        if (i < n) cout << "->";
      }
    }
  } else {
    ind = a + 3 * (b - 1);
    if (N[ind + 3]) {
      cout << "NO";
      sepuede = false;
    } else {
      if (!N[ind + 2]) {
        x[b] = true;
        if (N[ind + 1] && hasta(ind)) {
          caso100 = true;
          sepuede = false;
        }
      }
    }
    if (sepuede) {
      cout << "YES" << endl;
      for (int i = 1; i <= a; i++) {
        cout << N[i];
        if (i < n) cout << "->";
      }
      for (int i = 1; i <= b; i++) {
        ind = a + (i - 1) * 3;
        if (x[i]) cout << "(";
        cout << N[ind + 1] << "->" << N[ind + 2];
        if (x[i]) cout << ")";
        cout << "->" << N[ind + 3];
        if (i < b) cout << "->";
      }
    }
    if (caso100) {
      if (P[0] == 0 && P[3] == 0)
        cout << "NO";
      else {
        m = J / 2;
        if (z % 2 != 0)
          k = 0;
        else if (P[2 * (m - 1)] == 1)
          k = 2;
        else
          k = 1;
        int cont(0);
        cout << "YES" << endl;
        for (int i = 0; i < P[0]; i++) {
          if (k == 1 && m == 1 && i == P[0] - 1) {
            cout << "(" << 0;
            cont += 1;
          } else {
            cout << 0;
            cont += 1;
          }
          if (cont < n) cout << "->";
        }
        for (int j = 1; j <= m - 1; j++) {
          cout << "(";
          if (P[2 * j - 1] > 1) cout << "(";
          if (j == m - 1 && k == 2) cout << "(";
          for (int i = 0; i < P[2 * j - 1]; i++) {
            cout << 1;
            cont += 1;
            if (i < P[2 * j - 1] - 1)
              cout << "->";
            else {
              if (P[2 * j - 1] > 1) cout << ")";
              cout << "->0)->";
            }
          }
          for (int i = 0; i < P[2 * j] - 1; i++) {
            if (i < P[2 * j] - 2) {
              cout << 0;
              cont += 1;
            } else if (k == 1 && j == m - 1) {
              cout << "(" << 0;
              cont += 1;
            } else {
              cout << 0;
              cont += 1;
            }
            cout << "->";
          }
        }
        cout << "((";
        for (int i = 0; i < P[2 * m - 1]; i++) {
          cout << 1;
          cont += 1;
          if (i < P[2 * m - 1] - 1)
            cout << "->";
          else {
            cout << ")->0)";
          }
        }
        if (k != 0) cout << ")";
        cout << "->0";
      }
    }
  }
  cout << endl;
  return 0;
}
