#include <bits/stdc++.h>
using namespace std;
int n, big;
vector<int> st;
string s;
char otv[1005][1005];
int dep[1005];
int main() {
  ios_base::sync_with_stdio(false);
  cin >> n >> s;
  st.push_back(-1);
  int nn = n;
  for (int i = 0; i < n; ++i) {
    if (s[i] == ']') {
      if (i > 0) {
        if (s[i - 1] == '[') {
          nn = nn + 3;
        }
        dep[i] = st[(int)st.size() - 1];
        st.pop_back();
      }
    } else if (s[i] == '[') {
      dep[i] = st.back() + 1;
      st.push_back(dep[i]);
      big = max(big, dep[i]);
    }
  }
  for (int i = 0; i < 1005; ++i) {
    for (int j = 0; j < 1005; ++j) {
      otv[i][j] = ' ';
    }
  }
  int dl = big + 3 + big;
  int i = 0;
  otv[0][0] = '+';
  otv[0][1] = '-';
  otv[dl - 1][0] = '+';
  otv[dl - 1][1] = '-';
  for (int jj = 1; jj < (dl - 1); jj++) {
    otv[jj][i] = '|';
  }
  i++;
  for (int j = 1; j < n; j++) {
    if (s[j - 1] == ']' && s[j] == ']') {
      otv[dep[j]][i + 1] = '+';
      otv[dl - dep[j] - 1][i] = '-';
      otv[dl - 1 - dep[j]][i + 1] = '+';
      otv[dep[j]][i] = '-';
      i++;
      for (int jj = dep[j] + 1; jj < (dl - 1 - dep[j]); jj++) {
        otv[jj][i] = '|';
      }
    }
    if (s[j - 1] == '[' && s[j] == '[') {
      otv[dl - dep[j] - 1][i] = '+';
      otv[dl - 1 - dep[j]][i + 1] = '-';
      otv[dep[j]][i] = '+';
      otv[dep[j]][1 + i] = '-';
      i++;
      for (int jj = dep[j] + 1; jj < (dl - 1 - dep[j]); jj++) {
        otv[jj][i - 1] = '|';
      }
    }
    if (s[j - 1] == ']' && s[j] == '[') {
      i++;
      otv[dl - 1 - dep[j]][i] = '+';
      otv[dl - 1 - dep[j]][i + 1] = '-';
      otv[dep[j]][i] = '+';
      otv[dep[j]][i + 1] = '-';
      for (int jj = dep[j] + 1; jj < (dl - 1 - dep[j]); jj++) {
        otv[jj][i] = '|';
      }
      i++;
    }
    if (s[j - 1] == '[' && s[j] == ']') {
      i++;
      i++;
      otv[dl - 1 - dep[j]][i] = '-';
      otv[dl - 1 - dep[j]][i + 1] = '+';
      otv[dep[j]][i] = '-';
      otv[dep[j]][i + 1] = '+';
      i++;
      for (int jj = dep[j] + 1; jj < (dl - 1 - dep[j]); jj++) {
        otv[jj][i] = '|';
      }
    }
  }
  for (int i1 = 0; i1 < dl; i1++) {
    for (int jj = 0; jj < nn; jj++) {
      cout << otv[i1][jj];
    }
    cout << endl;
  }
}
