#include <bits/stdc++.h>
using namespace std;
char a[1000][1000];
void f(int height, int i, int j, int type) {
  a[i][j] = a[i + height - 1][j] = '+';
  if (type == 1) {
    a[i][j + 1] = a[i + height - 1][j + 1] = '-';
  } else {
    a[i][j - 1] = a[i + height - 1][j - 1] = '-';
  }
  for (int ii = i + 1; ii < i + height - 1; ii++) {
    a[ii][j] = '|';
  }
}
int main() {
  string s;
  int n;
  cin >> n >> s;
  int depth = 0;
  int mxdepth = 0;
  for (auto c : s) {
    if (c == '[') {
      depth++;
    } else {
      depth--;
    }
    mxdepth = max(mxdepth, depth);
  }
  int inverse_depth = mxdepth + 1;
  int j = -1;
  int i = 0;
  char prev = '-';
  for (auto c : s) {
    if (c == ']' && prev == '[') {
      j += 4;
    } else {
      j++;
    }
    if (prev == '[' && c == '[') {
      i++;
    } else if (prev == ']' && c == ']') {
      i--;
    }
    prev = c;
    if (c == '[') {
      inverse_depth--;
      f(inverse_depth * 2 + 1, i, j, 1);
    } else {
      f(inverse_depth * 2 + 1, i, j, 2);
      inverse_depth++;
    }
  }
  for (int i = 0; i < mxdepth * 2 + 1; i++) {
    for (int jj = 0; jj <= j; jj++) {
      if (a[i][jj] != '+' && a[i][jj] != '|' && a[i][jj] != '-') {
        cout << ' ';
      } else {
        cout << a[i][jj];
      }
    }
    cout << endl;
  }
  return 0;
}
