Bessie 发明了一种新的编程语言,但由于目前还没有编译器,她需要你的帮助来运行她的程序。
COWBASIC 是一门简单而优雅的语言。它有两个关键特性:加法和 MOO 循环。Bessie 设计了一个巧妙的溢出处理方案:所有的加法运算均在模 $10^9+7$ 下进行。但 Bessie 真正的成就是 MOO 循环,它能将一段代码块重复执行固定的次数。当然,MOO 循环和加法是可以嵌套的。
给定一个 COWBASIC 程序,请帮助 Bessie 确定它返回的数值。
输入格式
你将获得一个长度不超过 100 行的 COWBASIC 程序,每行不超过 350 个字符。COWBASIC 程序是一系列语句的列表。
语句共有三种类型:
<variable> = <expression>
<literal> MOO {
<list of statements>
}
RETURN <variable>
表达式共有三种类型:
<literal> <variable> ( <expression> ) + ( <expression> )
字面量(literal)是一个不超过 100,000 的正整数。
变量(variable)是一个长度不超过 10 个小写英文字母的字符串。
保证在变量定义之前不会被使用或 RETURN。保证程序最后一行恰好执行一次 RETURN。
输出格式
输出一个正整数,即 RETURN 语句中变量的值。
子任务
- 在 20% 的测试用例中,MOO 循环不会嵌套。
- 在另外 20% 的测试用例中,程序仅包含 1 个变量。MOO 循环可以嵌套。
- 在剩余的测试用例中,没有进一步的限制。
样例
样例输入 1
x = 1
10 MOO {
x = ( x ) + ( x )
}
RETURN x样例输出 1
1024
说明 1
该 COWBASIC 程序计算了 $2^{10}$。
样例输入 2
n = 1
nsq = 1
100000 MOO {
100000 MOO {
nsq = ( nsq ) + ( ( n ) + ( ( n ) + ( 1 ) ) )
n = ( n ) + ( 1 )
}
}
RETURN nsq样例输出 2
4761
说明 2
该 COWBASIC 程序计算了 $(10^5*10^5+1)^2$(模 $10^9 + 7$)。
题目来源:Jonathan Paulson