Federico è un giovane programmatore. Partecipa a tutte le competizioni di programmazione che riesce a trovare, e scrive sempre nel suo linguaggio di programmazione preferito, Fygon. Sfortunatamente, ottiene spesso il verdetto Time Limit Exceeded anche quando il suo algoritmo è asintoticamente ottimale. Il motivo è che l'interprete di Fygon è molto lento. Tuttavia, Federico ama così tanto Fygon che ricorre a ottimizzazioni non asintotiche per far rientrare le sue soluzioni nel limite di tempo. Per semplificarsi il compito, ti chiede di scrivere un programma che calcoli il numero esatto di operazioni eseguite dal suo programma in Fygon.
Per semplicità, supponiamo che in Fygon esistano solo due tipi di istruzioni. La prima è lag, che può sostituire quasi ogni altra istruzione. La seconda è il ciclo for:
for <variable> in range (<limit>):
<body>Qui <variable> assume tutti i valori da a <limit> - . In Fygon, <variable> è una lettera latina minuscola da a , e <limit> è o una variabile <variable> definita in precedenza, oppure una costante intera positiva. Il corpo del ciclo <body> è scritto con un'indentazione di quattro spazi e contiene almeno un'istruzione.
Il programma riceve l'input nella variabile . Questa variabile ha un significato speciale e non può essere usata come variabile di ciclo.
Il tuo compito è trovare una formula che esprima il numero di operazioni lag eseguite da un dato programma in Fygon, in funzione di .
Contiene un programma in Fygon. Nessuna coppia di cicli usa la stessa variabile come contatore. Ogni variabile usata all'interno di range è o , oppure una variabile dichiarata in uno dei cicli esterni.
Il programma contiene al massimo istruzioni, di cui al massimo sono cicli. Tutte le costanti intere sono comprese nell'intervallo da a inclusi.
Stampa la formula per il numero di operazioni lag eseguite, in funzione di . La lunghezza della formula non deve superare caratteri (senza contare gli spazi), e la formula deve rispettare la seguente grammatica:
<Expression> ::= <Product> (('+' | '-') <Product>)*
<Product> ::= <Value> ('*' <Value>)*
<Value> ::= 'n' | <Number> | '-' <Value> | '(' <Expression> ')'
<Number> ::= ['0'..'9']+ ('/' ['0'..'9']+)?Esempio 1