Ensamblador
Bambino, en una demostració addicional de que no està bé ha decidit aprendre codi ensamblador modern. Aquest codi ensamblador, que m'he inventat totalment, és un llenguatge de programació simple utilitzat per realitzar càlculs senzills. Un programa manté un únic enter X en memòria, inicialment establert a zero, i realitza repetidament operacions d'addició, subtracció i multiplicació sobre ell.
Formalment, el llenguatge té sis tipus de sintaxi:
Sintaxi | Descripció |
---|---|
ADD Y | Suma Y a X |
SUB Y | Resta Y de X |
MULT Y | Multiplica X per Y |
FUN F | Comença la definició d'una funció amb el nom únic F |
END | Fi de la definició de funció actual |
CALL F | Crida la funció F |
Les definicions de funcions poden estar niuades, en aquest cas END representa el final de la definició de funció més recent que no s'ha acabat encara. Per a les crides a funcions, la funció F ha d'haver estat definida en una línia anterior i una funció no pot cridar-se a si mateixa (en cas contrari, es produiria una recursió infinita).
Per exemple, el resultat del següent programa és 5:
FUN INCREMENT
ADD 1
END
CALL INCREMENT
MULT 2
ADD 3
Bambino ha escrit alguns programes en ensamblador, però troba que el seu linker triga una eternitat a executar-los. Pots ajudar a Bambino a determinar els resultats dels seus programes?
Entrada
La primera línia comença amb un únic enter T (1 ≤ T ≤ 10), el nombre de casos de prova. Segueixen T casos de prova.
Cada cas de prova comença amb un enter N (1 ≤ N ≤ 100000), el nombre d'instruccions en el programa. Les següents N línies contenen cadascuna una instrucció en el format descrit anteriorment.
Tots els enters seran no negatius i menors o iguals a 10^9. Els noms de les funcions seran en majúscules i tindran com a màxim 10 lletres.
Per als tres primers casos, no hi ha definicions de funcions. Per als següents dos casos, hi ha com a màxim una declaració de funció.
Sortida
Per a cada cas de prova, imprimeix el resultat del programa, mòdul 1.000.000.007.
Nota: "X mòdul Y es defineix com el residu positiu de X dividit per Y."
Exemple d'Entrada
2
3
ADD 1
MULT 1000000000
ADD 7
6
FUN INCREMENT
ADD 1
END
CALL INCREMENT
MULT 2
ADD 3
Exemple de Sortida
0
5
Nota: m'he inventat el llenguatge però és bastant similar a NASM. Podeu mirar NASM si us interessen llenguatges assembly que poden cridar funcions
Comentaris