1. Шары и корзины

Не решаласьСредняя

Перед вами nn корзин с шарами, в ii-й корзине лежит aia_i шаров. Вам поступают два вида запросов:

  • 0 l r — положить в корзины с номерами от ll до rr по 1 дополнительному шару;
  • 1 l r — посчитать, сколько существует способов выбрать ровно по 1 шару из каждой корзины с номерами от ll до rr. Все шары считаются различными, а два способа считаются различными, если существует корзина, из которой были вытащены различные шары.

Дополнительно гарантируется, что запросов типа 0 суммарно не более 400.

Поскольку количество способов выбрать шары из корзин может быть очень большим, требуется вывести остаток от деления этого числа на 109+710^9 + 7.

Формат ввода

Первая строка содержит число nn (1n1000001 \le n \le 100\,000) — количество корзин.

Вторая строка содержит последовательность из целых чисел aia_i (1ai1091 \le a_i \le 10^9), разделённых пробелом, — изначальное количество шаров в каждой корзине.

Третья строка содержит число qq (1q1000001 \le q \le 100\,000) — количество запросов.

Следующие qq строк содержат запросы в формате, описанном выше (1lrn1 \le l \le r \le n).

Формат вывода

Для каждого запроса вида 1 l r выведите в новой строке остаток от деления количества способов выбрать по одному шару из каждой корзины соответствующего диапазона на 109+710^9 + 7.

Примечание

В приведённом примере изначально есть 6 способов выбрать по шару из каждой корзины. Второй запрос добавляет по шару в первую и вторую корзины, а третий запрос относится к первой и второй корзинам, после прошлого запроса содержащим 2 и 3 шара соответственно.

Ограничения

Ограничение времени

3 с

Ограничение памяти

256 МБ

Пример 1

Ввод
3
1 2 3
3
1 1 3
0 1 2
1 1 2
Вывод
6
6
Нужно войти, чтобы отправить решение.Войти