Длинный тур отборочного этапа Открытой олимпиады школьников 2018--2019 учебного года
A. Олимпиада
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Маленький мальчик Гриша уже сам начал делать олимпиады, и ему как раз нужно подготовить Открытую Олимпиаду по Информатике. Для олимпиады нужно придумывать задачи, а Гриша как раз очень любит этим заниматься. Каждую задачу он характеризует ее сложностью, которая является неотрицательным целым числом. Сложность олимпиады Гриша оценивает как сумму сложностей всех задач в ней.

На Открытую Олимпиаду по Информатике Грише требуется придумать $$$n$$$ задач. Конечно, Гриша еще не дорос до того, чтобы составлять олимпиаду самому, поэтому за его действиями следит многоуважаемое начальство. Начальство любит отвергать некоторые задачи, но Гриша знает, что оно не может отклонить больше, чем $$$k$$$ из его задач. Также Гриша, исходя из своего большого опыта, считает, что давать олимпиаду со сложностью меньше чем $$$x$$$ будет бессмысленно, поэтому он не допустит такого.

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

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

В первой строке заданы три целых числа $$$n$$$, $$$k$$$ и $$$x$$$  ($$$2 \le n \le 10^9$$$, $$$1 \le k \lt n$$$, $$$1 \le x \le 10^9$$$) — количество задач, которое хочет придумать Гриша, максимальное количество задач, которое может отвергнуть его начальство и минимальная допустимая сложность контеста по мнению Гриши.

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

Выведите одно целое число — минимальную суммарную сложность придуманных Гришей задач.

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

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

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

Система оценки

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

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

Алиса и Боб хотят пройти через турникет в метро. У них есть полоска, на которой в ряд написаны n строчных букв латинского алфавита. Для того, чтобы пройти через турникет, каждый должен приложить к нему бумажку с кодовым словом. Турникет сканирует слово, записанное на бумажке и открывается, позволяя пройти одному человеку. Чтобы запретить человеку ездить по одному билету несколько раз, турникет не откроется если приложить к нему бумажку со словом, которое турникет сканировал до этого.

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

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

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

В первой строке задано одно целое число n (1 ≤ n ≤ 106) — количество букв, написанных на полоске.

Во второй строке содержится строка, состоящая из n строчных букв латинского алфавита — текст на полоске.

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

Если невозможно вырезать из полоски два различных слова одинаковой длины выведите «No» (без кавычек).

Иначе в первой строке выведите «Yes» (без кавычек), а во второй строке выведите три целых числа — номер символа на полоске, с которого начнется билет Алисы, номер символа на полоске, с которого начнется билет Боба и длину билетов, которые вырежут дети. Каждый символ полоски должен попасть не более, чем в один билет, а также тексты на билетах должны быть различны. Символы на полоске нумеруются слева направо, начиная с 1.

Обратите внимание, что после вырезания билета из полоски, его нельзя переворачивать. Так, например, если вырезать билет po из полоски rpo, то получить билет od, перевернув билет po сверху вниз, не получится.

Примеры
Входные данные
8
abacabad
Выходные данные
Yes
2 6 3
Входные данные
1
z
Выходные данные
No
Примечание

В первом примере Алиса вырежет билет, начинающийся со второго символа полоски и имеющий длину 3. Таким образом, на ее билете будет написано bac. Боб вырежет билет, начинающийся с шестого символа полоски и имеющий длину 3, поэтому на билете Боба будет написано bad.

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

Система оценки

Тесты к этой задаче состоят из пяти групп. Баллы за каждую группу ставятся только при прохождении всех тестов группы и всех тестов предыдущих групп.

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

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

Чтобы пройти через турникет, надо использовать специальную карточку SLON (Subterranean Lowcost Orientational Network). У каждой карточки есть неотрицательный целый баланс — количество бурлей, которые записаны на карточке. Если на карточке есть хотя бы $$$k$$$ бурлей, то пройти через турникет возможно, после чего баланс карточки уменьшается на $$$k$$$ бурлей. Если же на карточке меньше $$$k$$$ бурлей, то Пафнутий не сможет ей воспользоваться, чтобы пройти через турникет.

Изначально у Пафнутия есть $$$n$$$ карточек, баланс карточки с номером $$$i$$$ составляет $$$a_i$$$ бурлей. Также Пафнутий накопил $$$p$$$ бурлей и может как угодно распределить эти деньги между карточками. Формально, пусть Пафнутий к балансу карточки с номером $$$i$$$ добавил $$$add_i \ge 0$$$ бурлей, тогда должно выполняться условие $$$add_1 + add_2 + \ldots + add_n \le p$$$. Возможности перераспределять деньги между карточками нет, то есть баланс карточки может увеличиваться только за счет какой-то части из этих $$$p$$$ бурлей и уменьшаться только при проходе через турникет.

Пафнутий не очень любит математику. Помогите ему определить, какое максимальное количество раз он сможет поехать на метро, если распределит $$$p$$$ бурлей по карточкам оптимально.

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

В первой строке заданы три целых числа $$$n$$$, $$$p$$$ и $$$k$$$ ($$$1 \leq n \leq 10^5$$$, $$$0 \leq p \leq 10^{18}$$$, $$$1 \leq k \leq 10^9$$$) — количество карточек, накопленная сумма и плата за один проход через турникет, соответственно.

Во второй строке задано $$$n$$$ целых чисел $$$a_1, a_2, \ldots, a_n$$$ ($$$0 \leq a_i \leq 10^9$$$) — балансы карточек.

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

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

Примеры
Входные данные
5 1 4
7 7 3 4 1
Выходные данные
4
Входные данные
2 1000 2000
1299 1701
Выходные данные
2
Примечание

В первом примере из условия изначально можно поехать только 3 раза. Но если добавить 1 бурль на первую, вторую или третью карточку, то Пафнутий сможет поехать на метро 4 раза.

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

Система оценки

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

D. Дима и массив
ограничение по времени на тест
8 секунд
ограничение по памяти на тест
768 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Диме не дарили массив $$$a$$$, состоящий из $$$n$$$ целых чисел на день рождения, он не покупал его, не находил на улице, а он у него просто есть и всегда был, и Диме не очень-то и интересно откуда.

Дима не играет с массивом, не дарит его Пете, не режет на кусочки и не стремится его уничтожить. Дима просто выполняет операции двух видов со своим массивом:

  • ? l r — узнать MEX мультимножества $$$\{a_l, a_{l+1}, \ldots, a_r\}$$$
  • ! i x — присвоить $$$a_i$$$ значение $$$x$$$ $$$(0 \leq x \leq n)$$$

MEX мультимножества чисел $$$\{a_1, a_2, \ldots, a_k\}$$$ — это минимальное целое $$$t \ge 0$$$ такое, что $$$t \ne a_i$$$ для всех $$$1 \leq i \leq k$$$.

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

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

Первая строка содержит два целых числа $$$n$$$ и $$$q$$$ ($$$1 \leq n \leq 500\,000, 1 \leq q \leq 250\,000$$$) — размер массива, который есть у Димы и количество операций, соответственно.

Вторая строка содержит $$$n$$$ целых чисел $$$a_i$$$ ($$$0 \leq a_i \leq n$$$) — массив Димы до начала операций.

Каждая из следующих $$$q$$$ строк содержит описание одной операции в формате, описанном выше.

Гарантируется, что суммарно Дима сделал не более $$$50\,000$$$ операций изменения массива.

Элементы массива пронумерованы, начиная с $$$1$$$.

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

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

Пример
Входные данные
6 8
4 1 0 2 2 3
? 1 6
? 4 6
? 2 5
? 2 6
! 3 3
? 1 6
! 4 0
? 1 6
Выходные данные
5
0
3
4
0
5
Примечание

В примере запросы выглядят следующим образом:

  • Изначально массив равен $$$[4, 1, 0, 2, 2, 3]$$$
  • В первом запросе считается MEX от $$$\{4, 1, 0, 2, 2, 3\}$$$ и он равен $$$5$$$.
  • Во втором запросе считается MEX от $$$\{2, 2, 3\}$$$ и он равен $$$0$$$.
  • В третьем запросе считается MEX от $$$\{1, 0, 2, 2\}$$$ и он равен $$$3$$$.
  • В четвёртом запросе считается MEX от $$$\{1, 0, 2, 2, 3\}$$$ и он равен $$$4$$$.
  • Пятый запрос меняет массив. Теперь он равен $$$[4, 1, 3, 2, 2, 3]$$$.
  • В шестом запросе считается MEX от всего массива и он равен $$$0$$$.
  • Седьмой запрос меняет массив. Теперь он равен $$$[4, 1, 3, 0, 2, 3]$$$.
  • В восьмом запросе снова считается MEX от всего массива и теперь он равен $$$5$$$.
Система оценки

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

E. Петя и монеты
ограничение по времени на тест
6 секунд
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

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

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

Определите, какие монеты купит Петя.

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

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

В следующих $$$m$$$ строках заданы пары целых чисел $$$a_i$$$ и $$$b_i$$$ ($$$1 \leq a_i, b_i \leq n, a_i \neq b_i$$$) — номера монет, которые сделаны из различных материалов. Все пары монет во вводе различны.

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

Если продавец ошибся и ни одна монета не может быть медной, выведите «0» (без кавычек). Иначе в первой строке выведите одно целое число $$$x$$$ — количество монет, которые купит Петя.

Во второй строке выведите $$$x$$$ целых чисел $$$c_i$$$ ($$$1 \leq c_i \leq n$$$) в порядке возрастания — номера монет, которые купит Петя.

Примеры
Входные данные
4 3
1 2
1 4
4 2
Выходные данные
3
1 2 4
Входные данные
2 1
1 2
Выходные данные
2
1 2
Входные данные
6 6
1 2
4 5
2 3
5 6
1 3
4 6
Выходные данные
0
Входные данные
12 14
1 2
3 2
3 4
5 4
5 6
6 7
3 8
8 9
9 6
2 10
10 12
12 11
11 7
1 7
Выходные данные
4
2 3 6 7
Примечание

В первом примере:

  • Монета с номером $$$1$$$ может быть медной, если, например, монеты с номерами $$$2$$$ и $$$3$$$ железные, а монета с номером $$$4$$$ бронзовая.
  • Монета с номером $$$2$$$ может быть медной, если, например, монеты с номерами $$$1$$$ и $$$3$$$ железные, а монета с номером $$$4$$$ бронзовая.
  • Монета с номером $$$3$$$ не может быть медной, так как среди монет с номерами $$$1$$$, $$$2$$$ и $$$4$$$ не могут быть только железные и бронзовые.
  • Монета с номером $$$4$$$ может быть медной, если, например, монеты с номерами $$$2$$$ и $$$3$$$ железные, а монета с номером $$$1$$$ бронзовая.

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

В третьем примере продавец ошибся и ни одна монета не может быть медной.

Система оценки

Тесты к этой задаче состоят из пяти групп. Баллы за каждую группу ставятся только при прохождении всех тестов группы и всех тестов предыдущих групп.

F. Грустные танцы
ограничение по времени на тест
2 секунды
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Во Флатляндии проводится ежегодный турнир по танцам!

Из города NN приехала команда, состоящая из n танцоров, и вот настал день соревнований.

Состязания проходят в таком формате: танцоры пронумерованы от 1 до n, и изначально i-й танцор стоит на i-м месте. После этого они начинают танцевать по заранее согласованной программе выступления a: каждую минуту танцор с ai-го места передвигается на i-е место, при этом все ai различны. От команды требуется выстроиться так, чтобы i-й танцор оказался на bi-м месте (аналогично, все bi различны). После этого выступление завершается, и жюри оценивает его техничность и артистизм. При этом выступление должно продлиться хотя бы одну минуту, иначе оценивать будет просто нечего.

Но в этом году участники заподозрили жюри в подлоге: к ним пришла мысль, что, возможно, следуя программе a, они никогда не смогут занять требуемое положение b, что приводит к автоматическому поражению в турнире.

Так как они не программисты по образованию, команда города NN решила обратиться к вам за помощью: проверьте по их программе выступления a и требуемому положению b, существует ли такое положительное количество минут k, что через k минут после начала выступления i-й танцор будет находиться на bi-м месте.

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

В первой строке входного файла содержится целое число n (1 ≤ n ≤ 106) — количество участников команды, приехавшей из города NN.

Вторая строка содержит n целых чисел a1, ..., an (1 ≤ ai ≤ n) — программу выступления a. Гарантируется, что каждое число от 1 до n встречается в a ровно один раз.

Третья строка содержит n целых чисел b1, ..., bn (1 ≤ bi ≤ n) — требуемое положение b. Гарантируется, что каждое число от 1 до n встречается в b ровно один раз.

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

Для каждого тестового примера выведите «Yes» (без кавычек), если существует такое количество минут k, что спустя k минут после начала выступления все танцоры будут в требуемом от них положении, или «No» (без кавычек), если такого k не существует.

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

В первом примере в нулевой момент времени танцоры располагаются так: 1 2 3 4. Но так как выступление должно продлиться хотя бы одну минуту, k = 0 не подходит. Далее происходят следующие перемещения:

  • 2 3 4 1 после первой минуты
  • 3 4 1 2 после второй минуты
  • 4 1 2 3 после третьй минуты
  • 1 2 3 4 после четвертой минуты
Как видно, после четвертой минуты танцоры заняли требуемое положение, а значит, подходит k = 4, и ответ — «Yes».

Во втором примере танцоры всегда остаются на своем месте, следственно, они никогда не займут требуемое положение, и ответ — «No».

Система оценки

Тесты к этой задаче состоят из четырех групп. Баллы за каждую группу ставятся только при прохождении всех тестов группы и всех тестов предыдущих групп.

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

Дана перестановка $$$a$$$ чисел от $$$1$$$ до $$$n$$$, а также набор из $$$m$$$ пар индексов. За один ход разрешается выбрать одну из этих $$$m$$$ пар и поменять элементы на соответствующих позициях местами (перестановка, соответственно, изменится). Вы можете сделать произвольное количество ходов (в частности, разрешается не делать ни одного хода).

Определим возрастающую подпоследовательность длины $$$k$$$ как набор индексов $$$j_1, j_2, \ldots, j_k$$$, для которых выполняются два условия:

  • $$$1 \le j_1 \lt j_2 \lt \ldots \lt j_k \le n$$$;
  • $$$a_{j_1} \lt a_{j_2} \lt \ldots \lt a_{j_k}$$$.

Какой максимально возможной длины наибольшей возрастающей подпоследовательности можно достичь при правильных обменах элементов?

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

В первой строке заданы два числа $$$n$$$ и $$$m$$$ ($$$1 \le n \le 10^4, 0 \le m \le \min(10^5, \frac{n \cdot (n - 1)}{2}$$$) — длина перестановки и количество пар позиций, которые можно обменивать между собой.

В следующей строке через пробел заданы $$$n$$$ различных целых чисел $$$a_i$$$ ($$$1 \le a_i \le n$$$) — элементы перестановки.

Каждая из следующих $$$m$$$ строк содержит по два числа $$$u_i$$$ и $$$v_i$$$ ($$$1 \le u_i, v_i \le n, u_i \neq v_i$$$) — индексы позиций, элементы на которых можно менять. Гарантируется, что ни одна пара не встречается дважды.

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

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

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

Рассмотрим перестановку из первого примера.

$$$[5, 2, 4, 6, 3, 1]$$$

Поменяем местами элементы на позициях $$$5$$$ и $$$6$$$.

$$$[5, 2, 4, 6, \textbf{1}, \textbf{3}]$$$.

Теперь поменяем местами элементы на позициях $$$1$$$ и $$$5$$$.

$$$[\textbf{1}, 2, 4, 6, \textbf{5}, 3]$$$.

Длина наибольшей возрастающей подпоследовательности в такой перестановке равняется $$$4$$$.

Соответствующая подпоследовательность: $$$[\textbf{1}, \textbf{2}, \textbf{4}, 6, \textbf{5}, 3]$$$.

Система оценки

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

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

Назовём красотой числа произведение цифр в нем. Например, красота числа 123 равняется 6, так как 1·2·3 = 6, а красота числа 209 равна 0, так как 2·0·9 = 0. По заданным числам l и r найдите максимально красивое число x такое, что l ≤ x ≤ r.

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

В первой строке задано целое число l (1 ≤ l < 10105).

Во второй строке задано целое число r (l ≤ r < 10105).

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

Выведите одно целое число x (l ≤ x ≤ r) с максимальной красотой. Ведущие нули не выводите. Если чисел с максимальной красотой, удовлетворяющих ограничениям, несколько, выведите любое.

Примеры
Входные данные
1
30
Выходные данные
29
Входные данные
30
30
Выходные данные
30
Система оценки

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

Решения, работающие при 1 ≤ r < 100, будут набирать не менее 10 баллов.

Решения, работающие при 1 ≤ r < 106, будут набирать не менее 20 баллов.

Решения, работающие при 1 ≤ r < 1018, будут набирать не менее 40 баллов.

Решения, работающие при 1 ≤ r < 101000, будут набирать не менее 70 баллов.

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

Вам дана строка $$$s_1 s_2 \ldots s_n$$$, состоящая из $$$n$$$ маленьких английских букв. Жюри загадало перестановку $$$p_1, p_2, \ldots, p_n$$$ и получило новую строку $$$t$$$, поставив $$$i$$$-й символ строки $$$s$$$ на $$$p_i$$$-ю позицию в строке $$$t$$$. Вам необходимо найти строку $$$t$$$.

Для этого вы можете один раз задать вопрос, состоящий из $$$k$$$ выбранных вами пар индексов. Для пары индексов $$$(a_i, b_i)$$$ ($$$1 \leq i \leq k$$$, $$$1 \leq a_i \lt b_i \leq n$$$) вы узнаете, верно ли, что $$$p_{a_i} \lt p_{b_i}$$$.

Вы хотите определить искомую строку, спросив про наименьшее количество пар, то есть минимизируя значение числа $$$k$$$, при условии, что проверяющая программа является адаптивной. Это означает, что ответ к каждому тесту может быть различен в зависимости от того, про какие пары индексов вы спрашиваете. Другими словами, ваше решение должно успешно восстанавливать строку $$$t$$$ для любой возможной перестановки $$$p_1, p_2, \ldots, p_n$$$.

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

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

Затем вы должны вывести строку, содержащую единственное целое число $$$k$$$ ($$$0 \leq k \leq 10 ^ 4$$$), а после — $$$k$$$ строк, в $$$i$$$-й из которых будет содержаться два целых числа $$$a_i$$$ и $$$b_i$$$ ($$$1 \leq a_i \lt b_i \leq n$$$) — пара, про которую вы хотите спросить.

После этого, если $$$k \gt 0$$$ (то есть вы спросили про какие-то пары), вы должны считать строку, состоящую из $$$k$$$ символов, $$$i$$$-й символ которой равен «1», если $$$p_{a_i} \lt p_{b_i}$$$, и «0» в противном случае. Если ваша программа задала некорректный запрос, то вместо строки с ответами на запросы может быть задана строка «-1», если проверяющая программа жюри смогла считать и распознать ваш запрос, а затем определить его как некорректный. В случае, если ваш запрос не был распознан проверяющей системой или произошёл другой сбой, например, вы не вывели ничего или вывели слишком много чисел, вердикт проверяющий системы может быть разным.

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

Обратите внимание, после вывода ответа или в случае считывания строки «-1» вы обязательно должны сразу завершить вашу программу. В противном случае вердикт тестирующей системы может быть некорректным, в частности, вы можете получить вердикт Run-time error или Time limit exceeded!

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

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


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

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


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

ba
Входные данные
qqq
Выходные данные
0

qqq

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



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

aba

Примечание

В первом примере сделан запрос про пару индексов $$$(1, 2)$$$, в ответ получена строка «1», что означает, что $$$p_1 \lt p_2$$$, и, следовательно, загадана перестановка $$$p = $$$«$$$1$$$ $$$2$$$», то есть искомая строка — «ab».

Во втором примере сделан запрос про пару индексов $$$(1, 2)$$$, в ответ получена строка «0», это означает, что $$$p_1 \geq p_2$$$, и, следовательно, загадана перестановка $$$p = $$$«$$$2$$$ $$$1$$$», то есть искомая строка — «ba».

В третьем примере не спрашивается ни про какие пары индексов, а сразу выводится ответ — строка «qqq».

В четвертом примере была загадана перестановка «$$$2$$$ $$$3$$$ $$$1$$$».

Система оценки

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

J. Поиск подподстроки в подстроке
ограничение по времени на тест
3 секунды
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Опытным участникам соревнований по спортивному программированию хорошо известна классическая задача о нахождении количества вхождений подстроки в строку. Обычно она формулируется так: дана строка-образец $$$s$$$ и строка $$$t$$$, требуется найти количество индексов, начиная с которых строка $$$s$$$ содержится в строке $$$t$$$.

К сожалению, для решения этой задачи уже придумано множество алгоритмов, поэтому сама по себе она может быть интересна только в качестве упражнения, но не олимпиадной задачи. Однако, как это часто бывает со стандартными задачами, её легко усложнить — представим, что нас интересуют не сами строки $$$s$$$ и $$$t$$$, а некоторые их подстроки $$$s[l_1 \ldots r_1]$$$ и $$$t[l_2 \ldots r_2]$$$.

Как вы уже, наверное, догадались, вам дано $$$q$$$ запросов, $$$i$$$-й из которых задаёт некоторые подстроки $$$\bar s = s[{l_1}_i \ldots {r_1}_i]$$$ и $$$\bar t = t[{l_2}_i \ldots {r_2}_i]$$$. Для каждого такого запроса необходимо посчитать количество вхождений строки $$$\bar s$$$ в строку $$$\bar t$$$.

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

Первая и вторая строки входных данных содержат строки $$$s$$$ и $$$t$$$ ($$$1 \le |s|, |t| \le 2 \cdot 10^5$$$) соответственно. Строки состоят из маленьких букв английского алфавита.

В третьей строке задано одно число $$$q$$$ ($$$1 \le q \le 5 \cdot 10^5$$$) — количество запросов.

Каждая из следующих $$$q$$$ строк содержит по четыре числа $$$l_1$$$, $$$r_1$$$, $$$l_2$$$ и $$$r_2$$$ ($$$1 \le l_1 \le r_1 \le |s|, 1 \le l_2 \le r_2 \le |t|$$$), описывающих очередной запрос.

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

Выведите $$$q$$$ чисел — ответы на запросы.

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

Рассмотрим запросы в первом примере. Для индексации позиций вхождения будем использовать изначальные позиции в строке $$$t$$$.

  1. $$$\bar s = ab, \bar t = abababa$$$. $$$\bar s$$$ входит в $$$\bar t$$$, начиная с индексов $$$[1, 3, 5]$$$.
  2. $$$\bar s = bb, \bar t = babababb$$$. $$$\bar s$$$ входит в $$$\bar t$$$, начиная с индекса $$$[8]$$$.
  3. $$$\bar s = b, \bar t = baba$$$. $$$\bar s$$$ входит в $$$\bar t$$$, начиная с индексов $$$[4, 6]$$$.
  4. $$$\bar s = ab, \bar t = bab$$$. $$$\bar s$$$ входит в $$$\bar t$$$, начиная с индекса $$$[3]$$$.
  5. $$$\bar s = a, \bar t = ababababb$$$. $$$\bar s$$$ входит в $$$\bar t$$$, начиная с индексов $$$[1, 3, 5, 7]$$$.
Система оценки

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