#include <bits/stdc++.h>
using namespace std;
int main() {
  int n;
  cin >> n;
  string in;
  cin >> in;
  int fl = 1;
  int u = 0;
  for (int i = 0; i < n; i++) {
    if (in[i] == '[')
      u++;
    else
      u--;
    fl = max(fl, u);
  }
  int a[n + 1];
  vector<int> st;
  for (int i = 0; i < n; i++) {
    if (in[i] == '[')
      st.push_back(i);
    else {
      a[i] = fl - (int)st.size() + 1;
      a[st[(int)st.size() - 1]] = fl - (int)st.size() + 1;
      st.pop_back();
    }
  }
  vector<string> answer((unsigned int)(3 + (fl - 1) * 2));
  answer[0].push_back('+');
  for (int j = 1; j < 3 + (fl - 1) * 2 - 1; j++) answer[j].push_back('|');
  answer[3 + (fl - 1) * 2 - 1].push_back('+');
  for (int i = 1; i < n; i++) {
    int po = fl - a[i];
    int en = 3 + (a[i] - 1) * 2 + po - 1;
    if (in[i - 1] == '[' && in[i] == '[') {
      for (int j = 0; j < po - 1; j++) answer[j].push_back(' ');
      answer[po - 1].push_back('-');
      answer[po].push_back('+');
      for (int j = po + 1; j < en; j++) answer[j].push_back('|');
      answer[en].push_back('+');
      answer[en + 1].push_back('-');
      for (int j = en + 2; j < 3 + (fl - 1) * 2; j++) answer[j].push_back(' ');
    } else if (in[i - 1] == '[' && in[i] == ']') {
      answer[po].push_back('-');
      answer[en].push_back('-');
      for (int j = 0; j < po; j++) answer[j].push_back(' ');
      for (int j = po + 1; j < en; j++) answer[j].push_back(' ');
      for (int j = en + 1; j < 3 + (fl - 1) * 2; j++) answer[j].push_back(' ');
      for (int j = 0; j < 3 + (fl - 1) * 2; j++) answer[j].push_back(' ');
      answer[po].push_back('-');
      answer[en].push_back('-');
      for (int j = 0; j < po; j++) answer[j].push_back(' ');
      for (int j = po + 1; j < en; j++) answer[j].push_back(' ');
      for (int j = en + 1; j < 3 + (fl - 1) * 2; j++) answer[j].push_back(' ');
      for (int j = 0; j < po; j++) answer[j].push_back(' ');
      for (int j = en + 1; j < 3 + (fl - 1) * 2; j++) answer[j].push_back(' ');
      answer[po].push_back('+');
      for (int j = po + 1; j < en; j++) answer[j].push_back('|');
      answer[en].push_back('+');
    } else if (in[i - 1] == ']' && in[i] == ']') {
      answer[po].pop_back();
      answer[po].push_back('-');
      answer[en].pop_back();
      answer[en].push_back('-');
      for (int j = 0; j < po; j++) answer[j].push_back(' ');
      answer[po].push_back('+');
      for (int j = po + 1; j < en; j++) answer[j].push_back('|');
      answer[en].push_back('+');
      for (int j = en + 1; j < 3 + (fl - 1) * 2; j++) answer[j].push_back(' ');
    } else if (in[i - 1] == ']' && in[i] == '[') {
      for (int j = 0; j < po; j++) answer[j].push_back(' ');
      answer[po].push_back('+');
      for (int j = po + 1; j < en; j++) answer[j].push_back('|');
      answer[en].push_back('+');
      for (int j = en + 1; j < 3 + (fl - 1) * 2; j++) answer[j].push_back(' ');
    }
  }
  for (auto i = answer.begin(); i != answer.end(); i++) cout << *i << endl;
  return 0;
}
