2025-2026 ICPC NERC, Чемпионат Кыргызстана
A. Куб борг
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Энтерпрайз наконец нашел Куб борг, и теперь Пикару придется попасть во внутрь. Понятно, что борги защитили свой Куб специальным кодом. Раньше код можно было легко посчитать, прочитав числа прямо в космосе, расположенные на углах куба, но борги закрыли эти числа защитным полем. Сам код — это сумма всех восьми чисел, спрятанных в углах Куба.

Но теперь их не видно...

Но так как борги должны были сами возвращаться на Куб, а помнили код не все из них, была оставлена подсказка — числа на сторонах Куба. Каждое угловое число можно вычислить, перемножив три числа на гранях, которые сходятся в этом углу.

Энтерпрайз облетел Куб борг — теперь у Пикара есть числа со всех сторон Куба.

Помогите Пикару: зная числа на сторонах Куба, вычислите сумму всех угловых чисел.

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

В первой строке даны 6 целых чисел через пробел $$$v_1, \ldots, v_6$$$ $$$(1 \le v_i \le 500)$$$ — числа, расположенные на верхней, нижней, левой, правой, передней и задней сторонах Куба соответственно.

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

В первой строке выведите одно целое число $$$C$$$ $$$(1 \le C \le 10^9)$$$ — код для доступа в Куб борг.

Пример
Входные данные
1 2 3 4 4 5
Выходные данные
189
Примечание

Первый тестовый пример

Числа в углах куба соответственно равны:

  • угол сверху слева спереди: $$$v_1 \cdot v_3 \cdot v_5 = 1 \cdot 3 \cdot 4 = 12$$$;
  • угол сверху слева сзади: $$$v_1 \cdot v_3 \cdot v_6 = 1 \cdot 3 \cdot 5 = 15$$$;
  • угол сверху справа спереди: $$$v_1 \cdot v_4 \cdot v_5 = 1 \cdot 4 \cdot 4 = 16$$$;
  • угол сверху справа сзади: $$$v_1 \cdot v_4 \cdot v_6 = 1 \cdot 4 \cdot 5 = 20$$$;
  • угол снизу слева спереди: $$$v_2 \cdot v_3 \cdot v_5 = 2 \cdot 3 \cdot 4 = 24$$$;
  • угол снизу слева сзади: $$$v_2 \cdot v_3 \cdot v_6 = 2 \cdot 3 \cdot 5 = 30$$$;
  • угол снизу справа спереди: $$$v_2 \cdot v_4 \cdot v_5 = 2 \cdot 4 \cdot 4 = 32$$$;
  • угол снизу справа сзади: $$$v_2 \cdot v_4 \cdot v_6 = 2 \cdot 4 \cdot 5 = 40$$$.

Сумма всех чисел в углах равна $$$12 + 15 + 16 + 20 + 24 + 30 + 32 + 40 = 189$$$.

B. Ностальгия
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Айдар, Бегимай и Виктор пришли на пробный тур чемпионата.

Они увидели в списке доступных компиляторов Scratch и вспомнили, как начинали изучение программирования с этого языка.

Например, при ручном тестировании часто было непонятно, что программа ждёт ввода той или иной переменной. Поэтому иногда они локально добавляли вывод имени переменной перед вводом (но после убирали его при отправке в тестирующую систему).

Ребята даже нашли в системе несколько своих отправок на Scratch с тех давних времён.

Теперь ребятам стало интересно — а сколько суммарно символов они дополнительно выводили при локальном тестировании по сравнению с итоговой посылкой в систему?

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

В первой строке дано целое число $$$n$$$ $$$(2 \le n \le 10^5)$$$ — количество строк в коде программы на языке Scratch.

Следующие $$$n$$$ строк содержат по одной команде анализируемой программы.

Команды бывают одного из следующих видов:

  • Запрос ввода в формате «Ask read_token and wait»;
  • Запись введённой информации в переменную name в формате «Set name to answer»;
  • Присваивание переменной name1 результата арифметической операции op над переменными name2 и name3 в формате «Set name1 to name2 op name3»;
  • Вывод значения переменной name на экран в формате Say name.

Гарантируется, что

  • все имена переменных состоят только из латинских букв нижнего регистра (az) и содержат от $$$1$$$ до $$$10$$$ символов;
  • исходный код не содержит переменных с именем answer, зарезервированным для ввода информации в переменную.

Гарантируется, что op может быть только одним из следующих символов:

  • + — сложение;
  • - — вычитание;
  • * — умножение;
  • / — деление.

Гарантируется, что

  • каждый запрос ввода обязательно сопровождается записью введённой информации в переменную;
  • каждая запись введённой информации в переменную обязательно следует после запроса ввода.

Гарантируется, что все переменные используются в правой части арифметических выражений только после их корректной инициализации.

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

Выведите единственное целое число $$$P$$$ $$$(1 \le P \le 10^9)$$$ — суммарное количество символов, выведенных ребятами дополнительно при локальном тестировании данной программы.

Примеры
Входные данные
6
Ask read_token and wait
Set first to answer
Ask read_token and wait
Set second to answer
Set result to first + second
Say result
Выходные данные
11
Входные данные
15
Ask read_token and wait
Set a to answer
Ask read_token and wait
Set bb to answer
Set ccc to a * bb
Set dddd to a / bb
Set dddd to ccc + dddd
Say dddd
Ask read_token and wait
Set bb to answer
Ask read_token and wait
Set ccc to answer
Set x to bb * dddd
Set x to ccc - x
Say x
Выходные данные
8
Примечание

Первый тестовый пример

В рамках программы производится две операции ввода:

  • один раз вводится переменная first — $$$5$$$ дополнительных символов на ввод;
  • один раз вводится переменная second — $$$6$$$ дополнительных символов на ввод.

Суммарно ребята выводили дополнительно ровно $$$5 + 6 = 11$$$ символов.

Второй тестовый пример

В рамках программы производится четыре операции ввода:

  • один раз вводится переменная a — $$$1$$$ символ на ввод;
  • два раза вводится переменная bb — $$$2$$$ символа на ввод;
  • один раз вводится переменная ccc — $$$3$$$ символа на ввод.

Суммарно ребята выводили дополнительно ровно $$$1 + 2 \cdot 2 + 3 = 8$$$ символов.

C. Нельзя просто так взять и поделить
ограничение по времени на тест
4 секунды
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Анатолий и Антитолий пересеклись на форуме по проблемам числовой несправедливости.

Выяснилось, что кроме их любви к математике, у них очень много различий.

Например, Анатолий всегда стремится к честному распределению благ и не боится сложностей.

Антитолий же находит удовольствие в несправедливом распределении ресурсов, а также стремится к простоте во всём.

В данный момент Антитолий разрабатывает свою модель идеального общества, заданного параметром $$$n$$$.

Для завершения Антитолию осталось вычислить ровно одну величину — количество целых чисел $$$x$$$ в промежутке от $$$1$$$ до $$$n$$$ таких, что:

  • само число $$$x$$$ является нечётным (чётные числа слишком легко разделить пополам, Антитолию они не нравятся);
  • количество делителей числа $$$x$$$ является нечётным и простым.
Входные данные

В первой строке дано целое нечётное число $$$n$$$ $$$(3 \le n \le 11^{13})$$$ — параметр идеального общества в модели Антитолия.

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

Выведите единственное целое число $$$R$$$ $$$(0 \le R \le n)$$$ — количество целых чисел $$$x$$$ в промежутке от $$$1$$$ до $$$n$$$ таких, что:

  • само число $$$x$$$ является нечётным;
  • количество делителей числа $$$x$$$ является нечётным и простым.
Примеры
Входные данные
3
Выходные данные
0
Входные данные
5
Выходные данные
0
Входные данные
9
Выходные данные
1
Входные данные
111
Выходные данные
4
Входные данные
9753113579
Выходные данные
9563
Примечание

Определение Целое положительное число называется простым, если у него ровно два различных делителя.

Например, числа $$$3$$$, $$$17$$$ и $$$59$$$ являются простыми, а числа $$$1$$$ ($$$1$$$ делитель), $$$9$$$ ($$$3$$$ делителя), $$$30$$$ ($$$8$$$ делителей) и $$$111$$$ ($$$4$$$ делителя) простыми не являются.

Первый тестовый пример

Рассмотрим каждое из чисел, не превышающих $$$3$$$:

  • $$$1$$$ имеет $$$1$$$ делитель — количество делителей нечётное, но не простое.
  • $$$2$$$ имеет $$$2$$$ делителя — само число чётное, поэтому не интересует.
  • $$$3$$$ имеет $$$2$$$ делителя — количество делителей простое, но чётное.

Соответственно, нет ни одного подходящего Антитолию чисел.

Второй тестовый пример

По сравнению с первым тестом добавляются два числа:

  • $$$4$$$ имеет $$$3$$$ делителя — количество делителей нечётное и простое, но само число чётное.
  • $$$5$$$ имеет $$$2$$$ делителя — количество делителей простое, но чётное.

До сих пор нет подходящих Антитолию чисел.

Третий тестовый пример

По сравнению со вторым тестом добавляются четыре числа:

  • $$$6$$$ и $$$8$$$ — чётные числа, не интересуют.
  • $$$7$$$ имеет $$$2$$$ делителя — количество делителей простое, но чётное.
  • $$$9$$$ имеет $$$3$$$ делителя — количество делителей и простое, и нечётное.

D. Клад
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Лиса Алиса и Кот Базилио убежали от Буратино, но оставили ему кубик. Сказали, что на нём написано, где зарыт клад. Он, конечно, поверил.

На каждой грани кубика была выжжена цифра.

Буратино сказали, что нужно двигаться по граням кубика, каждый раз переходя на соседнюю грань и записывая цифры, которые на них нарисованы. На каждую грань можно зайти только один раз.

Самое большое число, которое удастся собрать таким образом, укажет, где зарыт клад. Первые три цифры — шаги на север от старой мельницы, остальные — на восток.

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

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

В первой строке даны $$$6$$$ целых чисел $$$d_1, \ldots, d_6$$$ $$$(0 \le d_i \le 9)$$$ — цифры, выжженные на верхней, нижней, левой, правой, передней и задней гранях кубика соответственно.

Гарантируется, что хотя бы одна из цифр $$$d_i$$$ отлична от $$$0$$$.

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

В первой строке выведите одно целое число $$$X$$$ $$$(10^5 \le X \lt 10^6)$$$ — наибольшее число, которое можно получить описанным Буратино способом.

Пример
Входные данные
2 3 1 4 5 6
Выходные данные
645312
Примечание

Первый тестовый пример

Максимальное число $$$645312$$$ может быть получено при обходе граней кубика в следующем порядке:

  • задняя;
  • правая;
  • передняя;
  • нижняя;
  • левая;
  • верхняя.

Обратите внимание, что следующие числа получить нельзя:

  • $$$654312$$$ нельзя получить, так как нельзя перейти с задней грани сразу на переднюю;
  • $$$645321$$$ нельзя получить, так как нельзя перейти с нижней грани сразу на верхнюю.

E. Визуализируй это
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Айдар, Бегимай и Виктор для решения сложной задачи написали своё первое дерево отрезков.

Но возникла проблема — их дерево выдавало неверные ответы даже на тестовых примерах из условия задачи.

В первую очередь, ребята предположили, что они неверно сопоставили полуинтервалы массива узлам. Виктор сказал, что надо вывести по порядку все узлы и их полуинтервалы.

Бегимай на это заметила, что простой построчный вывод не сильно ускорит процесс — надо визуализировать всё дерево целиком!

Внимание: Данная задача использует определённые правила построения дерева отрезков — ознакомьтесь с ними в примечании к задаче.

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

В первой строке дано целое число $$$n$$$ $$$(1 \le n \le 10^4)$$$ — размер массива.

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

Дерево необходимо визуализировать по слоям, каждому слою соответствует одна строка.

  • Корень дерева визуализируется в первой строке.
  • Дочерние узлы располагаются на строку ниже от родительского узла.
  • Каждый узел визуализируется следующим образом:
    • Полуинтервал узла описывается в формате $$$[L;R)$$$.
    • В случае, если $$$L + 1 \lt R$$$, строго под знаком «;» вплоть до самой нижней строки располагаются символы «|», обозначающие разделитель между левым и правым поддеревьями.
    • Между строкой, описывающей сам узел, и любым разделителем на той же строке должно располагаться минимально возможное количество пробелов (не менее одного).
  • Хотя бы одна строка вывода не должна начинаться с пробела.
  • Последний символ каждой строки не должен являться пробелом.

Ознакомьтесь с тестовыми примерами для уточнения подробностей.

Примеры
Входные данные
1
Выходные данные
[0;1)
Входные данные
2
Выходные данные
    [0;2)
[0;1) | [1;2)
Входные данные
3
Выходные данные
    [0;3)
[0;1) |     [1;3)
      | [1;2) | [2;3)
Входные данные
7
Выходные данные
                    [0;7)
    [0;3)             |             [3;7)
[0;1) |     [1;3)     |     [3;5)     |     [5;7)
      | [1;2) | [2;3) | [3;4) | [4;5) | [5;6) | [6;7)
Входные данные
9
Выходные данные
                            [0;9)
            [0;4)             |             [4;9)
    [0;2)     |     [2;4)     |     [4;6)     |     [6;9)
[0;1) | [1;2) | [2;3) | [3;4) | [4;5) | [5;6) | [6;7) |     [7;9)
      |       |       |       |       |       |       | [7;8) | [8;9)
Примечание

Определение

Дерево отрезков, построенное для массива длины $$$n$$$, представляет из себя бинарное дерево, в котором каждый узел сопоставлен какому-либо полуинтервалу данного массива:

  • Корень дерева сопоставлен всему массиву — полуинтервалу $$$[0; n)$$$.
  • Каждый лист (терминальный узел) дерева сопоставлен определённому элементу массива — полуинтервалу $$$[i; i + 1)$$$.
  • Общее правило сопоставления узлов и полуинтервалов следующее:
    • Пусть нетерминальный узел $$$v$$$ сопоставлен полуинтервалу $$$[L; R)$$$.
    • Пусть $$$M = \lfloor\frac{(L + R)}{2}\rfloor$$$ — середина полуинтервала.
    • В таком случае левый сын данного узла сопоставлен полуинтервалу $$$[L, M)$$$, а правый сын — полуинтервалу $$$[M; R)$$$.

F. Знаковая спутанность
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Позислав и Минуслав пересеклись на форуме по физике целых чисел.

Выяснилось, что их области исследований очень схожи — Позислав изучает энергетические выбросы положительных чисел, а Минуслав — энергетические всплески отрицательных чисел.

Ребята решили объединить свои усилия и провести масштабное исследование знаковой спутанности:

  • Допустим, что в момент времени $$$t_i$$$ происходит энергетический выброс на положительной полуоси.
  • Допустим, что в момент времени $$$t_j$$$ происходит энергетический всплеск на отрицательной полуоси.
  • Если $$$0 \lt |t_i - t_j| \le d$$$, то события $$$i$$$ и $$$j$$$ считаются cпутанными по знаку.

Ребята объединили свои записи — теперь им остаётся найти количество пар спутанных по знаку событий.

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

В первой строке даны два целых числа $$$n$$$ и $$$d$$$ $$$(1 \le n \le 3 \cdot 10^5; 1 \le d \le 10^9)$$$ — количество исследованных энергетических событий и наибольшая разница во времени для существования спутанности.

Вторая строка содержит $$$n$$$ целых чисел $$$t_i$$$ $$$(1 \le t_i \le 10^9)$$$ — момент времени, когда произошло $$$i$$$-е событие.

Третья строка содержит строку $$$S$$$ $$$(|S| = n)$$$ — знаки полуосей, на которых произошли события:

  • если $$$S_i$$$ равно +, то $$$i$$$-е событие произошло на положительной полуоси;
  • если $$$S_i$$$ равно -, то $$$i$$$-е событие произошло на отрицательной полуоси.

Гарантируется, что записи даны в хронологическом порядке: $$$t_1 \le t_2 \le \ldots \le t_n$$$.

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

Выведите единственное целое число $$$T$$$ $$$(0 \le T \le 10^{18})$$$ — количество пар спутанных по знаку событий.

Пример
Входные данные
14 3
1 1 3 3 3 3 5 5 6 6 6 8 9 11
+--+++--+++++-
Выходные данные
23
Примечание

Первый тестовый пример

События на положительной оси произошли в моменты времени $$$[1, 3, 3, 3, 6, 6, 6, 8, 9]$$$. События на отрицательной оси произошли в моменты времени $$$[1, 3, 5, 5, 11]$$$.

Перечислим спутанные пары событий:

  • Событие в момент времени $$$1$$$ на положительной оси и событие в момент времени $$$3$$$ на отрицательной оси —- $$$1$$$ пара.
  • Событие в момент времени $$$1$$$ на отрицательной оси и три события в момент времени $$$3$$$ на положительной оси — всего $$$3$$$ пары.
  • Событие в момент времени $$$3$$$ на отрицательной оси и три события в момент времени $$$6$$$ на положительной оси — всего $$$3$$$ пары.
  • Три события в момент времени $$$3$$$ на положительной оси и два события в момент времени $$$5$$$ на отрицательной оси — всего $$$6$$$ пар.
  • Два события в момент времени $$$5$$$ на отрицательной оси и три события в момент времени $$$6$$$ на положительной оси — всего $$$6$$$ пар.
  • Два события в момент времени $$$5$$$ на отрицательной оси и событие в момент времени $$$8$$$ на положительной оси — всего $$$2$$$ пары.
  • Событие в момент времени $$$8$$$ на положительной оси и событие в момент времени $$$11$$$ на отрицательной оси — всего $$$1$$$ пара.
  • Событие в момент времени $$$9$$$ на положительной оси и событие в момент времени $$$11$$$ на отрицательной оси — всего $$$1$$$ пара.

Суммарно получаем $$$1 + 3 + 3 + 6 + 6 + 2 + 1 + 1 = 23$$$ пары спутанных событий.

G. Тайные слова
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Сирин переместился в параллельный мир, и Сказочному патрулю надо отправляться за ним.

Снежка подошла к старому камину и заметила, что за кирпичом торчит уголок какого-то старого свитка. Она осторожно вытащила его и развернула. На пергаменте был написан сплошной поток непонятных букв и символов, а рядом лежал небольшой листок со списком загадочных слов.

Девочки поняли, что это ещё один шифр Сирина. На краю листа была пометка — «Тем, кто хочет добраться до параллельного мира, нужно разбить весь текст на отдельные тайные слова из этого списка. Каждое слово можно использовать любое число раз, но ничего лишнего добавлять нельзя. Учтите: символы «?» в тексте заменяют любые буквы тайного слова».

Маша, взглянув на текст, который достала Снежка, поняла, что этот текст можно разбивать на слова множеством способов! Как же узнать, сколько всего таких способов существует? Она поняла, что придется считать. Но самим девочкам это, похоже, не осилить — нужна ваша помощь!

Помогите девочкам из Сказочного патруля догнать Сирина — определите, сколько существует различных способов разбить текст из пергамента на тайные слова из листочка.

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

В первой строке дано целое число $$$n$$$ $$$(1 \le n \le 100)$$$ — число тайных слов.

Каждая из следующих строк содержит строку $$$W_i$$$ $$$(1 \le |W_i| \le 10)$$$ — $$$i$$$-е тайное слово.

Гарантируется, что все слова $$$W_i$$$ уникальны, то есть для $$$i \ne j$$$ выполняется $$$W_i \ne W_j$$$.

Последняя строка содержит строку $$$T$$$ $$$(1 \le |T| \le 100)$$$ — текст из пергамента.

Гарантируется, что

  • каждое слово $$$W_i$$$ состоит только из букв латинского алфавита в нижнем регистре (az);
  • текст $$$T$$$ состоит только из букв латинского алфавита в нижнем регистре (az) и символов «?», где каждый символ «?» заменяет ровно одну произвольную букву.
Выходные данные

Пусть $$$P$$$ — количество способов разбиения текста из пергамента на тайные слова.

В единственной строке выведите единственное целое число — остаток от деления $$$P$$$ на $$$M = 10^9 + 7$$$.

Примеры
Входные данные
7
a
b
c
d
ab
bc
cd
ab?d
Выходные данные
11
Входные данные
2
a
b
??
Выходные данные
4
Примечание

Первый тестовый пример

Перечислим возможные способы разбиения текста:

  1. $$$[\texttt{a}, \texttt{b}, \texttt{a}, \texttt{d}]$$$;
  2. $$$[\texttt{a}, \texttt{b}, \texttt{b}, \texttt{d}]$$$;
  3. $$$[\texttt{a}, \texttt{b}, \texttt{c}, \texttt{d}]$$$;
  4. $$$[\texttt{a}, \texttt{b}, \texttt{d}, \texttt{d}]$$$;
  5. $$$[\texttt{ab}, \texttt{a}, \texttt{d}]$$$;
  6. $$$[\texttt{ab}, \texttt{b}, \texttt{d}]$$$;
  7. $$$[\texttt{ab}, \texttt{c}, \texttt{d}]$$$;
  8. $$$[\texttt{ab}, \texttt{d}, \texttt{d}]$$$;
  9. $$$[\texttt{a}, \texttt{bc}, \texttt{d}]$$$;
  10. $$$[\texttt{a}, \texttt{b}, \texttt{cd}]$$$;
  11. $$$[\texttt{ab}, \texttt{cd}]$$$.

Второй тестовый пример

Перечислим возможные способы разбиения текста:

  1. $$$[\texttt{a}, \texttt{a}]$$$;
  2. $$$[\texttt{a}, \texttt{b}]$$$;
  3. $$$[\texttt{b}, \texttt{a}]$$$;
  4. $$$[\texttt{b}, \texttt{b}]$$$.

H. Вложенные циклы
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Бегимай вернулась домой после соревнования — и её встретила очень радостная младшая сестра Динара.

Динара сказала, что она пристально следила за соревнованием — и даже придумала, как решать одну непростую задачу!

Единственное, в чём Динара пока сомневалась — насколько эффективным было придуманное ею решение. Поэтому Динара подготовила псевдокод своего решения, чтобы Бегимай его оценила.

Псевдокод Динары представляет собой комбинацию операторов трёх типов:

  • операция for и следующее за ней целое число $$$k$$$ означает начало цикла из $$$k$$$ итераций;
  • операция end означает конец цикла, заданного ближайшим неоконченным оператором for;
  • операция calc и следующее за ней целое число $$$k$$$ означает вычисления, выполняемые суммарно за $$$k$$$ операций.

Теперь Бегимай должна определить суммарное количество операций, выполняемых данным решением, и сделать вывод из его эффективности.

Бегимай сразу увидела, что итоговое суммарное количество операций получилось просто огромным — и, чтобы слишком не расстраивать сестру, решила сказать ей остаток от деления данного количества на число $$$10^9 + 7$$$.

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

В первой строке дано целое число $$$n$$$ $$$(1 \le n \le 10^5)$$$ — количество строк в псевдокоде решения.

Каждая из следующих $$$n$$$ строк содержит один из трёх операторов:

  • разделённые пробелом строка for и целое число $$$k$$$ $$$(1 \le k \le 10^9)$$$ — начало цикла из $$$k$$$ итераций;
  • строка end — конец цикла, заданного ближайшим неоконченным оператором for;
  • разделённые пробелом строка calc и целое число $$$k$$$ $$$(1 \le k \le 10^9)$$$ — вычисления, выполняемые суммарно за $$$k$$$ операций.

Гарантируется, что

  • каждый оператор end соответствует какому-либо оператору for в одной из предыдущих строк;
  • каждый оператор for имеет соответствующий ему оператор end в одной из последующих строк;
  • каждая пара forend содержит хотя бы один вложенный оператор.
Выходные данные

Пусть $$$T$$$ — суммарное количество операций, выполняемых описанным решением.

В таком случае выведите единственное целое число — остаток от деления $$$T$$$ на $$$10^9 + 7$$$.

Примеры
Входные данные
13
for 10
for 300
calc 5
end
for 40
calc 7
calc 4
end
end
calc 45
for 3
calc 123
end
Выходные данные
19814
Входные данные
7
for 2000
for 1000
for 3000
calc 4000
end
end
end
Выходные данные
999832007
Примечание

Первый тестовый пример

Декомпозируем представленный псевдокод:

  • в строках $$$2$$$ — $$$4$$$ выполняется $$$300 \cdot 5 = 1500$$$ операций;
  • в строках $$$5$$$ — $$$8$$$ выполняется $$$40 \cdot (7 + 4) = 440$$$ операций;
  • в строках $$$1$$$ — $$$9$$$ выполняется $$$10 \cdot (1500 + 440) = 19400$$$ операций;
  • в строке $$$10$$$ выполняется $$$45$$$ операций;
  • в строках $$$11$$$ — $$$13$$$ выполняется $$$3 \cdot 123 = 369$$$ операций.

Суммарно получается $$$T = 19400 + 45 + 369 = 19814$$$ операций.

Второй тестовый пример

Суммарно данное решение выполняет $$$T = 2000 \cdot 1000 \cdot 3000 \cdot 4000 = 24 \cdot 10^{12}$$$ операций.

Необходимо вывести остаток от деления $$$T$$$ на $$$10^9 + 7$$$, который равен $$$999832007$$$.

I. Пилим лес
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Сидя на звонке по livecoding по теме «деревья», два программиста «Kanda Software» начали играть на бумажке в игру — рисовать деревья. Естественно, не зеленые с листьями, а графы.

Сначала взяли дерево из единственной вершины с номером $$$1$$$. Потом дорисовали к нему вершину с номером $$$2$$$ и соединили их ребром, получив второе дерево, и назвали вершину номер $$$2$$$ его корнем.

Затем договорились, что каждое последующее $$$n$$$-е дерево будет строиться из $$$(n - 1)$$$-го дерева по следующей процедуре:

  • в $$$(n - 1)$$$-м дереве строится путь от корня дерева к некоторому листу так, что на каждом шаге выбирается дочерняя вершина с наибольшим номером;
  • все ребра, принадлежащие построенному пути, удаляются;
  • все вершины, принадлежащие построенному пути, присоединяются каждая одним ребром к новой вершине с номером $$$n$$$;
  • вершина с номером $$$n$$$ становится корнем $$$n$$$-го дерева.

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

Один загадывал два числа, $$$n$$$ и $$$v$$$, а второй должен был посчитать сумму номеров вершин на кратчайшем пути от корня $$$n$$$-го дерева до вершины $$$v$$$ (включая начальную и конечную вершину).

Тут Слава заметил их игру и предложил для лучшего усвоения материала вычислить требуемую сумму для достаточно больших значений $$$n$$$. Естественно, провести на бумажке столь сложные вычисления невозможно. Помогите им это сделать.

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

В первой строке даны два целых числа $$$n$$$ и $$$v$$$ $$$(1 \le v \le n \le 10^{18})$$$ — номер дерева и номер вершины в дереве, соответственно.

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

В единственной строке выведите целое число $$$S$$$ – сумму номеров вершин на кратчайшем пути от корня $$$n$$$-го дерева до вершины $$$v$$$ (включая начальную и конечную вершину).

Гарантируется, что $$$S$$$ не превышает $$$9 \cdot 10^{18}$$$.

Примеры
Входные данные
2 1
Выходные данные
3
Входные данные
3 2
Выходные данные
5
Входные данные
6 1
Выходные данные
12
Входные данные
9 6
Выходные данные
23
Примечание

$$$2$$$-е и $$$3$$$-е деревья соответственно.

$$$6$$$-е и $$$9$$$-е деревья соответственно.

Первый тестовый пример

Сумма номеров вершин на пути равна $$$2 + 1 = 3$$$.

Второй тестовый пример

Сумма номеров вершин на пути равна $$$3 + 2 = 5$$$.

Третий тестовый пример

Сумма номеров вершин на пути равна $$$6 + 5 + 1 = 12$$$.

Четвёртый тестовый пример

Сумма номеров вершин на пути равна $$$9 + 8 + 6 = 23$$$.

J. Балансировка лазеров
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

В некоторой лаборатории к потолку подвешено $$$n$$$ лазеров. Изначально каждый лазер подвешен на расстоянии $$$a_i$$$ от потолка. При этом все лазеры висят в одной плоскости, и у каждого есть своя уникальная координата $$$x_i = i$$$.

На другом конце комнаты стоит экран. Все лазеры излучают свет в сторону экрана, поэтому если $$$2$$$ лазера висят на одной высоте, то свет из лазера с меньшей координатой не доходит до экрана.

Вы можете не более $$$k$$$ раз взять какой-то лазер и увеличить его расстояние от потолка на $$$1$$$. Вас интересует — при оптимальном использовании операции, свет какого наибольшего числа лазеров будет регистрироваться экраном?

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

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число $$$t$$$ ($$$1 \le t \le 10^4$$$) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит $$$2$$$ целых числа $$$n$$$ и $$$k$$$ ($$$1 \leq n \leq 2 \cdot 10^5, 1 \leq k \leq 10^9$$$) — общее число лазеров и число операций соответственно.

Вторая строка каждого набора входных данных содержит через пробел $$$n$$$ целых чисел $$$a_i$$$ ($$$1 \leq a_i \leq 10^9$$$) — изначальные расстояния от лазеров до потолка.

Гарантируется, что сумма $$$n$$$ по всем наборам входных данных не превосходит $$$2 \cdot 10^5$$$.

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

Для каждого набора входных данных выведите в единственной строке целое число — максимальное количество лазеров, свет от которых попадает на экран после применения не более $$$k$$$ операций.

Пример
Входные данные
3
4 4
1 2 3 4
4 5
1 1 1 1
9 2
4 3 3 10 5 5 5 99 11
Выходные данные
4
3
7
Примечание

Первый тестовый пример

Все лазеры уже находятся на разных высотах, поэтому не перекрывают свет друг от друга.

Второй тестовый пример

Изначально все лазеры находятся на одной и той же высоте, поэтому только свет от $$$4$$$-го лазера доходит до экрана.

Можно увеличить расстояние для $$$2$$$-го лазера на $$$1$$$ и расстояние для $$$3$$$-го лазера на $$$2$$$ — в таком случае лазеры будут висеть на расстояниях $$$[1, 2, 3, 1]$$$.

Всего операций изменения будет совершено $$$3$$$ (доступно $$$5$$$), и свет от $$$3$$$ лазеров доходит до экрана.

Обратите внимание, что с помощью $$$5$$$ доступных операций никак нельзя сделать, чтобы все $$$4$$$ лазера висели на различной высоте.

Третий тестовый пример

Один из лазеров на расстоянии $$$5$$$ можно переместить на $$$1$$$ — в таком случае до экрана будет доходить свет от $$$7$$$ различных лазеров.

Обратите внимание, что расстояние от потолка нельзя уменьшать — вы не можете переместить один из лазеров на расстоянии $$$3$$$ на $$$1$$$ ближе к потолку (чтобы его новое расстояние равнялось $$$2$$$).