Shipura

시간 제한8초메모리 제한512 MB

요약
2의 거듭제곱으로 나눈 몫과 1,000,000,007로 나눈 제곱이 섞인 식을 계산합니다.
난이도

보통10점 중 4점

유형
스택, 재귀, 비트 연산
정답자
아직 제출이 없습니다

문제

수포수포 박사가 Shipura라는 프로그래밍 언어를 만들었다. Shipura에는 이항 연산자 >> 하나와 단항 함수 S< > 하나만 있다.

xx >> yy는 ⌊x/2y⌋\lfloor x / 2^y \rfloor, 즉 x/2yx / 2^y를 넘지 않는 가장 큰 정수로 계산한다. S< xx >는 x2 mod 1,000,000,007x^2 \bmod 1{,}000{,}000{,}007, 즉 x2x^2을 1,000,000,0071{,}000{,}000{,}007로 나눈 나머지로 계산한다.

>> 연산자는 왼쪽 결합이다. 예를 들어 xx >> yy >> zz는 (x(x >> y)y) >> zz로 해석하고, xx >> (y(y >> z)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는 00 이상 1,000,000,0001{,}000{,}000{,}000 이하의 정수이고, 앞에 불필요한 0을 붙이지 않는다.

Shipura 식을 계산하는 프로그램을 작성하시오.

입력

입력은 여러 개의 데이터 집합으로 이루어진다. 각 데이터 집합은 한 줄이며, 그 줄에 올바른 Shipura 식이 하나 들어 있다.

# 하나만 있는 줄이 나오면 입력이 끝난다. 데이터 집합은 100개 이하이고, 입력 파일 전체 크기는 2,000,000바이트를 넘지 않는다.

출력

각 데이터 집합마다 식을 계산한 값을 한 줄에 출력한다.

예제3

  1. 예제 1

    입력
    S< S< 12 >> 2 > >
    123 >> 1 >> 1
    1000000000   >>129
    S<S<S<S<S<2>>>>>
    S  <S< S<2013    >>> 11 >>> 10 >
    #
    
    예상 출력
    81
    30
    0
    294967268
    14592400
    
  2. 예제 2

    입력
    0
    1000000000
    S<0>
    S<1>
    12 >> 0
    #
    
    예상 출력
    0
    1000000000
    0
    1
    12
    
  3. 예제 3

    입력
    S<3>>>1
    S<S<3>>>>1
    1000000000 >> S<2>
    S<1000000000>
    #
    
    예상 출력
    4
    40
    62500000
    49