Strigoi

Time limit: 1s Memory limit: 64MB Input: Output:

Ana și Ecaterina se plictisesc. În cei 400400 de ani de când bântuie Padurea Codrilor Întunecați, singura lor distracție sunt rarii călători rătăciți. Așadar, ele s-au apucat de informatică.

După ce au învățat de concepte precum Object Oriented Programming și Data Oriented Programming, cele două au inventat paradigma de Comment Oriented Programming. Un program se numește comment-complet dacă poate evalua orice funcție prin comentarea (ștergerea) unor linii de cod.

Pentru a testa noul concept, cele două vor să creeze un program comment-complet care să evalueze polinoame. Își propun să rezolve următorul scenariu:

  • Ana alege un număr NN, pe care îl spune Ecaterinei.
  • Ecaterina îi spune Anei un program comment-complet pentru polinoamele de grad NN.
  • Ana alege un polinom PP de grad NN, cu coeficienții numere naturale, pe care îl spune Ecaterinei.
  • Ecaterina îi spune Anei care linii din programul ei trebuie comentate, pentru ca programul obținut să calculeze P(X)P(X).

Instrucțiunile permise în program sunt:

  • $VAR1 = $VAR2 [+-*] $VAR3} -- Valoarea variabilei $VAR1 devine suma / diferența / produsul variabilelor $VAR2 și $VAR3;
  • $VAR1 = $VAR2 [+-*] A -- Valoarea variabilei $VAR1 devine suma / diferența / produsul variabilei $VAR2 și numărul natural A;
  • $VAR1 = A -- Valoarea variabilei $VAR1 devine numărul natural A;

Variabilele pot avea orice nume format din litere, cifre și underscore ("_"), și există două variabile speciale:

  • $X: Variabila reprezintă valoarea în care dorim să evaluăm polinomul PP.
  • $Y: După executarea programului, această variabilă trebuie să fie egală cu P($X).

Interacțiune

Întâi citiți gradul NN al polinomului.

După aceea, afișați pe o linie LL, reprezentând numărul de instrucțiuni, urmat de LL linii, programul comment-complet.

După ce ați afișat programul (doar după), veți putea citi valorile P0,P1,,PNP_0, P_1, \dots, P_N, coeficienții polinomului PP.

După ce ați citit polinomul PP, afișați CC, numărul de linii de comentat, urmat de CC valori, indicii linilor (indexate de la 00).

Atenție: Nu uitați să dați flush la stdout cu cout.flush() (C++) sau fflush(stdout) (C).

Restricții și precizări

  • 0N1030 \leq N \leq 10^3.
  • 0Pi109  0iN0 \leq P_i \leq 10^9 \ \ \forall 0 \leq i \leq N (Important).
  • Programul generat poate avea cel mult 21052 * 10^5 operații.

Subtask-uri

  • (2020 de puncte) N=1N = 1 și 0Pi100  0iN0 \leq P_i \leq 100 \ \ \forall 0 \leq i \leq N.
  • (2020 de puncte) 0N1000 \leq N \leq 100 și 0Pi100  0iN0 \leq P_i \leq 100 \ \ \forall 0 \leq i \leq N.
  • (3030 de puncte) N=0N = 0.
  • (3030 de puncte) Nicio constrângere suplimentară.

Exemplul 1

Notă: Programul afișat în acest exemplu este comment-complet numai pentru polinoame cu coeficienții cel mult 22.

stdin stdout
1
8
$Y0 = 0
$Y0 = 1
$Y0 = 2
$Y1 = 0
$Y1 = 1
$Y1 = 2
$Y1 = $Y1 * $X
$Y = $Y0 + $Y1
1 2
4
0 2 3 4

Explicație

Pas 1

Ana a ales un polinom de grad 11. Așadar, îi transmite Ecaterinei numărul 11.

Pas 2

Ecaterina răspunde cu următorul program:

$Y0 = 0
$Y0 = 1
$Y0 = 2
$Y1 = 0
$Y1 = 1
$Y1 = 2
$Y1 = $Y1 * $X
$Y = $Y0 + $Y1

Pas 3

Ana îi spune Ecaterinei că a ales polinomul P(X)=1+2XP(X) = 1 + 2 \cdot X.

Pas 4

Ecaterina îi spune Anei că pentru ca programul pe care l-a afișat la pasul 2 să evalueze polinomul P, trebuie comentate liniile 0,2,30, 2, 3 și 44.

Verificare

După comentarea liniilor, codul Ecaterinei devine:

$Y0 = 1
$Y1 = 2
$Y1 = $Y1 * $X
$Y = $Y0 + $Y1

Putem să observăm așadar că $Y = 1 + 2 * $X = P($X).

Exemplul 2

stdin stdout
1
8
$Y0 = 0
$Y0 = 1
$Y0 = 2
$Y1 = 0
$Y1 = 1
$Y1 = 2
$Y1 = $Y1 * $X
$Y = $Y0 + $Y1
0 1
4
1 2 3 5

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