#include <bits/stdc++.h>
using namespace std;
long long Max;
long long bal[105], was[105], len[105];
char a[505][505];
void buildL(long long Len, long long pos) {
  a[Max - Len + 1][pos] = '+';
  a[Max - Len + 1][pos + 1] = '-';
  long long i;
  for (i = Max - Len + 1 + 1; i < Max - Len + 2 * Len + 1; i++) a[i][pos] = '|';
  a[Max - Len + 2 * Len + 1][pos] = '+';
  a[Max - Len + 2 * Len + 1][pos + 1] = '-';
}
void buildR(long long Len, long long pos) {
  long long i;
  a[Max - Len + 1][pos] = '+';
  a[Max - Len + 1][pos - 1] = '-';
  for (i = Max - Len + 1 + 1; i < Max - Len + 2 * Len + 1; i++) a[i][pos] = '|';
  a[Max - Len + 2 * Len + 1][pos] = '+';
  a[Max - Len + 2 * Len + 1][pos - 1] = '-';
}
int main() {
  for (long long i = 1; i <= 500; i++) {
    for (long long j = 1; j <= 500; j++) a[i][j] = ' ';
  }
  string s;
  long long n, i, j;
  cin >> n >> s;
  long long N = n;
  s = '!' + s + '1';
  for (i = 1; i <= n; i++)
    if (s[i] == ']' && s[i - 1] == '[') N += 3;
  for (i = 1; i <= n; i++) {
    bal[i] = bal[i - 1] + ((s[i] == '[') ? 1 : -1);
    Max = max(Max, bal[i]);
  }
  long long nowlen = Max;
  len[1] = Max;
  for (i = 2; i <= n; i++) {
    if (bal[i] == 0) {
      nowlen = Max;
    } else if ((bal[i] > bal[i - 1]))
      if (s[i] == s[i - 1] && s[i] == '[')
        nowlen--;
      else
        nowlen = nowlen;
    else {
      was[i] = 1;
      for (j = i; j >= 1; j--)
        if (s[j] == '[' && !was[j]) {
          was[j] = 1;
          nowlen = len[j];
          break;
        }
    }
    len[i] = nowlen;
  }
  long long curpos = 0;
  for (i = 1; i <= n; i++) {
    curpos++;
    if (s[i] == '[')
      buildL(len[i], curpos);
    else
      buildR(len[i], curpos);
    if (s[i] == '[' && s[i + 1] == ']') curpos += 3;
  }
  long long M = Max * 2 + 1 + 1;
  for (i = 1; i <= M; i++) {
    for (j = 1; j <= N; j++) cout << a[i][j];
    cout << "\n";
  }
  return 0;
}
