#include <bits/stdc++.h>
using namespace std;
const int inf = (int)1e9;
const int mod = (int)1e9 + 9;
const double eps = 1e-7;
const double pi = 3.14159265359;
int main() {
  char ans[300][300];
  for (int i = 0; i < 300; i++) {
    for (int j = 0; j < 300; j++) ans[i][j] = ' ';
    ans[i][299] = '\0';
  }
  int n;
  string s;
  cin >> n;
  cin >> s;
  s.push_back('[');
  vector<int> h(n);
  int b = 0;
  int maxH = 0;
  for (int i = 0; i < n; i++) {
    if (s[i] == '[')
      h[i] = ++b;
    else
      h[i] = b--;
    maxH = max(maxH, h[i]);
  }
  for (int i = 0; i < n; i++) h[i] = 2 * (maxH - h[i]) + 3;
  int nextI = 0;
  int nextJ = 0;
  for (int i = 0; i < n; i++) {
    if (s[i] == '[' && s[i + 1] == ']') {
      ans[nextI + h[i] - 1][nextJ] = ans[nextI][nextJ] = '+';
      ans[nextI + h[i] - 1][nextJ + 1] = ans[nextI][nextJ + 1] = '-';
      for (int k = nextI + 1; k < nextI + h[i] - 1; k++) ans[k][nextJ] = '|';
      nextJ += 4;
    }
    if (s[i] == '[' && s[i + 1] == '[') {
      ans[nextI + h[i] - 1][nextJ] = ans[nextI][nextJ] = '+';
      ans[nextI + h[i] - 1][nextJ + 1] = ans[nextI][nextJ + 1] = '-';
      for (int k = nextI + 1; k < nextI + h[i] - 1; k++) ans[k][nextJ] = '|';
      nextJ++;
      nextI++;
    }
    if (s[i] == ']' && s[i + 1] == '[') {
      ans[nextI + h[i] - 1][nextJ] = ans[nextI][nextJ] = '+';
      ans[nextI + h[i] - 1][nextJ - 1] = ans[nextI][nextJ - 1] = '-';
      for (int k = nextI + 1; k < nextI + h[i] - 1; k++) ans[k][nextJ] = '|';
      nextJ++;
    }
    if (s[i] == ']' && s[i + 1] == ']') {
      ans[nextI + h[i] - 1][nextJ] = ans[nextI][nextJ] = '+';
      ans[nextI + h[i] - 1][nextJ - 1] = ans[nextI][nextJ - 1] = '-';
      for (int k = nextI + 1; k < nextI + h[i] - 1; k++) ans[k][nextJ] = '|';
      nextJ++;
      nextI--;
    }
  }
  int endJ = 298;
  while (ans[0][endJ] == ' ') endJ--;
  int endI = 299;
  while (ans[endI][0] == ' ') endI--;
  for (int i = 0; i <= endI; i++) {
    for (int j = 0; j <= endJ; j++) cout << ans[i][j];
    cout << '\n';
  }
  return 0;
}
