만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

압축된 수식

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

요약
음이 아닌 정수에 대한 +, -, * 사칙연산 수식이 N개의 (반복 횟수, 짧은 문자열) 조각으로 압축되어 주어질 때, 수식 전체의 값을 1,000,000,007로 나눈 나머지를 구한다.
난이도

보통10점 중 7점

유형
수학, 문자열, 구현, 분할 정복
정답자
아직 제출이 없습니다

문제

길지만 단순한 수식이 압축된 형태로 주어진다. 압축된 수식은 정수 rir_i와 문자열 sis_i로 이루어진 쌍 NN개의 나열이고, 각 sis_i는 숫자 0부터 9까지와 +, -, *로만 이루어진다. 원래 수식은 모든 ii에 대해 sis_i를 rir_i번 반복한 문자열을 만든 다음, 그 문자열을 나열 순서대로 이어 붙여 복원한다.

복원한 수식은 항상 다음 BNF를 만족한다.

<expression> := <term> | <expression> '+' <term> | <expression> '-' <term>
<term> := <number> | <term> '*' <number>
<number> := <digit> | <non-zero-digit> <number>
<digit> := '0' | <non-zero-digit>
<non-zero-digit> := '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'

여기서 +는 덧셈, -는 뺄셈, *는 정수의 곱셈을 뜻한다.

주어진 수식의 값을 1,000,000,007로 나눈 나머지를 구하는 프로그램을 작성하시오. xx를 mm으로 나눈 나머지는 x=km+rx = km + r을 만족하는 정수 kk가 존재하고 0≤r<m0 \le r < m인 음이 아닌 정수 rr이다. 정수 xx와 mm에 대해 이런 rr은 하나로 정해진다.

입력

입력은 테스트 케이스 하나로 이루어진다.

N
r1 s1
...
rN sN

첫째 줄에 압축된 수식의 길이 NN (1≤N≤1041 \le N \le 10^4)이 주어진다. 다음 NN개의 줄에는 압축된 수식의 조각이 한 줄에 하나씩 주어진다. ii번째 줄은 정수 rir_i (1≤ri≤1091 \le r_i \le 10^9)와 문자열 sis_i (1≤∣si∣≤101 \le |s_i| \le 10)로 이루어지고, rir_i는 sis_i를 반복하는 횟수, sis_i는 원래 수식의 조각이다. 조각을 반복해 이어 붙여 복원한 수식은 문제에 제시한 BNF를 만족한다.

출력

주어진 압축된 수식의 값을 1,000,000,007로 나눈 나머지를 출력한다.

예제4

  1. 예제 1

    입력
    1
    5 1
    
    예상 출력
    11111
    
  2. 예제 2

    입력
    2
    19 2*
    1 2
    
    예상 출력
    1048576
    
  3. 예제 3

    입력
    2
    1 1-10
    10 01*2+1
    
    예상 출력
    999999825
    
  4. 예제 4

    입력
    4
    3 12+45-12
    4 12-3*2*1
    5 12345678
    3 11*23*45
    
    예상 출력
    20008570