2017-2018 VIII Открытый чемпионат БГУИР по программированию. Финал
A. Одноразовые пароли
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

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

Пусть F(Q) – количество целых положительных чисел не больше Q, которые представимы в виде 2x - 2y при целых неотрицательных x, y. Упорядочим по возрастанию количества единичных бит в двоичном представлении все числа Q такие, что F(Q) = N. Если количество единичных бит в двух числах одинаково, большим считается то из них, значение которого больше. В качестве одноразового пароля выбирается K-е по порядку число.

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

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

В первой строке задается число T — количество сессий аутентификации. В следующих T строках задается по два целых числа Ni и Ki — параметры алгоритма генерирования одноразового пароля.

1 ≤ T ≤ 105
1 ≤ Ni, Ki ≤ 1018
Выходные данные

В T строках выведите по целому числу — одноразовый пароль для соответствующей сессии аутентификации. Каждый пароль необходимо вывести по модулю 109 + 7. Если по заданным параметрам пароль сгенерировать невозможно, то необходимо вывести -1.

Пример
Входные данные
1
16 10
Выходные данные
42

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

У Вани есть массив из N целых чисел a1, a2, ..., aN. Он хочет вычислить сумму всех этих чисел. Но он также хочет, чтобы сумма чисел была неотрицательной, четной и при всем этом минимально возможной. Поэтому, он решил домножить одно из чисел на любое целое число перед тем как вычислять сумму.

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

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

Первая строка входных данных содержит одно число N — размер массива A.

В следующей строке содержится N целых чисел a1, a2, ..., aN — элементы массива A.

1 ≤ N ≤ 105
 - 109 ≤ ai ≤ 109
Выходные данные

Выведите одно целое число — искомую сумму. Если ответа не существует, то выведите -1.

Примеры
Входные данные
2
7 3
Выходные данные
4
Входные данные
2
7 10
Выходные данные
10
Входные данные
3
42 43 86
Выходные данные
42

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

Однажды король Бандиатерры Барбато задумался о разделе своего королевства между своими сыновьями Филиппом и Фердинандом. Владения Барбато представляют собой N замков, которые для простоты обозначим точками с целочисленными координатами (Xi, Yi). Король любит своих сыновей одинаково сильно, поэтому решил совершить раздел королевства в соответствии с кодексом справедливости Бандиатерры.

Для соблюдения законности раздел проводится по линии, параллельной оси ординат и проходящей через точку (X, 0). Замки, находящиеся к западу от границы (такие, что Xi ≤ X), отходят Филиппу, а те, что к востоку от границы (X < Xi) – Фердинанду. Город каждого из братьев представляет собой выпуклую оболочку множества замков, доставшихся по наследству. В соответствии с кодексом раздел тем справедливее, чем ближе модуль разности площадей городов к заданному числу S – сакральному числу Бандиатерры.

Барбато специально собрал совет старейшин Бандиатерры, чтобы определить заранее линию разграничения и записать ее в завещание.

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

В первой строке располагается два целых числа N и S — количество замков и сакральное число, соответственно.

В следующих N строках задается по два целых числа Xi и Yi — координаты замков. Никакие два замка не совпадают. Площадь пустого города (не содержащего замков) равна нулю.

1 ≤ N ≤ 100 000
0 ≤ S ≤ 1 000 000 000
|Xi|, |Yi| ≤ 10 000
Выходные данные

В единственной строке выведите одно число — модуль разности площадей городов, наиболее близкий к сакральному числу Бандиатерры. Если существует более одного варианта линии разграничения, то выведите тот, при котором разность площадей городов минимальна. Абсолютная и относительная погрешность ответа не должна превышать 10 - 4.

Пример
Входные данные
9 31
8 5
-3 1
1 -1
-4 -3
-2 -9
3 -4
9 0
1 7
-7 2
Выходные данные
42.0000

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

Сегодня отовсюду трубят про выборы. Скандалы, интриги, расследования, разоблачения. В нашем городке Бездорожинске тоже настало время выбирать мэра. Но, чтобы избежать традиционных распрей, мы решили изменить концепцию: победителя определит не слово, а дело. И дело это очень важное — постройка дорог.

В Бездорожинске есть несколько микрорайонов, в которых построено N домов, соединенных M двунаправленными дорогами. Дорог, как водится, не хватает. Дороги между домами не дублируются, и нет дорог, петляющих и приводящих в тот же дом. В микрорайоне(который, к слову, может состоять из одного дома) между любой парой домов существует как минимум один путь по дорогам. А вот из микрорайона в микрорайон дорог нет, и бедным жителям приходится добираться по грязи.

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

Мы предлагаем вам поучаствовать в предвыборной гонке с нашим кандидатом и доказать, что именно вы достойны управлять Бездорожинском и сможете привести его к светлому будущему! Как дорогой гость, вы можете выбрать, кто первым начнет постройку дорог.

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

В первой строке задается два целых числа N и M — количество домов и дорог в городе.

В следующих M строках дороги описываются как Ui Vi — т.е. номерами домов, которые соединяет эта дорога.

2 ≤ N ≤ 200
0 ≤ M ≤ N * (N - 1) / 2
1 ≤ Ui, Vi ≤ N
Протокол взаимодействия

После того, как вы узнаете текущую схему дорог в Бездорожинске, вам потребуется вывести одно из чисел: "1" или "2" — первым или вторым вы хотите начать предвыборную гонку, соответственно.

Теперь, если сейчас ваша очередь, то вам необходимо вывести два целых числа U V — номера домов, между которыми вы беретесь строить дорогу. Если сейчас ход вашего соперника, то вы получаете два целых числа U V — номера домов, которые соединил ваш оппонент.

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

После вывода не забывайте, пожалуйста, выводить символ новой строки и делать flush-операцию (сброс буфера). Например, fflush(stdout) в C++, System.out.flush() в Java, и flush(output) в Pascal.

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

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

Маленького программиста хлебом не корми, дай только что-то посчитать. А вот читать книги, которые задают на литературе, он не очень-то и любит. Особенно, если они толстые. Особенно, если они очень-очень толстые. Поэтому последнюю заданную книгу на N страниц он твердо решил не читать и уже смирился с будущей двойкой. Но учитель литературы не был готов сдаваться, еще никто из его учеников не избежал знакомства с этим плодовитым писателем. Чтобы подстегнуть интерес маленького программиста к книгам, он придумал правило: после каждой прочитанной страницы малыш получает столько конфет, каков модуль разницы между суммой цифр в номерах предыдущей и последующей страниц. Такая сладкая мотивация в корне поменяла дело: книга была прочитана от первой до последней страницы. Осталось только узнать, сколько конфет полагается за такой подвиг. Маленький программист уже посчитал, а вот учителю, кажется, нужна ваша помощь.

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

В первой и единственной строке находится количество страниц в книге – целое число N.

1 ≤ N < 10100 000
Выходные данные

В единственной строке выведите искомое количество конфет. Их много, так что по модулю 109 + 7.

Пример
Входные данные
29
Выходные данные
42

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

Вова утверждает, что придумал новую сортировку. Его сортировка отличается тем, что она может отсортировать, по мнению Вовы, любую перестановку длины N при этом делая одни и те же сравнения для любой перестановки. Всего она делает M сравнений, где i-е сравнение происходит над числами, находящимися на позициях xi и yi соответсвенно.  Если на момент сравнения число находящееся на позиции xi оказывалось больше, то она меняет их местами.

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

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

В первой строке задано два целых числа N и M — размер перестановки и количество сравнений в Вовиной сортировке.

В следующих M строках содержится описание сравнений. В i-й строке содержится два целых числа xi и yi — позиции сравниваемых элементов.

1 ≤ N ≤ 15
1 ≤ M ≤ 200
1 ≤ xi, yi ≤ N
Выходные данные

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

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

В первом тестовом примере подходят следующие перестановки: [3, 2, 1], [2, 3, 1].

В третьем тестовом примере подходят следующие перестановки: [1, 2], [2, 1].

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

Жил-поживал на не совсем обычной шахматной доске не совсем обычный слон. Доска была не совсем обычной, так как была произвольного размера N × M. Слон был не совсем обычным, потому что стоял на угловой клетке. Стоял он, стоял, и заскучал. И решил отправиться в путешествие куда глаза глядят. А глаза у слонов, как известно, глядят по диагонали. Достигнув края доски, слон поворачивал на 90 градусов и продолжал движение. Остановился он только тогда, когда опять попал в какой-то (первый попавшийся) из углов.

Сколько всего уникальных полей слон обошел за свое путешествие по доске N × M ?

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

В первой и единственной строке находятся целые числа N и M — размеры шахматной доски.

1 < N ≤ 1018
1 < M ≤ 1018
Выходные данные

В единственной строке выведите одно число — количество пройденных слоном клеток по простому модулю 1018 + 9.

Пример
Входные данные
15 22
Выходные данные
42

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

Туристическое агентство "42 лучших путешествия" выбрало для себя N городов, которые связаны между собой N - 1 прямыми авиарейсами так, что между двумя любыми городами существует авиамаршрут (возможно, непрямой). Для продвижения своих услуг агенство выбрало контекстную рекламу. Чтобы объявления были не слишком назойливыми, было решено показывать только уникальные туры. Под туром понимается посещение K (K ≤ N) городов, которые связаны K - 1 прямыми авиарейсами и между любыми двумя городами существует авиамаршрут. Туры считаются различными, если в одном из них существует такой город, которого нет в другом.

Придумав такую рекламную стратегию, директор агенства задумался о том, какие расходы понесет компания. За каждое объявление поставщик контекстной рекламы выставляет счет в один доллар США, а за каждый город, входящий в тур – один белорусский рубль. Теперь бухгалтерии необходимо выяснить, сколько агентство заплатит поставщику услуг, если известно, что все возможные уникальные туры были показаны пользователям ровно один раз.

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

В первой строке задается целое число N — количество городов для путешествий. В следующих N - 1 строках задается по два целых числа Ui и Vi — номера городов, между которыми существует прямой авиарейс.

1 ≤ N ≤ 105
1 ≤ Ui, Vi ≤ N
Выходные данные

В единственной строке выведите два целых числа — сумму в долларах США и белорусских рублях, которую придется оплатить агенству. Поставщик контекстной рекламы выставляет счет по модулю 109 + 7 в качестве скидки на свои услуги.

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

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

Дана последовательность Ai, состоящая из N целых чисел. Найдите количество таких пар (L, R), для которых подотрезок {AL, AL + 1, ..., AR} является перестановкой из R - L + 1 чисел. Перестановкой из K чисел называется любая последовательность чисел от 1 до K, в которой каждый элемент встречается ровно один раз.

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

В первой строке содержится число N  — длина последовательности. Во второй строке содержатся N целых чисел  — последовательность Ai.

1 ≤ N ≤ 106
1 ≤ Ai ≤ N
Выходные данные

В единственной строке выведите одно число — количество пар (L, R), удовлетворяющим заданным условиям.

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

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

Ваня построил последовательность fi по следующему правилу:

  1. f0 = x, f1 = y;
  2. fi = fi - 1 + fi - 2, i > 1.

К несчастью, Ваня потерял последовательность. Однако он помнит одно число N, принадлежавшее данной последовательности. Он также помнит, что все элементы последовательности являются целыми неотрицательными числами.

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

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

В единственной строке задано одно целое число N — число, которое запомнил Ваня.

1 ≤ N ≤ 106
Выходные данные

В единственной строке выведите два целых числа x и y — начальные параметры последовательности.

Примеры
Входные данные
42
Выходные данные
0 2
Входные данные
19
Выходные данные
3 2

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

Компания "42 оттенка зеленого" состоит из N отделов. Для сплочения духа коллектива руководство компании попросило каждый из отделов придумать себе слоган, который представляет собой строку, состояющую из не менее чем K строчных символов латинского алфавита. Чтобы оценить работу всех отделов компании было решено общим слоганом выбрать лексикографически минимальную строку, которая содержала бы в себе хотя бы одну подстроку длины K от слоганов каждого из отделов. Поскольку бюджет на распечатку слогана ограничен, он не должен содержать лишних символов. Поэтому давайте для каждого лозунга отдела рассмотрим первое вхождение его любой подстроки длины K в общий лозунг и если существует символ, который не покрывается этими вхождениями, то такой символ лишний и его нужно удалить.

Помогите компании "42 оттенка зеленого" найти свой корпоративный слоган из заданных слоганов отделов.

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

В первой строке задается два целых числа N и K — количество отделов и длина подстрок. В следующих N строках задается по одной строке Si — слоган i-го отдела.

1 ≤ N ≤ 1000
1 ≤ K ≤ 100
K ≤ |Si|
Выходные данные

В единственной строке выведите корпоративный слоган компании.

Примеры
Входные данные
5 3
abacabada
abada
dada
cadaca
adac
Выходные данные
abaacaada
Входные данные
5 3
abacabada
abada
daada
cadaca
adac
Выходные данные
aada