#include <bits/stdc++.h>
using namespace std;
const int INF = INT_MAX;
const long long INFL = LLONG_MAX;
const long double pi = acos(-1);
int N;
int A[100100];
int main() {
  ios_base::sync_with_stdio(0);
  cout.precision(15);
  cout << fixed;
  cout.tie(0);
  cin.tie(0);
  cin >> N;
  for (int(i) = 1, j123 = N; (i) <= j123; (i)++) cin >> A[i];
  if (A[N] == 1) {
    cout << "NO" << '\n';
    return 0;
  }
  if (N == 1) {
    cout << "YES\n0" << '\n';
    return 0;
  }
  if (A[N - 1] == 1 && A[N] == 0) {
    deque<char> dq;
    dq.push_back(char('0' + A[1]));
    for (int i = 2; i <= N; i++) {
      dq.push_back('-');
      dq.push_back('>');
      dq.push_back(char(A[i] + '0'));
      dq.push_front('(');
      dq.push_back(')');
    }
    cout << "YES" << '\n';
    for (int(i) = 0, j123 = int(dq.size()); (i) < j123; (i)++) cout << dq[i];
    cout << '\n';
    return 0;
  }
  int first0 = -1;
  for (int(i) = 1, j123 = N; (i) <= j123; (i)++)
    if (A[i] == 0) {
      first0 = i;
      break;
    }
  if (first0 + 2 <= N) {
    deque<char> dq1, dq2;
    dq1.push_back(char('0' + A[1]));
    for (int i = 2; i <= first0; i++) {
      dq1.push_back('-');
      dq1.push_back('>');
      dq1.push_back(char(A[i] + '0'));
      dq1.push_front('(');
      dq1.push_back(')');
    }
    dq2.push_back(char('0' + A[first0 + 1]));
    for (int i = first0 + 2; i <= N - 1; i++) {
      dq2.push_back('-');
      dq2.push_back('>');
      dq2.push_back(char(A[i] + '0'));
      dq2.push_front('(');
      dq2.push_back(')');
    }
    cout << "YES" << '\n' << '(';
    for (int(i) = 0, j123 = int(dq1.size()); (i) < j123; (i)++) cout << dq1[i];
    cout << "->";
    for (int(i) = 0, j123 = int(dq2.size()); (i) < j123; (i)++) cout << dq2[i];
    cout << ")->";
    cout << A[N] << '\n';
    return 0;
  }
  cout << "NO" << '\n';
}
