Expresie

Time limit: 0.5s Memory limit: 2MB Input: expresie.in Output: expresie.out

Se consideră o expresie, care poate să conţină:

  • operanzi, care sunt litere mici ale alfabetului englez;
  • paranteze rotunde;
  • operatorul / care simbolizează împărţirea;
  • operatorul * care simbolizează înmulţirea.

Regulile după care se evaluează o astfel de expresie sunt cele din matematică.

Ne propunem să rescriem această expresie sub forma unui produs în care factorii pot să apară la puteri pozitive sau negative fără să mai folosim parantezele rotunde şi în care folosim notaţia xyxy pentru xyx \cdot y.

Astfel, a/ba/b este echivalentă cu a1b1,a(c/b)a1c1b1,a/(bc)(ab/c)a2c2a^1b^{-1}, a*(c/b) \Leftarrow \Rightarrow a^1c^1b^{-1}, a/(b*c)*(a*b/c) \Leftarrow \Rightarrow a^2c^{-2}

Cerinţă

Cunoscând expresia iniţială să se determine expresia echivalentă scrisă sub formă de produs.

Date de intrare

Pe prima linie a fişierului expresie.in se află un şir de caractere ce reprezintă expresia dată.

Date de ieșire

Fiecare linie a fişierului expresie.out va conţine un operand urmat de exact un spaţiu şi de un număr întreg ce reprezintă puterea la care acest operand apare în expresia scrisă sub formă de produs echivalentă. Operanzii vor apărea în fişier în ordine alfabetică, iar puterile pozitive sau nule nu vor fi precedate de semn.

Restricții și precizări

  • Expresia dată are cel mult 20 00020 \ 000 de caractere
  • Expresia dată este corectă şi nu conţine caractere spaţiu
  • 10%10\% dintre teste vor conţine doar operatorul *.

Exemplul 1

expresie.in

a/b

expresie.out

a 1
b -1

Exemplul 2

expresie.in

a/(b*c)*(a*b/c)

expresie.out

a 2
b 0
c -2

Exemplul 3

expresie.in

(p/x)/((b/h/(x/x)))/(p/(b/(x/(h/(p)))))

expresie.out

b 0
h 2
p -1
x -2

Log in or sign up to be able to send submissions!