수포수포 박사가 Shipura라는 프로그래밍 언어를 만들었다. Shipura에는 이항 연산자 >> 하나와 단항 함수 S< > 하나만 있다.
x >> y는 ⌊x/2y⌋, 즉 x/2y를 넘지 않는 가장 큰 정수로 계산한다. S< x >는 x2mod1,000,000,007, 즉 x2을 1,000,000,007로 나눈 나머지로 계산한다.
>> 연산자는 왼쪽 결합이다. 예를 들어 x >> y >> z는 (x >> y) >> z로 해석하고, x >> (y >> z)로 해석하지 않는다. 실제 Shipura 식에 이 괄호는 나오지 않는다.
Shipura의 문법을 BNF로 쓰면 다음과 같다.
expr ::= term | expr sp ">>" sp term
term ::= number | "S" sp "<" sp expr sp ">"
sp ::= "" | sp " "
number ::= digit | number digit
digit ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
시작 기호는 Shipura 식을 나타내는 expr이다. number는 0 이상 1,000,000,000 이하의 정수이고, 앞에 불필요한 0을 붙이지 않는다.
Shipura 식을 계산하는 프로그램을 작성하시오.
입력은 여러 개의 데이터 집합으로 이루어진다. 각 데이터 집합은 한 줄이며, 그 줄에 올바른 Shipura 식이 하나 들어 있다.
# 하나만 있는 줄이 나오면 입력이 끝난다. 데이터 집합은 100개 이하이고, 입력 파일 전체 크기는 2,000,000바이트를 넘지 않는다.
각 데이터 집합마다 식을 계산한 값을 한 줄에 출력한다.