#00015F

kalk

Mirko ima simbolički kalkulator koji ima memoriju u obliku liste čiji su elementi aritmetički izrazi i koja može sadržavati najviše 100 izraza . Naredbe koje kalkulator razumije su sljedeće:


HASH – ako se na prvom mjestu liste nalazi izraz s, a na drugom izraz t, onda ova naredba briše ta dva elementa iz liste i na prvo mjesto liste dodaje izraz (t#s)
DOLLAR – ako se na prvom mjestu liste nalazi izraz s, a na drugom izraz t, onda ova naredba briše ta dva elementa iz liste i na prvo mjesto liste dodaje izraz (t$s)
SWAP – međusobno zamjenjuje prvi i drugi izraz u listi
DROP – briše prvi izraz iz liste
DUP – udvostručuje prvi izraz liste, tj. njegovu kopiju dodaje na prvo mjesto
ROT – rotira prva četiri izraza u listi tako da prvi izraz postaje drugi, drugi izraz postaje treći, treći izraz postaje četvrti, a četvrti izraz postaje prvi


Potrebno je napisati program koji će generirati niz naredbi za kalkulator takav da ako se na početku izvođenja u listi nalaze samo A i B (A na drugom mjestu, B na prvom mjestu), sve naredbe se izvedu bez greške te se na kraju izvođenja kao jedini element u listi nalazi zadani izraz.
Do greške prilikom izvođenja naredbe može doći ako se lista prepuni ili ako u listi nema dovoljno argumenata za naredbu. Za naredbe DUP i DROP potreban je barem jedan element u listi, za naredbe HASH, DOLLAR i SWAP barem dva, dok je za naredbu ROT potrebno barem četiri elementa.
Vaš program treba generirati bilo koji niz naredbi koji računa zadani izraz; ipak broj naredbi treba biti manji ili jednak od 10,000.



Input
U prvom i jedinom retku standardnog ulaza nalazi se zadani izraz. Izraz se sastoji od znakova A, B, #, $, ( i ) i u njemu se neće pojavljivati nikakvi drugi znakovi (pa ni razmaci).
Broj znakova u izrazu će biti manji ili jednak od 100.
Zadani izraz će uvijek biti takav da se na kalkulatoru može dobiti od A i B.


Output
Potrebno je na standardni izlaz ispisati niz naredbi kojima se dobiva zadani izraz, svaku u svoj red.
Napomena: rješenje ne mora biti jedinstveno.



Ulaz:
(B$A)
Izlaz:
SWAP
DOLLAR



Ulaz:
(A$(A#B))
Izlaz:
SWAP
DUP
DUP
ROT
HASH
DOLLAR
SWAP
DROP



Ulaz:
((A$B)#(B$A))
Izlaz:
SWAP
DUP
DUP
ROT
ROT
DROP
DUP
DUP
ROT
ROT
DROP
SWAP
ROT
ROT
DOLLAR
DUP
ROT
ROT
ROT
DROP
SWAP
DOLLAR
HASH



Submit solution

Sign in to submit a solution.