Задача A. Интернет-банкинг

Автор:Антон Феськов, Фёдор Царёв
Входной файл: bank.in   Ограничение времени:2 сек
Выходной файл: bank.out   Ограничение памяти:256 Мб

Условие

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

Система Интернет-банкинга Bank 2.0, используемая одним Очень Крупным Банком, использует следующий способ ввода пароля. Серверной частью системы случайно генерируются n строк s1, …, sn, каждая из которых состоит из m строчных букв латинского алфавита (предполагается, что пароли состоят только из таких букв).

При вводе пароля пользователю разрешается выполнять такую операцию: выбрать из данных строк две (обозначим их как si и sj, 1 ≤ i, j ≤ n, i ≠ j) и некоторую позицию k (1 ≤ k ≤ m) в них, после чего поменять местами k-е символы в si и sj. Например, если si=abcde, sj=vwxyz, k=3, то после выполнения этой операции будут верны следующие равенства: si=abxde и sj=vwcyz. Для ввода пароля пользователю необходимо за минимальное число таких операций добиться состояния, в котором хотя бы одна из строк s1, …, sn совпадает с p.

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

Формат входного файла

Первая строка входного файла содержит целое число n (2 ≤ n ≤ 100). Каждая из последующих n строк содержит строки s1, …, sn. Все они состоят только из строчных букв латинского алфавита и имеют одинаковую длину m (2 ≤ m ≤ 100).

Последняя строка входного файла содержит пароль пользователя p. Его длина равна m, и он состоит только из строчных букв латинского алфавита.

Формат выходного файла

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

В случае существования решения следующие c строк должны содержать описания операций. Операции должны быть перечислены в порядке их применения, каждая из строк должна содержать три целых числа: i, j и k (1 ≤ i, j ≤ n, i ≠ j, 1 ≤ k ≤ m). Эти числа означают, что соответствующая операция состоит в обмене k-ых символов строк si и sj.

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

Входной файл (bank.in) Выходной файл (bank.out)
1
3
abc
cab
bca
acb
2
1 3 2
1 2 3
2
3
abc
cab
bca
acd
-1

Задача B. Большой огромный коллайдер

Автор:Владимир Ульянцев, Михаил Дворкин
Входной файл: collider.in   Ограничение времени:2 сек
Выходной файл: collider.out   Ограничение памяти:256 Мб

Условие

Приехав в Хоббитанию, белый маг Гэндальф принялся рассказывать Бильбо последние новости из Средиземья. Больше всего впечатлительного хоббита поразил рассказ о Большом огромном коллайдере — только представить себе гигантских размеров кольцо, зарытое под землей!

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

Бильбо хочет прокопать новые коридоры в норе, но так как копать будут только Фродо и сам Бильбо (не Гэндальф же!), есть возможность прокопать только один или два новых коридора.

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

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

Формат входного файла

В первой строке входного файла содержится целое число n (3 ≤ n ≤ 105) — число комнат в норе Бильбо.

В следующих n − 1 строках содержатся по два целых числа — номера комнат, соединенных коридорами. Комнаты нумеруются от 1 до n.

Формат выходного файла

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

На следующих одной или двух строках выведите пары номеров комнат, между которыми следует прокопать новые коридоры.

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

В первом примере коллайдер состоит из комнат с номерами 1, 2, 3 и 4 (именно в этом порядке), во втором примере — 1, 3, 2, 4.

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

Входной файл (collider.in) Выходной файл (collider.out)
1
4
1 2
2 3
3 4
4
1 4
2
4
1 2
1 3
1 4
4
2 3
2 4

Задача C. Фитнесс-клуб

Автор:Антон Феськов, Фёдор Царёв
Входной файл: fitness.in   Ограничение времени:2 сек
Выходной файл: fitness.out   Ограничение памяти:256 Мб

Условие

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

В течение дня в фитнесс-клубе проходит n тренировок, причем каждый из посетителей приходит к началу какой-либо из этих тренировок (в этот момент он получает ключ от шкафчика) и уходит сразу после ее окончания (в этот момент он сдает ключ от шкафчика). При этом можно считать, что все посетители, закончившие тренировку, уходят раньше, чем все посетители, пришедшие на следующую тренировку.

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

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

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

Формат входного файла

Первая строка входного файла содержит два целых числа: n (1 ≤ n ≤ 100) и k (1 ≤ k ≤ 1000). Каждая из последующих n строк содержит по два целых числа ai и bi (0 ≤ ai, bi ≤ k, ai + bi ≤ k).

Формат выходного файла

В выходной файл выведите одно число — ответ на задачу.

Комментарий к примеру. Пронумеруем шкафчики числами от 1 до 4. Посетителям, пришедшим на первую тренировку выдадим ключи так: тому, кто закроет, — от шкафчика 1, тем, кто не закроет, — от 2 и 3. Посетителям, пришедшим на вторую тренировку, выдадим ключи так: тому, кто закроет, — номер 2, тому, кто не закроет, — номер 3. В итоге открытым после окончания дня останется только шкафчик номер 3.

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

Входной файл (fitness.in) Выходной файл (fitness.out)
1
2 4
1 2
1 1
3

Задача D. Электрик-ковбой Джо

Автор:Антон Феськов, Антон Ахи
Входной файл: joe.in   Ограничение времени:2 сек
Выходной файл: joe.out   Ограничение памяти:256 Мб

Условие

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

Вот и сейчас ему поручили проверить два стоящих на расстоянии d друг от друга столба высоты h1 и h2 соответственно. Чтобы убедиться, что все хорошо, Джо должен побывать на вершинах обоих столбов.

Электрик-ковбой посещает столбы следующим образом: сначала он выбирает один из столбов и просто взбирается на него. Выполнив все работы на вершине, он спускается по этому столбу на некоторую высоту (возможно до самой земли), достает свое лассо и цепляется им за некоторую точку второго столба (это может быть произвольная точка). После этого Джо прыгает и двигается вниз по дуге окружности с центром в точке, за которую зацепилось лассо, пока не достигнет либо другого столба, либо земли.

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

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

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

Формат входного файла

Входной файл содержит четыре положительных целых числа: d, h1, h2 и l — расстояние между столбами, высоту первого и второго столбов и максимальный допустимый перепад высот при прыжке, соответственно. Все числа во входном файле не превышают 106.

Формат выходного файла

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

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

Входной файл (joe.in) Выходной файл (joe.out)
1
5 5 5 5
10.00000
2
4 5 8 5
10.00000
3
4 8 5 1
13.00000
4
3 4 6 1
9.00000

0.046s 0.005s 15