#include <bits/stdc++.h>
using namespace std;
const int MAXN = 105;
int n, lvls[MAXN], close_idx[MAXN];
string s;
vector<vector<char>> out;
int get_close_idx(int i) {
  int cnt = 0;
  do {
    cnt += s[i] == '[' ? 1 : -1;
    i++;
  } while (cnt);
  return i - 1;
}
int gen_lvls(int i, int j, int l = 0) {
  if (i >= j) return l;
  int end = get_close_idx(i);
  lvls[i] = lvls[end] = l;
  close_idx[i] = end;
  int ans = gen_lvls(i + 1, end, l + 1);
  return max(ans, gen_lvls(end + 1, j, l));
}
int main() {
  cin >> n >> s;
  int mx = gen_lvls(0, n), out_j = 0;
  out = vector<vector<char>>(MAXN * 4, vector<char>(MAXN * 4, ' '));
  for (int i = 0; i < n; i++) {
    for (int k = -(mx - lvls[i]) + 1; k <= (mx - lvls[i]) - 1; k++)
      out[k + mx][out_j] = '|';
    out[mx - (mx - lvls[i])][out_j] = out[mx + (mx - lvls[i])][out_j] = '+';
    if (s[i] == ']') {
      out[mx - (mx - lvls[i])][out_j - 1] =
          out[mx + (mx - lvls[i])][out_j - 1] = '-';
    } else {
      out[mx - (mx - lvls[i])][out_j + 1] =
          out[mx + (mx - lvls[i])][out_j + 1] = '-';
      if (i + 1 == close_idx[i]) out_j += 3;
    }
    out_j++;
  }
  for (int i = 0; i < mx * 2 + 1; i++) {
    for (int j = 0; j < out_j; j++) cout << out[i][j];
    cout << "\n";
  }
}
