COWBASIC

변수 대입, 중첩된 고정 횟수 MOO 루프, 마지막의 RETURN으로 이루어진 작은 언어를 해석해 반환값을 10^9+7로 나눈 나머지로 출력한다.

어려움8구현시뮬레이션행렬수학아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

Bessie가 새 프로그래밍 언어를 만들었다. 아직 컴파일러가 없어서 프로그램을 실제로 실행하려면 여러분의 도움이 필요하다.

COWBASIC은 단순하고 깔끔한 언어이다. 이 언어의 기능은 덧셈과 MOO 반복문 두 가지뿐이다. Bessie는 오버플로 문제를 영리하게 해결했다. 모든 덧셈은 109+710^9+7로 나눈 나머지로 계산한다. 하지만 Bessie가 가장 자랑하는 것은 MOO 반복문으로, 코드 블록 하나를 정해진 횟수만큼 실행한다. 물론 MOO 반복문과 덧셈은 중첩할 수 있다.

COWBASIC 프로그램이 주어질 때, 그 프로그램이 반환하는 수를 구하자.

입력

COWBASIC 프로그램이 주어진다. 프로그램은 최대 100줄이고, 각 줄의 길이는 최대 350자이다. COWBASIC 프로그램은 문장의 목록이다.

문장은 다음 세 종류가 있다.

<variable> = <expression>

<literal> MOO {
  <list of statements>
}

RETURN <variable>

식은 다음 세 종류가 있다.

<literal>

<variable>

( <expression> ) + ( <expression> )

리터럴은 100,000 이하의 양의 정수이다.

변수는 영어 소문자로만 이루어진 길이 10 이하의 문자열이다.

정의되기 전에 사용되거나 RETURN되는 변수는 없다. RETURN은 프로그램의 마지막 줄에서 정확히 한 번 실행된다.

출력

RETURN된 변수의 값을 정수 하나로 출력한다. 모든 덧셈은 109+710^9+7로 나눈 나머지로 계산하므로 이 값은 00 이상 109+710^9+7 미만이다.

힌트

두 번째 예제의 COWBASIC 프로그램은 (105×105+1)2(10^5 \times 10^5+1)^2109+710^9+7로 나눈 나머지를 계산한다.