Costel este pasionat de circuitele logice. El are la dispoziție două tipuri de circuite logice simple: circuit ȘI, respectiv circuit SAU. Circuitele logice simple au două intrări și o ieșire.

La fiecare intrare în circuit se poate introduce un bit 0 sau un bit 1, iar circuitul este capabil să calculeze operația logică respectivă (ȘI ori SAU) și să trimită rezultatul obținut la ieșire. Costel a învățat că poate combina mai multe circuite simple pentru a obține circuite complexe astfel: leagă ieșirea unui circuit de orice tip la una din intrările altui circuit, deci rezultatul obținut la ieșirea dintr-un circuit se transmite la intrarea celuilalt. În acest fel se pot construi circuite complexe, care au mai multe intrări și o singură ieșire.
Ultima descoperire a lui Costel este circuitul logic piramidal (prescurtat CLP), care are structura următoare:
- Circuitul cu un singur nivel este cel mai simplu tip de circuit și este compus dintr-un circuit
ȘIori dintr-un circuitSAU; - Pentru un circuit cu mai multe nivele avem:
- pe nivelul 1 se găsește un singur circuit (
ȘIoriSAU); - pe nivelul 2 se găsesc două circuite simple de oricare tip; ieșirea primului circuit este conectată la intrarea
1a circuitului de pe nivelul 1, iar ieșirea celui de-al doilea circuit este conectată la intrarea2a circuitului de pe nivelul 1; - pe nivelul sunt circuite simple; ieșirile primelor două circuite de pe linia sunt conectate la intrările primului circuit de pe nivelul , ieșirile următoarelor două sunt conectate la intrările celui de-al doilea circuit de pe linia , etc.
- pe nivelul 1 se găsește un singur circuit (
Exemplu de CLP cu 2 nivele:

Într-un CLP cu nivele avem intrări, corespunzătoare circuitelor de pe nivelul . La fiecare intrare se poate introduce un bit 0 sau un bit 1, deci un șir de biți.

Pentru circuitul din figura de mai sus presupunem că la cele patru intrări ale circuitelor de pe nivelul 2 avem, în ordine, biții 0111. La ieșirea din circuit (ieșirea circuitului simplu de pe primul nivel) se obține valoarea , deoarece acest circuit este echivalent cu expresia logică ((0 ȘI 1) ȘI (1 SAU 1)).
Cerința 1 (30 puncte)
Pentru un CLP dat, cu nivele și pentru șiruri de biți date la intrarea circuitului, să se determine, pentru fiecare șir, valoarea calculată la ieșirea din circuit.
Cerința 2 (70 puncte)
Pentru un CLP dat, cu nivele și cunoscând valoarea obținută la ieșire ( sau ), să se determine numărul șirurilor de biți distincte ce pot fi date la intrare pentru a se obține valoarea specificată la ieșire. Rezultatul poate fi un număr foarte mare, de aceea el se va afișa modulo .
Date de intrare
Pe prima linie a fișierului logic.in se găsește un număr natural ( pentru cerința 1, respectiv pentru cerința 2). Pe a doua linie se găsește numărul natural , reprezentând numărul de nivele ale circuitului.
Pe următoarele linii (linii de la la ) se găsește descrierea circuitului, fără spații între caractere, astfel:
- pe linia un caracter
&sau|, unde prin caracterul&se codifică un circuitȘI, iar prin caracterul|se codifică un circuitSAU; - pe linia două caractere din mulțimea
{&, |}; - pe linia patru caractere din mulțimea
{&, |}; - pe linia avem caractere din mulțimea
{&, |}.
Pentru cerința 1:
- Pe linia avem un număr natural , reprezentând numărul șirurilor de biți date la intrarea în circuit;
- Pe fiecare dintre următoarele linii avem câte un șir compus din biți (caractere
0sau1), reprezentând șirul de biți dat la intrare.
Pentru cerința 2:
- Pe linia avem un număr natural din mulțimea , reprezentând valoarea pe care circuitul trebuie să o scoată la ieșire.
Date de ieșire
Pentru cerința 1 se vor afișa în fișierul logic.out, pe linii separate, numere naturale din mulțimea , cu semnificația din enunț.
Pentru cerința 2 se va afișa în fișierul logic.out un număr natural cu semnificația din enunț.
Restricții și precizări
- Tabelele operațiilor logice sunt:

Exemplu 1
logic.in
1
2
&
&|
3
1101
0100
1000
logic.out
1
0
0
Explicație
, deci rezolvăm cerința 1. Pentru șirul de biți 1101 valoarea obținută la ieșirea din circuit este rezultatul evaluării expresiei: ((1 ȘI 1) ȘI (1 SAU 0)) = (1 ȘI 1) = 1.
Pentru șirul de biți 0100 valoarea obținută la ieșirea din circuit este rezultatul evaluării expresiei: ((0 ȘI 1) ȘI (0 SAU 0)) = (0 ȘI 0) = 0.
Pentru șirul de biți 1000 valoarea obținută la ieșirea din circuit este rezultatul evaluării expresiei: ((1 ȘI 0) ȘI (0 SAU 0) = (0 ȘI 0) = 0.
Exemplu 2
logic.in
2
2
&
&|
1
logic.out
3
Explicație
, deci rezolvăm cerința 2. Sunt șiruri de biți pentru care se obține valoarea la ieșirea din circuit: 1101, 1110 și 1111.