압축된 수식
시간 제한2초메모리 제한512 MB
음이 아닌 정수에 대한 +, -, * 사칙연산 수식이 N개의 (반복 횟수, 짧은 문자열) 조각으로 압축되어 주어질 때, 수식 전체의 값을 1,000,000,007로 나눈 나머지를 구한다.
문제
길지만 단순한 수식이 압축된 형태로 주어진다. 압축된 수식은 정수 와 문자열 로 이루어진 쌍 개의 나열이고, 각 는 숫자 0부터 9까지와 +, -, *로만 이루어진다. 원래 수식은 모든 에 대해 를 번 반복한 문자열을 만든 다음, 그 문자열을 나열 순서대로 이어 붙여 복원한다.
복원한 수식은 항상 다음 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로 나눈 나머지를 구하는 프로그램을 작성하시오. 를 으로 나눈 나머지는 을 만족하는 정수 가 존재하고 인 음이 아닌 정수 이다. 정수 와 에 대해 이런 은 하나로 정해진다.
입력
입력은 테스트 케이스 하나로 이루어진다.
N
r1 s1
...
rN sN
첫째 줄에 압축된 수식의 길이 ()이 주어진다. 다음 개의 줄에는 압축된 수식의 조각이 한 줄에 하나씩 주어진다. 번째 줄은 정수 ()와 문자열 ()로 이루어지고, 는 를 반복하는 횟수, 는 원래 수식의 조각이다. 조각을 반복해 이어 붙여 복원한 수식은 문제에 제시한 BNF를 만족한다.
출력
주어진 압축된 수식의 값을 1,000,000,007로 나눈 나머지를 출력한다.