#include <bits/stdc++.h>
using namespace std;
const int INF = (int)1e9;
const long long LINF = (long long)1e18;
template <typename Type1, typename Type2>
Type1 mypow(Type1 n, Type2 k) {
  Type1 ans = (Type1)1;
  while (k) {
    k--;
    ans *= n;
  }
  return ans;
}
char c[1010][1010];
void abc(int ii, int jj, int h, int tp) {
  c[ii][jj + tp] = c[ii + h - 1][jj + tp] = '+';
  c[ii][jj + 1 - tp] = c[ii + h - 1][jj + 1 - tp] = '-';
  for (int i = ii + 1; i < ii + h - 1; i++) {
    c[i][jj + tp] = '|';
  }
}
int a[1010];
int main() {
  int n;
  cin >> n;
  int t = -1;
  int tm = 0;
  string second;
  cin >> second;
  for (int i = 0; i < n; i++) {
    if (second[i] == '[')
      t++;
    else
      t--;
    a[i] = t;
    tm = max(t, tm);
  }
  t = 0;
  for (int i = 0; i < n; i++) {
    if (second[i] == '[')
      abc(a[i], t, (tm - a[i]) * 2 + 3, 0);
    else
      abc(a[i] + 1, t, (tm - a[i] - 1) * 2 + 3, 1);
    t++;
    if (i < n - 1) {
      if (second[i] == ']' && second[i + 1] == '[') t++;
      if (second[i] == '[' && second[i + 1] == ']') t += 2;
    }
  }
  if (second[n - 1] == ']') t++;
  for (int i = 0; i < tm * 2 + 3; i++) {
    for (int j = 0; j < t; j++) {
      if (c[i][j])
        cout << c[i][j];
      else
        cout << ' ';
    }
    cout << "\n";
  }
}
