Олимпиадный тренинг

Задача . F. Длинное число


Рассмотрим следующую грамматику:

  • <expression> ::= <term> | <expression> '+' <term>
  • <term> ::= <number> | <number> '-' <number> | <number> '(' <expression> ')'
  • <number> ::= <pos_digit> | <number> <digit>
  • <digit> ::= '0' | <pos_digit>
  • <pos_digit> ::= '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'

Эта грамматика задаёт число в десятичной системе счисления по следующим правилам:

  • <number> задаёт себя,
  • <number>-<number> (l-r, l ≤ r) задаёт число, полученное как конкатенация всех чисел от l до r, записанных без ведущих нулей. Например, 8-11 задает число 891011,
  • <number>(<expression>) задаёт число, полученное как конкатенация <number> копий числа, задаваемого <expression>,
  • <expression>+<term> задаёт число, полученное как конкатенация чисел, задаваемых <expression> и <term>.

Пример: 2(2-4+1)+2(2(17)) задаёт число 2341234117171717.

Дано выражение, выведите остаток от деления числа, которое оно задаёт, на 109 + 7.

Входные данные

В единственной строке ввода записана непустая строка длины не более 105, соответствующая заданной грамматике. В частности, для термов вида l-r гарантируется l ≤ r.

Выходные данные

В единственной строке выведите остаток от деления числа, задаваемого выражением, на 109 + 7.


Примеры
Входные данныеВыходные данные
1 8-11
891011
2 2(2-4+1)+2(2(17))
100783079
3 1234-5678
745428774
4 1+2+3+4-5+6+7-9
123456789

time 2000 ms
memory 512 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
Python1
С++ Mingw-w641
Комментарий учителя