Logic

Time limit: 0.1s Memory limit: 16MB Input: logic.in Output: logic.out

Mircea cel Tânăr trebuie să îmbunătăţească permanent performanţele calculatoarelor pe care le are în gestiune. Se întâmplă câteodată, ca unele componente noi pe care le foloseşte să nu fie compatibile cu vechile calculatoare. Din acest motiv funcţionarea calculatoarelor „îmbunătăţite” poate să nu fie corectă. Pentru a verifica corectitudinea funcţionării acestor calculatoare, Mircea îşi propune să le testeze cu ajutorul unui program care verifică echivalenţa unor expresii logice.

Cerinţă

Scrieţi un program care determină dacă două expresii logice sunt echivalente sau nu. Fiecare expresie este formată din:

  • variabile, cele 2626 de litere mici ale alfabetului englez, de la ’a’ – ’z’;
  • operatori binari |, &, ^ (SAU, ŞI respectiv SAU EXCLUSIV);
  • operatorul unar ~ (NEGAŢIE);
  • paranteze rotunde.

Expresiile vor fi evaluate respectând regulile de priorităţi ale operatorilor şi parantezelor pentru evaluarea expresiilor logice în care intervin ca operanzi biţii 00 şi 11. Priorităţile în ordine descrescătoare sunt: parantezele rotunde (, ), operatorul unar ~, operatorii binari în ordine descrescătoare &, ^, |.
Două expresii sunt echivalente dacă:

  • conţin acelaşi set de variabile indiferent de numărul de apariţii a variabilei în expresie;
  • pentru orice set de date de intrare pentru variabile (valori 00, 11) rezultatul obţinut este acelaşi.

Date de intrare

Fişierul de intrare logic.in conţine pe primul rând un număr natural nn, ce reprezintă numărul testelor ce se vor evalua. Fiecare test reprezintă evaluarea a două expresii. Pe următoarele 2n2 \cdot n linii sunt şiruri de caractere ce constituie expresiile. Acestea sunt scrise pe câte o linie fiecare.

Date de ieșire

Fişierul de ieşire logic.out va conţine nn linii, pe fiecare linie kk fiind mesajul „egale” sau „diferite” în funcţie de rezultatul evaluării expresiilor de pe liniile 2k2 \cdot k şi respectiv 2k+12 \cdot k + 1 din fişierul de intrare.

Restricții și precizări

  • 0<n50 0 < n \leq 50;
  • nn reprezintă numărul de perechi de expresii ce trebuie evaluate;
  • O expresie conţine cel mult 100100 de operaţii şi maxim 1010 variabile;
  • O expresie poate avea cel mult 255255 caractere. Spaţiul nu este separator în interiorul unei expresii;
  • Numele unei variabile este un singur caracter, literă mică a alfabetului englez;
  • Expresiile date sunt corecte.

Exemplu

logic.in

4
a&(c|~c)
a
~(a|b|c|d)
~a&~b&~c&~d
z&b
a&b
a|b
(a|~a)&(a|~a)&(a|~a)&(a|b)

logic.out

diferite
egale
diferite
egale

Explicație

Pentru ultimul set de expresii tabelul este:

unde E=(a|~a)&(a|~a)&(a|~a)&(a|b)

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