#include <bits/stdc++.h>
using namespace std;
int main() {
  int n;
  cin >> n;
  string sequenceString;
  cin >> sequenceString;
  int middle = 1;
  vector<int> size(n);
  vector<int> shift(n);
  int length = 2;
  int heigth = 0;
  size[0] = 1;
  shift[n - 1] = 0;
  for (int i = 1; i < n; ++i) {
    if (sequenceString.at(i - 1) == '[' && sequenceString.at(i) == '[') {
      size[i] = size[i - 1] + 1;
      length++;
      shift[i - 1] = 1;
      middle = max(middle, size[i]);
      continue;
    }
    if (sequenceString.at(i - 1) == ']' && sequenceString.at(i) == '[') {
      size[i] = size[i - 1];
      length += 2;
      shift[i - 1] = 1;
      continue;
    }
    if (sequenceString.at(i - 1) == '[' && sequenceString.at(i) == ']') {
      size[i] = size[i - 1];
      length += 3;
      shift[i - 1] = 4;
      continue;
    }
    if (sequenceString.at(i - 1) == ']' && sequenceString.at(i) == ']') {
      size[i] = size[i - 1] - 1;
      length++;
      shift[i - 1] = 1;
      continue;
    }
  }
  heigth = 2 * middle + 1;
  for (int i = 0; i < n; ++i) {
    size[i] = middle - size[i] + 1;
  }
  vector<vector<char>> table(heigth, vector<char>(length));
  int positionX = 0;
  for (int i = 0; i < n; ++i) {
    bool isRight = sequenceString.at(i) == '[';
    for (int j = 0; j <= size[i]; ++j) {
      if (j == size[i]) {
        table[middle + j][positionX] = '+';
        table[middle + j][positionX + (isRight ? 1 : -1)] = '-';
        table[middle - j][positionX] = '+';
        table[middle - j][positionX + (isRight ? 1 : -1)] = '-';
        break;
      }
      table[middle - j][positionX] = '|';
      table[middle + j][positionX] = '|';
    }
    positionX += shift[i];
  }
  for (int i = 0; i < heigth; ++i) {
    for (int j = 0; j < length; ++j) {
      if (table[i][j] == '+' || table[i][j] == '-' || table[i][j] == '|') {
        cout << table[i][j];
        continue;
      }
      cout << ' ';
    }
    cout << '\n';
  }
  return 0;
}
