Demidov Open IT Cup 2025
A. Неожиданные гости
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Сегодня к Маше придут гости, поэтому она хочет приготовить максимальное количество блюд, используя только те ингредиенты, которые у неё уже есть.

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

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

Первая строка содержит число $$$K$$$ ($$$1 \le K \le 100$$$) — количество доступных ингредиентов.

Следующие $$$K$$$ строк содержат названия доступных ингредиентов по одному в строке.

Следующая строка содержит число $$$N$$$ ($$$1 \le N \le 100$$$) — количество рецептов. Далее следует описание рецептов.

Каждый рецепт начинается с числа $$$M$$$ ($$$1 \le M \le 100$$$) — количества ингредиентов в рецепте.

Затем идут $$$M$$$ строк, содержащих список ингредиентов, необходимых для приготовления текущего рецепта. Ингредиенты перечислены по одному в строке.

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

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

Выведите количество рецептов, которые можно приготовить из доступных ингредиентов.

Пример
Входные данные
5
Milk
Eggs
Salt
bread
cheese
3
3
Milk
Eggs
Salt
3
coffee
water
milk
2
bread
cheese
Выходные данные
2

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

Осьминог Сквидвард любит путешествовать по массиву. Сейчас он находится в ячейке $$$n$$$. Сквидвард очень хочет вернуться домой, который находится в ячейке $$$1$$$, для этого он хочет передвигаться прыжками по массиву. Осьминог умеет делать $$$m$$$ разных прыжков силой $$$k_i$$$. Прыжок силой $$$k_i$$$ перемещает его из ячейки $$$x$$$ в ячейку $$$\dfrac{x}{k_i}-1$$$ в том и только том случае, если $$$x$$$ делится без остатка на $$$k_i$$$.

За какое минимальное количество прыжков Сквидвард вернется домой?

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

В первой строке задано два целых числа $$$n$$$ и $$$m$$$ $$$(1 \leq n \leq 10^{12}, 1\leq m \leq 8)$$$  — ячейка, в которой находится осьминог, и количество вариантов прыжков, которые он может совершать.

Во второй строке заданы $$$m$$$ целых чисел $$$k_i$$$ $$$(1 \lt k_i\leq 100)$$$, разделённых пробелом,  — силы прыжков осьминога.

Гарантируется, что все $$$k_i$$$ различны.

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

В единственной строке выведите число – минимальное количество прыжков, за которое Сквидвард сможет вернуться домой, если он не сможет вернуться, выведите «-1» (без кавычек).

Примеры
Входные данные
55 3
2 3 5
Выходные данные
2
Входные данные
78 2
2 3
Выходные данные
-1

C. Поймай меня!
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
64 мегабайта
ввод
стандартный ввод
вывод
стандартный вывод

2157 год. Полдень человечества. Вооруженные Великой теорией Воспитания, люди забыли о войнах, голоде и терроризме. Возродилась природа. Прорыв в медицине избавил людей от болезней, позволил использовать скрытые ресурсы человеческого тела. Жители Земли осваивают отдалённые планеты, а Андрей и Илья сражаются за звание чемпиона района по шахматам.

Правила в шахматах в будущем сильно изменились. Например, игроки играют не на обычной доске, а на так называемом «Торе» – фигуры могут ходить через границы поля, переставляя свою фигуру в соответствующую клетку с другой стороны доски (подсчёт клеток, находящихся под боем фигуры, определяется аналогично). Так, например, ход короля с клетки H4 на одну вправо приведёт к появлению его в клетке A4, а ход ферзя на одну клетку по диагонали вниз и вправо из клетки E1 ведёт к появлению ферзя на клетке F8. Игра происходит на доске 8 на 8.

Ниже показан пример возможных ходов ферзя по одной из диагоналей:

Естественно, в такой формулировке привычное нам начальное положение шахмат становится бессмысленным – ведь в ней короли стоят в соседних клетках! В связи с этим правила пришлось существенно поменять до такой степени, что в какой-то момент у игрока может вообще не остаться короля!

Так и случилось с белыми фигурами. На текущий момент белые фигуры имеют только лишь двух ферзей, тогда как у чёрных остался один король. В шахматах будущего всё же есть что-то общее с нашими, хотя бы потому что фигуры ходят точно так же: например, ферзь ходит на любое количество клеток по вертикали, горизонтали и диагонали, а король на одну клетку в любую сторону.

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

Есть также вариант ничьей – например, если чёрный король попал в ситуацию, когда ему некуда ходить в свой ход, но под боем он не находится. Также если игра не закончится за 7 ходов, будет объявлена ничья.

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

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

В первой строке входных данных вам даны три координаты клеток на шахматной доске. Каждая координата представляет из себя два символа. Первый символ – маленькая буква латинского алфавита от a до h. Вторая – цифра от 1 до 8. Первые две координаты описывают положение первого и второго ферзя соответственно, а третья – положение короля. Гарантируется, что все координаты различны, а также что король не находится под ударом ни одного из ферзей.

Протокол взаимодействия

Вы играете за белых и делаете первый ход. Каждый ваш ход должен описываться единственной строкой, содержащей три числа, разделённых пробелом. Первое число – номер ферзя, который должен сейчас походить (ферзи пронумерованы во входных данных). Затем должны идти два числа, каждое из которых не превосходит 7 по модулю – смещение соответствующего ферзя по первой и второй координате соответственно. Смещения не должны быть одновременно равны нулю и должны быть корректным ходом ферзя.

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

Возможны исключительные случаи.

Во-первых, вы можете поставить мат чёрному королю. В таком случае следует в отдельной строке вывести слово «Checkmate!» без кавычек, и после этого завершить работу программы.

Во-вторых, вы можете случайно нарушить какие-нибудь правила. Например, сделать более 7 ходов, поставить чёрного короля в пат, забыть вывести слово «Checkmate!» в конце или даже сделать какой-нибудь некорректный ход(попытаться походить ферзём как конём или поставить ферзя в уже занятую другим ферзём клетку). Во всех этих случаях вы получите на вход строку, состоящую из двух нулей, разделённых пробелом. После этого вам необходимо завершить работу программы. Также вы получите эту строку, если потеряете хотя бы одного ферзя или выведите неправильный номер ферзя (не равный 1 или 2).

После каждого действия вашей программы выводите символ перевода строки. После вывода очередной строки обязательно используйте функции очистки потока, чтобы часть вашего вывода не осталась в каком-нибудь буфере. Например, на С++ надо использовать функцию «fflush(stdout)», на Java и Kotlin вызов «System.out.flush()» и «stdout.flush()» для языка Python.

Пример
Входные данные
a8 h8 g5

1 1

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

2 0 4
Checkmate!
Примечание

Рисунок иллюстрирует итоговое положение фигур:

Первым ходом второй ферзь переходит на поле A1, король передвигается на поле H6, после чего ферзь переходит на поле A5 и ставит таким образом мат королю: съесть второго ферзя он не может, так как тот защищён первым, равно как и попасть на любую клетку ряда A, поля G5, G7 H5 находятся под боем второго ферзя, поля H7 и G6 находится под боем первого ферзя.

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

Ваня построил бесконечное бинарное дерево по следующему правилу:

  • В корне находится число 1 / 1;
  • Левый сын вершины p / q будет иметь значение p / (p + q);
  • Правый сын вершины p / q будет иметь значение (p + q) / q.

На рисунке вы можете видеть три верхних уровня дерева:

Затем Ваня пронумеровал вершины дерева сверху вниз по схеме, указанной на рисунке (следите за стрелочкой). Обозначим через F(i) i-ю дробь дерева, тогда первые его элементы будут иметь следующие значения: $$$F(1) = 1/1, F(2) = 1/2, F(3) = 2/1, F(4) = 1/3, F(5) = 3/2, F(6) = 2/3$$$.

Ваня придумал интересную задачу. Дано число $$$N$$$. Нужно найти дробь $$$p/q$$$, которой соответствует значение $$$F(N)$$$.

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

В единственной строке содержится число $$$N$$$ ($$$1 \le N \le 2 147 483 647$$$).

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

В единственной строке дробь $$$p/q$$$. Гарантируется, что числитель и знаменатель ответа являются 32-битными беззнаковыми числами.

Примеры
Входные данные
1
Выходные данные
1/1
Входные данные
4
Выходные данные
1/3

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

Детские пазлы  — развивающая игра для маленьких детей. В коробке на дне прикреплен рисунок, ребенку необходимо подставлять фрагменты к картинке, определять, где он располагается на поле, и прикреплять его к соседям. В результате сборки вся картинка будет покрыта, и сами фрагменты будут плотно прилегать к бортам коробки. Пазлы представляют собой прямоугольное поле $$$n$$$ на $$$m$$$, каждый фрагмент имеет $$$4$$$ стороны, при этом каждый пазл размещается в определенном пересечении столбца и строки поля. Фрагменты $$$a$$$, $$$b$$$ считаются соседними, если у них есть общая сторона. Фрагменты $$$a$$$, $$$b$$$ считаются скрепленными, если существует набор фрагментов, образующих непрерывную цепочку соседей, соединяющих $$$a$$$ и $$$b$$$. Фрагмент можно сдвинуть наверх, вниз, влево, вправо, если все скрепленные с ним пазлы тоже можно сдвинуть в этом же направлении и не покинуть поле коробки.

Перед сном Вероника случайно опрокинула коробку с пазлами на пол. Игорь смог найти часть фрагментов на полу и аккуратно расположить их внутри коробки по картинке. Игорь задался серьезным вопросом, можно ли какие-нибудь фрагменты в коробке сдвинуть?

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

В первой строке заданы два целых числа $$$n$$$, $$$m$$$ $$$(1\leq n,m\leq 10^3)$$$  — количество строк и столбцов в пазлах.

Далее заданы $$$n$$$ строк, в каждой из которых содержатся $$$m$$$ символов. Символ «*» означает, что Игорь нашел пазл и поместил его в нужное место, «.» – пазл не был найден на полу и Игорь будет его искать завтра утром.

Гарантируется что все строки состоят только из символов «*» и «.».

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

Выведите YES, если некоторые собранные Игорем фрагменты могут двигаться внутри коробки, в противном случае NO.

Примеры
Входные данные
2 3
.*.
***
Выходные данные
NO
Входные данные
2 3
.*.
**.
Выходные данные
YES
Примечание

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

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

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

Для одного из своих заказчиков компания «Рафт» обучила нейросеть, состоящую из $$$N$$$ слоёв. Вес каждого отдельного слоя равен $$$a_i$$$. Программисты могут проранжировать слои нейросети любым способом, однако недавно был открыт критерий, который гарантированно позволяет назвать построенную нейросеть качественной: последовательности весов в слоях образуют пилообразную последовательность. Числовая последовательность называется пилообразной, если каждый ее элемент (кроме первого и последнего) либо больше обоих своих соседей, либо меньше обоих соседей. Например, последовательность $$$4, 2, 5, 3$$$ является пилообразной, а $$$1, 2, 4, 3$$$ – нет, поскольку $$$1 \lt 2 \lt 4$$$. Сотрудников компании заинтересовал следующий вопрос: сколько качественных нейросетей может быть построено из имеющихся слоёв? Помогите им – напишите программу, которая по заданной последовательности весов слоёв определит, сколькими способами можно их переставить так, чтобы они образовывали пилообразную последовательность.

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

В первой строке содержится число $$$N$$$ $$$(1 \le N \le 5000)$$$ – количество слоёв в нейросети. Во второй строке содержатся числа $$$a_i$$$ $$$(1 \le a_i \le 10^9)$$$, разделённые пробелом, где $$$a_i$$$ равно весу $$$i$$$-го слоя. Гарантируется, что все веса попарно различны.

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

В единственной строке выведите число – количество способов расположить слои так, чтобы они образовывали пилообразную последовательность. Так как это число может оказаться большим, выведите остаток от деления количества способов на $$$10^9 + 7$$$.

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

В первом тестовом примере пилообразными будут следующие варианты размещения слоёв: $$$(5, 9, 7), (7, 5, 9), (7, 9, 5)$$$ и $$$(9, 5, 7)$$$

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

Компанией «Арго» разработан продукт, позволяющий обеспечивать полный цикл работы с кодом. При сборке новой версии продукта, во время автоматического тестирования были обнаружены ошибки, которые потребовалось исправить. Известно, что ошибки были допущены в течение последних $$$24$$$ часов, также имеется лог изменений, в котором указано имя разработчика и время внесения им изменений в продукт. Было выявлено, что ошибки были допущены теми программистами, которые внесли нечётное количество изменений, причём последнее по времени изменение содержало ошибку. Напишите программу, которая поможет найти всех разработчиков, которые внесли изменения с ошибками, и время ошибки.

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

В первой строке входных данных содержится число $$$N$$$ $$$(1 \le N \le 2 \cdot 10^5)$$$ – количество записей в логе изменений. В следующих $$$N$$$ строках перечисляются изменения лога в формате $$$name~time$$$, где $$$name$$$ – никнейм разработчика (строка, состоящая из прописных и строчных английских букв и длиной не более 20 букв), $$$time$$$ – время изменения в формате $$$HH:MM:SS$$$ $$$(00 \le HH \le 23, 00 \le MM \le 59, 00 \le SS \le 59)$$$. Не гарантируется, что записи в логе отсортированы по времени. Гарантируется, что ни один программист не делает более одного изменения в определённый момент времени.

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

В первой строке выведите число $$$K$$$ – количество ошибок.

В следующих $$$K$$$ строках выведите запись из лога, которая соответствует ошибке. Записи об ошибках должны быть отсортированы по времени, в случае одинакового времени – в лексикографическом порядке по именам.

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

Примеры
Входные данные
5
Ivan 05:31:14
Andrey 12:00:00
Maxim 19:15:16
Maxim 11:05:00
Maxim 13:19:24
Выходные данные
3
Ivan 05:31:14
Andrey 12:00:00
Maxim 19:15:16
Входные данные
2
FandES 05:00:00
Kasparyanm 05:00:00
Выходные данные
2
FandES 05:00:00
Kasparyanm 05:00:00

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

Пытаясь зайти в личный онлайн-кабинет Т-Банка, люди нередко делают ошибки при наборе пароля. Это может стать большой проблемой, так как от пользователей требуется придумать довольно длинные пароли (как мы знаем, чем больше символов в пароле, тем больше вероятность совершить ошибку при его наборе). Любители техники слепой печати склонны совершать серьёзные ошибки, если одна из рук не находится в правильном положении при печати, поскольку печатающие не смотрят на клавиатуру во время печати. Это может привести к тому, что все символы, набранные неправильно расположенной рукой, будут на одну клавишу дальше. Например, на $$$QWERTY$$$-клавиатуре «you» превратится в «upi», если правая рука будет размещена на одну клавишу правее обычного исходного положения.

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

Красной линией разделены клавиши, левая половина клавиш нажимается только левой рукой при слепом наборе, правая – правой рукой соответственно.

Эффект нажатия Caps Lock ограничен буквенными символами и переключает действие клавиши Shift относительно этих символов. Другими словами, когда Caps Lock не нажат, все буквы печатаются как строчные, если только не нажата одна или обе клавиши Shift. Противоположное поведение происходит, когда включен Caps Lock – по умолчанию печатаются заглавные буквы, если только не нажата одна или обе клавиши Shift, что приводит к получению строчных букв. Разработчики алгоритма предполагают, что состояние клавиши Caps Lock не переключается во время ввода пароля.

Алгоритм, разработанный специалистами Т-Банка, ищет отклонения от правильной последовательности нажатий клавиш. Например, если правильный пароль — «BYt*», правильная последовательность, используя клавиатуру, указанную выше, – Shift+b, Shift+y, t, Shift+8. Если пользователь случайно нажал клавишу Caps Lock перед вводом пароля, но затем использовал правильную последовательность нажатий клавиш, он в конечном итоге набрал бы «byT*».

Т-Банк решил разрешить определенные отклонения или комбинации отклонений от правильной последовательности, которые описаны в таблице ниже. Допускается максимум одна из ошибок 1, 2, 3 и 4 типов, но любая из них может возникнуть в сочетании с ошибкой 5 типа.

Напишите программу, которая проверит по заданному алгоритму, корректно ли пользователь ввёл пароль.

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

В первой строке содержится строка $$$S$$$ ($$$2 \le |S| \le 24$$$, |S| – длина строки) – придуманный пользователем пароль. Во второй строке содержится число $$$N$$$ $$$(1 \le N \le 1000)$$$ – количество последовательностей, которые требуется проверить. В следующих $$$N$$$ строках содержатся потенциальные пароли $$$p_i$$$ $$$(|S| - 1 \le |p_i| \le |S| + 1)$$$. Пароль $$$S$$$ и $$$p_i$$$ могут содержать любой из символов, расположенных на латинской $$$QWERTY$$$-клавиатуре (см. рисунок выше).

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

Выведите $$$N$$$ строк. Если последовательность $$$a_i$$$ может быть паролем по указанным правилам, выведите YES, в противном случае выведите NO.

Пример
Входные данные
Password=`A:'
9
Password=`A:'
pASSWORD=`a:'
Psddeotf=1S:'
oASSWIRD-`al;
Password=`A:'x
pASWORD=`a:'
pASSWORD=`a:'X
Osddeitf-1SL;
Psdeotf=1S:'
Выходные данные
YES
YES
YES
YES
YES
YES
YES
NO
NO

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

Профессор Р. в свободное время увлекается шахматами, а его любимой математической задачей является задача о ходе коня. Задача о ходе коня — задача о нахождении маршрута шахматного коня, проходящего через все поля доски по одному разу. В терминах теории графов, данная задача идентична задаче поиска гамильтонова пути в графе. Для доски $$$8 \times 8$$$ количество всех замкнутых маршрутов коня (гамильтоновых циклов) без учёта направления обхода равно $$$13~267~364~410~532$$$. Количество всех незамкнутых маршрутов (с учётом направления обхода) равно $$$19~591~828~170~979~904$$$.

На рисунке ниже показан один из возможных маршрутов коня на доске (числами от 1 до 64 пронумерованы ходы):

Профессора Р. заинтересовали магические маршруты. Назовём маршрут коня магическим, если суммы номеров ходов в каждом столбце и каждой строке одинаковы (для доски размера $$$8 \times 8$$$ это значение равно 260). Профессор Р. придумал следующую задачу: из магического маршрута коня удаляется некоторое количество ходов, требуется восстановить любой маршрут, который содержит неудалённые ходы именно в таком порядке, в котором они расположены на доске.

Помогите профессору – напишите программу, которая найдёт магический маршрут, удовлетворяющий условиям.

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

Ввод содержит $$$8$$$ строк, каждая из которых содержит ровно $$$8$$$ чисел, разделённых пробелом. Если число положительное, то оно означает номер хода, на котором конь должен посетить эту клетку, если оно равно $$$-1$$$, это означает, что клетка может быть посещена на произвольном ходу. Гарантируется, что шаг с номером 1 на доске всегда присутствует, а также то, что решение всегда существует.

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

Выведите $$$8$$$ строк по $$$8$$$ чисел в каждой с заполненными полями.

Если задача имеет несколько решений, можно вывести любое из них.

Пример
Входные данные
1 48 -1 -1 33 -1 63 18
30 51 -1 3 -1 -1 -1 -1
-1 -1 -1 -1 15 -1 -1 -1
-1 -1 -1 45 -1 -1 36 -1
-1 -1 25 -1 9 -1 21 60
-1 -1 -1 -1 24 57 12 -1
-1 6 -1 -1 39 -1 -1 -1
54 -1 42 -1 -1 -1 -1 -1
Выходные данные
1 48 31 50 33 16 63 18
30 51 46 3 62 19 14 35
47 2 49 32 15 34 17 64
52 29 4 45 20 61 36 13
5 44 25 56 9 40 21 60
28 53 8 41 24 57 12 37
43 6 55 26 39 10 59 22
54 27 42 7 58 23 38 11
Примечание

Полю из примера соответствует следующий рисунок:

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

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

Профессор дал студентам тест, в котором каждый из вопросов подразумевает выбор либо ответа «Истина», либо ответа «Ложь» (профессор предпочитает эти варианты традиционным «Да» и «Нет», так как очень любит дискретную математику и математическую логику). Студент может либо ответить на вопрос, отметив один из вариантов, либо оставить оба поля пустыми. Известно, что каждый студент ответил хотя бы на два вопроса. Профессор Р. хочет сделать так, чтобы все студенты не сдали тест, поэтому он собирается изменить последовательность правильных ответов так, чтобы ни один студент не дал более одного правильного ответа.

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

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

Первая строка содержит числа $$$n$$$ и $$$k$$$ $$$(1 \le n \le 100, 2 \le k \le 100)$$$, разделённые пробелом – количество студентов и вопросов в тесте соответственно.

Следующие $$$n$$$ строк содержат строки $$$s$$$, длина каждой строки равна $$$k$$$. Строка может содержать один из трёх типов символов: если $$$i$$$-й символ равен $$$T$$$, это означает, что студент выбрал в $$$i$$$-м вопросе вариант «Истина», символ $$$F$$$ означает выбор варианта «Ложь», символ $$$X$$$ означает, что студент пропустил $$$i$$$-й вопрос. Гарантируется, что каждый студент выбрал варианты ответов как минимум в двух вопросах теста.

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

Выведите строку, состоящую из символов $$$T$$$ и $$$F$$$ – последовательность правильных ответов (строка длины $$$k$$$), при которой каждый студент даст не более одного правильного ответа. Если задача имеет несколько решений, выберите лексикографически наименьшую последовательность ответов. В том случае, если задача не имеет решения, выведите «-1» (без кавычек).

Напомним, что строка $$$p$$$ лексикографически меньше строки $$$q$$$, если существует позиция $$$i$$$ такая, что $$$p_i \lt q_i$$$, и для всех $$$j \lt i$$$ $$$p_j=q_j$$$.

Примеры
Входные данные
3 3
FFX
XFF
FXF
Выходные данные
FTT
Входные данные
3 3
FTX
XFT
TXF
Выходные данные
FFF
Входные данные
4 3
TTX
XTT
TXT
FFF
Выходные данные
-1

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

Профессор Р. очень любит алгебру, особенно сильно он любит складывать числа. Недавно он изобрёл новый способ кодирования чисел – каждому целому неотрицательному числу он ставит в соответствие последовательность из пар, где первый элемент пары равен цифре, а второй – сколько раз подряд встречается эта цифра после предыдущих описанных цифр, причём корректным представлением является то, в котором количество пар минимально. Так, например, число $$$1333377$$$ будет записано в виде трёх пар: $$$(1, 1), (3, 4)$$$ и $$$(7, 2)$$$. Профессор решил взять числа $$$A$$$ и $$$B$$$, закодировать их, сложить и вывести результат в закодированном виде, однако у него не получилось это сделать. Тогда он пришёл с этой задачей к своим студентам и на паре по алгебре задал её на дом. Студенты тоже не смогли её решить и решили обратиться к вам.

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

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

В первой строке содержится число $$$N$$$ $$$(1 \le N \le 10^5)$$$ – количество блоков из подряд идущих цифр в числе $$$A$$$.

В следующих $$$N$$$ строках содержится описание числа $$$A$$$: каждая строка содержит $$$2$$$ числа – $$$Adigit_i~Acnt_i$$$ $$$(0 \le Adigit_i \le 9, 1 \le Acnt_i \le 10^{18})$$$, где $$$Adigit_i$$$ – $$$i$$$-я цифра, $$$Acnt_i$$$ – количество подряд идущих цифр $$$Adigit_i$$$.

В $$$N + 2$$$-й строке содержится число $$$M$$$ $$$(1 \le M \le 10^5)$$$ – количество блоков из подряд идущих цифр в числе $$$B$$$.

В следующих $$$M$$$ строках содержится описание числа $$$B$$$: каждая строка содержит $$$2$$$ числа – $$$Bdigit_i~Bcnt_i$$$ $$$(0 \le Bdigit_i \le 9, 1 \le Bcnt_i \le 10^{18})$$$, где $$$Bdigit_i$$$ – $$$i$$$-я цифра, $$$Bcnt_i$$$ – количество подряд идущих цифр $$$Bdigit_i$$$.

Гарантируется, что в описании чисел $$$A$$$ и $$$B$$$ нет ведущих нулей.

Также гарантируется что сумма всех $$$Acnt_i$$$ не превосходит $$$10^{18}$$$, также и сумма всех $$$Bcnt_i$$$ не превосходит $$$10^{18}$$$

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

В первой строке выведите $$$k$$$ – количество блоков из подряд идущих одинаковых цифр в сумме чисел $$$A$$$ и $$$B$$$.

В следующих $$$k$$$ строках выведите по $$$2$$$ числа $$$digit~cnt$$$, где $$$digit$$$ – очередная цифра числа, $$$cnt$$$ – сколько раз эта цифра идёт подряд в его записи. Сумма не должна содержать ведущих нулей.

Примеры
Входные данные
1
1 3
1
2 2
Выходные данные
2
1 1
3 2
Входные данные
2
1 2
3 1
2
8 1
7 1
Выходные данные
2
2 1
0 2
Входные данные
1
0 1
2
1 2
3 1
Выходные данные
2
1 2
3 1
Примечание

Первый пример соответствует сумме чисел $$$111$$$ и $$$22$$$, их сумма равна $$$133$$$.

Второй пример соответствует сумме чисел $$$113$$$ и $$$87$$$, их сумма равна $$$200$$$.

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

Игорь очень проголодался, составляя задачи на очередную олимпиаду, и решил перекусить пиццей с пепперони из «ПиццаФабрика».

Привезённая курьером пицца оказалась занимательной с точки зрения математики. Форма начинки на пицце имеет форму круга с радиусом $$$R$$$ с центром окружности $$$(0,0)$$$, каждая пепперони также представляет собой круг, и все они имеют одинаковый радиус, равный $$$r$$$, центры всех пепперони располагаются на начинке в координатах $$$(x_i, y_i)$$$. Игорь задался интересным вопросом: какая площадь поверхности начинки пиццы не покрыта пепперони? Помогите ему – напишите программу, которая посчитает эту площадь.

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

В первой строке содержатся 3 целых числа $$$N$$$, $$$r$$$, $$$R$$$ $$$(1\leq N \leq 10^3, 1\leq r\leq R \leq 10^3)$$$  — количество пепперони на пицце, радиус пепперони, радиус начинки пиццы.

Далее в $$$N$$$ строках заданы по два вещественных числа $$$x_i$$$, $$$y_i$$$, разделённых пробелом, с двумя знаками после запятой  — координаты центра $$$i$$$-й пепперони на начинке пиццы.

Гарантируется, что центр каждой пепперони находится на начинке пиццы.

Гарантируется, что никакие две пепперони не имеют общей площади пересечения.

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

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

Пример
Входные данные
3 1 5
0.00 0.00
4.50 0.00
-4.00 2.00
Выходные данные
70.38691962
Примечание

Обратите внимание, что центр второй пепперони лежит на начинке, но сама пепперони частично лежит на корочке.