#include <fstream>
#include <iostream>
#include <cstring>
#include <algorithm>
#define f cin
#define g cout

using namespace std;

//ifstream f("date.in");
//ofstream g("date.out");

int m, n;
char nota[4], a[15][10000];

void Scrie()
{
    for (int i=0; i<11; ++i) g<<a[i]<<"\n";
}

void spatii()
{
    for (int i=0; i<11; i++) a[i][m]=' ';
}

void adaugaColoana(int c)
{
    spatii();
    for (int i=0; i<10; i+=2)
    {
        a[i][m]='-';
        a[i][m+1]='\0';
    }
    ++m;
}

void Inceput()
{
    adaugaColoana(0);
    adaugaColoana(0); a[6][1]='{';
    adaugaColoana(0); a[5][2]='/'; a[7][2]=char(92);
    adaugaColoana(0); a[4][3]='/'; a[7][3]='_';

    spatii();
    for (int i=0; i<10; ++i)
    {
        a[i][m]='|';
        a[i][m+1]='\0';
    }
    ++m;

    adaugaColoana(0); a[3][5]='/'; a[7][5]='_'; a[8][5]=char(92); a[9][5]='_';
    adaugaColoana(0); a[0][6]=char(92); a[2][6]='/'; a[6][6]=char(92); a[7][6]='/'; a[9][6]='}';
    adaugaColoana(0); a[1][7]='}';
    adaugaColoana(0);
    adaugaColoana(0); a[3][9]=a[5][9]='4';
    adaugaColoana(0);
    adaugaColoana(0);
    adaugaColoana(0);
}

void adaugaDiezO(char* nota)
{
    switch (nota[0])
    {
        case 'C': a[10][m-1]='#'; break;
        case 'D': a[9][m-1]='#'; break;
        case 'F': a[7][m-1]='#'; break;
        case 'G': a[6][m-1]='#'; break;
        case 'A': a[5][m-1]='#'; break;
    }
}

void adaugaNotaO(char* nota)
{
    int lin;
    adaugaColoana(0);
    adaugaColoana(0);
    adaugaColoana(0);

    switch (nota[0])
    {
        case 'C': a[10][m-3]='(';a[10][m-2]='@';a[10][m-1]=')'; lin=10;break;
        case 'D': a[9][m-3]='(';a[9][m-2]='@';a[9][m-1]=')'; lin=9;break;
        case 'F': a[7][m-3]='(';a[7][m-2]='@';a[7][m-1]=')'; lin=7;break;
        case 'G': a[6][m-3]='(';a[6][m-2]='@';a[6][m-1]=')'; lin=6;break;
        case 'A': a[5][m-3]='(';a[5][m-2]='@';a[5][m-1]=')'; lin=5;break;
    }

    for (int i=lin-1; i>lin-4; --i) a[i][m-1]='|';
}


void Orizontala(char* nota)
{
    if (!strchr(nota, '#')) adaugaNotaO(nota);
        else
        {
            adaugaDiezO(nota);
            //Scrie();
            adaugaNotaO(nota);
            //Scrie();
        }
}

void adaugaDiezV(char* nota)
{
    adaugaColoana(0);
    a[3][m-1]='#';
}

void adaugaNotaV(char* nota)
{
    int lin;
    adaugaColoana(0);
    adaugaColoana(0);
    adaugaColoana(0);

    switch (nota[0])
    {
        case 'C': a[3][m-3]='(';a[3][m-2]='@';a[3][m-1]=')'; lin=3;break;
        case 'B': a[4][m-3]='(';a[4][m-2]='@';a[4][m-1]=')'; lin=4;break;
    }

    for (int i=lin+1; i<lin+4; ++i) a[i][m-3]='|';
}

void Verticala(char* nota)
{
    if (!strchr(nota, '#')) adaugaNotaV(nota);
        else
        {
            adaugaNotaV(nota);
            //Scrie();
            adaugaDiezV(nota);
            //Scrie();
        }
}

int main()
{
    f>>n;

    Inceput();

    while (n--)
    {
        f>>nota;

        if (nota[1]=='2' || nota[0]=='B') Verticala(nota);
        else Orizontala(nota);

        adaugaColoana(0);
        adaugaColoana(0);
        adaugaColoana(0);
    }

    adaugaColoana(0);
    a[0][m-1]='+';
    a[8][m-1]='+';
    for (int i=1; i<8; ++i)a[i][m-1]='|';

    Scrie();

    return 0;
}