program wp10zad2;

const
    MAX_ROZMIAR = 1000;
    PIERWSZY = chr(0);
    OSTATNI = chr(255);

type
    Stan = Char;
    Dana = Char;
    Pierscien = record
        elementy : array [0 .. MAX_ROZMIAR] of Dana;
        aktualny, koniec, rozmiar, zaKursorem : Integer
    end;

var tekstProgramu : String;
    dane : Pierscien;
    poczatkowy : Stan;
    usuniecie : array [Stan, Dana] of Boolean;
    poUsunieciu : array [Stan, Dana] of Stan;
    wstawienie : array [Stan] of Boolean;
    wstawiana : array [Stan] of Dana;
    poWstawieniu : array [Stan] of Stan;

function aktualny(var p : Pierscien) : Dana;
begin
    aktualny := p.elementy[p.aktualny]
end;

function rozmiar(var p : Pierscien) : Integer;
begin
    rozmiar := p.rozmiar
end;

procedure wstaw(var p : Pierscien; c : Char);
begin
    if p.rozmiar = MAX_ROZMIAR then begin
        writeln('przepelnienie pamieci');
        halt
    end;
    p.elementy[p.koniec] := c;
    p.koniec := (p.koniec + 1) mod (MAX_ROZMIAR + 1);
    inc(p.rozmiar)
end;

procedure usun(var p : Pierscien);
begin
    assert(p.rozmiar > 0);
    p.aktualny := (p.aktualny + 1) mod (MAX_ROZMIAR + 1);
    p.zaKursorem := (p.zaKursorem - 1 + p.rozmiar) mod p.rozmiar;
    dec(p.rozmiar)
end;

procedure wczytaj(var p : Pierscien);
begin
    p.aktualny := 0;
    p.koniec := 0;
    while not eoln do begin
        assert(p.koniec < MAX_ROZMIAR);
        read(p.elementy[p.koniec]);
        p.koniec := p.koniec + 1
    end;
    p.rozmiar := p.koniec;
    p.zaKursorem := p.rozmiar
end;

procedure wypisz(var p : Pierscien);
var i, wypisane : Integer;
begin
    if p.rozmiar > 0 then begin
        wypisane := 0;
        i := p.zaKursorem mod p.rozmiar;
        while wypisane < p.rozmiar do begin
            write(p.elementy[(i + p.aktualny) mod (MAX_ROZMIAR + 1)]);
            inc(wypisane);
            i := (i + 1) mod p.rozmiar
        end
    end;
    writeln
end;

procedure zbuduj(m : String);
var i : Integer;
    s : Stan;
    d : Dana;
begin
    assert(m <> '');
    poczatkowy := m[1];
    for s := PIERWSZY to OSTATNI do begin
        wstawienie[s] := false;
        for d := PIERWSZY to OSTATNI do
            usuniecie[s, d] := false
    end;
    i := 1;
    while i <= Length(m) do begin
        assert(i + 3 <= length(m));
        if m[i + 1] = '/' then begin
            usuniecie[m[i], m[i + 2]] := true;
            poUsunieciu[m[i], m[i + 2]] := m[i + 3]
        end else begin
            assert(m[i + 1] = '_');
            wstawienie[m[i]] := true;
            wstawiana[m[i]] := m[i + 2];
            poWstawieniu[m[i]] := m[i + 3]
        end;
        i := i + 4
    end
end;

procedure wykonaj;
var s : Stan;
    d : Dana;
    dalej : Boolean;
begin
    s := poczatkowy;
    dalej := true;
    while dalej do begin
        dalej := false;
        if rozmiar(dane) > 0 then begin
            d := aktualny(dane);
            if usuniecie[s, d] then begin
                usun(dane);
                s := poUsunieciu[s, d];
                dalej := true
            end
        end;
        if not dalej and wstawienie[s] then begin
            wstaw(dane, wstawiana[s]);
            s := poWstawieniu[s];
            dalej := true
        end
    end
end;

begin
    readln(tekstProgramu);
    zbuduj(tekstProgramu);
    wczytaj(dane);
    wykonaj;
    wypisz(dane)
end.
