#include <bits/stdc++.h>
using namespace std;
using CTable = vector<vector<char> >;
const char OpenBracket = '[';
const char CloseBracket = ']';
void drawBracket(CTable& table, int i, int j, int size, int openShift) {
  table[i][j] = '+';
  table[i][j + openShift] = '-';
  table[i + size + 1][j] = '+';
  table[i + size + 1][j + openShift] = '-';
  for (int z = 0; z < size; z++) {
    table[i + z + 1][j] = '|';
  }
}
void drawAllRight(CTable& table, const vector<char>& brackets,
                  const vector<int>& depth, int currentSize) {
  int currentIndex = 0;
  int i = 0;
  int j = 0;
  while (currentIndex < brackets.size()) {
    int shift = brackets[currentIndex] == OpenBracket ? 1 : -1;
    drawBracket(table, i, j, currentSize, shift);
    if (currentIndex < brackets.size() - 1) {
      j++;
      if (depth[currentIndex + 1] == depth[currentIndex] &&
          brackets[currentIndex] == OpenBracket &&
          brackets[currentIndex + 1] == CloseBracket) {
        j += 3;
      } else if (depth[currentIndex] > depth[currentIndex + 1]) {
        i -= 1;
        currentSize += 2;
      } else if (depth[currentIndex] < depth[currentIndex + 1]) {
        i += 1;
        currentSize -= 2;
      }
    }
    currentIndex++;
  }
}
bool needToPrint(const CTable& table, int j) {
  for (int i = 0; i < table.size(); i++) {
    if (table[i][j] != ' ') {
      return true;
    }
  }
  return false;
}
int main() {
  int countOfBrackets;
  cin >> countOfBrackets;
  vector<char> brackets(countOfBrackets);
  vector<int> depth(countOfBrackets);
  for (int i = 0; i < countOfBrackets; i++) {
    cin >> brackets[i];
    if (i == 0) {
      depth[0] = 0;
      continue;
    }
    depth[i] = depth[i - 1];
    if (brackets[i] == brackets[i - 1]) {
      if (brackets[i] == OpenBracket) {
        depth[i]++;
      } else {
        depth[i]--;
      }
    }
  }
  int startBracketIndex = 0;
  int maxDepth = 0;
  for (int i = 0; i < depth.size(); i++) {
    if (maxDepth < depth[i]) {
      startBracketIndex = i;
      maxDepth = depth[i];
    }
  }
  const int tableLen = 4 * countOfBrackets;
  const int maxSize = (maxDepth + 1) * 2 + 1;
  CTable table(maxSize, vector<char>(tableLen, ' '));
  drawAllRight(table, brackets, depth, maxSize - 2);
  int rightStartPrintPos = tableLen - 1;
  while (!needToPrint(table, rightStartPrintPos)) {
    rightStartPrintPos--;
  }
  for (int i = 0; i < table.size(); i++) {
    for (int j = 0; j <= rightStartPrintPos; j++) {
      cout << table[i][j];
    }
    cout << '\n';
  }
  return 0;
}
