Домашнее задание | 프로그래밍의 벗 PivotOJ
PivotOJ

Домашнее задание

시간 제한: 4000ms메모리 제한: 1024MB출처: MOOI 2014-15 qualBOJ 30783

문제

Спустя тридцать сезонов Мэгги Симпсон наконец поступила в первый класс. В целях тренировки чистописания учительница задала детям выписать в строку N цифр от ‘0’ до ‘9’ в некотором порядке.

После нескольких часов страданий Мэгги всё-таки справилась с домашним заданием и убежала играть с друзьями, оставив свою работу лежащей на письменном столе. В это время в комнату зашла Лиза Симпсон. Игра на саксофоне уже успела её порядком утомить, и она находилась в поисках какого-нибудь нового увлекательного занятия, когда её взгляд остановился на исписанной тетрадке Мэгги.

Лиза быстро справилась с тем, чтобы посчитать сумму всех написанных Мэгги цифр, но тут в комнату ворвался Барт и предложил ей задачу поинтереснее — произвести M операций с данной строкой цифр. Фантазия Барта довольно скудна, поэтому операции бывают только двух типов. Пусть позиции в строке занумерованы числами от 1 до N слева направо. Тогда операции имеют следующий вид:

  1. Барт называет два числа li и ri, а также цифру ci, после чего Лиза должна заменить все цифры на позициях с li-й по ri-ю включительно на цифру ci.
  2. Барт называет два числа li и ri, после чего Лиза должна посчитать сумму всех чисел, десятичные записи которых встречаются как подстроки отрезка исходной строки с li-й по ri-ю позицию включительно. При этом каждое число должно быть просуммировано с учётом кратности, то есть столько раз, сколько его запись встречается на отрезке с li-й по ri-ю. Также требуется учитывать только корректные десятичные записи чисел, то есть подстроки, начинающиеся на ‘0’, не должны входить в сумму.

Барт сегодня добрый, поэтому на операцию второго типа он просит от Лизы только остаток от деления ответа на 109 + 7.

Желая доказать своё превосходство над братом, Лиза немедленно согласилась. Поскольку Барт сам не знает правильных ответов, он никак не может проверить вычисления Лизы, поэтому ему крайне необходима ваша помощь.

입력

В первой строке ввода записаны через пробел два целых числа N и M — количество цифр, выписанных Мэгги, и количество операций Барта (1 ⩽ N, M ⩽ 100 000).

Вторая строка ввода содержит N цифр от 0 до 9, разделённых пробелами.

Следующие M строк описывают операции.

Запись вида 1 li ri ci обозначает операцию первого типа (1 ⩽ li ⩽ ri ⩽ N, 0 ⩽ ci ⩽ 9).

Запись вида 2 li ri обозначает операцию второго типа (1 ⩽ li ⩽ ri ⩽ N).

출력

На каждую операцию второго типа выведите остаток от деления ответа на 109 + 7.

Если среди операций Барта не присутствует ни одной операции второго типа, ничего выводить не требуется.

힌트

На первую операцию второго типа ответ представляет собой следующую сумму: 1 + 12 + 121 + 2 + 21 + 1 = 158.

На вторую операцию второго типа ответ представляет собой следующую сумму: 2 + 20 + 203 + 0 + 3 = 228. Обратите внимание: в ней присутствует меньше слагаемых, так как строка 03 не представляет собой корректную десятичную запись целого числа.

예제

예제 1

입력
4 3
1 2 1 3
2 1 3
1 3 3 0
2 2 4
출력
158
228

예제 2

입력
9 3
1 1 1 1 1 1 1 1 1
2 1 9
1 1 9 9
2 1 9
출력
137174205
234567838
코드를 제출하려면 로그인하세요.