#include <bits/stdc++.h>
using namespace std;
long long n, mx = 0, cs = -1;
long long xx = 0, last = 0;
vector<pair<char, long long> > st, st2;
char ch;
char f[1011][1011];
long long d[2][2] = {{0, 1}, {1, 0}};
void draw(long long sz, char c) {
  long long k = (c == ']');
  if (!last && k)
    xx += 2;
  else if (last && !k)
    xx += 1;
  long long x = xx, y = (mx - (sz) / 2);
  f[x + d[k][0]][y] = '+';
  f[x + d[k][1]][y] = '-';
  for (long long i = 0; i < sz; ++i) {
    ++y;
    f[x + d[k][0]][y] = '|';
  }
  ++y;
  f[x + d[k][0]][y] = '+';
  f[x + d[k][1]][y] = '-';
  ++xx;
  last = k;
}
int main() {
  for (long long i = 0; i < 300; ++i)
    for (long long j = 0; j < 300; ++j) f[i][j] = ' ';
  cin >> n;
  for (long long i = 0; i < n; ++i) {
    cin >> ch;
    if (ch == '[') {
      ++cs;
      st.push_back(make_pair(ch, cs));
      mx = max(cs, mx);
    } else {
      st.push_back(make_pair(ch, cs));
      --cs;
    }
  }
  for (long long i = 0; i < n; ++i) {
    st[i].second = 1 + (mx - st[i].second) * 2;
    draw(st[i].second, st[i].first);
  }
  for (long long j = 0; j < 3 + mx * 2; ++j) {
    for (long long i = 0; i < xx + 1; ++i) {
      cout << f[i][j];
    }
    cout << '\n';
  }
  return 0;
}
