Плюсануть
Поделиться
Класснуть
Запинить


Олимпиадный тренинг

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

Сломанный робот

Элементарная геометрия Конструктив

В 2037-м году для создания научно исследовательской базы на Марс высадился отряд роботов, один из которых отправился собирать информацию о районе дислокации. В данный момент роботу из-за отказа некоторых узлов срочно необходимо вернуться в место закладки будущей базы.
Поверхность Марса в районе высадки десанта можно условно представить в виде плоскости с введенной на ней системой координат, такой, что база находится в точке (0, 0). Робот же остановился в точке (x0, y0). Он может перемещаться в четырёх направлениях:
• «R» — вправо, при этом координата x робота увеличивается на 1;
• «L» — влево, при этом координата x робота уменьшается на 1;
• «U» — вверх, при этом координата y робота увеличивается на 1;
• «D» — вниз, при этом координата y робота уменьшается на 1.
Из-за неисправности робот не может совершить два перемещения подряд в одном направлении.
Помогите роботу вернуться на базу. Робот должен сделать не более 10000 передвижений, иначе он разрядится и не доедет до базы!

Входные данные
В единственной строке входных данных находятся два целых числа x0 и y0 — изначальные координаты робота (−1000 ≤ x0, y0 ≤ 1000).

Выходные данные
В первой строке выведите целое число, не большее 10000 — количество операций, которые должен сделать робот. Во второй строке выведите сами операции. Каждая операция задаётся одной буквой:
вправо — «R» влево — «L», вверх — «U», вниз — «D». Символы необходимо выводить без пробелов между ними.
 

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


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

Строки

Строки Конструктив

Даны три строки, состоящие из строчных латинских букв. С этими строками можно производить следующие операции: либо заменить один символ строки на два таких же символа (например, заменить символ «a» на «aa»), либо, наоборот, заменить два подряд идущих одинаковых символа на один такой же символ.

Необходимо при помощи этих операций сделать все три строки равными какой-то другой общей строке S либо определить, что это сделать невозможно. При этом нужно минимизировать общее количество операций.

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

Выходные данные
Если при помощи указанных операций возможно сделать все три строки равными, выведите такую строку S , что суммарное число операций, необходимых для преобразования всех трёх данных строк к строке S , будет минимальным. Если этого сделать нельзя, программа должна вывести одно слово IMPOSSIBLE (заглавными буквами).

Примеры
Входные данные Выходные данные
1 aaaza
aazzaa
azzza
aazza
2 xy
xxyy
yx
IMPOSSIBLE

Ох уж эти палиндромы

Конструктив

Назовём палиндромом непустую строку, которая читается одинаково справа налево и слева направо. Например, « abcba », « a » и « abba » являются палиндромами, а « abab » и « xy » не являются.

Назовём подстрокой строки строку, полученную отбрасыванием некоторого (возможно, нулевого) количества символов с начала и с конца строки. Например, « abc », « ab » и « c » являются подстроками строки « abc », а « ac » и « d » не являются.

Назовем палиндромностью строки количество её подстрок, которые являются палиндромами. Например, палиндромность строки « aaa » равна 6, так как все её подстроки являются палиндромами, а палиндромность строки « abc » равна 3, так как только подстроки длины 1 являются палиндромами.

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

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

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

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

Если подходящих строк несколько, выведите любую.

Примечание
В первом примере у строки « ololo » есть 9 подстрок-палиндромов: « o », « l », « o », « l », « o », « olo », « lol », « olo », « ololo ». Обратите внимание, что некоторые подстроки совпадают, но учитываются несколько раз.

Во втором примере палиндромность строки « abccbaghghghgdfd » равна 29.
 

Примеры
Входные данные Выходные данные
1 5
oolol
ololo
2 16
gagadbcgghhchbdf
abccbaghghghgdfd

Гуляй и телепортируйся

Конструктив

На линии, идущей с востока на запад, есть N городов. Города пронумерованы от 1 до N в порядке с запада на восток. Каждая точка на линии имеет одномерные координаты, а точка, которая находится дальше на восток, имеет большее значение координаты. Координата города i - Xi. Вы находитесь в городе 1 и хотите посетить все остальные города. У вас есть два способа путешествовать:
- Ходить по линии. Ваш уровень усталости увеличивается на A каждый раз, когда вы путешествуете на расстояние 1, независимо от направления.
- Телепортируйтесь в любое место по вашему выбору. Ваш уровень усталости увеличивается на B независимо от пройденного расстояния.
Найдите минимально возможное общее повышение уровня вашей усталости, когда вы посетите все города этими двумя способами.

Входные данные
В первой строке заданы три целых числа N (\(2<=N<=10^5\)), A (\(1<=A<=10^9\)), B (\(1<=B<=10^9\)). Во второй строке заданы координаты городов Xi (\(1<=X_i<=10^9\)), для всех i \(X_i <X_{i+1}\)(\(1<=i<=N-1\)).

Выходные данные
Выведите на экран ответ на задачу.
 

 

Примеры
Входные данные Выходные данные Пояснение
1 4 2 5
1 2 5 7
11 Из города 1 пройдите расстояние 1 до города 2, затем телепортируйтесь в город 3, затем пройдите расстояние 2 до города 4.
Общее увеличение вашего уровня усталости в этом случае составляет 2 × 1 + 5 + 2 × 2 = 11, что является минимально возможным значением.
2 7 1 100
40 43 45 105 108 115 124
84 Из города 1 пройдите пешком до города 7.
Общее увеличение вашего уровня усталости в этом случае составляет 84, что является минимально возможным значением.
3 7 1 2
24 35 40 68 72 99 103
12 Посетите все города в любом порядке, телепортировавшись шесть раз.
Суммарное повышение уровня утомляемости в этом случае составляет 12, что является минимально возможным значением.

 

Еще одна игра в кости

Конструктив

Ушан решил сыграть шестигранным кубиком. На каждой из шести сторон изображено целое число от 1 до 6, а два числа на противоположных сторонах всегда в сумме дают 7. Ушан сначала кладет кубик на стол произвольной стороной вверх, а затем повторно выполняет следующую операцию. Поверните кубик на 90 ° в одном из следующих направлений: влево, вправо, вперед (кубик приблизится) и назад (кубик уйдет дальше), затем получите y очков, где y - это число, написанное на стороне, обращенной вверх.

Например, давайте рассмотрим ситуацию, когда сторона, показывающая 1, обращена вверх, ближняя сторона показывает 5, а правая сторона показывает 4, как показано на рисунке (исходное положение для нашего примера).


Если кубик повернуть вправо, как показано на рисунке, сторона, показывающая 3, будет обращена вверх. Если из исходного положения кубик повернуть влево, сторона, показывающая 4, будет смотреть вверх. Вверху будет сторона, показывающая 2, если кубик из исходного положения повернуть вперед, а сторона, показывающая 5, будет обращена вверх, если кубик повернуть назад из исходного положения.

Найдите минимальное количество операций, которое Ушан должен выполнить, чтобы набрать в сумме не менее x баллов.

Входные данные
На вход подается целое число x (\(1<=x<=10^{15}\)).

Выходные данные
Выведите на экран ответ.
 

 

Примеры
Входные данные Выходные данные
1 7 2
2 149696127901 27217477801

 

Пожиратель карт

Конструктив Сортировка подсчетом

Ушан решил сыграть в карточную игру. У него есть колода, состоящая из N съедобных карт. На i-й карте сверху написано целое число Ai. Ушан выполняет описанную ниже операцию ноль или более раз, так что значения, записанные на оставшихся карточках, будут попарно различны.
Найдите максимально возможное количество оставшихся карт. Здесь N нечетное, что гарантирует сохранение хотя бы одной карты. 
Операция: вынуть из колоды три произвольные карты. Из этих трех карт съешьте две: одну с наибольшим значением, а другую с наименьшим значением. Затем верните оставшуюся одну карту в колоду.

Входные данные
В первой строке записано нечетное число N (\(3<=N<=10^5\)). Во второй строке записаны N чисел A(\(1<=A_i<=10^5\))

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

 

Примеры
Входные данные Выходные данные Пояснения
1 5
1 2 1 3 7
3 Оптимальное решение - выполнить операцию один раз, вынув две карты с 1 и одну карту с 2. Одна карта с 1 и другая с 2 будут съедены, а оставшаяся карта с 1 будет возвращена в колоду.
Тогда значения, написанные на оставшихся картах в колоде, будут попарно различными: 1, 3 и 7.
2 15
1 3 5 2 1 3 2 8 8 6 2 6 11 1 1
7  

 

Голосование

Циклы Конструктив Разбор случаев

Коротышки решили взять в полет на Луну либо Незнайку либо Пончика. Не сумев договориться, они решили проголосовать. Незнайка и Пончик наблюдают краткий отчет о голосовании. Коротышки показывают Незнайке и Пончику соотношение текущего количества голосов, полученных Незнайкой и Пончиком, но не фактическое количество голосов. Незнайка и Пончик посмотрели отчет N раз, и когда они смотрели его в i-й (1<=i<=N) раз, соотношение было Pi:Ni. Известно, что Незнайка и Пончик имели хотя бы один голос, когда впервые увидели отчет. Найдите минимально возможное общее количество голосов, полученных Незнайкой и Пончиком, когда они проверили отчет в N-й раз. Можно предположить, что количество голосов, полученных Незнайкой и Пончиком, никогда не уменьшается.

Входные данные
В первой строке задается целое число N (1<=N<=1000). В следующих N строках записано по 2 числа Pi и N(1<=Pi,Ni<=1000). Pi и N- взаимно простые числа. 

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

Примеры
Входные данные Выходные данные Пояснение
1 3
2 3
1 1
3 2
10 Количество голосов, полученных Пончиком и Незнайкой, изменяется так 2,3 → 3,3 → 6,4.
Общее количество голосов в конце составляет 10, что является минимально возможным числом.
2 4
1 1
1 1
1 5
1 100
101 Возможно, что ни Пончик ни Незнайка не получили голосов между моментом, когда они смотрели отчет, и моментом, когда они смотрели его в следующий раз.
3 5
3 10
48 17
31 199
231 23
3 2
6930  

Сортировщик Томми

"Два указателя" Жадный алгоритм Конструктив

У Томми есть детская игрушка «cортировщик», с расположенными подряд n колышками. На каждом колышке сейчас не более одного диска (то есть на каком-то колышке диск есть, а на каком-то его нет). Томми хочет переложить имеющиеся диски на колышках таким образом, чтобы они образовывали неубывающую последовательность при просмотре слева направо. То есть на каждом следующем колышке количество дисков должно быть не меньше, чем на предыдущем.  Какое минимальное количество дисков Томми необходимо переложить?

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



Входные данные
Программа получает на вход в первой строке целое число n (1 <= n <= 105), количество колышек на «cортировщике». Следующая строка содержит n целых чисел a1, a2, ... an – наличие диска на соответствующем колышке (0 <= ai <= 1). число 0 означает, что на i-м колышке нет диска, 1 – диск есть.

Выходные данные
Выведите ответ на задачу.
 
Примеры
Входные данные Выходные данные
1
8
0 0 1 1 1 1 1 1
0
2
11
1 1 0 0 1 0 0 1 1 1 0
3

Чемпионат по поиску в сети Меганет

Структуры данных Строки Динамическое программирование Конструктив Задача на реализацию

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

Имя сервера представляет собой строку, содержащую от одной до пяти частей включительно. Каждая часть представляет собой непустую строку, состоящую из строчных букв латинского алфавита. Части разделены точкой. Примеры корректных имен сервера: «a», «ab.cd», «abacaba», «a.b.c.d.e».

Имя раздела представляет собой строку, которая может быть либо пустой, либо содержать от одной до пяти частей включительно. Каждая часть начинается с символа «/», после которого следует одна или несколько строчных латинских букв. Примеры корректных имен разделов: «», «/a», «/aba», «/a/b/c/d/e». Адрес формируется приписыванием имени раздела в конец имени сервера. Например, корректными адресами являются строки: «a», «aba/d/f/g/h», «a.b», «aba.caba/def/g», «c.d.e.f.g/a/b/c/d/e».

Для ограничения доступа к некоторым адресам сети Меганет организаторы чемпионата подготовили несколько фильтров. Фильтр, как и адрес, состоит из двух частей: фильтра сервера и фильтра раздела.

Фильтр сервера состоит из имени сервера, перед которым может также идти строка «*.». Если фильтр сервера представляет собой только имя сервера, то этому фильтру соответствует только сервер, имеющий точно такое же имя. Если фильтр сервера представляет собой строку «*.S », где S — имя сервера, то ему соответствуют сервера, удалением нуля или более начальных частей от имени которых можно получить строку S.

Аналогично, фильтр раздела представляет собой имя раздела, после которого может идти строка «/*». Фильтру раздела, который представляет собой просто имя раздела R, соответствуют только разделы, в точности совпадающие с R. Если фильтр раздела представляет собой строку «R/*», то ему соответствуют все разделы, удалением от имен которых нуля или более конечных частей можно получить строку R. Адрес соответствует фильтру, если его имя сервера соответствует фильтру сервера, а его имя раздела соответствует фильтру раздела.

Примеры фильтров и соответствующих им адресов приведены в таблице ниже.

ab.c/d/e ab.c/d/e
*.a a             ax.a         efg.a
*.a/b/c a/b/c       x.a/b/c      e.fg.a/b/c
x.yz/a/* x.yz/a      x.yz/a/b/c    x.yz/a/xyz
*.a/* a             x.a                   e.fg.a
a/b/c    x.a/ddd/c           e.fg.a/b/c/g/haha/i
*.a/b/c/* a/b/c                           x.a/b/c                           e.fg.a/b/c
a/b/c/xxx                   e.fg.a/b/c/d/e/f
   

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

Пример:
Ввод:
2 0
a.bb/c
bb/c/d
4
a.bb
bb/c/d
a.bb/c/d
bb/c

Вывод:
0
1
0
0


Вывод:
4 0
*.bb/c
*.bb/c/*
bb/c/*
bb/c/*
6
bb
bb/c
bb/c/d
a.bb
a.bb/c
a.bb/c/d

Вывод:
0
4
3
0
2
1

Пляжный волейбол

Конструктив

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

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

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

Вера решила для себя, что она будет действовать по самому справедливому принципу «считалочки»: она будет играть с одной из двух команд, играющих матч с соответствую- щем считалке номером K. Но затем Вера поняла, что уже выбрала себе команду, в которой хотела бы играть, причем ориентируясь не только на ее силу. Ей известны Q считалок, соответствующих различным значениям K. Для каждого из этих чисел Ki необходимо узнать, а кто же именно будет сражаться за столь ценный приз, то есть какие две коман- ды будут играть в матче с номером Ki.

Формат входного файла
Первая строка входных данных содержит единственное целое число N — количество команд (2 <= N <= 100 000). Вторая строка содержит N различных чисел от 1 до N — силы команд: первое число — сила команды, стоящей в начале очереди, второе — сила следующей по очереди команды, ..., последнее — сила команды, стоящей в конце очереди. Третья строка содержит единственное целое число Q (1 <= Q <= 100 000) — коли- чество известных Вере считалок. Каждая из следующих Q строк содержит число Ki (1 <= Ki <= 1018) — номер очередного интересующего Веру матча. Обратите внимание, Ki может быть больше N. Формат выходного файла Выведите Q строк: для каждого интересующего Веру числа Ki два числа в любом порядке — силы команд, сыграющих на Ki-м шаге. Первая строка должна содержать ответ на первый запрос, вторая — на второй и так далее.

Примеры

Ввод Вывод
4
1 3 2 4
1
3
3 4
4
2 1 4 3
3
1
5
2
2 1
4 2
2 4


Комментарии
Разберем первый тест из условия:
  Кто играет Состояние очереди Победитель Проигравший
Матч № 1
Матч № 2
Матч № 3
1 3
3 2
3 4
2 4
4 1
1 2
3
3
4
1
2
3

Таким образом, в единственном интересующем Веру третьем матче сыграют команды с силами 4 и 3.

Little Difference

Динамическое программирование: последовательности Конструктив

Little Lidia likes playing with numbers. Today she has a positive integer n, and she wants to decompose it to the product of positive integers.

Because Lidia is little, she likes to play with numbers with little difference. So, all numbers in decomposition should differ by at most one. And of course, the product of all numbers in the decomposition must be equal to n. She considers two decompositions the same if and only if they have the same number of integers and there is a permutation that transforms the first one to the second one.
Write a program that finds all decompositions, which little Lidia can play with today.

Input
The only line of the input contains a single integer n (1 ≤ n ≤ 1018).

Output
In first line output the number of decompositions of n, or −1 if this number is infinite. If number of decompositions is finite, print all of them one per line. In each line first print number ki of elements in decomposition. Then print ki integers in this decomposition in any order. Don’t forget that decompositions which are different only in order of elements are considered the same.
 

Input Output
12 3
1 12
3 2 3 2
2 4 3
1 -1

In the second example 1 can be represented as product of any number of ones.

Consonant Fencity

Конструктив Строки

There are two kinds of sounds in spoken languages: vowels and consonants. Vowel is a sound, produced with an open vocal tract; and consonant is pronounced in such a way that the breath is at least partly obstructed. For example, letters a and o are used to express vowel sounds, while letters b and p are the consonants (e.g. bad, pot).

Some letters can be used to express both vowel and consonant sounds: for example, y may be used as a vowel (e.g. silly) or as a consonant (e.g. yellow). The letter w, usually used as a consonant (e.g. wet) could produce a vowel after another vowel (e.g. growth) in English, and in some languages (e.g. Welsh) it could be even the only vowel in a word.
In this task, we consider y and w as vowels, so there are seven vowels in English alphabet: a, e, i, o, u, w and y, all other letters are consonants.

Let’s define the consonant fencity of a string as the number of pairs of consecutive letters in the string which both are consonants and have different cases (lowercase letter followed by uppercase or vice versa). For example, the consonant fencity of a string CoNsoNaNts is 2, the consonant fencity of a string dEsTrUcTiOn is 3 and the consonant fencity of string StRenGtH is 5.

You will be given a string consisting of lowercase English letters. Your task is to change the case of some letters in such a way that all equal letters will be of the same case (that means, no letter can occur in resulting string as both lowercase and uppercase), and the consonant fencity of resulting string is maximal.

Input
The only line of the input contains non-empty original string consisting of no more than 106 lowercase English letters.

Output
Output the only line: the input string changed to have maximum consonant fencity.
 

Input Output
consonants CoNsoNaNts
destruction dEsTrUcTiOn
strength StRenGtH

Boolean Satisfiability

Алгоритмы на графах Конструктив Комбинаторика

Boolean satisfiability problem (SAT) is known to be a very hard problem in computer science. In this problem you are given a Boolean formula, and you need to find out if the variables of a given formula can be consistently replaced by the values true or false in such a way that the formula evaluates to true. SAT is known to be NP-complete problem. Moreover, it is NP-complete even in case of 3-CNF formula (3-SAT). However, for example, SAT problem for 2-CNF formulae (2-SAT) is in P.

#SAT is the extension of SAT problem. In this problem you need to check if it is possible, and count the number of ways to assign values to variables. This problem is known to be #P-complete even for 2-CNF formulae. We ask you to solve #1-DNF-SAT, which is #SAT problem for 1-DNF formulae.
You are given a Boolean formula in 1-DNF form. It means that it is a disjunction (logical or) of one or more clauses, each clause is exactly one literal, each literal is either variable or its negation (logical not). Formally:

Your task is to find the number of ways to replace all variables with values true and false (all occurrences of the same variable should be replaced with same value), such that the formula evaluates to true.

Input
The only line of the input file contains a logical formula in 1-DNF form (not longer than 1000 symbols). Logical operations are represented by ‘|’ (disjunction) and ‘~’ (negation). The variables are ‘A’ . . . ‘Z’ and ‘a’ . . . ‘z’ (uppercase and lowercase letters are different variables). The formula contains neither spaces nor other characters not mentioned in the grammar.

Output
Output a single integer — the answer for #SAT problem for the given formula
 
Input Output
a 1
B|~B 2
c|~C 3
i|c|p|c 7

Коды Грея

Задача на реализацию Рекурсия Конструктив

На занятиях по дискретной математике Сереже рассказали про двоичные коды Грея — это такое упорядочение всех 2n различных двоичных векторов длины n, что любые два соседних, а также первый и последний, вектора различаются ровно в одном разряде.

Для закрепления материала преподаватель задал им следующее задание: в коде Грея в каждом двоичном векторе ровно один бит заменен на знак вопроса «?». Требуется заменить обратно все знаки вопроса «?» на «0» или «1», чтобы получился код Грея.

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

Формат входных данных
В первой строке содержится целое число n — длина двоичных векторов. Следующие 2n строк содержат двоичные вектора длины n, в каждом из которых ровно один символ заменен на знак вопроса «?».
Формат выходных данных
В первой строке выведите «YES», если решение существует, и «NO» — в противном случае. В случае положительного ответа выведите исходный код Грея, если возможных вариантов ответа несколько, выведите любой.
 

Ввод Вывод
2
0?
0?
1?
1?
YES
00
01
11
10
3
?00
0?1
01?
0?0
?10
1?1
10?
1?1
NO

Система оценки
 
Номер подзадачи Баллы Ограничения Комментарии
1 37 1<=n<=4 Баллы начисляются, если все тесты пройдены.
2 63 1<=n<=12 Баллы начисляются, если все тесты этой и предыду- щих подзадач пройдены.

 

Modern Art 2

Стек Конструктив Линейные структуры

Picowso решила переключиться на 1-мерный стиль.
Теперь её картины могут описываться 1-мерным массивом цветов длины NN (1≤N≤100,000). А вот стиль у неё остался прежний: Он начинает на пустом отрезке и рисует отрезками. Она использует каждый из цветов 1…N ровно один раз, хотя некоторые из цветов могут быть полностью скрыты к концу рисования.
 
Moonet, соперник Picowso, придумал, как копировать картины Picowso. Он рисует множество не соединяющихся интервалов и т.д. Moonet может рисовать не более одного интервала каждого цвета во время всего процесса. Вычислите количество таких раундов, которые требуются Moonet, чтобы скопировать 1-мерную картину Picowso.
 
ФОРМАТ ВВОДА:
 
Первая строка ввода содержит N, и следующие N строк содержат целое число в интервале 0…N, указывающее цвет каждой ячейки на 1-мерном холсте (0 для пустой ячейки).

ФОРМАТ ВЫВОДА:
 
Выведите минимальное количество раундов, которое требуется для копирования заданного рисунка или -1, если невозможно повторить этот рисунок стилем, аутеничным стилю Picowso (то есть, её нельзя нарисовать слоями последовательностей интервалов, по одному каждого цвета).
 
Ввод Вывод
7
0
1
4
5
1
3
3
2

Примечание
В данном примере интервал цвета 1 должен быть закрашен в более раннем раунде, чем интервалы цветов 4 и 5, поэтому необходимо как минимум два раунда.
 

Modern Art #3

Двумерные массивы Конструктив

Недавно вошла в моду корова-художница Picowso.
Picowso рисует особым образом. Она начинает на чистом холсте N×N, представленной матрицей N×N нолей, где ноль означает пустую ячейку холста. Затем она рисует до 9 прямоугольников на холсте, каждый одним из 9 цветов (последовательно пронумерованных 1…9). Например, она может начать рисовать прямоугольник цветом 2, получая такое промежуточное состояние холста:
 
2220 
2220 
2220 
0000
Затем она может нарисовать прямоугольник цветом 7:
 
2220 
2777 
2777 
0000
Затем она может нарисовать прямоугольник цветом 3:
 
2230 
2737 
2777 
0000
Каждый прямоугольник имеет стороны, параллельные сторонам холста и самый большой прямоугольник может быть размером с весь холст, а самый маленький размером в одну ячейку. Каждый цвет из 1…9 используется ровно один раз, хотя впоследствии любой цвет может полностью покрыть некоторые из ранних цветов.
 
По заданному конечному положению холста вычислите сколько из ещё видимых цветов могли быть первым нарисованным цветом.
 
ФОРМАТ ВВОДА:
 
Первая строка ввода содержит N, размер холста (1≤N≤10). Следующие N строк описывают финальную картинку холста, каждая содержит по N чисел в интервале 0…9. Гарантируется, что такой ввод был получен рисованием как описано выше с использованием различных цветов.

ФОРМАТ ВЫВОДА:
 
Выведите количество цветов, которые могли быть использованы первым, из всех цветов, которые видны на финальном рисунке.
 
Ввод Вывод
4
2230
2737
2777
0000
1

Building a Ski Course

Двумерные массивы Конструктив Массивы

Фермер Джон помогает превратить его большое поле в лыжный маршрут для предстоящих Му-олимпийских игр. Поле имеет размеры M x N (1 <= M,N <=100) и его целевое финальное состояние описывается решеткой из M x N символов таких как:
 
RSRSSS
RSRSSS
RSRSSS
 
Каждый символ описывает состояние снега на этом участке R – грубый, S – гладкий (организаторы считают, что в таком случае - чередования грубых и гладких участков, гонка будет интересней).
 
Для выполнения этой задачи ФД планирует модифицировать свой трактор так, чтобы тот мог «отштамповать» любой фрагмент размером B x B (B<=M,B<=N) грубым снегом или гладким снегом.
ФД хочет сделать B как можно большим. С B=1 он может подготовить поле, штампуя индивидуально квадраты в соответствии с заданным финальным состоянием. Однако для бОльших значений B может оказаться невозможным выполнить задачу. Каждый квадрат поля должен быть обработан трактором. Невозможно оставить ячейку поля в исходном состоянии.
 
Помогите ФД определить максимально возможное значение B, которое он сможет успешно использовать.
 
INPUT FORMAT:
 
* Строка 1: Два разделённых пробелом целых числа M и N.
 
* Строки 2..M+1: M строк ровно по N символов (каждый R или S),
        описывающих желаемое финальное состояние поля.

 
OUTPUT FORMAT:
 
* Строка 1: Максимальное значение B, которое ФД может использовать, чтобы создать нужное поле.
 
 
Ввод Вывод
3 6
RSRSSS
RSRSSS
RSRSSS
3


 
OUTPUT DETAILS:
 
ФД может отштамповать R колонках 1-3, затем S в колонках 2-4, затем R в колонках 3-5, и наконец,  S в колонках 4-6.
 

Задачи на печать!

Конструктив Арифметические алгоритмы (Теория чисел)

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

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

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

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

Формат входных данных
Первая строка входных данных содержит целое число n (1 ≤ n ≤ 106) - количество задач в олимпиаде.
Вторая строка входных данных содержит целое число n (1 ≤ xi ≤ 3) - количество страниц в i-й задаче.
Формат выходных данных
Выведите единственное число - минимальное количество последовательных диапазонов, каждый из которых можно напечатать одной командой односторонней или двусторонней печати так, что условия всех задач будут напечатаны в удобном для командной олимпиады виде.

Замечание
В первом примере на олимпиаду предложены 4 задачи, условия которых состоят из 1, 3, 2 и 1 страниц соответственно. Всего необходимо распечатать 7 страниц. Их можно распечатать за два задания: cтраницы 1-2 - односторонней печатью (это единственная страница первой задачи и первая из трёх страниц второй задачи), оставшиеся страницы 3-7 - двусторонней.

Во втором примере на олимпиаду предложены 2 задачи, условия которых состоят из 3 страниц каждая. Всего необходимо распечатать 6 страниц. Их можно распечатать за два задания: cтраницы 1-1- односторонней печатью (это первая из трёх страниц первой задачи), оставшиеся страницы 2-6 - двусторонней. При этом в первой задаче первая страница будет напечатана на одной стороне,  потому что она напечатана односторонней печатью, а во второй задаче последняя страница будет напечатана на одной стороне, потому что в этом задании нечётное число страниц печатается на двух сторонах, поэтому вторая сторона этого листа будет пустой.

Пират Серёжа

Конструктив Задача на реализацию

Участникам, использующим язык Python3, рекомендуется отправлять решения на проверку с использованием интерпретатора PyPy3.

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

Головоломка представляет из себя таблицу из \(n\) строк и \(m\) столбцов, в ячейках которой записаны числа от \(1\) до \(n \cdot m\) по одному разу.

Чтобы собрать головоломку, нужно выбрать последовательность клеток таблицы, в которой любые две подряд идущие клетки соседние по стороне в таблице. Последовательность может иметь произвольную длину, и каждая клетка может встречаться в последовательности произвольное число раз. Для клетки со значением \(i\) рассмотрим позицию \(t_i\) — позицию первого вхождения клетки с таким значением в последовательность. Последовательность решит головоломку, если каждая клетка таблицы встречается в ней, и \(t_1 < t_2 < \dots < t_{nm}\). Другими словами, последовательность должна в первый раз посетить клетку со значением \(x\) до клетки со значением \(x + 1\) для всех \(x\).

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

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

За одно действие Сережа может выбрать две произвольных клетки (не обязательно соседние по стороне) и поменять числа, записанные в них. Он хотел бы знать минимальное число действий, которое потребуется, чтобы головоломка стала решаемой, но очень нетерпелив. Поэтому найдите, равняется ли минимальное число действий \(0\), \(1\), или же не менее \(2\). В случае, когда потребуется ровно \(1\) действие, найдите также количество подходящих пар клеток для обмена чисел.

Формат входных данных
В первой строке вводятся два целых положительных числа \(n, m\) (\(1 \leq n \cdot m \leq 400\,000\)) — длины сторон таблицы.

В каждой из следующих \(n\) строках вводятся \(m\) целых чисел \(a_{i1}, a_{i2}, \dots, a_{im}\) (\(1 \le a_{ij} \le n \cdot m\)).

Гарантируется, что каждое число от \(1\) до \(n \cdot m\) встречается ровно один раз.

Формат выходных данных
Пусть \(a\) — минимальное число действий, после которых головоломка станет решаемой.

Если \(a = 0\), выведите \(0\).

Если \(a = 1\), выведите \(1\), а также количество подходящих пар клеток.

Если \(a \ge 2\), выведите \(2\).

 

В первом примере из условия последовательность клеток \((1, 2), (1, 1), (1, 2), (1, 3), (2, 3), (3, 3)\), \((2, 3), (1, 3), (1, 2), (1, 1), (2, 1), (2, 2), (3, 2), (3, 1)\) решает головоломку, поэтому ответ \(0\).

Головоломка во втором примере из условия не решается, но будет решаться после любого из трех обменов клеток со значениями \((1, 5), (1, 6), (2, 6)\).

В третьем примере из условия потребуется не менее двух обменов, поэтому ответ равен \(2\).

Посадка в самолет

Конструктив Задача на реализацию

В самолетах авиакомпании Битавиа кресла расположены в \(n\) рядов, при этом в каждом ряду по шесть мест, между третьим и четвертым местом находится проход. Некоторые пассажиры регистрируются заранее онлайн, другие пассажиры регистрируются на стойке регистрации в аэропорту.

При онлайн-регистрации пассажир может выбрать любое место и не может его затем менять. Например, при \(n = 6\) рассадка в самолете после онлайн-регистрации может выглядеть так (крестиками отмечены занятые места):

image

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

image

Вам дана рассадка пассажиров после онлайн-регистрации. Требуется рассадить \(m\) пассажиров так, чтобы итоговая рассадка в самолете была симметрична относительно прохода, или определить, что это невозможно.

Формат входных данных
В первой строке содержатся два целых числа \(n\) и \(m\) — количество рядов в самолете и количество пассажиров, которые придут на стойку регистрации (\(1 \le n \le 1000\), \(0 \le m \le 6000\)).

В следующих \(n\) строках задана изначальная рассадка в самолете после онлайн-регистрации. В каждой строке содержится по шесть символов, при этом \(i\)-й символ \(j\)-й строки равен <<X>> (заглавная английская X), если \(i\)-е место в \(j\)-м ряду уже занято и <<.>> (точка) иначе.


Формат выходных данных
Если искомой рассадки не существует, выведите <<Impossible>>.

Иначе выведите \(n\) строк по шесть символов — итоговую рассадку в самолете. При этом \(i\)-й символ \(j\)-й строки должен быть равен <<X>>, если место занято, и <<.>>, если свободно. Если существует несколько решений, разрешается вывести любое.

Ниже приведены пять примеров входных данных.

  1. В первом примере \(m = 0\), а рассадка в самолете симметрична, поэтому итоговая рассадка совпадает с исходной.

  2. Во втором примере есть только один способ рассадить пассажиров симметрично.

  3. В третьем примере существовало бы решение, при \(m = 1\), но при \(m = 2\) не существует способа рассадить всех пассажиров симметрично.

  4. В четвертом примере требуется рассадить больше пассажиров чем свободных мест в самолете.

  5. Пятый примере соответствует ситуации, рассмотренной на рисунках в тексте условия. В этом примере существует несколько решений, приведено одно из них.

Лабиринт

Динамическое программирование Конструктив

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

Все квесты в игре имеют одинаковую структуру. Пусть на карте расположены \(m\) комнат. Тогда каждый квест задаётся парой комнат \(u\) и \(v\) (\(1 \le u \le v \le m\)). Для прохождения этого квеста игроку нужно переместиться из комнаты \(u\) в комнату \(v\). Для усложнения игры в каждой комнате, через которую пройдёт игрок (включая начальную и конечную комнату) необходимо решить загадку. Влад называет сложностью квеста минимальное количество загадок, которые надо решить, чтобы его пройти. В частности, сложность квеста, у которого начальная и конечная комната совпадает, равна \(1\), а сложность квеста, в котором начальная и конечная комнаты соединены коридором равна \(2\). Также Влад называет квест трудным, если не существует квеста с большей сложностью, чем данный.

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

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

Формат выходных данных
В первой строке выведите целое число \(m\) — минимальное количество комнат на карте.

В следующих \(m - 1\) строках выведите через пробел пары целых чисел \(u\) и \(v\), обозначающие коридор, между комнатами \(u\) и \(v\).

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

 

Примечание
В первом примере карта выглядит так:

На этой карте есть 10 квестов. Обозначим за (u, v) квест, который начинается в комнате с номером u и заканчивается в комнате с номером v. Сложность квестов (1, 1), (2, 2), (3, 3) и (4, 4) равна 1, сложность квестов (1, 2), (1, 3) и (1, 4) равна 2, а сложность квестов (2, 3), (2, 4) и (3, 4) равна 3. Таким образом, трудными квестами являются квесты (2, 3), (2, 4) и (3, 4). Трудных квестов 3, значит интересность игры на данной карте равна 3.

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

На этой карте есть 4 трудных квеста (2, 5), (2, 6), (3, 5) и (3, 6). Их сложность равна 4.

В третьем тестовом примере карта выглядит так:

На этой карте есть 5 трудных квестов (2, 8), (3, 8), (4, 8), (5, 8), (6, 8) со сложностью 4.

Федя и массив

Конструктив

Недавно Феде на день рождения подарили массив из \(n\) целых чисел, записаных по кругу, в котором для каждой пары соседних элементов (\(a_1\) и \(a_2\), \(a_2\) и \(a_3\), \(\ldots\), \(a_{n - 1}\) и \(a_n\), \(a_n\) и \(a_1\)) модуль их разности равен \(1\) (два соседних элемента отличаются ровно на \(1\)).

Назовём локальным максимумом элемент, который больше обоих соседних элементов. Также назовём локальным минимумом элемент, который меньше обоих соседних элементов. Обратите внимание, что элементы \(a_1\) и \(a_n\) являются соседними.

К сожалению, Федя потерял массив, но он запомнил в нём сумму локальных максимумов \(A\) и сумму локальных минимумов \(B\).

По заданным \(A\) и \(B\) помогите найти любой из подходящих массивов.

Формат входных данных
В первой строке вводится целое число \(A\) (\(-10^{18} \leqslant A \leqslant 10^{18}\)).

Во второй строке вводится целое число \(B\) (\(-10^{18} \leqslant B \leqslant 10^{18}\), \(B < A\)).

В третьей строке вводится целое число \(t\) (\(0 \leqslant t \leqslant 1\)) — если \(t = 0\), то от вас требуется вывести только длину массива.

Гарантируется, что при \(t = 1\) выполняется \(A - B \leqslant 10^{5}\).

Обратите внимание, что входные данные могут быть больше, чем возможное значение 32-битной целочисленной переменной, поэтому необходимо использовать 64-битные целочисленные типы данных (тип int64 в языке Pascal, тип long long в C и C++, тип long в Java и C#). Язык Python будет корректно работать и с типом int.

Формат выходных данных
В первой строке выведите одно число \(n\) — длину массива. При \(t = 0\) должно быть верно, что найдется хотя бы один подходящий массив с такой длиной.

Если \(t = 1\), то выведите во второй строке \(n\) чисел \(a_1, a_2, \ldots, a_n\) (\(-10^{18} \leqslant a_i \leqslant 10^{18}\)) — элементы массива.

Гарантируется, что при \(t = 1\) существует массив, размер которого не превосходит \(4 \cdot 10^5\).

Если \(t = 0\), то во второй строке выводить ничего не нужно.


Примечание

В первом примере локальными максимумами являются числа на позициях \(3\) и \(10\), а локальными минимумами числа на позициях \(6\) и \(8\).

Даша и поиски

Конструктив Структуры данных

Как вы знаете, девочка Даша постоянно что-то ищет. На этот раз ей дали перестановку, и она хочет найти такой её подотрезок, что ни один из элементов на его концах не является ни минимумом, ни максимумом всего подотрезка. Более формально, вас просят найти такие числа \(l\) и \(r\) \((1 \leqslant l \leqslant r \leqslant n)\), что \(a_l \neq \min(a_l, a_{l + 1}, \ldots, a_r)\), \(a_l \neq \max(a_l, a_{l + 1}, \ldots, a_r)\) и \(a_r \neq \min(a_l, a_{l + 1}, \ldots, a_r)\), \(a_r \neq \max(a_l, a_{l + 1}, \ldots, a_r)\).

Напомнима, что перестановкой длины \(n\) называется массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\), выписанных в произвольном порядке. Например, \([2,3,1,5,4]\) является перестановкой, но \([1,2,2]\) не является перестановкой (\(2\) встречается дважды в массиве) и \([1,3,4]\) тоже не является перестановкой (\(n=3\), но \(4\) присутствует в массиве, а \(2\) отсутствует).

Помогите Даше найти такой подотрезок, либо скажите, что такого подотрезка не существует.

Формат входных данных
В первой строке входных данных вам дано одно целое число \(n\) (\(1 \leqslant n \leqslant 200\,000\)) — размер перестановки.

Во второй строке входных данных вам дано \(n\) целых чисел \(a_1, a_2, \ldots a_n\) (\(1 \leqslant a_i \leqslant n\)) — элементы перестановки.

Формат выходных данных
Если искомого подотрезка не существует, выведите \(-1\).

Иначе выведите такие два числа \(l\) и \(r\) \((1 \leqslant l \leqslant r \leqslant n)\), что \([a_l, a_{l + 1}, \ldots, a_r]\) удовлетворяет условиям задачи.

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

Заколдованное зеркало

Конструктив

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

Входные данные
Когда Алиса учила алфавит, она заметила, что с ее зеркалом что-то не так! Кубик в зеркале мог показывать не ту букву, что изображена на нем, но всегда одну и ту же. Алиса придумала новую игру, пытаясь составить смешные слова из реальных кубиков и из кубиков в зеркале одновременно.

Игра имела следующие правила. Алиса выкладывала из кубиков слово S1. Эти же буквы в зеркале показывали слово S2, которое могло отличаться от отражения S1, так как зеркало было заколдованным. Но длина каждого слова равнялась N.

Затем Алиса проделывала следующие шаги. Она выбирала два кубика i и j и меняла их местами. В зеркале при этом менялись изображения кубиков N – i + 1 и N – j + 1 соответственно.

Цель игры — получить из слова S1 слово T1, которое будет выглядеть в зеркале как слово T2. Алиса не знает, когда это возможно, а когда нет. Помогите ей ответить на этот вопрос.

Входные данные
Во входном файле находятся 4 слова S1, S2, T1 и T2, каждое в отдельной строке. Все слова имеют одну и ту же длину N (1 ≤ N≤ 100) и состоят только из заглавных латинских букв.

Выходные данные
Выведите Yes или No в зависимости от ответа на вопрос задачи.

Сломанный принтер

Циклы Задача на реализацию Конструктив

Сломанный цветной принтер, печатая цифры, закрашивает все замкнутые области в красный цвет.  Например, в цифрах 04, 6, 9 одна замкнутая область. В цифре 8 - 2 замкнутых области.  В других цифрах нет замкнутых областей, которые закрашиваются. В принтере красной краски осталось на покраску h замкнутых областей.  Найдите минимальное неотрицательное число, напечатав которое в принтере закончится красная краска. Число не должно содержать ведущих нулей.  Если в принтере отсутствует красная краска, то он не может напечатать цифру с замкнутой областью.


Входные данные
На вход подается число h (0 <= h <= 510).

Выходные данные
Выведите число, которое необходимо напечатать.
 
Примеры
Входные данные Выходные данные
1 15 48888888
2 70 88888888888888888888888888888888888

Важные переключатели

Конструктив

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

К несчастью, переключатели не являются доступными. Но Коля нашел сокет, каждый пин которого соединен с одним из переключателей через некоторую схему. Коля нашел эту схему в Интернете. Он обозначил переключатели маленькими латинскими буквами, а пины сокета — большими буквами. После этого он выписал логическую формулу для каждого пина. Согласно этой формуле включенный переключатель представляется значением true, а выключенный —false.

Коля использует в формуле следующие обозначения (операции перечислены от высшего приоритета к нисшему):

  • Обозначение пина — буква от ‘A’ до ‘K’ ;
  • Скобки обозначают, что если E >— это формула, то (E) — тоже формула;
  • Отрицание — ~E— это формула для любой формулы E;
  • Конъюнкция — E1 & E2 &…&En;
  • Дизъюнкция — E1| E2| … | En;
  • Импликация Е1 => E2 =>… => En. Импликации выполняются справа налево: Е1 => E2 => E3 означат Е1 => (E2 => E3);
  • Эквивалентность — Е1 <=> E2 <=> … <=> En. Такое выражение вычисляется так: (Е1 <=> E2) &(Е2<=> E3) & … &(En-1 <=> En)..
Коля может построить новую схему, соответствующую любой формуле. Переменными в этой формуле будут состояния пинов сокета. Для начала он хочет построить схему, в которой входными значениями будут состояния всех пинов сокета, а в качестве выхода мы получим значение единственного переключателя, который при любых входных значениях будет находится в состоянии включено. Напишите программу, которая поможет Коле написать соответствующую формулу.

Входные данные
Первая строка входных данных содержит единственное целое число n — количество пинов у сокета (1 < n < 10). Следующие n строк содержат описания каждого пина. Одно описание состоит из обозначения пина и соответствующей формулы, отделенной от обозначения символами ‘:=’. Пин обозначен заглавной латинской буквой. Его формула расположена в одной строке и состоит из элементов ‘a’..‘k’, ‘(’, ‘)’, ‘~’, ‘&’, ‘ |’, ‘=>’ и ‘<=>’. Элементы формулы могут быть отделены друг от друга произвольным числом пробелов. Описание каждого пина содержит не более 1000 символов.

Выходные данные
Если требуемая схема существует, то выведите в первой строке Yes и No в противном случае.

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

Сосны

Перестановки Конструктив Массивы

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

Аллею можно представить как прямую, и её решили украсить следующим образом — начать с сосны, чередовать лампы и сосны. В итоге на аллее будет высажено \(n + 1\) сосен и установлено \(n\) ламп.

Лампы поставили почти сразу же, причём двух типов — <<A>> и <<B>>. Лампы типа <<B>> светят всегда белым светом, а цвет лампы типа <<A>> зависит от её окружения. Если дерево, которое стоит слева от лампы, выше, чем дерево, которое стоит справа от лампы, то она загорается красным цветом, иначе синим.

Когда наконец-то доставили саженцы сосен, оказалось, что высоты всех саженцев попарно различны и принимают значения от \(1\) до \(n + 1\). Решено было разместить сосны так, чтобы количество красных и количество синих ламп были как можно ближе друг к другу.

Помогите ответственным за деревья разместить все \(n + 1\) саженцев так, чтобы разница между количеством красных и синих ламп была минимальна. Формально, если после высадки сосен будет \(r\) красных и \(b\) синих ламп, необходимо минимизировать величину \(|r-b|\).

Формат входных данных
В первой строке вводится одно единственное число \(n\) — количество ламп (\(1 \leq n \leq 2 \cdot 10^5\)). Во второй строке вводится \(n\) символов, \(i\)-й из которых равен <<A>> или <<B>> — тип \(i\)-й лампы.

Формат выходных данных
Выведите \(n + 1\) различных чисел от \(1\) до \(n + 1\) — высоты сосен при оптимальном размещении. Если оптимальных ответов несколько, можно вывести любой из них.

 

Иллюстрация ко второму примеру

image

Для наглядности, на иллюстрации красные лампы имеют формулу пятиугольника, а синие имеют форму звезды.

Тогда \(r = 1\), \(b = 1\), \(|r - b| = 0\) и это размещение будет одним из оптимальных.

Магия Копперфильда

Простые игры Конструктив

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

1 2 N
N+1 N+2 2*N
: : :
N*(N–1)+1 N*(N–1)+2 N*N

Дэвид просит каждого зрителя поставить палец на левую верхнюю картинку (то есть в клетку номер 1), и Магия начинается: маг просит зрителей сдвинуть свой палец K1 раз в произвольном направлении (сдвигать палец разрешается только на соседнюю картинку по горизонтали или по вертикали, оставлять палец на месте запрещено, при этом если, допустим, Дэвид попросил сдвинуть палец 3 раза, то можно, например, сдвинуть палец на одну клетку вправо, затем — на одну клетку вниз, затем — на одну вверх). Затем со словами "Ваш палец не здесь" Дэвид убирает некоторые картинки, и — что удивительно, пальцы телезрителей действительно не указывают на те картинки, которые убирает Дэвид. Затем он просит сделать K2 ходов, и так далее (если Дэвид уже убрал какую-то картинку, то ходить через эту клетку нельзя). В конце, Дэвид убирает все картинки, кроме одной, и, улыбаясь, говорит: "Вы здесь" (аплодисменты).

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

Входные данные
Во входном файле записано одно число N — размер квадрата (2<=N<=100).

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

K1 X1,1 X1,2 … X1,m1

K2 X2,1 X2,2 … X2,m2



Ke Xe,1 Xe,.2 … Xe,me

где Ki — это число ходов, которые должны сделать телезрители, а Xi,1 … Xi,mi — номера картинок, которые Дэвид должен убрать с экрана после этого. При этом все Ki должны удовлетворять условию 2N<=Ki<=10000 и все Ki должны быть различны. Каждая картинка (кроме той, которая останется) должна убираться ровно один раз. После каждой просьбы зрителей сделать Ki ходов, Дэвид должен убирать хотя бы одну картинку. Каждое Ki должно печататься в начале новой строки. Ситуаций, когда телезритель остался на клетке, у которой нет соседних, а его просят куда-нибудь ходить, возникать не должно.

Кластеры роботов

Обход в глубину Жадный алгоритм Конструктив Деревья

На производстве расположены \(n\) роботов, пронумерованных от \(1\) до \(n\). Любая пара роботов может быть либо соединена проводом, либо нет. Всего на производстве \(m\) проводов и \(i\)-й из них сейчас соединяет роботов с номерами \(a_i\) и \(b_i\).

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

  • либо если \(t = 1\);

  • либо если существуют такие \(i_1, \ldots, i_k\), что \(i_1 = 1\), \(i_k = t\), и любые два соседних в этой последовательности робота \(i_j\) и \(i_{j + 1}\) связаны проводом.

Любому из роботов, которыми можно управлять, можно послать команду <<извлеки второй конец подключенного к себе провода и подключи его к другому роботу>>. Иными словами, если роботом номер \(t\) можно управлять, и есть провод, соединяющий его с роботом номер \(x\), то можно заменить провод \((t, x)\) на провод \((t, y)\) для любого \(y \neq t\), еще не связанного проводом с \(t\). Обратите внимание, что после этого вы можете потерять управление над \(t\)-м роботом, если единственная связь \(t\)-го с первым проходила через \(x\)-й.

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

Формат входных данных
В первой строке записано целое число \(T\) (\(1 \le T \le 1000\)) — количество наборов входных данных в тесте.

Первая строка каждого набора входных данных содержит целые числа \(n\) и \(m\) (\(1 \leq n \leq 10^5\); \(0 \leq m \leq 1.5 \cdot 10^5\)) — количество роботов и количество проводов, соответственно.

В следующих \(m\) строках дано описание проводов: в \(i\)-й строке даны целые числа \(a_i\) и \(b_i\) (\(1 \leq a_i, b_i \leq n\); \(a_i \neq b_i\)) — номера роботов, соединенных \(i\)-м проводом. Гарантируется, что никакие два провода не соединяют одну и ту же пару роботов.

Также гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\) и сумма \(m\) по всем наборам входных данных не превосходит \(1.5 \cdot 10^5\).

Формат выходных данных
Для каждого набора входных данных выведите в первой строке через пробел максимальное количество роботов, управление над которыми можно получить, и количество действий \(k\), которое для этого понадобится.

В следующих \(k\) строках выведите сами описания действий по одному на каждой строке. Описание действия должно состоять из трех целых чисел \(t\), \(x\) и \(y\) (\(1 \leq t, x, y \leq n\); \(x \neq y\)), означающих, что робот номер \(t\) меняет провод \((t, x)\) на провод \((t, y)\).

Если возможных ответов несколько, выведите любой. Обратите внимание, что \(k\) при этом обязано быть наименьшим, при котором можно подключить максимальное количество роботов.

Кластеры роботов - 2

Деревья Жадный алгоритм Конструктив Обход в глубину

На производстве расположены \(n\) роботов, пронумерованных от \(1\) до \(n\). Любая пара роботов может быть либо соединена проводом, либо нет. Известно, что \(i\)-й робот соединен с \(k_i\) другими роботами с номерами \(v_{i,1}, \ldots, v_{i,k_i}\). Провода двухсторонние, то есть если \(i\) связан с \(j\), то \(j\) связан с \(i\) (иными словами, \((i, j)\) и \((j, i)\) — это один и тот же провод).

Вы находитесь рядом с роботом номер \(n\). Роботом номер \(t\) можно управлять, если он связан с \(n\)-м некоторой цепочкой проводов, то есть

  • либо если \(t = n\);

  • либо если существуют такие \(i_1, \ldots, i_k\), что \(i_1 = n\), \(i_k = t\), и любые два соседних в этой последовательности робота \(i_j\) и \(i_{j + 1}\) связаны проводом.

Любому из роботов, которыми можно управлять, можно послать команду <<извлеки второй конец подключенного к себе провода и подключи его к другому роботу>>. Иными словами, если роботом номер \(t\) можно управлять, и есть провод, соединяющий его с роботом номер \(x\), то можно заменить провод \((t, x)\) на провод \((t, y)\) для любого \(y \neq t\), еще не связанного проводом с \(t\). Обратите внимание, что после этого вы можете потерять управление над \(t\)-м роботом, если единственная связь \(t\)-го с \(n\)-м проходила через \(x\)-й.

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

Формат входных данных
В первой строке записано целое число \(T\) (\(1 \le T \le 1000\)) — количество наборов входных данных в тесте.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — количество роботов.

Затем следуют \(n\) строк, в \(i\)-й из которых записаны числа \(k_i\) (\(0 \le k_i \le n - 1\)) и \(v_{i,1}, \ldots, v_{i,k_i}\) (\(1 \le v_{i,j} \le n\); \(v_{i,j} \neq i\)) — количество проводов, подключенных к \(i\)-му роботу, и номера роботов на противоположных концах этих проводов. Гарантируется, что данные корректны: никакие два провода не соединяют одну и ту же пару роботов, и если \(j \in v_i\), то \(i \in v_j\).

Также гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\) и сумма количества проводов по всем наборам входных данных не превосходит \(1.5 \cdot 10^5\).

Формат выходных данных
Для каждого набора входных данных выведите в первой строке через пробел максимальное количество роботов, управление над которыми можно получить, и количество действий \(k\), которое для этого понадобится.

В следующих \(k\) строках выведите сами описания действий в формате <<\(y\) + \(t\) - \(x\)>> (\(1 \leq t, x, y \leq n\); \(x \neq y\)). Каждая такая строка соответствует замене провода \((t, x)\) на провод \((t, y)\).

Если возможных ответов несколько, выведите любой. Обратите внимание, что \(k\) при этом обязано быть наименьшим, при котором можно подключить максимальное количество роботов.

E. Жадный выбор

Конструктив *2600

Вася занимается исследованием применения жадных алгоритмов в различных областях. Сейчас он пытается изучить применимость жадного алгоритма для задачи о сдаче. Имеется набор из n различных номиналов монет, причем монет каждого номинала имеется неограниченное количество. Задача состоит в том, чтобы набрать сумму x наименьшим числом монет. Жадный алгоритм на каждом шаге берет монету наибольшего номинала, не превосходящего x. Очевидно, что если в наборе номиналов присутствует 1, то любую сумму x можно набрать жадным алгоритмом. Однако жадный алгоритм не всегда даст оптимальное представление данной суммы, т.е. представление, содержащее наименьшее количество монет. К примеру, если имеются номиналы {1, 3, 4} и требуется набрать сумму 6, то жадный алгоритм построит представление 4 + 1 + 1, в то время как оптимальным является представление 3 + 3, содержащее на монету меньше. По заданному набору номиналов определите, существует ли такая сумма x, которую жадный алгоритм наберет неоптимальным способом. Если такая сумма существует, то найдите наименьшую из таких сумм.

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

Первая строка содержит целое число n (1 ≤ n ≤ 400) — число номиналов монет. Вторая строка содержит n целых чисел ai (1 ≤ ai ≤ 109), задающих номиналы монет. Гарантируется, что a1 > a2 > ... > an и an = 1.

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

Если жадный алгоритм набирает любую сумму оптимальным образом, то выведите -1. Иначе выведите наименьшее число, которое жадный алгоритм наберет неоптимальным способом.

B. Составление бинарной строки

Конструктив *1300

Задано три целых числа \(a\), \(b\) и \(x\). Ваша задача — составить бинарную строку \(s\) длины \(n = a + b\) таким образом, что в ней ровно \(a\) нулей, ровно \(b\) единиц и ровно \(x\) таких индексов \(i\) (\(1 \le i < n\)), что \(s_i \ne s_{i + 1}\). Гарантируется, что ответ всегда существует.

Например, для строки "01010" есть ровно четыре индекса \(i\) таких ,что \(1 \le i < n\) и \(s_i \ne s_{i + 1}\) (\(i = 1, 2, 3, 4\)). Для строки "111001" существует два таких индекса \(i\) (\(i = 3, 5\)).

Напомним, что бинарная строка — это непустая последовательность, состоящая из символов 0 и 1.

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

Первая строка входных данных содержит три целых числа \(a\), \(b\) и \(x\) (\(1 \le a, b \le 100, 1 \le x < a + b)\).

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

Выведите строку \(s\), где \(s\) — это любая бинарная строка, удовлетворяющая описанным выше ограничениям. Гарантируется, что ответ всегда существует.

Примечание

Все возможные ответы для первого тестового примера:

  • 1100;
  • 0011.

Все возможные ответы для второго тестового примера:

  • 110100;
  • 101100;
  • 110010;
  • 100110;
  • 011001;
  • 001101;
  • 010011;
  • 001011.

E. Построение дерева

графы Конструктив *2100

Задано три целых числа \(n\), \(d\) и \(k\).

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

Неориентированное дерево — это связный неориентированный граф с \(n - 1\) ребром.

Диаметр дерева — это максимальная длина простого пути (пути, в котором каждая вершина встречается не более одного раза) между всеми парами вершин этого дерева.

Степень вершины — это количество ребер, инцидентных этой вершине (то есть для вершины \(u\) это количество ребер \((u, v)\), принадлежащих дереву, где \(v\) это любая другая вершина дерева).

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

Первая строка входных данных содержит три целых числа \(n\), \(d\) и \(k\) (\(1 \le n, d, k \le 4 \cdot 10^5\)).

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

Если не существует дерева, удовлетворяющего описанным выше ограничениям, выведите одно слово «NO» (без кавычек).

Иначе в первой строке выведите «YES» (без кавычек) и затем \(n - 1\) строку, которые описывают ребра дерева, удовлетворяющего описанным выше ограничениям. Вершины дерева должны быть пронумерованы от \(1\) до \(n\). Вы можете выводить ребра дерева и пары вершин ребра в любом порядке. Если существует несколько ответов, выведите любой из них.

B. Соня и выставка

жадные алгоритмы Конструктив математика реализация *1300

Соня решила провести выставку цветов. Так как девочка любит только розы и лилии, она решила, что на выставке будут только эти два вида цветов.

Выставка представляет собой ряд из \(n\) цветов. Соня может поставить на позицию \(i\) либо розу, либо лилию. Таким образом, каждая из \(n\) позиций будет содержать ровно один цветок — розу или лилию.

Она знает, что выставку посетят ровно \(m\) людей, при чем \(i\)-й посетитель будет рассматривать только цветки от \(l_i\) до \(r_i\) включительно. Девочка понимает, что у каждого подотрезка цветов есть своя красота, которая равна произведению количества роз и количества лилий.

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

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

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

Каждая из следующих \(m\) строк содержит два целых числа \(l_i\) и \(r_i\) (\(1\leq l_i\leq r_i\leq n\)), что значит, что \(i\)-й посетитель пройдет по всем цветам в диапазоне от \(l_i\) до \(r_i\) включительно.

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

Выведите строку из \(n\) символов, \(i\)-й из которых должен быть «0», если вы хотите поставить розу на \(i\)-ю позицию, иначе «1», если хотите поставить лилию.

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

Примечание

В первом примере на первой, четвертой и пятой позициях стоят розы, а на второй и третьей позициях — лилии;

  • на подотрезке \([1\ldots3]\) есть одна роза и две лилии, поэтому красота равна \(1\cdot 2=2\);
  • на подотрезке \([2\ldots4]\) есть одна роза и две лилии, поэтому красота равна \(1\cdot 2=2\);
  • на подотрезке \([2\ldots5]\) есть две розы и две лилии, поэтому красота равна \(2\cdot 2=4\).

Суммарная красота равна \(2+2+4=8\).

Во втором примере на третьей, четвертой и шестой позициях стоят розы, а на первой, второй и пятой позициях — лилии;

  • на подотрезке \([5\ldots6]\) есть одна роза и одна лилия, поэтому красота равна \(1\cdot 1=1\);
  • на подотрезке \([1\ldots4]\) есть две розы и две лилии, поэтому красота равна \(2\cdot 2=4\).
  • на подотрезке \([4\ldots6]\) есть две розы и одна лилия, поэтому красота равна \(2\cdot 1=2\).

Суммарная красота равна \(1+4+2=7\).

C. Соня и роботы

Конструктив реализация *1400

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

Соня нарисовала в ряд \(n\) чисел, где на \(i\)-й позиции находится число \(a_i\). Она так же поставила по роботу в каждый конец ряда (слева от первого числа и справа от последнего). Соня даст каждому роботу по одному числу (они могут быть как одинаковые, так и различны) и запустит их. Когда робот запущен, он движется навстречу другому роботу, считывая числа в ряду. Когда робот считывает число, которое равно тому числу, что ему ввели, он выключится и останется на этой же позиции.

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

Например, если ряд состоит из чисел \([1, 5, 4, 1, 3]\), первому роботу дали число \(1\), а второму \(4\), то первый робот остановится на позиции \(1\), а второй на позиции \(3\). В таком случае, роботы не встретятся, как результат, роботы не поломаются. Но если дать первому число \(4\), а второму \(5\), то они встретятся, так как первый остановится на позиции \(3\), а второй на позиции \(2\).

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

Соне теперь стало интересно, сколько различных пар чисел можно дать роботам так, чтобы они не встретились. То есть, если есть пара чисел (\(p\), \(q\)), то девочка даст число \(p\) первому роботу, а \(q\) второму. Пары чисел (\(p_i\), \(q_i\)) и (\(p_j\), \(q_j\)) считаются различными, если \(p_i\neq p_j\) или \(q_i\neq q_j\).

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

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

Первая строка содержит одно целое число \(n\) (\(1\leq n\leq 10^5\)) — количество чисел в ряду.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1\leq a_i\leq 10^5\)) — числа ряда.

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

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

Примечание

В первом примере можно дать пары чисел (\(1\), \(1\)), (\(1\), \(3\)), (\(1\), \(4\)), (\(1\), \(5\)), (\(4\), \(1\)), (\(4\), \(3\)), (\(5\), \(1\)), (\(5\), \(3\)) и (\(5\), \(4\)).

Во втором примере можно дать пары чисел (\(1\), \(1\)), (\(1\), \(2\)), (\(1\), \(3\)), (\(2\), \(1\)), (\(2\), \(2\)), (\(2\), \(3\)) и (\(3\), \(2\)).

D. Соня и матрица

Конструктив Перебор реализация *2300

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

Соня быстро придумала новый вид матриц, которые назвала ромбические матрицы. Эти матрицы имеют ровно один ноль, а во всех остальных ячейках записано манхэттенское расстояние до клетки с нулём. Ячейки с одинаковыми числами имеют форму ромбов, поэтому, Соня так этот вид и назвала.

Манхэттенское расстояние между ячейками (\(x_1\), \(y_1\)) и (\(x_2\), \(y_2\)) равно величине \(|x_1 - x_2| + |y_1 - y_2|\). Например, манхэттенское расстояние между ячейками \((5, 2)\) и \((7, 1)\) равно \(|5-7|+|2-1|=3\).

Пример ромбической матрицы.

Отметим, что ромбическая матрица однозначно задается своими размерами \(n\), \(m\) и положением ячейки со значением \(0\).

Она нарисовала некоторую \(n\times m\) ромбическую матрицу. Девочка полагает, что вы не сможете возобновить матрицу, если она вам даст только элементы матрицы в случайном порядке (то есть последовательность из \(n\cdot m\) чисел). Отметим, что Соня не даст вам сами числа \(n\) и \(m\), в вашем распоряжении будет только последовательность всех элементов матрицы.

Напишите программу, которая найдет такую \(n\times m\) ромбическую матрицу, что её элементы — это в точности все элементы заданной последовательности, расположенные в матрице подходящим образом.

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

Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 10^6\)) — количество ячеек в матрице.

Вторая строка содержит \(t\) целых чисел \(a_1, a_2, \ldots, a_t\) (\(0\leq a_i< t\)) — значения ячеек в произвольном порядке.

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

В первой строке выведите два целых положительных числа \(n\) и \(m\) (\(n \times m = t\)) — размеры матрицы.

В следующей строке выведите два целых числа \(x\) и \(y\) (\(1\leq x\leq n\), \(1\leq y\leq m\)) — номер строки и номер колонки, на пересечении которых расположена ячейка со значением \(0\).

Если существует несколько решений, выведите любое из них. Если решения не существует, выведите одно целое число \(-1\).

Примечание

Рисунок к первому примеру можно увидеть в легенде. Так же можно выбрать ячейку \((2, 2)\) для нуля. Кроме этого, матрица \(5\times 4\) с нулём в \((4, 2)\) тоже является правильной.

Для второго примера существует матрица размером \(3\times 6\), ноль которой находится в ячейки \((2, 3)\).

Для третьего примера решения не существует.

D. Взаимно простой граф

графы жадные алгоритмы Конструктив математика Перебор *1700

Назовем неориентированный граф \(G = (V, E)\) взаимно простым, если для каждого ребра \((v, u) \in E\)  \(GCD(v, u) = 1\) (наибольший общий делитель \(v\) и \(u\) равен \(1\)). Если между некоторой парой вершин \(v\) и \(u\) нет ребра, то значение \(GCD(v, u)\) не важно. Вершины нумеруются от \(1\) до \(|V|\).

Постройте взаимно простой граф из \(n\) вершин и \(m\) ребер такой, что он связный, не содержит петель и кратных ребер.

Если не существует корректного графа с данным числом вершин и ребер, то выведите «Impossible».

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

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

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

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

Если не существует корректного графа с данным числом вершин и ребер, то выведите «Impossible».

В противном случае выведите ответ в следующем формате:

В первой строке должно быть записано слово «Possible».

В \(i\)-й из следующих \(m\) строк должно содержаться \(i\)-е ребро \((v_i, u_i)\) полученного графа (\(1 \le v_i, u_i \le n, v_i \neq u_i\)). Для каждой пары \((v, u)\) не должно больше содержаться пар \((v, u)\) или \((u, v)\). Вершины нумеруются от \(1\) до \(n\).

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

Примечание

Изображение графа из первого примера:

B. Химическая таблица

графы Конструктив матрицы поиск в глубину и подобное снм *1900

Учёные Иннополиса продолжили исследование периодической таблицы. Существуют n·m известных элементов, и они представлены в периодической таблице — прямоугольнике, состоящем из n строк и m столбцов. Каждый элемент может быть описан своими координатами в таблице (r, c) (1 ≤ r ≤ n, 1 ≤ c ≤ m).

Недавно учёные открыли, что для каждых четырёх различных элементов в этой таблице, которые образуют прямоугольник со сторонами, параллельными сторонам таблицы, если они имеют экземпляры трёх из четырёх элементов, то с помощью ядерного синтеза они могут произвести четвёртый элемент. Так, если имеются элементы с позиций (r1, c1), (r1, c2), (r2, c1), где r1 ≠ r2 и c1 ≠ c2, то можно произвести элемент (r2, c2).

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

Учёные Иннополиса уже имеют образцы q элементов. Они хотят получить образцы всех n·m элементов таблицы. Чтобы добиться этого, они могут купить некоторые образцы в других лабораториях, а потом произвести остальные в некотором порядке. Помогите им определить, какое минимальное число элементов им надо купить.

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

Первая строка входных данных содержит три целых числа n, m, q (1 ≤ n, m ≤ 200 000; 0 ≤ q ≤ min(n·m, 200 000)) — размеры таблицы элементов и количество элементов, которые учёные уже имеют.

Следующие q строк содержат по два целых числа каждая: ri, ci (1 ≤ ri ≤ n, 1 ≤ ci ≤ m), которые описывают расположение уже имеющихся элементов в таблице.

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

Выведите минимальное количество элементов, которые надо купить.

Примечание

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

Тест 1

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

Тест 2

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

Тест 3

Существует несколько возможных решений. Одно из них описано ниже.

Заметим, что непосредственно после покупки обозначенного красным элемента мы все еще не можем произвести элемент, обозначенный числом 4. Мы сможем это сделать только после получения элемента, обозначенного 1.

D. AB-Строки

Конструктив Строки *2800

Даны две строки s и t, состоящие только из букв a и b. Вы можете несколько раз совершить следующую операцию: выбрать префикс строки s, префикс строки t и поменять их местами. Префиксы могут быть пустыми, также префикс может совпадать со всей строкой.

Ваша задача — найти последовательность операций, после которой одна из строк будет состоять только из букв a, а другая — только из букв b. Число операций нужно минимизировать.

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

Первая строка содержит строку s (1 ≤ |s| ≤ 2·105).

Вторая строка содержит строку t (1 ≤ |t| ≤ 2·105).

Здесь |s| и |t| означают длины строк s and t, соответственно. Гарантируется, что хотя бы в одной строке есть хотя бы один символ a и хотя бы в одной строке есть хотя бы один символ b.

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

Первая строка вывода должна содержать число n (0 ≤ n ≤ 5·105) — количество операций.

Каждая из последующих n строк должна содержать два числа ai, bi, разделённых пробелом — длины префиксов s и t для обмена, соответственно.

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

Примечание

В первом примере вы можете решить задачу в две операции:

  1. Обменять префикс первой строки длины 1 и префикс второй строки длины 0. После этого обмена вы получите ab и bbb.
  2. Обменять префикс первой строки длины 1 и префикс второй строки длины 3. После этого обмена вы получите bbbb и a.

Во втором примере строки уже подходящие, поэтому операции не нужны.

D. Между домами

жадные алгоритмы Конструктив *1600

В ряд расположено \(n\) домов. Они пронумерованы от \(1\) до \(n\) в порядке слева направо. Изначально вы находитесь у дома \(1\).

Вы хотите совершить \(k\) переходов между домами. Переходом является ходьба от текущего дома к другому дому. Вы не можете стоять на месте (то есть во время каждого перехода другой дом должен отличаться от текущего). Если вы идете от дома \(x\) до дома \(y\), дистанция, которую вы прошли, увеличивается на \(|x-y|\) единиц, где \(|a|\) — абсолютная величина (модуль числа) \(a\). Разрешается посещать один и тот же дом несколько раз (но нельзя посещать один и тот же дом два раза подряд).

Ваша задача — пройти суммарно ровно \(s\) единиц дистанции.

Если это невозможно, выведите «NO». Иначе выведите «YES» и один из возможных способов сделать это. Помните, что вы должны совершить ровно \(k\) переходов.

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

Первая строка входных данных содержит три целых числа \(n\), \(k\), \(s\) (\(2 \le n \le 10^9\), \(1 \le k \le 2 \cdot 10^5\), \(1 \le s \le 10^{18}\)) — количество домов, количество переходов и суммарная дистанция, которую вы должны пройти.

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

Если невозможно совершить ровно \(k\) переходов с суммарной пройденной дистанцией, равной \(s\), выведите «NO».

Иначе выведите «YES» в первой строке и затем выведите ровно \(k\) целых чисел \(h_i\) (\(1 \le h_i \le n\)) во второй строке, где \(h_i\) — дом, к которому вы переходите на \(i\)-м шаге.

Для каждого \(j\) от \(1\) до \(k-1\) должно выполняться следующее условие: \(h_j \ne h_{j + 1}\). Также должно выполняться \(h_1 \ne 1\).

D. Вася и матрица

Конструктив математика Потоки *1800

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

Вася знает, что в матрице n строк и m столбцов. Для каждой строки ему известен xor (побитовое исключающее или) всех элементов в этой строке. Последовательность a1, a2, ..., an задает xor элементов строки под номером 1, 2, ..., n, соответственно. Аналогично, для каждого столбца Вася знает xor всех элементов в столбце. Последовательность b1, b2, ..., bm обозначает xor элементов в столбцах под номерами 1, 2, ..., m, соответственно.

Помогите Васе! Найдите матрицу, которая соответствует этим ограничениям, или скажите, что такой матрицы не существует.

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

Первая строка содержит два числа n и m (2 ≤ n, m ≤ 100) — размеры матрицы.

Вторая строка содержит n чисел a1, a2, ..., an (0 ≤ ai ≤ 109), где ai — xor всех элементов в строке i.

Третья строка содержит m чисел b1, b2, ..., bm (0 ≤ bi ≤ 109), где bi — xor всех элементов в столбце i.

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

Если не существует матрицы, удовлетворяющей заданным ограничениям, в первой строке выведите «NO».

Иначе в первой строке выведите «YES», а затем n строк по m чисел в каждой ci1, ci2, ... , cim (0 ≤ cij ≤ 2·109) — описание матрицы.

Если существует несколько подходящих матриц — разрешено вывести любую из них.

C. Телефонный номер

жадные алгоритмы Конструктив *1600

Миссис Смит пытается связаться со своим мужем, мистером Смитом, но она забыла его секретный телефонный номер!

Единственное, что помнит миссис Смит, это то, что любая перестановка из \(n\) чисел может быть секретным номером телефона. Но только те перестановки, которые имеют минимальное секретное значение, могут быть номером телефона её мужа.

Последовательность из \(n\) чисел называется перестановкой, если она содержит в себе все числа от \(1\) до \(n\) ровно по одному разу.

Секретным значением перестановки называется сумма длин наибольшей возрастающей подпоследовательности (НВП) и наибольшей убывающей подпоследовательности (НУП).

Подпоследовательность \(a_{i_1}, a_{i_2}, \ldots, a_{i_k}\), где \(1\leq i_1 < i_2 < \ldots < i_k\leq n\) называется возрастающей, если \(a_{i_1} < a_{i_2} < a_{i_3} < \ldots < a_{i_k}\). Если \(a_{i_1} > a_{i_2} > a_{i_3} > \ldots > a_{i_k}\), то подпоследовательность называется убывающей. Возрастающая/убывающая подпоследовательность называется наибольшей, если она обладает максимальной длиной среди всех возрастающих/убывающих подпоследовательностей.

Например, если есть перестановка \([6, 4, 1, 7, 2, 3, 5]\), НВП этой перестановки будет \([1, 2, 3, 5]\), а длина НВП будет \(4\). НУП может быть \([6, 4, 1]\), \([6, 4, 2]\) или \([6, 4, 3]\), значит длина НУП равна \(3\).

Обратите внимание, что длины НВП и НУП могут быть различны.

Помогите, пожалуйста, миссис Смит найти перестановку, которая дает минимальную сумму длин НВП и НУП.

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

Единственная строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — длина перестановки, которую вам нужно найти.

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

Выведите перестановку, которая дает минимальную сумму длин НВП и НУП.

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

Примечание

В первом примере вы можете построить перестановку \([3, 4, 1, 2]\). НВП — \([3, 4]\) (или \([1, 2]\)), значит длина НВП равна \(2\). НУП может быть любой из \([3, 1]\), \([4, 2]\), \([3, 2]\) и \([4, 1]\). Длина НУП тоже равна \(2\). Сумма равна \(4\). Обратите внимание, что \([3, 4, 1, 2]\) не единственная перестановка, которая подходит.

Во втором примере вы можете построить перестановку \([2, 1]\). НВП — \([1]\) (или \([2]\)), значит длина НВП равна \(1\). НУП — \([2, 1]\), значит длина НУП равна \(2\). Сумма равна \(3\). Обратите внимание, что перестановка \([1, 2]\) тоже подходит.

C. Задача о Серёже

графы Конструктив *3000

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

Так как Серёжа очень любознательный мальчик, он сразу придумал себе занятие. Он решил найти в этом графе такое множество вершин \(Q\), что никакие две вершины \(x, y \in Q\) не соединены ребром, а также до любой вершины \(z \notin Q\) можно было дойти от какой-нибудь вершины множества \(Q\) не более, чем за два шага.

Немного подумав, Сережа смог решить поставленную задачу, он ведь уже такой большой. А сможете ли вы?

Вершина \(y\) достижима из вершины \(x\) не более, чем за два шага, если либо существует ориентированное ребро \((x,y)\), либо существует два ориентированных ребра \((x,z)\) и \((z, y)\) для некоторой вершины \(z\).

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

Первая строка содержит два положительных целых числа \(n\) и \(m\) (\(1 \le n \le 1\,000\,000\), \(1 \le m \le 1\,000\,000\)) — количество вершин и рёбер в ориентированном графе.

Каждая из следующих \(m\) строк содержит описание очередного ребра. Каждая из этих строк содержит два числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le n\), \(a_i \ne b_i\)), задающие начало и конец \(i\)-го ребра. Граф может содержать кратные рёбра.

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

В первой строке выведите число \(k\) — количество выбранных вершин. А во второй строке выведите эти \(k\) чисел — номера выбранных вершин.

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

Примечание

В первом примере вершины \(1, 3, 4, 5\) не соединены. До вершины \(2\) можно дойти за один шаг от вершины \(1\).

Во втором примере до вершины \(1\) можно дойти за один шаг, а до вершины \(2\) за два шага.

Следующие картинки иллюстрируют тесты из условия и ответы для них.

   

D. Восстановление массива

Конструктив Структуры данных *1700

Изначально был дан массив \(a\), состоящий из \(n\) целых чисел. Позиции в нем пронумерованы от \(1\) до \(n\).

К массиву применили ровно \(q\) запросов. Для \(i\)-го запроса выбирался некоторый отрезок \((l_i, r_i)\) \((1 \le l_i \le r_i \le n)\), и значения элементов на позициях от \(l_i\) до \(r_i\) включительно заменялись на \(i\). Порядок запросов не может быть изменен, и все \(q\) запросов были применены. Также известно, что каждая позиция от \(1\) до \(n\) была покрыта хотя бы одним отрезком.

Мы бы могли вам предложить задачу о проверке того, что некоторый массив (состоящий из \(n\) целых чисел со значениями от \(1\) до \(q\)) мог быть получен приведенными выше запросами. Однако, мы решили, что данная задача будет слишком проста для вас.

Улучшение, которое мы к ней применили, заключается в следующем. Было выбрано множество позиций (возможно пустое) в данном массиве, и значения элементов на этих позициях были заменены на \(0\).

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

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

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

В первой строке записаны два целых \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)) — количество элементов массива и количество запросов, примененных к нему.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le q\)) — полученный массив. Если элемент на некоторой позиции \(j\) равен \(0\), то значение элемента на данной позиции может быть любым целым числом от \(1\) до \(q\).

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

Выведите «YES», если массив \(a\) может быть получен применением \(q\) запросов. Отрезки \((l_i, r_i)\) \((1 \le l_i \le r_i \le n)\) выбираются независимо друг от друга при каждом запросе. Каждая позиция от \(1\) до \(n\) должна быть покрыта хотя бы одним отрезком.

В противном случае выведите «NO».

Если некоторый массив мог быть получен, то выведите \(n\) целых чисел во второй строке — \(i\)-е число должно быть равно значению \(i\)-го элемента полученного массива и должно иметь значение от \(1\) до \(q\). Должно быть возможно получить данный массив применением ровно \(q\) запросов.

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

Примечание

В первом примере можно также заменить \(0\) значением \(1\), но не \(3\).

Во втором примере не важно, какие отрезки выбирались до запроса \(10\), при котором был запрос \((1, 3)\).

Третий пример демонстрирует тот факт, что порядок операций не может быть изменен, нельзя сначала присвоить элементы \((1, 3)\) значению \(6\), и только потом \((2, 2)\) значению \(5\). Отрезок для \(5\) должен быть применен до отрезка для \(6\).

В четвертом примере существует много корректных ответов.

E. Вправо или вниз

интерактив Конструктив матрицы *2100

Это интерактивная задача.

Боб живет в квадратной таблице размера \(n \times n\), причем строки пронумерованы от \(1\) до \(n\) сверху вниз, а столбцы пронумерованы от \(1\) до \(n\) слева направо. Каждая клетка таблицы либо свободна, либо непроходима, но у вас нет описания таблицы. Вам известно только число \(n\).

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

Вы можете спросить не более \(4 \cdot n\) запросов вида «? \(r_1\) \(c_1\) \(r_2\) \(c_2\)» (\(1 \le r_1 \le r_2 \le n\), \(1 \le c_1 \le c_2 \le n\)). Ответ будет «YES», если Боб может добраться из клетки \((r_1, c_1)\) в клетку \((r_2, c_2)\), и «NO» в противном случае. В частности, если одна из этих клеток (или обе) непроходимы, то ответом точно будет «NO». Боб не любит короткие прогулки, поэтому вы можете делать только такие запросы, в которых манхеттенское расстояние между двумя клетками будет не меньше \(n - 1\), т. е. должно выполняться условие \((r_2 - r_1) + (c_2 - c_1) \ge n - 1\).

Гарантируется, что Боб может попасть из левого верхнего угла \((1, 1)\) в правый нижний угол \((n, n)\), ваша задача — найти способ это сделать. Выведите ответ в форме «! S», где \(S\) — строка длиной \(2 \cdot n - 2\), состоящая из букв «D» и «R», обозначающих движения вниз и вправо, соответственно. Движение вниз увеличивает первую координату на \(1\), движение направо увеличивает вторую кооринату на \(1\). Если существует несколько решений, выведите любое. Ваша программа должна завершиться сразу после вывода решения.

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

Единственная строка содержит одно целое число \(n\) (\(2 \le n \le 500\)) — размер таблицы.

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

Когда ваша программа готова вывести ответ, выведите единственную строку в формате «! S», где \(S\) — строка длины \(2 \cdot n - 2\), состоящая из букв «D» и «R», обозначающих движения вниз и вправо, соответственно. Путь должен быть корректным путем из клетки \((1, 1)\) в клетку \((n, n)\) и должен проходить только через свободные клетки.

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

Вы можете спросить не более \(4 \cdot n\) запросов. Для запроса выведите строку в формате «? \(r_1\) \(c_1\) \(r_2\) \(c_2\)» (\(1 \le r_1 \le r_2 \le n\), \(1 \le c_1 \le c_2 \le n\)). После этого считайте строку, содержащую «YES» или «NO» в зависимости от ответа на запрос. «YES» означает, что Боб может дойти из клетки \((r_1, c_1)\) в клетку \((r_2, c_2)\), «NO» означает обратное.

Обратите внимание, таблица фиксирована до запуска вашего решения и не зависит от ваших запросов.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло» или другой отрицательный вердикт. Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Ответ «BAD» вместо «YES» или «NO» означает, что ваша программа сделала некорректный запрос. Ваша программа должна немедленно завершиться после прочтения ответа «BAD», вы получите вердикт Неправильный ответ. В противном случае вы можете получить любой вердикт, так как программа продолжит чтение из закрытого потока.

Примечание

Первый пример показан на рисунке ниже.

Для взломов используйте следующий формат теста:

Первая строка должна содержать одно целое число \(n\) (\(2 \le n \le 500\)) — размер таблицы.

Каждая из следующих \(n\) строк должна содержать строку из \(n\) символов «#» или «.», где «#» обозначает непроходимую клетку, а «.» обозначает свободную клетку.

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


4
..#.
#...
###.
....

C. Пластилиновая зебра

Конструктив реализация *1600

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

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

Прежде чем приступать к самой лепке, Гриша может несколько раз (\(0\) или более) изменить порядок кусочков следующим образом: произвольно разрезать последовательность полосок на две части, развернуть каждую из частей и затем склеить их вновь. К примеру, если у Гриши были полоски в порядке «bwbbw» (здесь «b» означает черную полоску, а «w» — белую), то можно было бы разрезать последовательность как bw|bbw (черта обозначает место разреза), перевернуть и получить «wbwbb» после склеивания.

Помогите Грише найти максимально возможную длину зебры.

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

В единственной строке находится строка \(s\) (\(1 \le |s| \le 10^5\), где \(|s|\) обозначает длину строки \(s\)), состоящая из строчных латинских букв «b» и «w», которые обозначают черный и белый кусочки пластилина соответственно.

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

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

Примечание

В первом примере одна из возможных цепочек превращений выглядит как bwwwbww|bw \(\to\) w|wbwwwbwb \(\to\) wbwbwwwbw, что дает ответ, равный \(5\).

Во втором примере переупорядочивание полосок не улучшает ответ.

E. Цветные кубики

Конструктив матрицы реализация *2700

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

Вася вспомнил, что у него есть несложная головоломка: на шахматной доске размера \(n \times n\) находятся \(m\) цветных кубиков, причем \(m \leq n\), а все цвета кубиков различны. Каждый кубик занимает ровно одну клетку. Также для каждого кубика известна клетка доски, на которую его нужно поставить. Кубики хрупкие и их очень легко разбить, поэтому за одну операцию можно только бережно передвинуть один кубик на соседнюю по стороне клетку, если она свободна. Вася настолько аккуратен, что одна операция занимает у него целую секунду.

Вася специально тренировался к финалу VK Cup, поэтому его концентрации хватает максимум на \(3\) часа, то есть на \(10800\) секунд. Помогите Васе найти последовательность действий, которая приведет к тому, что все кубики окажутся на соответствующих клетках, но при этом будет достаточно короткой, чтобы Вася не потерял концентрацию и не разбил кубик.

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

Первая строка содержит два натуральных числа \(n\) и \(m\) (\(1 \leq m \leq n \leq 50\)) — размер доски и количество кубиков соответственно.

Каждая из следующих \(m\) строк содержит два натуральных числа \(x_i\), \(y_i\) (\(1 \leq x_i, y_i \leq n\)) — начальные позиции кубиков.

Следующие \(m\) строк описывают конечные позиции кубиков в том же формате и в том же порядке.

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

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

В первой строке вывести число \(k\) (\(0 \le k \leq 10800\)) — количество действий Васи. В каждой из следующих \(k\) строк нужно описать одно действие — вывести четыре целых числа \(x_1\), \(y_1\), \(x_2\), \(y_2\), где \(x_1, y_1\) — позиция кубика, который двигает Вася, \(x_2, y_2\) — новая позиция этого кубика. Клетки \(x_1, y_1\) и \(x_2, y_2\) должны быть соседними по стороне, клетка \(x_2, y_2\) должна быть пустой перед выполнением операции.

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

Примечание

В четвертом примере выведенная последовательность действий (показана на рисунке ниже) является корректной, но не является кратчайшей. Существует решение, содержащее лишь \(3\) действия.

G. Приобретения стартапов

Конструктив математика *3200

Существует \(n\) стартапов. Стартапы могут быть либо активными либо приобретенными. Если стартап приобретенный, это означает, что его владельцем является ровно один активный стартап. Активный стартап может быть владельцем любого количества приобретенных стартапов. Активный стартап не может быть приобретенным.

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

  1. Случайным образом равновероятно выбираются два различных активных стартапа \(A\) и \(B\).
  2. С равной вероятностью либо \(A\) приобретает \(B\), либо \(B\) приобретает \(A\) (так, если \(A\) приобретает \(B\), то статус \(B\) меняется с активного на приобретенный, и его владельцем становится \(A\)).
  3. Когда статус стартапа меняется с активного на приобретенный, все стартапы, которыми он владел, становятся активными.

Например, может произойти следующее. Пусть \(A\) и \(B\) — активные стартапы, \(C\), \(D\), \(E\) — приобретенные с владельцем \(A\), а \(F\), \(G\) — приобретенные с владельцем \(B\):

Активные стартапы показаны красным.

Если \(A\) приобретет \(B\), то будет следующий результат: \(A\), \(F\), \(G\) — активные стартапы, \(C\), \(D\), \(E\), \(B\) — приобретенные с владельцем \(A\), \(F\) и \(G\) не владеют никакими стартапами:

Если же \(B\) приобретет \(A\), то \(B\), \(C\), \(D\), \(E\) будут активными стартапами, \(F\), \(G\), \(A\) будут приобретенными с владельцем \(B\), \(C\), \(D\), \(E\) не будут владеть никаким стартапами:

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

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

Можно показать, что математическое ожидание этого времени можно выразить как рациональное число \(P/Q\), где \(P\) и \(Q\) — взаимно простые целые числа, и \(Q \not= 0 \pmod{10^9+7}\). Выведите число \(P \cdot Q^{-1}\) по модулю \(10^9+7\).

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

Первая строка содержит одно целое число \(n\) (\(2 \leq n \leq 500\)) — количество стартапов.

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(a_i = -1\) или \(1 \leq a_i \leq n\)). Если \(a_i = -1\), то это означает, что стартап \(i\) является активным. В противном случае, если \(1 \leq a_i \leq n\), то стартап \(i\) приобретен, а его владельцем является стартап \(a_i\). Гарантируется, что если \(a_i \not= -1\), то \(a_{a_i} =-1\) (то есть все владельцы являются активными стартапами).

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

Выведите единственное число — математическое ожидание времени, через которое будет существовать только один активный стартап, по модулю \(10^9+7\).

Примечание

В первом примере есть три активных стартапа, пронумерованных \(1\), \(2\) и \(3\), и ни одного приобретенного. Может произойти, например, следующий сценарий:

  1. Стартап \(1\) приобретет стартап \(2\) (состояние описывается массивом \([-1, 1, -1]\)).
  2. Стартап \(3\) приобретет стартап \(1\) (состояние описывается массивом \([3, -1, -1]\))
  3. Стартап \(2\) приобретет стартап \(3\) (состояние описывается массивом \([-1, -1, 2]\)).
  4. Стартап \(2\) приобретет стартап \(1\) (состояние описывается массивом \([2, -1, 2]\)).

После этого останется только один активный стартап. Эта последовательность шагов заняла \(4\) дня. Можно показать, что ожидаемое число дней равно \(3\).

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

В последнем примере не забудьте про модуль \(10^9+7\).

B. Неестественные условия

Конструктив математика *1200

Обозначим через \(s(x)\) сумму цифр в десятичной записи положительного целого числа \(x\). По заданным числа \(n\) и \(m\), найдите какие-нибудь положительные целые числа \(a\) и \(b\) такие, что

  • \(s(a) \ge n\),
  • \(s(b) \ge n\),
  • \(s(a + b) \le m\).
Входные данные

В единственной строке задано два целых числа \(n\) и \(m\) (\(1 \le n, m \le 1129\)).

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

В первой строке выведите десятичную запись числа \(a\). Во второй строке выведите десятичную запись числа \(b\). Оба числа должны быть записаны без лидирующих нулей и иметь длину не более \(2230\).

Примечание

В первом примере \(n = 6\) and \(m = 5\). Одно из возможных решений \(a = 6\), \(b = 7\). В таком случае \(s(a) = 6 \ge n\) и \(s(b) = 7 \ge n\), а \(s(a + b) = s(13) = 4 \le m\).

E. Восстановление массива

Конструктив *2400

Обсуждая подходящую задачу A для раунда на Codeforces, Костя создал циклический массив из целых положительных чисел \(a_1, a_2, \ldots, a_n\). Так как разговор затянулся, Костя создал новый циклический массив \(b_1, b_2, \ldots, b_{n}\) такой, что \(b_i = (a_i \mod a_{i + 1})\), где мы считаем \(a_{n+1} = a_1\). Под \(mod\) имеется ввиду остаток от деления. Когда разговор стал интересным, Костя абсолютно забыл массив \(a\). Вдруг он подумал, что восстановление массива \(a\) из массива \(b\) может быть интересной задачей (к сожалению, не A).

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

В первой строке записано одно целое число \(n\) (\(2 \le n \le 140582\)) — длина массива \(a\).

Во второй строке записано \(n\) целых чисел \(b_1, b_2, \ldots, b_{n}\) (\(0 \le b_i \le 187126\)).

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

Если возможно восстановить некоторый массив \(a\) длины \(n\) такой, что \(b_i = a_i \mod a_{(i \mod n) + 1}\) выполняется для всех \(i = 1, 2, \ldots, n\), выведите «YES» в первой строчке и числа \(a_1, a_2, \ldots, a_n\) во второй строчке. Все \(a_i\) должны быть \(1 \le a_i \le 10^{18}\). Гарантируется, что если ответ существует, также существует ответ с данным ограниением.

Если невозможно восстановить никакой массив \(a\), выведите «NO» в первой строчке.

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

Примечание

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

  • \(1 \mod 3 = 1\)
  • \(3 \mod 5 = 3\)
  • \(5 \mod 2 = 1\)
  • \(2 \mod 1 = 0\)

C. Русская рулетка

жадные алгоритмы Конструктив *1900

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

Саша выбирает k из n слотов по своему желанию и кладёт в них патроны. Рома раскручивает барабан так, что любой из n циклических сдвигов положения барабана равновероятен. Потом начинается игра, играют поочередно, первым делает ход Саша: он приставляет револьвер к виску и делает выстрел. Если напротив курка не было патрона, то барабан сдвигается на одну позицию, а оружие передается Роме для такого же хода. Игра продолжается до тех пор, пока кто-нибудь не застрелится, выживший считается победителем.

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

Более формально барабан на n зарядов, заряженный k патронами, можно представить в виде строки из n символов, ровно k из которых — «X» (заряженные слоты), а остальные — «.» (незаряженные слоты).

Опишем подробнее выстрел из револьвера. Предположим, что курок расположен напротив первого символа строки (первого слота барабана). Если выстрел никого не убивает, и барабан сдвигается на одну позицию, то строка сдвигается влево. То есть первый символ становится последним, второй — первым, и так далее. Курок при этом остается на месте — напротив первого символа получившейся строки.

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

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

В первой строке дано три целых числа n, k и p (1 ≤ n ≤ 1018, 0 ≤ k ≤ n, 1 ≤ p ≤ 1000) — количество слотов в барабане, количество патронов и количество запросов. Далее следует p строк — запросы. Каждая строка содержит одно целое число xi (1 ≤ xi ≤ n) — номер слота, содержимое которого необходимо вывести.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

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

На каждый из запросов выведите «.», если слот должен быть пустым и «X», если слот должен быть заряжен.

Примечание

Лексикографическое сравнение реализует оператор < в современных языках программирования. Строка a лексикографически меньше строки b, если существует такое i (1 ≤ i ≤ n), что ai < bi, а для любого j (1 ≤ j < i) aj = bj.

E. Тройное инвертирование

Конструктив *2600

Дан массив \(a\) длины \(n\), состоящий из нулей и единиц.

Можно несколько раз выполнить следующую операцию, состоящую из двух шагов:

  1. Взять произвольные целые числа \(1 \le x < y < z \le n\), образующие арифметическую прогрессию (\(y - x = z - y\)).
  2. Поменять значения \(a_x, a_y, a_z\) на противоположные (т.е. \(1\) заменить на \(0\), \(0\) заменить на \(1\)).

Определите, возможно ли обнулить все элементы массива. Если возможно, то выведите сами операции, причём их количество не должно превышать \((\lfloor \frac{n}{3} \rfloor + 12)\). Здесь \(\lfloor q \rfloor\) означает число \(q\), округленное вниз. Можно показать, что если можно обнулить все элементы массива, то можно их обнулить и не более чем за такое количество операций.

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

Первая строка содержит одно целое число \(n\) (\(3 \le n \le 10^5\)) — длина массива.

Во второй строке находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 1\)) — элементы массива.

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

В первой строке выведите «YES» (без кавычек), если ответ существует, и «NO» (без кавычек) иначе. Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Если ответ существует, то во второй строке выведите целое число \(m\) (\(0 \le m \le (\lfloor \frac{n}{3} \rfloor + 12)\)) — количество операций в ответе.

Далее в (\(i + 2\))-й строке выведите \(i\)-ю операцию — числа \(x_i, y_i, z_i\). Допустимо выводить эти три числа в произвольном порядке.

Примечание

Изменения массива в первом тесте в авторском решении:

  • 1 1 0 1 1 (начальное состояние)
  • 0 1 1 1 0 (поменялись значения у первого, третьего и пятого элемента)
  • 0 0 0 0 0 (поменялись значения у второго, третьего и четвёртого элемента)

Возможны и другие ответы. В этом тесте количество операций не должно превышать \(\lfloor \frac{5}{3} \rfloor + 12 = 1 + 12 = 13\).

Во втором тесте единственная доступная операция — это поменять значения всех элементов на противоположные. Следовательно, можно получить массивы 0 1 0 и 1 0 1, но нельзя обнулить все элементы.

C. Игра на фортепиано

дп Конструктив *1700

Маленький Пол хочет научиться играть на фортепиано. Он уже нашёл мелодию, которую будет играть. Для простоты он выписал последовательность \(a_1, a_2, \ldots, a_n\) целых чисел, которые означают номер клавиш: чем больше номер, тем правее клавиша на клавиатуре.

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

Обозначим пальцы на руке числами от \(1\) до \(5\). Назовём аппликатурой любую последовательность \(b_1, \ldots, b_n\) номеров пальцев. Назовём аппликатуру удобной, если для любого \(1\leq i \leq n - 1\) выполнено следующее:

  • если \(a_i < a_{i+1}\), то \(b_i < b_{i+1}\), потому что иначе придётся оторвать руку от клавиатуры, чтобы сыграть \((i+1)\)-ю ноту;
  • если \(a_i > a_{i+1}\), то \(b_i > b_{i+1}\) по той же причине;
  • если \(a_i = a_{i+1}\), то \(b_i\neq b_{i+1}\), потому что довольно нелепо использовать один и тот же палец два раза подряд. Обратите внимание, что между \(b_i\) и \(b_{i+1}\) стоит знак \(\neq\), а не \(=\).

Найдите любую удобную аппликатуру или скажите, что таких нет.

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)), обозначающее число нот в мелодии.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 2\cdot10^5\)) — номера этих нот.

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

Если удобных аппликатур к этой мелодии не существует, выведите \(-1\). В противном случае выведите \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) от \(1\) до \(5\), задающих удобную аппликатуру.

Примечание

Третий тест из условия — что-то вроде песни "Нон стоп" группы Рефлекс.

E. Спрятанный двудольный граф

Бинарный поиск графы интерактив Конструктив поиск в глубину и подобное *2800

У Боба есть простой неориентированный связный граф (без кратных ребер и петель). Он хочет узнать, является ли его граф двудольным (то есть вы можете покрасить все вершины графа в два цвета, чтобы не было ребра, соединяющего две вершины одного цвета) или нет. Поскольку он не очень хорошо разбирается в программировании, он попросил Алису о помощи. Он не хочет показывать свой граф Алисе, но он согласился, что Алиса может задавать ему вопросы о графе.

Единственный вопрос, который может задать Алиса, заключается в следующем: она дает Бобу \(s\) — подмножество вершин исходного графа, а он отвечает ей, сколько есть ребер в графе, которые соединяют две вершины в \(s\). Поскольку он не хочет, чтобы Алиса задавала слишком много вопросов, он разрешает ей задать не более \(20000\) вопросов. Кроме того, он подозревает, что Алиса может вводить ложные сообщения в их канал связи, поэтому, когда Алиса наконец сообщит ему, является ли граф двудольным или нет, ей также необходимо предоставить доказательство — или само разделение, или цикл нечетной длины.

Ваша задача — помочь Алисе задавать запросы и проверить, является ли граф двудольным.

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

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 600\)) — количество вершин в графе Боба.

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

Сначала считайте одно целое число \(n\) (\(1\leq n\leq 600\)) — количество вершин в графе Боба.

Чтобы сделать запрос, выведите две строки. Первая в формате «? k» (\(1 \leq k \leq n\)), где \(k\) — количество вершин в запросе. Вторая строка должна содержать \(k\) различных чисел \(s_1, s_2, \dots, s_k\) (\(1 \leq s_i \leq n\)) — вершины в запросе.

После каждого запроса нужно считать одно целое число \(m\) (\(0 \leq m \leq \frac{n(n-1)}{2}\)) — количество ребер, которые соединяют вершины в множестве \(\{s_i\}\).

Вы не можете задать более \(20000\) запросов.

Если \(m = -1\), то это значит, что вы задали больше вопросов, чем можно, или то, что вы вывели некорректный запрос. Ваша программа должна немедленно завершиться (например, вызывая функцию exit(0)). Вы получите вердикт Wrong Answer; это значит, что вы задали слишком много вопросов, или то, что вы задали некорректный запрос. Если вы это проигнорируете, вы можете получить любой другой вердикт, так как вы будете продолжать считывать из закрытого потока.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Когда вы уже знаете ответ, вам нужно его вывести.

Формат вывода зависит от того, является ли граф двудольным, или нет.

Если граф двудольный, выведите две строки. Первая строка должна содержать букву «Y» (которая значит «YES»), после нее должен идти пробел и одно целое число \(s\) (\(0 \leq s \leq n\)) — количество вершин в первой доли графа. Вторая строка должна содержать \(s\) целых чисел \(a_1, a_2, \dots, a_s\) — вершины, принадлежащие первой доли. Все \(a_i\) должны быть различны, и все ребра в главном графе должны иметь только один конец в \(\{a_i\}\).

Если граф не является двудольным, выведите две строки. Первая строка должна содержать букву «N» (которая значит «NO»), после нее должен идти пробел и одно целое число \(l\) (\(3 \leq l \leq n\)) — длина простого цикла нечетной длины. Вторая строка должна содержать \(l\) целых чисел \(c_1, c_2, \dots, c_l\) — вершины цикла. Должно выполнятся условие, что для любого \(1 \leq i \leq l\) должно быть ребро \(\{c_i, c_{(i \mod l)+1}\}\) в главной графе, и все \(c_i\) должны быть различны. Если существует несколько решений, выведите любое из них.

Входные данные для взломов

Для взломов вам нужно использовать специальный формат.

Первая строка содержит два целых числа \(n\) и \(m~(1 \leq n \leq 600, 0 \leq m \leq \frac{n(n-1)}{2})\) — количество вершин и ребер в графе.

Каждая из следующих \(m\) строк содержит два целых числа \(u_i\) и \(v_i~(1 \leq u_i, v_i \leq n)\), которые значат, что существует ребро между вершинами \(u_i\) и \(v_i\). Не должно быть кратных ребер и петель, также граф должен быть связным.

Например, чтобы получить первый пример, нужно ввести такой тест:


4 4
4 1
1 3
3 2
2 4
Примечание

В первом примере Алиса узнает, что в графе есть \(4\) ребра. В следующих трех запросах она узнает, что вершина \(1\) имеет ребра с двумя вершинами: \(3\) и \(4\). Затем она узнает, что, хотя вершина \(2\) имеет ребро с \(4\), вершина \(3\) не имеет ребро с \(4\). Остается только одно возможное местоположение для оставшегося ребра — это \((2, 3)\). Это значит, что граф представляет собой цикл из четырех вершин, причем \((1, 2)\) является первой долей, а \((3, 4)\) второй. Здесь также можно вывести «3 4» как ответ.

Во втором примере мы также имеем граф из четырех вершин и четырех ребер. Во втором запросе Алиса узнает, что между вершинами \((1, 2, 4)\) есть три ребра. Единственный способ, при котором такое может произойти, это тогда, когда они образуют треугольник. Поскольку треугольник не является двудольным, Алиса может использовать это как доказательство того, что граф не является двудольным. Заметьте, что она не узнала, где находится четвертое ребро, но она в любом случае может уже ответить Бобу.

B. Little C любит 3 II

Конструктив Паросочетания Перебор Потоки *2200

Little C очень любит число «3». Он любит все, что с ним связано.

Сейчас он играет в игру на шахматной доске \(n \times m\). Клетку в строке \(x\) и в столбце \(y\) назовем \((x,y)\). Исходно, шахматная доска пуста. Каждый раз он ставит две шахматные фигуры на две различные пустые клетки, Манхэттенское расстояние между которыми равно \(3\). Манхэттенским расстоянием между клетками \((x_i,y_i)\) и \((x_j,y_j)\) назовем \(|x_i-x_j|+|y_i-y_j|\).

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

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

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

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

Выведите единственное целое число — максимально количество шахматных фигур, которое сможет расставить Little C.

Примечание

В первом примере Манхэттенское расстояние между любыми двумя клетками меньше чем \(3\), поэтому ответ \(0\).

Во втором примере, одно из возможных решений это \((1,1)(3,2)\), \((1,2)(3,3)\), \((2,1)(1,3)\), \((3,1)(2,3)\).

A. Пакеты с монетами

жадные алгоритмы Конструктив математика *1300

У вас есть \(n\) монет, каждая из них имеет номинал \(1\).

Распределите их на пакеты таким образом, что любая сумма \(x\) (\(1 \leq x \leq n\)) может быть набрана с использованием некоторого (возможно одного или всех) количества этих пакетов.

Каждый пакет можно использовать только целиком или не использовать вовсе. Ни один пакет нельзя использовать больше одного раза, чтобы набрать одну сумму \(x\), однако тот же самый пакет можно переиспользовать, чтобы набрать другие суммы \(x\).

Найдите минимальное количество в пакетов в таком распределении.

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

Единственная строка входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^9\)) — количество монет, которые у вас есть.

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

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

Примечание

В первом примере, три пакета с \(1\), \(2\) и \(3\) монетами могут быть использованы чтобы набрать любую сумму \(x\) (\(1\leq x\leq 6\)).

  • Чтобы набрать \(1\) можно воспользоваться пакетом с \(1\) монетой.
  • Чтобы набрать \(2\) можно воспользоваться пакетом с \(2\) монетой.
  • Чтобы набрать \(3\) можно воспользоваться пакетом с \(3\) монетой.
  • Чтобы набрать \(4\) можно воспользоваться пакетами с \(1\) и \(3\) монетами.
  • Чтобы набрать \(5\) можно воспользоваться пакетами с \(2\) и \(3\) монетами.
  • Чтобы набрать \(6\) можно воспользоваться всеми пакетами.

Во втором примере, два пакета с \(1\) и \(1\) монетами могут быть использованы чтобы набрать любую сумму \(x\) (\(1\leq x\leq 2\)).

B. Не взаимно простое разбиение

Конструктив математика *1100

Выясните можно ли разбить множество из первых \(n\) положительных целых чисел на два непустых дизъюнктных множества \(S_1\) и \(S_2\), таких что:

\(\mathrm{gcd}(\mathrm{sum}(S_1), \mathrm{sum}(S_2)) > 1\)

Где \(\mathrm{sum}(S)\) обозначает сумму всех элементов множества \(S\), а \(\mathrm{gcd}\) обозначает наибольший общий делитель.

Каждое число от \(1\) до \(n\) должно присутствовать ровно в одном из множеств \(S_1\) и \(S_2\).

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

Единственная строка входных данных содержит единственное целое число \(n\) (\(1 \le n \le 45\,000\)).

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

Если требуемого разделения не существует, выведите «No» (без кавычек).

Иначе, выведите «Yes» (без кавычек), а затем две строки, описывающие множества \(S_1\) и \(S_2\) соответственно.

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

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

Примечание

В первом примере нет ни одного способа разбить одно числа на два непустых множества, поэтому ответ «No».

Во втором примере, сумма по множествам равна \(2\) и \(4\) соответственно. Так как \(\mathrm{gcd}(2, 4) = 2 > 1\), то это является одним из возможных ответов.

A. Расписание автобусов

жадные алгоритмы Конструктив математика Структуры данных *2300

Имеются две остановки автобусов A и B, и известно, что в течение дня \(n\) автобусов совершают поездку от A до B. От остановки A до остановки B самым быстрым образом можно доехать за время \(t\), но можно ехать и дольше, при этом автобусы могут произвольным образом обгонять друг друга в процессе следования по маршруту.

На каждой из остановок можно прочитать упорядоченный список моментов времени, когда на эту остановку приходит автобус, обозначим как \(a_1 < a_2 < \ldots < a_n\) список для остановки A и как \(b_1 < b_2 < \ldots < b_n\) список для остановки B. Автобусы всегда отъезжают от остановки A и всегда прибывают на остановку B вовремя, но порядок прибытия автобусов может отличаться от порядка отправления. Будем называть порядок прибытия корректным, если для каждого автобуса время его прибытия хотя бы на \(t\) позже, чем время отправления.

Известно, что для соблюдения расписания автобус, отправляющийся в момент времени \(a_i\), должен приехать не позже, чем в момент времени \(b_{x_i}\), то есть \(x_i\)-м по счету. Иными словами, для каждого \(i\) существует такой корректный порядок прибытия автобусов, где \(i\)-й отправленный автобус прибывает \(x_i\)-м (а остальные — как угодно), но не существует корректного порядка, где \(i\)-й отправленный автобус прибывает \((x_i + 1)\)-м.

Формально, назовем перестановку \(p_1, p_2, \ldots, p_n\) корректной, если \(b_{p_i} \ge a_i + t\) для всех \(i\). Тогда \(x_i\) — максимальное значение \(p_i\) среди всех корректных перестановок.

Вам известны числа \(a_1, a_2, \ldots, a_n\) и \(x_1, x_2, \ldots, x_n\), но не известны времена прибытия автобусов. Найдите какое-нибудь подходящее расписание \(b_1, b_2, \ldots, b_n\), или определите, что такого расписания не существует.

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

В первой строке записаны два числа \(n\) и \(t\) (\(1 \leq n \leq 200\,000\), \(1 \leq t \leq 10^{18}\)) — количество автобусов в расписании на обеих остановках и минимальное возможное время поездки автобуса от А до B.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_1 < a_2 < \ldots < a_n \leq 10^{18}\)), определяющие времена отправления автобусов от остановки A.

В третьей строке записаны \(n\) чисел \(x_1, x_2, \ldots, x_n\) (\(1 \leq x_i \leq n\)), \(i\)-е из которых означает максимально допустимую позицию в расписании автобусов на остановке B, которую мог занять автобус, отъехавший \(i\)-м от остановки A.

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

Если решение существует, в первой строке выведите слово «Yes» (без кавычек).

Во второй строке выведите \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \leq b_1 < b_2 < \ldots < b_n \leq 3 \cdot 10^{18}\)). Можно показать, что если решение существует, то существует и решение, удовлетворяющее данному ограничению на значения \(b_i\). Если правильных ответов несколько, то разрешается вывести любой из них.

Если подходящего расписания не существует, выведите слово «No» (без кавычек) в единственной строке вывода.

Примечание

Рассмотрим первый пример и расписание \(b_1, b_2, \ldots, b_n\) из примера.

Чтобы получить \(x_1 = 2\) можно взять порядок прибытия автобусов \((2, 1, 3)\). Чтобы получить \(x_2 = 2\) и \(x_3 = 3\) можно выбрать порядок прибытия \((1, 2, 3)\). \(x_1\) не равно \(3\), потому что перестановки \((3, 1, 2)\) и \((3, 2, 1)\) (все возможные, в которых \(1\)-й автобус приезжает \(3\)-м по порядку) некорректны (некоторые автобусы приедут слишком рано), по тем же причинам \(x_2\) не равно \(3\).

E. Восстановление дерева

графы жадные алгоритмы Конструктив Структуры данных *1900

Монокарп нарисовал дерево (неориентированный связный ацикличный граф) и пронумеровал его вершины. Все номера вершин — различные числа от \(1\) до \(n\). Для каждого ребра \(e\) этого дерева он записал два числа: максимальные номера вершин в каждой компоненте, на которые распалось бы дерево, если бы он удалил ребро \(e\) (и только его).

Монокарп дал вам список из \(n - 1\) пар чисел. По этому списку он просит вас определить, существует ли дерево, для которого мог быть записан именно такой список пар, и если оно существует, предоставить пример.

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

В первой строке содержится одно число \(n\) (\(2 \le n \le 1\,000\)) — количество вершин в дереве.

Каждая из следующих \(n-1\) строк содержит два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i < b_i \le n\)) — максимумы в тех компонентах, на которые распадается дерево при удалении \(i\)-го ребра.

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

Если дерево, для которого мог быть получен данный список пар, не существует, выведите «NO» (без кавычек).

Иначе в первой строке выведите «YES» (без кавычек), после чего выведите \(n - 1\) строку с описанием рёбер. В каждой из этих \(n - 1\) строк должны быть записаны два числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\)) — номера вершин, соединяемых очередным ребром.

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

Примечание

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

C. Произведение массива

жадные алгоритмы Конструктив математика *1700

Задан массив \(a\), состоящий из \(n\) целых чисел. С ним могут производиться следующие операции:

  1. Выбрать позиции \(i\) и \(j\) (\(1 \le i, j \le n, i \ne j\)), записать произведение \(a_i \cdot a_j\) в ячейку \(j\) и удалить число из позиции \(i\);
  2. Выбрать позицию \(i\) и удалить число из позиции \(i\) (провести такую операцию можно не более одного раза в любой момент времени, не обязательно в самом начале).

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

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

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

В первой строке входных данных следует одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество элементов в массиве.

Во второй строке входных данных следует \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — элементы массива.

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

Выведите \(n - 1\) строку. В \(k\)-й строке должна содержаться одна из двух описанных операций.

Операция первого типа должна выглядеть следующим образом: \(1~ i_k~ j_k\), где \(1\) — тип операции, \(i_k\) и \(j_k\) — индексы выбранных элементов.

Операция второго типа должна выглядеть следующим образом: \(2~ i_k\), где \(2\) — тип операции, \(i_k\) — индекс выбранного элемента. Обратите внимание, что таких операций должно быть не более одной.

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

Примечание

Будем обозначать за X удаленное число в массиве. Рассмотрим все тестовые примеры:

В первом тестовом примере последовательность преобразований массива может выглядеть как: \([5, -2, 0, 1, -3] \to [5, -2, X, 1, -3] \to [X, -10, X, 1, -3] \to\) \([X, X, X, -10, -3] \to [X, X, X, X, 30]\). Таким образом, максимально возможный ответ равен \(30\). Обратите внимание, что другие последовательности, приводящие к ответу \(30\), также допустимы.

Во втором тестовом примере последовательность преобразований массива может выглядеть как: \([5, 2, 0, 4, 0] \to [5, 2, X, 4, 0] \to [5, 2, X, 4, X] \to [X, 10, X, 4, X] \to\) \([X, X, X, 40, X]\). Также допустима, например, следующая последовательность:


1 5 3
1 4 2
1 2 1
2 3

Тогда последовательность преобразований массива будет выглядеть как: \([5, 2, 0, 4, 0] \to [5, 2, 0, 4, X] \to [5, 8, 0, X, X] \to [40, X, 0, X, X] \to\) \([40, X, X, X, X]\).

В третьем тестовом примере последовательность преобразований массива может выглядеть как: \([2, -1] \to [2, X]\).

В четвертом тестовом примере последовательность преобразований массива может выглядеть как: \([0, -10, 0, 0] \to [X, 0, 0, 0] \to [X, X, 0, 0] \to [X, X, X, 0]\).

В пятом тестовом примере последовательность преобразований массива может выглядеть как: \([0, 0, 0, 0] \to [X, 0, 0, 0] \to [X, X, 0, 0] \to [X, X, X, 0]\).

C. Наименьшее слово

жадные алгоритмы Конструктив реализация *1500

У IA есть невероятно много цветных магнитиков на её холодильнике. На каждом магнитике написана одна буква «a» или «b». Она любит играть с ними, располагая все магнитики в ряд. Однако девочка быстро устаёт и начинает думать, как сделать её развлечение ещё более интересным.

Сегодня, когда IA взглянула на холодильник, она заметила, что слово, образованное магнитиками, выглядит достаточно сомнительно. «Пожалуй, будет гораздо лучше, если я поменяю некоторые из них местами, — думает она, — но как это сделать?». Через некоторое время к ней пришла неплохая идея. IA будет рассматривать все префиксы с длинами от \(1\) до длины всего слова и для каждого префикса будет выбирать, стоит ли его развернуть или оставить как есть. Она будет рассматривать префиксы в фиксированном порядке: начнет с кратчайшего и закончит самым длинным. Она хочет получить в итоге лексикографически минимальное возможное слово. Можете ли вы помочь ей, сказав, какие именно из префиксов следует развернуть?

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\) — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).
Входные данные

Первая и единственная строка содержит строку \(s\) (\(1 \le |s| \le 1000\)), задающую исходную строку, образованную магнитиками. Строка \(s\) состоит только из символов «a» и «b».

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

Выведите ровно \(|s|\) целых чисел. Если IA следует развернуть \(i\)-й префикс (то есть подстроку с индексами от \(1\) до \(i\)), то \(i\)-е число должно быть равно \(1\), иначе оно должно быть равно \(0\).

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

Примечание

В первом примере IA может развернуть второй и третий префикс, получив строку «abbb». Она не может получить ответ лучше, так как это наименьшая строка, которую можно получить перестановкой символов в исходной строке.

Во втором примере, она может перевернуть любое подмножество префиксов — все буквы равны «a».

E. Тренируйcя усердно, выигрывай легко

жадные алгоритмы Конструктив математика сортировки *1900

Зиби является тренером команд по спортивному программированию. Всего есть \(n\) участников, которые хотят хорошо подготовиться к соревнованиям. Тренировочные контесты весьма необычны: в каждой команде есть ровно два человека, две задачи, и каждый участник будет писать ровно одну из них. Разумеется, два человека в одной команде будут писать разные задачи.

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

Мы знаем, что \(i\)-й участник наберёт ровно \(x_i\) очков, если будет писать первую задачу, и ровно \(y_i\), если будет писать вторую. Можно считать, что все участники знают способности друг друга и во время контеста распределят задачи таким образом, чтобы минимизировать их итоговый счёт. Напомним, каждый участник напишет ровно одну задачу за контест.

Зиби хочет, чтобы все участники написали тренировочный контест друг с другом. Однако есть \(m\) пар участников, которые ни за что не хотят писать контест вместе. Тем не менее, тренер собирается провести тренировочный контест для всех возможных пар участников, которые не ненавидят друг друга. Для каждого участника тренеру интересно, какова будет сумма очков команд, в которых он примет участие.

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

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 300\,000\), \(0 \le m \le 300\,000\)) — количество участников и количество пар людей, которые не будут писать контест вместе.

Каждая из следующих \(n\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(-10^9 \le x_i, y_i \le 10^9\)) — очки, которые \(i\)-й участник наберёт на первой задаче и на второй. Гарантируется, что у никаких двух участников не совпадает одновременно и \(x_i\), и \(y_i\).

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

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

Выведите \(n\) целых чисел — суммарное количество очков для всех участников в том порядке, в котором они перечислены во входных данных.

Примечание

В первом примере может быть только одна команда, состоящая из участников \(1\) и \(3\). В данной команде оптимальное стратегией будет отдать первую задачу участнику \(3\), а вторую задачу участнику \(1\), это приведёт к сумме очков равной \(1 + 2 = 3\).

Во втором примере все друг друга ненавидят, а значит не будет ни одной тренировки. Наверное в таком случае Зиби не станет почётным тренером...

E. Древняя цивилизация

геометрия Конструктив *3200

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

  1. между любой парой поселений, относящихся к одной и той же цивилизации, должен быть ровно один путь по построенным дорогам;
  2. никакие два поселения, относящиеся к разным цивилизациям, не должны быть соединены дорогой (первопроходцы не хотят случайно спутать цивилизации, которые изучают);
  3. каждая дорога должна быть отрезком прямой;
  4. так как строить перекрестки слишком дорого, то никакие две дороги не должны пересекаться (то есть общие точки у дорог могут быть только в каком-то из поселений).

Конечно, положения всех поселений различны, но у первопроходцев есть для вас еще одна отличная новость: никакие три поселения не лежат на одной прямой!

Помогите первопроходцами и найдите решение их задачи, либо сообщите, что это невозможно.

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

Первая строка содержит одно целое число \(n\) \((1 \leq n \leq 10^3)\) — количество обнаруженных поселений.

Каждая из следующих \(n\) строк содержит три целых числа \(x, y, c\) \((0 \leq x, y \leq 10^4, c \in \{0, 1\})\) — координаты поселения и номер цивилизации, к которой оно относится.

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

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

В следующих строках выведите все пары поселений (нумерация с \(0\)), которые должны быть соединены дорогами.

Если невозможно построить дороги так, чтобы выполнялись все условия, выведите «Impossible» (без кавычек).

E. Эйлеров обход

Деревья Конструктив *3500

Эйлер — маленький милый бельчонок. Когда приходит осень, он запасается желудями на зиму. Интересный факт, что Эйлер обычно собирает желуди очень специфичным способом. Дерево, с которого он собирает желуди, можно представить как \(n\) желудей, соединенных \(n - 1\) веткой таким образом, что есть ровно один путь между каждой парой желудей. Пронумеруем желуди от \(1\) до \(n\).

Бельчонок выбирает один из желудей (не обязательно с номером \(1\)) как старт, затем обходит все желуди способом, который называется «Эйлеров обход» (см. примечание), собирая каждый из желудей, когда он посещает его в последний раз.

Сегодня утром Кейт наблюдала за Эйлером. Она записала на листочке все желуди, которые посетил Эйлер на своем пути. К сожалению, на пути домой она попала под дождь и часть чисел теперь невозможно прочитать. Девочка очень расстроилась, так как свои наблюдения она должна была показать учителю.

«Может быть, если я угадаю пропавшие числа, я все еще смогу показать это учителю!» — подумала Кейт. Помогите ей, восстановите любой Эйлеров обход некоторого дерева или скажите, что у нее где-то ошибка.

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

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 5 \cdot 10^5\)) — количество желудей в дереве.

Вторая строка содержит \(2n - 1\) целое число \(a_1, a_2, \ldots, a_{2n-1}\) (\(0 \leq a_i \leq n\)) — Эйлеров обход, который выписала Кейт. \(0\) означает число, которое пропало из-за дождя.

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

Если нет никакого Эйлерова обхода, удовлетворяющего описанию, выведите "no" в единственной строке.

Иначе выведите на первой строке "yes", а на второй строке выведите искомый Эйлеров обход.

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

Примечание

Эйлеров обход дерева с \(n\) желудями — последовательность из \(2n - 1\) индекса желудей такая, что каждый желудь встречается хотя бы один раз, первый и последний желуди совпадают, и каждые два соседних в обходе желудя соединены веткой.

E. Эйлеров обход

Деревья Конструктив *3500

Эйлер — маленький милый бельчонок. Когда приходит осень, он запасается желудями на зиму. Интересный факт, что Эйлер обычно собирает желуди очень специфичным способом. Дерево, с которого он собирает желуди, можно представить как \(n\) желудей, соединенных \(n - 1\) веткой таким образом, что есть ровно один путь между каждой парой желудей. Пронумеруем желуди от \(1\) до \(n\).

Бельчонок выбирает один из желудей (не обязательно с номером \(1\)) как старт, затем обходит все желуди способом, который называется «Эйлеров обход» (см. примечание), собирая каждый из желудей, когда он посещает его в последний раз.

Сегодня утром Кейт наблюдала за Эйлером. Она записала на листочке все желуди, которые посетил Эйлер на своем пути. К сожалению, на пути домой она попала под дождь и часть чисел теперь невозможно прочитать. Девочка очень расстроилась, так как свои наблюдения она должна была показать учителю.

«Может быть, если я угадаю пропавшие числа, я все еще смогу показать это учителю!» — подумала Кейт. Помогите ей, восстановите любой Эйлеров обход некоторого дерева или скажите, что у нее где-то ошибка.

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

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 5 \cdot 10^5\)) — количество желудей в дереве.

Вторая строка содержит \(2n - 1\) целое число \(a_1, a_2, \ldots, a_{2n-1}\) (\(0 \leq a_i \leq n\)) — Эйлеров обход, который выписала Кейт. \(0\) означает число, которое пропало из-за дождя.

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

Если нет никакого Эйлерова обхода, удовлетворяющего описанию, выведите "no" в единственной строке.

Иначе выведите на первой строке "yes", а на второй строке выведите искомый Эйлеров обход.

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

Примечание

Эйлеров обход дерева с \(n\) желудями — последовательность из \(2n - 1\) индекса желудей такая, что каждый желудь встречается хотя бы один раз, первый и последний желуди совпадают, и каждые два соседних в обходе желудя соединены веткой.

C. Раздача конфет

Конструктив реализация *1500

В детском саду в группе \(n\) детей, пронумерованных от \(1\) до \(n\). Воспитательница дала \(i\)-му ребенку \(a_i\) (\(1 \leq a_i \leq n\)) конфет. Дети сели в ряд в порядке от \(1\) до \(n\) слева направо и стали есть конфеты.

Во время поедания конфет \(i\)-й ребенок заметил, что нескольким детям, сидящим левее него, и нескольким детям, сидящим правее него, дали больше конфет, чем ему самому. Поэтому каждый ребенок посчитал по два числа \(l_i\) и \(r_i\) — количество детей слева от него, которым дали больше конфет, чем ему, и количество детей справа от него, которым дали больше конфет, чем ему.

Формально, \(l_i\) есть количество индексов \(j\) (\(1 \leq j < i\)), таких что \(a_i < a_j\), а \(r_i\) есть количество индексов \(j\) (\(i < j \leq n\)), таких что \(a_i < a_j\).

Каждый ребенок сказал воспитательнице посчитанные им числа \(l_i\) и \(r_i\). К сожалению, она уже забыла, сколько конфет кому она дала. Поэтому она просит помощи у вас — по массивам \(l\) и \(r\) определите, могла ли она дать детям конфеты так, что дети правильно посчитали свои значения \(l_i\) и \(r_i\), или кто-то из ребят точно ошибся, и она не могла так раздать конфеты. Если она могла раздать конфеты, то определите любой возможный способ того, как она могла это сделать.

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

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

Во второй строке находится \(n\) целых чисел \(l_1, l_2, \ldots, l_n\) (\(0 \leq l_i \leq n\)), разделенных пробелами.

Во третьей строке находится \(n\) целых чисел \(r_1, r_2, \ldots, r_n\) (\(0 \leq r_i \leq n\)), разделенных пробелами.

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

Если воспитательница не могла так раздать конфеты, и кто-то из детей точно ошибся в своих расчетах, то в единственной строке выведите «NO» (без кавычек).

Иначе в первой строке выведите «YES» (без кавычек), а во второй строке выведите \(n\) целых чисел \(a_1, a_2, \ldots, a_n\), разделённых пробелами — количества конфет, которые можно было выдать детям с номерами \(1, 2, \ldots, n\), соответственно. Обратите внимание, что эти числа не обязаны быть различными, но для них должно выполняться ограничение \(1 \leq a_i \leq n\). Также, должно быть выполнено, что количество детей левее \(i\)-го, которым дали больше конфет, чем ему, было равно \(l_i\), а количество детей правее \(i\)-го, которым дали больше конфет, чем ему, было равно \(r_i\). Если существует несколько способов раздать конфеты, найдите любой из них.

Примечание

В первом примере, если раздать по \(1\), \(3\), \(1\), \(2\), \(1\) конфет \(1\), \(2\), \(3\), \(4\), \(5\) ребенку соответственно, то все значения, посчитанные детьми, совпадут со значениями из входных данных. Например, \(5\)-му ребенку дали \(1\) конфету, левее него \(2\) детям дали по \(1\) конфете, \(1\) ребёнку \(2\) конфеты и \(1\) ребенку \(3\) конфеты, то есть всего \(2\) детям левее него дали больше конфет, чем ему.

Во втором примере раздать конфеты невозможно, так как \(4\)-й ребёнок точно ошибся в подсчете значения \(r_4\), ведь правее него нет детей, поэтому \(r_4\) точно должно быть равно \(0\).

В третьем примере все дети могли получить поровну конфет, поэтому все числа равны \(0\). Обратите внимание, что каждый ребенок должен получить хотя бы одну конфету.

E. Головоломка из фишек

Конструктив математика реализация *2400

Егор придумал новую головоломку из фишек, в которую предлагает сыграть вам.

Головоломка имеет вид таблицы из \(n\) строк и \(m\) столбцов, в каждой клетке которой могут располагаться несколько черных и белых фишек, положенных в ряд. Таким образом, состояние в клетке можно описать строкой, состоящей из символов «0» (белая фишка) и «1» (черная фишка), возможно пустой, а вся головоломка — это таблица, в каждой клетке которой стоит строка из нулей и единиц. Задача состоит в том, чтобы из одного состояния таблицы получить другое.

Для этого можно использовать следующую операцию:

  • выбрать две различные клетки \((x_1, y_1)\) и \((x_2, y_2)\), при этом клетки должны находиться в одной строке или одном столбце таблицы, и строка в клетке \((x_1, y_1)\) должна быть непустой;
  • за операцию можно переместить последний символ строки в клетке \((x_1, y_1)\) в начало строки в клетке \((x_2, y_2)\).

Для вас Егор загадал 2 состояния таблицы — начальное и конечное. Гарантируется, что количества нулей и единиц в таблицах совпадают. Ваша задача — с помощью нескольких операций получить из начального состояния конечное. Конечно, Егор не хочет, чтобы количество операций было очень большим. Обозначим за \(s\) количество символов в каждой из таблиц (в таблицах поровну символов). Тогда вы должны использовать не более \(4 \cdot s\) операций.

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

В первой строке записаны два целых числа \(n\) и \(m\) (\(2 \leq n, m \leq 300\)) — количества строк и столбцов у таблиц в головоломке, соответственно.

В следующих \(n\) строках находится описание начального состояния таблицы в следующем формате: в каждой строке находится \(m\) непустых строк, состоящих из нулей и единиц. В \(i\)-й из этих строк, \(j\)-я строка описывает строку, записанную в клетке \((i, j)\). Строки нумеруются от \(1\) до \(n\), столбцы нумеруются от \(1\) до \(m\).

В следующих \(n\) строках находится описание конечного состояния таблицы в аналогичном формате.

Обозначим суммарную длину строк в начальном состоянии за \(s\). Гарантируется, что \(s \leq 100\, 000\). Также гарантируется, что количества нулей и единиц совпадают в начальном и конечном состояниях.

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

В первой строке выведите одно целое число \(q\) — количество использованных операций. Необходимо найти решение, для которого \(0 \leq q \leq 4 \cdot s\).

В следующих \(q\) строках выведите по 4 целых числа \(x_1\), \(y_1\), \(x_2\), \(y_2\). \(i\)-я из этих строк должна описывать \(i\)-ю операцию. Необходимо, чтобы было выполнено \(1 \leq x_1, x_2 \leq n\), \(1 \leq y_1, y_2 \leq m\), \((x_1, y_1) \neq (x_2, y_2)\), \(x_1 = x_2\) или \(y_1 = y_2\). При этом строка в клетке \((x_1, y_1)\) должна быть непустой. Данная последовательность операций должна переводить таблицу из начального состояния в конечное.

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

Примечание

Рассмотрим первый пример.

  • Текущее состояние таблицы:

    00 10
    01 11

    Первая операция. В клетке \((2, 1)\) записана строка \(01\). Применяя операцию к двум клеткам \((2, 1)\) и \((1, 1)\), мы переносим \(1\) из конца строки \(01\) в начало строки \(00\), получая строку \(100\).

  • Текущее состояние таблицы:

    100 10
    0 11

    Вторая операция. В клетке \((1, 1)\) записана строка \(100\). Применяя операцию к двум клеткам \((1, 1)\) и \((1, 2)\), мы переносим \(0\) из конца строки \(100\) в начало строки \(10\), получая строку \(010\).

  • Текущее состояние таблицы:

    10 010
    0 11

    Третья операция. В клетке \((1, 2)\) записана строка \(010\). Применяя операцию к двум клеткам \((1, 2)\) и \((2, 2)\), мы переносим \(0\) из конца строки \(010\) в начало строки \(11\), получая строку \(011\).

  • Текущее состояние таблицы:

    10 01
    0 011

    Четвертая операция. В клетке \((2, 2)\) записана строка \(011\). Применяя операцию к двум клеткам \((2, 2)\) и \((2, 1)\), мы переносим \(1\) из конца строки \(011\) в начало строки \(0\), получая строку \(10\).

  • Текущее состояние таблицы:

    10 01
    10 01

Можно видеть, что мы получили требуемое состояние таблицы.

G. Новая дорожная система

жадные алгоритмы Конструктив математика *3300

Король некоторой страны \(N\) решил полностью перестроить дорожную систему. В стране проживает \(n\) человек, пронумерованных от \(1\) до \(n\). Можно проводить двустороннюю дорогу от домика жителя этой страны с номером \(a\) к домику другого жителя этой страны с номером \(b\). Между каждой парой жителей не может быть построено больше одной дороги. Конечно система дорог должна быть связной, то есть от любого домика можно дойти до другого передвигаясь по дорогам. Для экономии средств было решено построить \(n-1\) дорогу, то есть, система дорог должна образовывать дерево.

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

Помогите королю определить, возможно ли построить такую дорожную систему или нет, и если возможно, постройте её.

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

Каждый тест содержит один или несколько тестовых случаев.

На первой строке входного файла находится единственное число \(t\) (\(1 \leq t \leq 2000\)) — количество тестовых случаев.

В следующих строках следуют описания этих тестовых случаев в следующем формате.

На первой строке находятся два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 2000\)) — количество жителей в стране и количество тайных обществ.

В следующих \(m\) строках находится описание тайных обществ. В \(i\)-й из этих строк находится строка \(s_i\) длины \(n\), состоящая из символов «0» и «1». Житель с номером \(j\) принадлежит \(i\)-му тайному обществу тогда и только тогда, когда \(s_{{i}{j}}=1\). Гарантируется, что в строке \(s_i\) есть хотя бы один символ «1» для любого \(1 \leq i \leq m\).

Гарантируется, что сумма всех \(n\) для всех тестовых случаев не превосходит \(2000\) и сумма всех \(m\) для всех тестовых случаев не превосходит \(2000\).

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

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

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

В противном случае в первой строке выведите «YES» (без кавычек).

В следующих \(n-1\) строках выведите описание дорожной системы: в каждой строке должно находиться по два целых числа \(a\), \(b\), которые будут означать, что нужно провести дорогу между домиками жителей \(a\) и \(b\) (\(1 \leq a, b \leq n\), \(a \neq b\)).

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

Примечание

В первом тестовом случае можно построить такую дорожную систему:

Легко убедиться, что для каждого тайного общества все домики его жителей образуют связное поддерево. Например, во \(2\)-м тайном обществе состоят жители с номерами \(1\), \(2\), \(3\). Они образуют связное поддерево, так как если оставить только домики \(1\), \(2\), \(3\) и дороги между ними, то останутся две дороги: между \(1\) и \(3\) и между \(2\) и \(3\), то есть связный граф.

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

D. Укрась яблоню

графы Деревья дп жадные алгоритмы Конструктив поиск в глубину и подобное сортировки *1600

В саду Аркадия растет одна яблоня. Ее можно представить как множество точек развилок, соединенных ветками так, что между любыми двумя развилками существует ровно один путь по веткам. Развилки пронумерованы от \(1\) до \(n\), развилка номер \(1\) называется корнем.

Поддеревом развилки \(v\) называется множество развилок \(u\) таких, что путь из \(u\) в корень проходит через \(v\). Обратите внимание, сама вершина \(v\) тоже входит в поддерево \(v\).

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

Скоро Новый год, поэтому Аркадий решил украсить яблоню. Он повесит по лампочке некоторого цвета на каждый лист и затем посчитает число счастливых развилок. Счастливой развилкой называется такая развилка \(t\), что все лампочки в поддереве \(t\) имеют различные цвета.

Аркадий заинтересован в следующем вопросе: для каждого \(k\) от \(1\) до \(n\), какое минимальное число различных цветов лампочек необходимо, чтобы число счастливых развилок было не меньше \(k\)?

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество развилок в дереве.

Вторая строка содержит \(n - 1\) целое число \(p_2\), \(p_3\), ..., \(p_n\) (\(1 \le p_i < i\)), где \(p_i\) означает, что есть ветка между развилками \(i\) и \(p_i\). Гарантируется, что данное множество веток задает дерево.

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

Выведите \(n\) целых чисел. \(i\)-е из них должно быть равно минимальному количеству цветов, необходимых для того, чтобы число счастливых развилок было не меньше \(i\).

Примечание

В первом примере для \(k = 1\) и \(k = 2\) можно все лампочки сделать одного цвета: счастливыми будут развилки \(2\) и \(3\). Для \(k = 3\) нужно повесить лампочки разных цветов, тогда все развилки будут счастливыми.

Во втором примере для \(k = 4\) можно, например, повесить лампочки цвета \(1\) в развилки \(2\) и \(4\), а лампочку цвета \(2\) в развилку \(5\). Тогда счастливыми будут развилки \(2\), \(3\), \(4\) и \(5\).

C. Преобразование последовательности

Конструктив математика *1600

Назовем преобразованием последовательности из \(n\) элементов следующий процесс:

Если последовательность пуста, то процесс завершается. Иначе допишем к ответу наибольший общий делитель (НОД) всех элементов последовательности, удалим один любой элемент последовательности и продолжим процесс. В результате на бумаге получится последовательность из \(n\) чисел — наибольшие общие делители всех чисел последовательности перед каждым удалением.

Изначально дана последовательность целых чисел \(1, 2, \dots, n\). Найдите лексикографически максимальный результат преобразования этой последовательности.

Последовательность \(a_1, a_2, \ldots, a_n\) лексикографически больше последовательности \(b_1, b_2, \ldots, b_n\), если существует такой индекс \(i\), что \(a_j = b_j\) для всех \(j < i\), и при этом \(a_i > b_i\).

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

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

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

Выведите \(n\) целых чисел — лексикографически максимальный результат преобразования.

Примечание

В первом примере результат достигается так:

  • Запишем НОД\((1, 2, 3) = 1\) и удалим \(2\).
  • Запишем НОД\((1, 3) = 1\) и удалим \(1\).
  • Запишем НОД\((3) = 3\) и удалим \(3\).

В результате преобразования будет написана последовательность \([1, 1, 3]\).

H. Загадочный вычислитель

Конструктив *3300

Вам даны два натуральных числа \(d\) и \(p\), \(p\) простое.

Кроме того у вас есть загадчный вычислитель. Вычислитель содержит ячейки памяти, каждая ячейка содержит число от \(0\) до \(p-1\). Поддерживаются две инструкции, сложение и возведение в степень \(d\). Обе операции производятся \(\textbf{по модулю}\) \(p\).

Ячейки памяти пронумерованы числами \(1, 2, \dots, 5000\). Изначально ячейки \(1\) и \(2\) содержат числа \(x\) и \(y\) соответственно (\(0 \leqslant x, y \leq p - 1\)). Все остальные ячейки заполнены единицами.

Вы не имеете доступа к числам напрямую, и Вам \(\textbf{неизвестны}\) точные значения \(x\) и \(y\). Ваша задача — написать программу с использованием доступных инструкций, вычисляющую произведение \(xy\) по модулю \(p\) в какой-нибудь ячейке. Программа должна работать для всех возможных \(x\) и \(y\).

Инструкция сложения вычисляет сумму значений в двух ячейках и записывает в третью. Эта инструкция кодируется строкой "+ e1 e2 to", что означает запись суммы значений в ячейках e1 и e2 в ячейку to. Любые из номеров e1, e2, to могут совпадать.

Вторая инструкция вычисляет значение \(d\)-й степени числа в ячейке, и записывает это значение в другую ячейку. Эта инструкция кодируется строкой "^ e to". Значения e и to могут совпадать, в этом случае значение в ячейке будет перезаписано.

Последняя инструкция — это специальная инструкция возврата. Она кодируется строкой "f target". Это означает, что результат \(xy \bmod p\) получен в ячейке target. Эта инструкция должна быть последней.

Найдите последовательность инструкций, получающую \(xy \bmod p\) и использующую не более \(5000\) инструкций (считая инструкцию возврата).

Гарантируется, что при данных ограничениях решение существует.

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

Единственная строка содержит числа \(d\) и \(p\), разделенные пробелом. (\(2 \leqslant d \leqslant 10\), \(d < p\), \(3 \leqslant p \leqslant 10^9 + 9\), \(p\) простое).

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

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

Примечание

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

\(\texttt{+ 1 1 3}\\ \texttt{^ 3 3}\\ \texttt{+ 3 2 2}\\ \texttt{+ 3 2 3}\\ \texttt{^ 3 1}\\ \texttt{f 1}\)

Ниже приведено пошаговое описание работы программы:

\(\begin{array}{|c|c|c|c|} \hline \texttt{} & \text{ячейка 1} & \text{ячейка 2} & \text{ячейка 3} \\

\hline \text{исходно} & x & y & 1 \\ \hline \texttt{+ 1 1 3} & x & y & 2x \\ \hline

\texttt{^ 3 3} & x & y & (2x)^d \\ \hline

\texttt{+ 3 2 2} & x & y + (2x)^d & (2x)^d \\ \hline

\texttt{+ 3 2 3} & x & y + (2x)^d & y + 2\cdot(2x)^d \\ \hline

\texttt{^ 3 1} & (y + 2\cdot(2x)^d)^d & y + (2x)^d & y + 2\cdot(2x)^d \\ \hline

\end{array}\)

Пусть \(d = 2\) and \(p = 3\). Поскольку при \(x = 0\) и \(y = 1\) возвращаемый результат равен \(1 \neq 0 \cdot 1 \bmod 3\), программа была оценена как неверная.

A. Ох уж эти палиндромы

Конструктив Строки *1300

Назовём палиндромом непустую строку, которая читается одинаково справа налево и слева направо. Например, «abcba», «a» и «abba» являются палиндромами, а «abab» и «xy» не являются.

Назовём подстрокой строки строку, полученную отбрасыванием некоторого (возможно, нулевого) количества символов с начала и с конца строки. Например, «abc», «ab» и «c» являются подстроками строки «abc», а «ac» и «d» не являются.

Назовем палиндромностью строки количество её подстрок, которые являются палиндромами. Например, палиндромность строки «aaa» равна \(6\), так как все её подстроки являются палиндромами, а палиндромность строки «abc» равна \(3\), так как только подстроки длины \(1\) являются палиндромами.

Вам дана строка \(s\). Вы можете произвольным образом переставлять символы в ней. Требуется получить строку, имеющую максимальную палиндромность.

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

В первой строке задано целое число \(n\) (\(1 \le n \le 100\,000\)) — длина строки \(s\).

Во второй строке задана строка \(s\), состоящая из \(n\) строчных букв латинского алфавита.

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

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

Если подходящих строк несколько, выведите любую.

Примечание

В первом примере у строки «ololo» есть \(9\) подстрок-палиндромов: «o», «l», «o», «l», «o», «olo», «lol», «olo», «ololo». Обратите внимание, что некоторые подстроки совпадают, но учитываются несколько раз.

Во втором примере палиндромность строки «abccbaghghghgdfd» равна \(29\).

C. Гномы, шляпы и экстрасенсорные способности

Бинарный поиск геометрия интерактив Конструктив *1900

Это интерактивная задача.

В былые времена гномы пытались развить у себя экстрасенсорные способности:

  • В абсолютно тёмную пещеру заводили n гномов.
  • На каждого гнома надевали шляпу — белую или чёрную. Гномы в пещере не видели цветов своих шляп и шляп других гномов.
  • Гномы по очереди выходили из пещеры на поляну и садились на произвольное места. При этом, выходя из пещеры, каждый гном видел цвета шляп всех гномов, вышедших ранее. Тем не менее, он не видит цвет собственной шляпы и никто из других гномов ему этот цвет не сообщает.
  • Задача состояла в том, чтобы все гномы разошлись в две стороны — в одну те, кто носят белые шляпы и в другую — чёрные.

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

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

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

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

В первой строке стандартного потока ввода дано целое число n (1 ≤ n ≤ 30) — количество точек, которое должна назвать ваша программа.

Затем n раз ваша программа должна вывести по два целых числа x и y (0 ≤ x ≤ 109, 0 ≤ y ≤ 109) — координаты очередной точки. Все выведенные вами точки должны быть различными.

В ответ на каждую пару координат ваша программа получит на вход строку «black», если точка имеет чёрный цвет, или «white», если точка имеет белый цвет.

После того, как все n точек будут обработаны, вы должны вывести четыре целых числа x1, y1, x2 и y2 (0 ≤ x1, y1 ≤ 109, 0 ≤ x2, y2 ≤ 109) — координаты точек (x1, y1) и (x2, y2), через которые проходит прямая, разделяющая n точек на белые и чёрные. Точки (x1, y1) и (x2, y2) не должны совпадать.

Взломы

Чтобы взломать решение используйте следующий формат. Первая строка теста должна содержать слово «hack», во второй строке выведите целое число n, на третьей строке выведите последовательность из 0 и 1 — цвета точек, которые будут сообщены взламываемому решению. В отличии от тестов жюри, цвета точек во взломах заранее зафиксированы. Разумеется, взламываемое решение не будет заранее знать цвета в взломе.

Например, взлом соответствующий первому тесту из условия выглядит так:


hack
5
0 0 1 1 0
Примечание

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

Иллюстрация к первому примеру.

E. Лазеры и зеркала

Конструктив математика *3000

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

Олег по натуре очень любопытен, поэтому он решил установить на южной стороне лабиринта \(n\) лазеров, направленных внутрь лабиринта. На северной стороне лабиринта Олег установил \(n\) приёмников, тоже направленных внутрь лабиринта. Пронумеруем лазеры и приёмники с запада на восток от \(1\) до \(n\). Для каждого лазера известен номер приёмника, в который он должен попасть. Так как в один приёмник не могут попасть одновременно два лазера, то эти номера образуют перестановку — каждый из номеров приёмников встречается ровно один раз.

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

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 1000\)) — размеры лабиринта.

Во второй строке дана перестановка из \(n\) целых чисел \(a_i\) (\(1 \le a_i \le n\)), где \(a_i\) задаёт номер приёмника, в который должен попасть \(i\)-й лазер.

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

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

В следующих \(n\) строчках длины \(n\) выведите расстановку зеркал, приводящую к такому количеству попавших лазеров. Если соответствующая клетка пуста, то выведите «.», иначе выведите «/» или «\», в зависимости от ориентации зеркала.

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

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

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

Примечание

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

B. Вася и изолированные вершины

графы Конструктив *1300

У Васи есть неориентированный граф из \(n\) вершин и \(m\) ребер без петель и кратных ребер. Петлей считается ребро, соединяющее вершину саму с собой. Кратными ребрами считается пара ребер, соединяющее одинаковые пары вершин. Так как в данной задаче граф является неориентированным, ребра \((1, 2)\) и \((2, 1)\) считаются кратными ребрами. Изолированной вершиной в графе считается вершина, которой не инцидентно ни одно ребро.

Вася хочет знать минимальное и максимальное количества изолированных вершин, которые могут быть в графе из \(n\) вершин и \(m\) ребер.

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

Единственная строка содержит два числа \(n\) и \(m~(1 \le n \le 10^5, 0 \le m \le \frac{n (n - 1)}{2})\).

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

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

В единственной строке выведите два числа \(min\) и \(max\) — минимальное и максимальное количество изолированных вершин соответственно.

Примечание

В первом тестовом примере \(0\) изолированных вершин будет в графе, состоящим из ребер \((1, 2)\) и \((3, 4)\). Одна изолированная вершина будет в графе, состоящим из ребер \((1, 2)\) и \((1, 3)\).

Во втором тестовом примере в любом случае будет одна изолированная вершина.

C. Кони

Конструктив *2600

Ваня расставляет коней на бесконечной шахматной доске. Изначально на доске стоят \(n\) коней. Если пустую клетку бьют хотя бы \(4\) уже поставленных коня, то на неё ставится новый конь. Ваня повторяет эту операцию, пока есть такая пустая клетка. Несложно показать, что процесс конечен. Также несложно показать, что конечная расстановка коней на доске не зависит от порядка, в котором на доску выставляются новые кони.

Ваня попросил вас найти начальную расстановку из \(n\) коней на доске такую, чтобы в конце процесса на доске оказалось не менее \(\lfloor \frac{n^{2}}{10} \rfloor\) коней.

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

Первая и единственная строка содержит одно число \(n\) (\(1 \le n \le 10^{3}\)) — количество коней в изначальной расстановке.

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

Выведите \(n\) строк, в каждой строке выведите \(2\) числа \(x_{i}\) и \(y_{i}\) (\(-10^{9} \le x_{i}, \,\, y_{i} \le 10^{9}\)) — координаты \(i\)-го коня. Для всех \(i \ne j\) должно быть верно, что \((x_{i}, \,\, y_{i}) \ne (x_{j}, \,\, y_{j})\). То есть все кони должны стоять на различных клетках.

Гарантируется, что решение существует.

Примечание

Посмотрим на второй пример:

Зелёные нули — это изначальные кони. Клетка \((3, \,\, 3)\) находится под ударом \(4\) коней на клетках \((1, \,\, 2)\), \((2, \,\, 1)\), \((4, \,\, 1)\) и \((5, \,\, 2)\), поэтому Ваня поставит нового коня в эту клетку. Клетка \((4, \,\, 5)\) изначально находится под атакой лишь \(3\) коней на клетках \((2, \,\, 6)\), \((5, \,\, 7)\) и \((6, \,\, 6)\). Однако новый конь в клетке \((3, \,\, 3)\) тоже атакует клетку \((4, \,\, 5)\), теперь эта клетка находится под атакой \(4\) коней, и Ваня поставит нового коня в эту клетку. Больше не осталось свободных клеток, которые находятся под атакой \(4\) или более коней, поэтому процесс останавливается. В конце процесса на доске оказалось \(9\) коней, что не меньше \(\lfloor \frac{7^{2}}{10} \rfloor = 4\).

C. Разноцветные ладьи

графы Конструктив *1700

Ваня — начинающий художник. У него есть \(n\) красок разных цветов. Он знает ровно \(m\) пар цветов, которые сочетаются между собой.

Также Ваня любит играть в шахматы. У Вани есть \(5000\) ладей. Он хочет взять \(k\) ладей, раскрасить каждую из них в один из \(n\) цветов, а затем расставить эти \(k\) ладей на шахматной доске размера \(10^{9} \times 10^{9}\).

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

Ваня хочет, чтобы для его расстановки выполнялись следующие свойства:

  • Для каждого цвета на доске есть хотя бы одна ладья этого цвета;
  • Для каждого цвета множество ладей этого цвета связно;
  • Для любых двух разных цветов \(a\) \(b\) объединение множества ладей цвета \(a\) и множества ладей цвета \(b\) связно в том и только в том случае, если эти два цвета сочетаются между собой.

Помогите Ване найти такую расстановку ладей на доске.

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

В первой строке записаны \(2\) целых числа \(n\), \(m\) (\(1 \le n \le 100\), \(0 \le m \le min(1000, \,\, \frac{n(n-1)}{2})\)) — количество цветов и количество пар сочетающихся цветов.

В следующих \(m\) строках заданы пары сочетающихся цветов. Цвета пронумерованы от \(1\) до \(n\). Гарантируется, что каждая пара встречается в списке не более одного раза.

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

Выведите \(n\) блоков, \(i\)-й блок описывает ладьи \(i\)-го цвета.

В первой строке описания выведите одно число \(a_{i}\) (\(1 \le a_{i} \le 5000\)) — количество ладей цвета \(i\). В последующих \(a_{i}\) строках выведите по два числа \(x\) и \(y\) (\(1 \le x, \,\, y \le 10^{9}\)) — координаты очередной ладьи.

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

Общее количество ладей не должно превышать \(5000\).

Гарантируется, что при заданных ограничениях решение всегда существует.

Примечание

Расстановки ладей для всех трех примеров (красный — это цвет \(1\), зелёный — цвет \(2\), синий — цвет \(3\)).

L. Odd Federalization

Конструктив *2600

Berland has \(n\) cities, some of which are connected by roads. Each road is bidirectional, connects two distinct cities and for each two cities there's at most one road connecting them.

The president of Berland decided to split country into \(r\) states in such a way that each city will belong to exactly one of these \(r\) states.

After this split each road will connect either cities of the same state or cities of the different states. Let's call roads that connect two cities of the same state "inner" roads.

The president doesn't like odd people, odd cities and odd numbers, so he wants this split to be done in such a way that each city would have even number of "inner" roads connected to it.

Please help president to find smallest possible \(r\) for which such a split exists.

Input

The input contains one or several test cases. The first input line contains a single integer number \(t\) — number of test cases. Then, \(t\) test cases follow. Solve test cases separately, test cases are completely independent and do not affect each other.

Then \(t\) blocks of input data follow. Each block starts from empty line which separates it from the remaining input data. The second line of each block contains two space-separated integers \(n\), \(m\) (\(1 \le n \le 2000\), \(0 \le m \le 10000\)) — the number of cities and number of roads in the Berland. Each of the next \(m\) lines contains two space-separated integers — \(x_i\), \(y_i\) (\(1 \le x_i, y_i \le n\); \(x_i \ne y_i\)), which denotes that the \(i\)-th road connects cities \(x_i\) and \(y_i\). Each pair of cities are connected by at most one road.

Sum of values \(n\) across all test cases doesn't exceed \(2000\). Sum of values \(m\) across all test cases doesn't exceed \(10000\).

Output

For each test case first print a line containing a single integer \(r\) — smallest possible number of states for which required split is possible. In the next line print \(n\) space-separated integers in range from \(1\) to \(r\), inclusive, where the \(j\)-th number denotes number of state for the \(j\)-th city. If there are multiple solutions, print any.

M. Algoland and Berland

геометрия Конструктив разделяй и властвуй *3000

Once upon a time Algoland and Berland were a single country, but those times are long gone. Now they are two different countries, but their cities are scattered on a common territory.

All cities are represented as points on the Cartesian plane. Algoland consists of \(a\) cities numbered from \(1\) to \(a\). The coordinates of the \(i\)-th Algoland city are a pair of integer numbers \((xa_i, ya_i)\). Similarly, Berland consists of \(b\) cities numbered from \(1\) to \(b\). The coordinates of the \(j\)-th Berland city are a pair of integer numbers \((xb_j, yb_j)\). No three of the \(a+b\) mentioned cities lie on a single straight line.

As the first step to unite the countries, Berland decided to build several bidirectional freeways. Each freeway is going to be a line segment that starts in a Berland city and ends in an Algoland city. Freeways can't intersect with each other at any point except freeway's start or end. Moreover, the freeways have to connect all \(a+b\) cities. Here, connectivity means that one can get from any of the specified \(a+b\) cities to any other of the \(a+b\) cities using freeways. Note that all freeways are bidirectional, which means that one can drive on each of them in both directions.

Mayor of each of the \(b\) Berland cities allocated a budget to build the freeways that start from this city. Thus, you are given the numbers \(r_1, r_2, \dots, r_b\), where \(r_j\) is the number of freeways that are going to start in the \(j\)-th Berland city. The total allocated budget is very tight and only covers building the minimal necessary set of freeways. In other words, \(r_1+r_2+\dots+r_b=a+b-1\).

Help Berland to build the freeways so that:

  • each freeway is a line segment connecting a Berland city and an Algoland city,
  • no freeways intersect with each other except for the freeway's start or end,
  • freeways connect all \(a+b\) cities (all freeways are bidirectional),
  • there are \(r_j\) freeways that start from the \(j\)-th Berland city.
Input

Input contains one or several test cases. The first input line contains a single integer number \(t\) (\(1 \le t \le 3000\)) — number of test cases. Then, \(t\) test cases follow. Solve test cases separately, test cases are completely independent and do not affect each other.

Each test case starts with a line containing space-separated integers \(a\) and \(b\) (\(1 \le a, b \le 3000\)) — numbers of Algoland cities and number of Berland cities correspondingly.

The next line contains \(b\) space-separated integers \(r_1, r_2, \dots, r_b\) (\(1 \le r_b \le a\)) where \(r_j\) is the number of freeways, that should start in the \(j\)-th Berland city. It is guaranteed that \(r_1+r_2+\dots+r_b=a+b-1\).

The next \(a\) lines contain coordinates of the Algoland cities — pairs of space-separated integers \(xa_i, ya_i\) (\(-10000 \le xa_i, ya_i \le 10000\)). The next \(b\) lines contain coordinates of the Berland cities — pairs of space-separated integers \(xb_i, yb_i\) (\(-10000 \le xb_i, yb_i \le 10000\)). All cities are located at distinct points, no three of the \(a+b\) cities lie on a single straight line.

Sum of values \(a\) across all test cases doesn't exceed \(3000\). Sum of values \(b\) across all test cases doesn't exceed \(3000\).

Output

For each of the \(t\) test cases, first print "YES" if there is an answer or "NO" otherwise.

If there is an answer, print the freeway building plan in the next \(a+b-1\) lines. Each line of the plan should contain two space-separated integers \(j\) and \(i\) which means that a freeway from the \(j\)-th Berland city to the \(i\)-th Algoland city should be built. If there are multiple solutions, print any.

E. Вычисления за отрицательное время

Конструктив *3400

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

Если быть точным, принцип её работы следующий. У машины есть бесконечная клетчатая плоскость, в одной из клеток которой стоит робот. Каждая клетка может или быть пустой, или содержать 0 или 1. Также у машины есть программа, состоящая из инструкций, обрабатываемых по одной. Каждая инструкция представляет собой один символ (букву или цифру) и исполняется за одну секунду, кроме последнего типа операций (это описано ниже). Вот список возможных инструкций:

  • 0 или 1: робот ставит соответствующую цифру в клетку, в которой он находится в настоящее время. Если эта клетка уже содержит цифру, эта цифра перезатирается.
  • e (erase): робот стирает число из клетки, на которой стоит. Если клетка была пустой, ничего не происходит.
  • l, r, u или d: робот перемещается на одну клетку в соответствующем направлении (влево/вправо/вверх/вниз, left/right/up/down).
  • s (stay): робот ничего не делает на протяжении одной секунды.
  • t (time travel): положим \(x\) равным \(0\), если робот стоит на пустой клетке, иначе возьмём \(x\) на единицу больше, чем число в клетке с роботом (то есть \(x = 1\), если число в клетке с роботом равно \(0\), и \(x = 2\), если оно равно \(1\)). Затем машина перемещается назад во времени на \(x\) секунд. Это не меняет порядок инструкций, но меняет конфигурацию доски и положение робота на те, что были \(x\) секунд назад. Вы можете считать, что эта инструкция эквивалентна нажатию Ctrl-Z \(x\) раз.

Например, пусть доска изначально пуста, а программа есть sr1t0. Считаем, что робот изначально находится в клетке \((0, 0)\).

  • [секунда \(0\), команда s]: мы ничего не делаем.
  • [секунда \(1\), команда r]: мы теперь в \((1, 0)\).
  • [секунда \(2\), команда 1]: мы в \((1, 0)\), и теперь там стоит \(1\).
  • [секунда \(3\), команда t]: мы перемещаемся на \(1 + 1 = 2\) секунды назад, к началу секунды \(1\).
  • [секунда \(1\), команда 0]: мы снова в \((0, 0)\), все клетки снова пусты, но после этой инструкции в нашей клетке стоит \(0\). Мы только что переписали историю. Последствий третьей операции никогда не было.

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

Считаем, что начальная конфигурация машины следующая:

  • Одно натуральное (то есть, целое и положительное) число написано в двоичной системе на доске так, что его последняя цифра находится в клетке \((0, 1)\), число записано слева направо в порядке от старших к младшим битам.
  • Другое натуральное число написано в двоичной системе таким образом, что его последняя цифра находится в \((0, 0)\), число записано слева направо в порядке от старших к младшим битам.
  • Остальные клетки пусты.
  • Робот находится в клетке \((0, 0)\).
  • Так было всегда в прошлом; то есть если Вам удастся попасть в какой-нибудь отрицательный момент времени, доска всегда выглядела именно так, и робот вечно был в точке \((0, 0)\).

Напишите программу, после выполнения которой:

  • робот стоит на непустой клетке,
  • если прочитать число, записанное с этой клетки вправо до первой пустой клетки, мы получим двоичную запись числа \(a + b\), записанную слева направо в порядке от старших к младшим битам.

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

В каждом тесте Вам будут даны \(1000\) пар чисел \((a, b)\), и Ваша программа должна будет корректно отработать на всех этих парах. Также из-за небольшой памяти машины, Ваша программа не должна занимать больше \(10^5\) инструкций.

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

В первой строке записано одно число \(t\) (\(1\le t\le 1000\)) — количество тестовых пар. В каждой из следующих \(t\) строк записаны по два натуральных числа \(a\) и \(b\) (\(1\le a, b < 2^{30}\)) в десятичной системе счисления.

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

В единственной строке выведите Вашу программу, содержащую не больше \(10^5\) символов из 01eslrudt.

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

D. Оля и магический квадрат

Конструктив математика реализация *2000

Недавно Оля получила магический квадрат размером \(2^n\times 2^n\).

Её сестре кажется, что один квадрат — это скучно, поэтому она попросила Олю, чтобы та выполнила ровно \(k\) операций разбиения.

Операция разбиения — операция, во время которой Оля берет некий квадрат со стороной \(a\) и разрезает его на 4 равных квадрата со стороной \(\dfrac{a}{2}\). Если сторона квадрата равна \(1\), то к нему нельзя применить операцию разбиения (смотрите примеры для лучшего понимания).

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

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

Пускай длина стороны левого нижнего квадратика равна \(a\), то и длина стороны правого верхнего квадратика тоже должна равняться \(a\). Также должен существовать путь между ними, который состоит только из квадратиков с длиной стороны \(a\). Все последовательные квадраты на пути должны иметь общую сторону.

Очевидно, пока у нас есть один квадрат, то данные условия соблюдаются. Так что Оля готова выполнить просьбу сестры только при условии, что она тоже останется довольна. Скажите ей: возможно ли выполнить ровно \(k\) операций разбиения в некоторой последовательности так, чтобы соблюдалось условие счастья Оли? Если можно, то укажите также то, какой размер будут иметь квадратики из которых будет состоять путь из левого нижнего квадратика в правый верхний.

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

Первая строка содержит одна целое число \(t\) (\(1 \le t \le 10^3\)) — количество тестов.

Каждая из следующих \(t\) строк содержит два целых числа \(n_i\) и \(k_i\) (\(1 \le n_i \le 10^9, 1 \le k_i \le 10^{18}\)) — описание \(i\)-го теста, которое означает, что исходный квадрат Оли имеет размер \(2^{n_i}\times 2^{n_i}\) и сестра Оли просит сделать ровно \(k_i\) операций разбиения.

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

Выведите \(t\) строк, где в \(i\)-й строке надо вывести «YES» если в \(i\)-м тесте можно выполнить \(k_i\) операций разбиения так, чтобы условие счастья Оли соблюдалось или «NO» в противном случае. Если вы вывели «YES», то также выведите \(log_2\) от длины стороны квадратиков, по которым можно будет построить путь из левого нижнего квадратика в правый верхний.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

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

Примечание

В каждой из иллюстраций изображения отображаются в порядке, в котором Оля применяла операции. Недавно созданные квадраты выделены красным цветом.

В первом тесте Оля может применять операции разбиения в следующем порядке:

Оля применила одну операцию к единственному существующему квадрату.

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

Размер стороны квадратиков на этом пути равен \(1\). \(log_2(1) = 0\).

Во втором тесте Оля может применять операции разбиения в следующем порядке:

Оля применяет первую операцию к единственному существующему квадрату. Вторую операцию она применяет к правому нижнему квадратику.

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

Размер стороны квадратиков на этом пути равен \(2\). \(log_2(2) = 1\).

В третьем примере Оля за \(5\) операций приведет квадратик к следующему виду:

Поскольку ей осталось ещё выполнить \(7\) операций разбиения, а к квадратам со стороной равной \(1\) их применять нельзя, значит Оля не сможет больше ничего сделать и ответ «NO».

A. Определенная игра

Конструктив математика *800

Chouti участвовал в соревновании по программированию. Но, после того, как он решил все задачи, он устал, и решил придумать какие-нибудь игры.

Он придумал следующую игру. У игрока есть целое положительное число \(n\). Изначально значение \(n\) равно \(v\) и игрок может применить следующую операцию произвольное число раз (возможно ни разу): выбрать положительное целое число \(x\), что \(x<n\) и \(x\) не является делителем \(n\), а затем вычесть \(x\) из \(n\). Цель игрока минимизировать итоговое значение числа \(n\).

Вскоре, Chouti осознал, что игра очень проста. А cможете ли вы с ней справиться?

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

Первое строка входного файла содержит одно целое число: \(v\) (\(1 \le v \le 10^9\)), начальное значение \(n\).

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

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

Примечание

В первом примере, игрок может выбрать \(x=3\) на первом ходу, тогда \(n\) станет \(5\). Затем он может выбрать \(x=4\) на втором ходу, чтобы получить \(n=1\) в итоге. Есть также другие способы достичь минимума. Но например он не может использовать \(x=2\) на первом ходу, потому что \(2\) делит \(8\).

Во втором примере, так как \(n=1\) изначально, игрок не может ничего сделать.

B. Прощальная вечеринка

Конструктив реализация *1500

Chouti и его одноклассникам скоро предстоит поступать в университет. Чтобы попрощаться друг с другом, класс устроил большую прощальную вечеринку, на которой одноклассники, учителя и родители пели и танцевали.

Chouti вспомнил, что в этой вечеринке приняли участие \(n\) человек. Чтобы сделать вечеринку смешнее, каждый надел одну шляпу из \(n\) разновидностей странных шляп с номерами \(1, 2, \ldots n\). Возможно, что одну разновидность шляпы надели несколько человек. Некоторые разновидности шляп могли остаться невостребованными кем-либо.

После вечеринки \(i\)-й человек сказал, что было ровно \(a_i\) людей, на которых была надета шляпа, отличающаяся от его собственной.

Прошло несколько дней, поэтому Chouti забыл, кто был в каких шляпах, но ему очень интересно что-то про это вспомнить! Пусть \(b_i\) будет видом той шляпы, которую надел \(i\)-й человек. Chouti хочет, чтобы вы нашли какие-нибудь \(b_1, b_2, \ldots, b_n\), которые не противоречат утверждениям каждого человека. Так как у некоторых людей могут быть проблемы с памятью, решения может не существовать.

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество людей на вечеринке.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le n-1\)), и задающая утверждения каждого человека.

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

Если решения не существует, выведите «Impossible».

Иначе, выведите «Possible» а затем \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le n\)).

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

Примечание

В ответе к первому примеру, все носили шляпу одного и того же типа, поэтому каждый скажет, что не было людей со шляпами, отличными от типа \(1\).

В ответе ко второму примеру, первый и второй человек носили шляпу типа \(1\), а все остальные носили шляпу типа \(2\).

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

Можно показать, что ответа на третий пример не существует.

В первых двух примерах существуют и другие варианты ответа.

E. Недостающие числа

Бинарный поиск жадные алгоритмы Конструктив математика теория чисел *1900

Chouti работает над странной математической задачей.

Была некоторая последовательность из \(n\) положительных целых чисел \(x_1, x_2, \ldots, x_n\), где число \(n\) чётное. Последовательность была очень особенной, а именно для каждого целого \(t\) от \(1\) до \(n\), \(x_1+x_2+...+x_t\) является квадратом некоторого целого числа (то есть полным квадратом).

Неведомым образом, числа с нечётными индексами пропали, то есть известны только числа с чётными индексами, другими словами \(x_2, x_4, x_6, \ldots, x_n\). Задача состоит в том, чтобы восстановить изначальную последовательность. Он снова просит у вас помощи с решением этой задачи.

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

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

В первой строке записано одно целое чётное число \(n\) (\(2 \le n \le 10^5\)).

Во второй строке записаны \(\frac{n}{2}\) положительных целых чисел \(x_2, x_4, \ldots, x_n\) (\(1 \le x_i \le 2 \cdot 10^5\)).

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

Если не существует ни одной подходящей последовательности, выведите «No».

Иначе, выведите «Yes» и \(n\) положительных целых чисел \(x_1, x_2, \ldots, x_n\) (\(1 \le x_i \le 10^{13}\)) в следующей строке, при этом \(x_2, x_4, \ldots, x_n\) должны совпадать с числами во входных данных. Если существует несколько возможных ответов, выведите любой.

Заметьте, что ограничение на \(x_i\) больше, чем во входных данных. Можно доказать, что если ответ существует, то существует и последовательность, удовлетворяющая \(1 \le x_i \le 10^{13}\).

Примечание

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

  • \(x_1=4\)
  • \(x_1+x_2=9\)
  • \(x_1+x_2+x_3=25\)
  • \(x_1+x_2+x_3+x_4=36\)
  • \(x_1+x_2+x_3+x_4+x_5=100\)
  • \(x_1+x_2+x_3+x_4+x_5+x_6=144\)
Все эти числа являются полными квадратами.

Во втором примере, \(x_1=100\), \(x_1+x_2=10000\). Эти числа являются полными квадратами. Существуют и другие возможные ответы. Например, \(x_1=22500\) является другим возможным ответом.

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

F. Коварный интерактор

интерактив Конструктив реализация *2600

Это интерактивная задача.

Chouti устал от учебы, поэтому он открыл компьютер и стал играть в игру-головоломку.

Давным давно, Chouti нашел последовательность \(s_1, s_2, \ldots, s_n\) длины \(n\), хранимую коварным интерактором. Она состояла только из цифр \(0\) и \(1\), и количество цифр \(1\) было равно \(t\). Chouti ничего не знает о последовательности, кроме \(n\) и \(t\), но он может попробовать узнать последовательность с помощью интерактора.

Определим операцию инвертирования. Инвертирование отрезка \([l,r]\) (\(1 \leq l \leq r \leq n\)) означает, что для каждого \(x \in [l,r]\), нужно заменить \(s_x\) на \(1-s_x\).

В каждом запросе Chouti может передать интерактору два числа \(l,r\) удовлетворяющие \(1 \leq l \leq r \leq n\) и интерактор сделает одно из двух: инвертирует отрезок \([1,r]\) или инвертирует отрезок \([l,n]\) (оба исхода равновероятны, и все решения, принимаемые интерактором, независимы друг от друга, см. Примечание ). Интерактор сообщит текущее количество цифр \(1\) после каждой операции. Заметим, что последовательность не будет восстановлена после каждой операции.

Помогите мальчику найти изначальную последовательность за не более \(10000\) запросов.

"Странная легенда, глупая игра.", — подумал он. Тем не менее, после нескольких попыток, он всё равно в неё играет. Можете ли вы ему помочь пройти эту игру?

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

Взаимодействие начинается со строки, содержащей числа \(n\) и \(t\) (\(1 \leq n \leq 300\), \(0 \leq t \leq n\)) — длина строки и количество цифр \(1\) в ней.

Далее вы можете совершать запросы.

Чтобы сделать запрос, выведите строку «? l r» (\(1 \leq l \leq r \leq n\)), и сбросьте буфер вывода.

После каждого запроса, считайте одно целое число \(t\) (\(-1 \leq t \leq n\)).

  • Если \(t=-1\), то вы превысили лимит запросов, и ваша программа должна незамедлительно завершить работу, тогда вы получите Неправильный Ответ. Иначе вы можете получить произвольный результат проверки, так как ваша программа продолжит чтение из закрытого потока.
  • Если \(t \geq 0\), оно означает число цифр \(1\) в последовательности.

Когда вы нашли начальную последовательность, выведите строку «! s», сбросьте буфер вывода и завершите вашу программу. Выводите \(s_1, s_2, \ldots, s_n\) как двоичную строку и не выводите пробелы в промежутке между цифрами.

Ваше решение получит вердикт Решение «зависло», если вы ничего не выведете или забудете сбросить буфер вывода.

Чтобы сбросить буфер вывода вам нужно сделать следующее сразу после вывода запроса и символа конца строки:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() inвPython;
  • см. документацию других языков.

Взломы

Для взломов используйте следующий формат:

В единственной строке выведите строку из нулей и единиц. Её длина будет равна \(n\) и она будет воспринята как \(s_1, s_2, \ldots, s_n\).

Например, файл теста из примера содержит строку «0011».

Примечание

Для первого запроса \(1,1\), интерактор должен инвертировать \([1,1]\) или \([1,4]\). Он выбирает отрезок \([1,4]\), так что последовательность становится равна 1100.

Для второго запроса \(1,1\), интерактор должен инвертировать \([1,1]\) или \([1,4]\). Он опять выбирает отрезок \([1,4]\), так что последовательность становится равна 0011.

Для третьего запроса \(3,4\), интерактор должен инвертировать \([1,4]\) или \([3,4]\). Он выбирает отрезок \([3,4]\), так что последовательность становится равна 0000.

Q: Как интерактор выбирает между \([1,r]\) and \([l,n]\)? Это действительно случайный выбор?

A: Интерактор использует секретный генератор псевдослучайных чисел. Только \(s\) и ваши запросы будут хешированы и использованы как ключ для генератора. Поэтому, если вы используете одну и ту же последовательность запросов для одной и той же секретной строки, вы будете получать один и тот же результат. За исключением этого, вы можете считать решения действительно случайными, как подбрасывание идеальной монетки. Вам не нужно (и вы не должны) пользоваться тем, какой именно генератор используется, чтобы решить эту задачу.

D. Граф максимального диаметра

графы Конструктив реализация *1800

Ура, конструктивные графовые задачи вернулись! В этот раз надо построить граф со следующими свойствами.

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

Диаметр (также «длиннейший кратчайший путь») связного неориентированного графа — это максимальное число ребер на кратчайшем пути между всеми парами вершин.

Степень вершины равна количеству инцидентных ей ребер.

По заданной последовательности из \(n\) целых чисел \(a_1, a_2, \dots, a_n\) постройте связный неориентированный граф, состоящий из \(n\) вершин, такой, чтобы:

  • в графе не содержалось петель и кратных ребер;
  • степень \(d_i\) вершины \(i\) не превышала \(a_i\) (то есть \(d_i \le a_i\));
  • диаметр графа максимально возможный.

Выведите полученный граф или сообщите, что ответа не существует.

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

В первой строке записано одно целое число \(n\) (\(3 \le n \le 500\)) — количество вершин в графе.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n - 1\)) — ограничения на степени вершин.

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

Выведите «NO», если невозможно построить граф с заданными ограничениями.

В противном случае выведите «YES» и диаметр полученного графа в первой строке.

Во второй строке выведите единственное целое число \(m\) — количество ребер в полученном графе.

В \(i\)-й из следующих \(m\) строк выведите два целых числа \(v_i, u_i\) (\(1 \le v_i, u_i \le n\), \(v_i \neq u_i\)) — описание \(i\)-го ребра. Граф не должен содержать кратных ребер — для каждой выведенной пары \((x, y)\) вывод не должен содержать больше пар \((x, y)\) и \((y, x)\).

Примечание

На картинках изображены графы для первых двух примеров. Оба графа имеют диаметр \(2\).

\(d_1 = 1 \le a_1 = 2\)

\(d_2 = 2 \le a_2 = 2\)

\(d_3 = 1 \le a_3 = 2\)

\(d_1 = 1 \le a_1 = 1\)

\(d_2 = 4 \le a_2 = 4\)

\(d_3 = 1 \le a_3 = 1\)

\(d_4 = 1 \le a_4 = 1\)

D. Дерево минимального диаметра

Деревья Конструктив реализация *1700

Вам дано дерево (неориентированный связный граф без циклов) и целое число \(s\).

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

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

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

В первой строке даны два целых числа \(n\) и \(s\) (\(2 \leq n \leq 10^5\), \(1 \leq s \leq 10^9\)) — количество вершин в дереве и сумма весов ребер.

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

Гарантируется, что заданные ребра задают дерево.

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

Выведите минимальный диаметр дерева, который мог получиться при какой-то расстановке неотрицательных весов на ребра этого дерева, которые в сумме дают \(s\).

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить \(10^{-6}\).

А именно: пусть ваш ответ равен \(a\), а ответ жюри \(b\). Ваш ответ будет засчитан, если \(\frac {|a-b|} {max(1, b)} \leq 10^{-6}\).

Примечание

В первом примере необходимо расставить веса так:

Легко видеть, что диаметр такого дерева будет равен \(2\). Можно доказать, что это минимально возможный диаметр, который можно получить, как-то расставив веса.

Вo втором примере необходимо расставить веса так:

A. Ехаб и очередной конструктив

Конструктив Перебор *800

Дано целое число \(x\), найдите 2 целых числа \(a\) и \(b\), таких, что:

  • \(1 \le a,b \le x\)
  • \(b\) делит \(a\) (\(a\) делится на \(b\)).
  • \(a \cdot b>x\).
  • \(\frac{a}{b}<x\).
Входные данные

В единственной строке входного файла записано одно целое число \(x\) \((1 \le x \le 100)\).

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

Выведите два целых числа \(a\) и \(b\), удовлетворяющих условию, разделенных пробелами. Если не существует пары целых чисел, удовлетворяющей данным ограничениям, выведите «-1» без кавычек.

C. Ехаб и задача с двумя операциями

жадные алгоритмы Конструктив математика *1400

Дан массив \(a\) длины \(n\). Вы можете выполнять на нем следующие операции:

  • выбрать индекс \(i\) \((1 \le i \le n)\), целое число \(x\) \((0 \le x \le 10^6)\), и заменить \(a_j\) на \(a_j+x\) для всех \((1 \le j \le i)\), то есть добавить \(x\) ко всем элементам на отрезке с начала массива по \(i\)-й его элемент.
  • выбрать индекс \(i\) \((1 \le i \le n)\), целое число \(x\) \((1 \le x \le 10^6)\), и заменить \(a_j\) на \(a_j \% x\) для всех \((1 \le j \le i)\), то есть заменить каждый элемент на отрезке с начала массива по \(i\)-й его элемент на его остаток при делении на \(x\).

Можете ли вы сделать массив строго возрастающим не более, чем за \(n+1\) операцию?

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

В первой строке записано целое число \(n\) \((1 \le n \le 2000)\), количество элементов в массиве \(a\).

Во второй строке записаны \(n\) целых чисел \(a_1\), \(a_2\), \(\dots\), \(a_n\) \((0 \le a_i \le 10^5)\), элементы массива \(a\).

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

На первой строке выведите количество операций. Далее выведите операции, по одной в строке.

Чтобы вывести операцию добавления, используйте формат "\(1\) \(i\) \(x\)".

Чтобы вывести операцию взятия по модулю, используйте формат "\(2\) \(i\) \(x\)".

Если \(i\) или \(x\) не соответствуют ограничениям, приведенным в условии, или вы используете более \(n+1\) операции, вы получите вердикт Неверный ответ.

Примечание

В первом примере массив изначально возрастает, поэтому нам не нужно производить над ним какие-либо операции.

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

На первом шаге: массив становится равен \([8,6,3]\).

На втором шаге: массив становится равен \([0,2,3]\).

D. Ехаб и еще одна очередная задача на xor

битмаски интерактив Конструктив реализация *2000

Это интерактивная задача!

Ехаб играет в игру с Лагги. Ехаб имеет два загаданных числа \((a,b)\). Лагги может сказать пару чисел \((c,d)\) и Ехаб ответит:

  • 1 если \(a \oplus c>b \oplus d\).
  • 0 если \(a \oplus c=b \oplus d\).
  • -1 если \(a \oplus c<b \oplus d\).

Операция \(a \oplus b\) обозначает операцию побитовое исключающее «ИЛИ» чисел \(a\) и \(b\).

Лагги нужно угадать \((a,b)\) не более, чем за 62 вопроса. Вам предлагается сыграть в эту игру. Вы играете за Лагги, а программа жюри - за Ехаба.

Гарантируется, что \(0 \le a,b<2^{30}\).

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

См. протокол взаимодействия.

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

Чтобы вывести ответ, выведите "! a b" (без кавычек). Не забудьте сбросить буфер вывода после того, как выведете ответ.

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

Чтобы задать вопрос, выведите "? c d" (без кавычек). \(c\) и \(d\) должны быть неотрицательными целыми числами, меньшими \(2^{30}\). Не забудьте сбросить буфер вывода после того, как зададите вопрос.

После каждого вопроса вы должны считать ответ. Если программа жюри отвечает числом -2, это значит, что ваша программа задала больше, чем 62 запроса и должна завершиться.

Чтобы сбросить буфер вывода вы можете использовать:

  • fflush(stdout) в C++.
  • System.out.flush() в Java.
  • stdout.flush() в Python.
  • flush(output) в Pascal.
  • Прибегните к документации других языков.

Взломы:

Чтобы взломать решение другого участника, выведите два целых числа \(a\) и \(b\) \((0 \le a,b<2^{30})\).

Примечание

В примере из условия:

Загаданные числа: \(a=3\), \(b=1\).

В первом вопросе: \(3 \oplus 2 = 1\) и \(1 \oplus 1 = 0\), и ответ равен 1.

Во втором вопросе: \(3 \oplus 1 = 2\) и \(1 \oplus 2 = 3\), и ответ равен -1.

В третьем вопросе: \(3 \oplus 2 = 1\) и \(1 \oplus 0 = 1\), и ответ равен 0.

После этого программа выводит ответ и завершается.

D. Счастливая сортировка

Конструктив сортировки *2000

Петя любит счастливые числа. Всем известно, что счастливыми являются положительные целые числа, в десятичной записи которых содержатся только счастливые цифры 4 и 7. Например, числа 47, 744, 4 являются счастливыми, а 5, 17, 467 — не являются.

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

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

В первой строке задано одно целое число n (1 ≤ n ≤ 105) — количество элементов массива. Во второй строке заданы n целых положительных чисел, не превосходящих 109 — массив, который нужно отсортировать по неубыванию.

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

В первой строке выведите число k (0 ≤ k ≤ 2n) — количество обменов в сортировке. В следующих k строках выведите по одной паре различных чисел — номера элементов, которые нужно обменять местами. Числа в массиве нумеруются начиная с единицы. Если сортировка невозможна, выведите единственное число -1.

Если решений несколько, выведите любое. Обратите внимание, что минимизировать k не требуется. Подойдет любая сортировка, количество обменов в которой не превышает 2n.

B. Новый год и местоположение сокровища

жадные алгоритмы Конструктив Перебор реализация *1200

Боб — пират, ищущий величайшее сокровище, которое когда-либо видел мир. Известно, что сокровище расположено в точке \(T\), координаты которой только предстоит узнать.

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

Как известно, мир — это двумерная плоскость. \(i\)-й обелиск находится в целочисленных координатах \((x_i, y_i)\). \(j\)-я подсказка состоит из \(2\) целых чисел \((a_j, b_j)\) и принадлежит обелиску \(p_j\), где \(p\) — некоторая (неизвестная) перестановка из \(n\) элементов. Это означает, что сокровище находится в точке \(T=(x_{p_j} + a_j, y_{p_j} + b_j)\). Эта точка \(T\) должно быть одинакова для всех подсказок.

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

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

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

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

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 1000\)) — количество обелисков, оно же равно количество подсказок.

Каждая из следующих \(n\) строк содержит два целых числа \(x_i\), \(y_i\) (\(-10^6 \leq x_i, y_i \leq 10^6\)) — координаты \(i\)-го обелиска. Все координаты различны, то есть \(x_i \neq x_j\) или \(y_i \neq y_j\) выполняется для каждой пары \((i, j)\), такой что \(i \neq j\).

Каждая из следующих \(n\) строк содержит два целых числа \(a_i\), \(b_i\) (\(-2 \cdot 10^6 \leq a_i, b_i \leq 2 \cdot 10^6\)) — направление \(i\)-й подсказки. Все координаты различны, то есть \(a_i \neq a_j\) или \(b_i \neq b_j\) выполняется для каждой пары \((i, j)\), такой что \(i \neq j\).

Гарантируется, что существует перестановка \(p\) такая, что для каждой пары \(i,j\) правда, что \(\left(x_{p_i} + a_i, y_{p_i} + b_i\right) = \left(x_{p_j} + a_j, y_{p_j} + b_j\right)\).

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

Выведите два числа \(T_x, T_y\) — координаты сокровища.

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

Примечание

Поскольку \(n = 2\), мы можем рассмотреть все перестановки двух элементов.

Если \(p = [1, 2]\), то обелиск \((2, 5)\) содержит подсказку \((7, -2)\), которая значит, что сокровище спрятано в \((9, 3)\). Второй обелиск \((-6, 4)\) содержал бы подсказку \((-1,-3)\) и сокровище было бы в \((-7, 1)\). Однако оба обелиска должны указывать одно и то же местоположение, поэтому это явно неправильная перестановка.

Если же спрятанная перестановка — это \([2, 1]\), тогда первая подсказка принадлежит второму обелиску, а вторая подсказка первому обелиску. Поэтому \((-6, 4) + (7, -2) = (2,5) + (-1,-3) = (1, 2)\), значит \(T = (1,2)\) — это местоположение сокровища.

Во втором примере скрытая перестановка — \([2, 3, 4, 1]\).

F. Новый год и экспедиция кряквы

жадные алгоритмы Конструктив *2600

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

Утка — высшее животное! (Автор изображения — See Bang)

Путешествие Боба может быть представлено в виде прямой линии, состоящей из \(n\) отрезков. Боб находится слева от первого отрезка, а гнездо Алисы — справа от последнего отрезка. Длина каждого отрезка дана в метрах. Каждый отрезок имеет один из трех типов: трава, вода или лава.

Боб может передвигаться тремя способами: плаванием, ходьбой и полетом. Он может переключаться между ними или менять свое направление в любой момент времени (даже если он находится в нецелой координате), и для этого не требуется дополнительное время. Боб может плавать только по воде, ходить только по траве и летать над любой местностью. Чтобы пролететь один метр, нужна \(1\) секунда. Чтобы проплыть один метр, нужно \(3\) секунды. И, чтобы пройти один метр, нужно \(5\) секунд.

У Боба конечное количество энергии. Плавание и ходьба расслабляют его, поэтому его количество энергии увеличивается на \(1\) за каждый метр, который он проходит или проплывает. С другой стороны, летать довольно утомительно, поэтому его количество энергии уменьшается на \(1\) за каждый метр полета. Пребывание на месте никак не влияет на его энергию. Конечно, количество энергии никогда не может становиться отрицательным. В начале количество энергии равно нулю.

За какое минимальное время Боб может достичь гнезда Алисы?

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

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — количество отрезков.

Вторая строка содержит \(n\) целых чисел \(l_1, l_2, \dots, l_n\) (\(1 \leq l_i \leq 10^{12}\)), где \(l_i\) — длина \(i\)-го отрезка в метрах.

Третья строка содержит строку \(s\), состоящую из \(n\) символов «G», «W», «L», которые обозначают траву (Grass), воду (Water) и лаву (Lava), соответственно.

Гарантируется, что первый отрезок не лава.

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

Выведите одно целое число \(t\) — минимальное количество времени, которое нужно Бобу, чтобы добраться до гнезда Алисы.

Примечание

В первом примере Боб сначала проходит \(5\) метров за \(25\) секунд. После этого он пролетает оставшиеся \(5\) метров за \(5\) секунд.

Во втором примере Боб сначала проплывает \(10\) метров за \(30\) секунд. После этого он пролетает над лавой за \(10\) секунд.

В третьем примере водный пруд намного меньше. Боб сначала проплывает по нему за \(3\) секунды. Однако он пока что не может пролететь над лавой, так как у него только одна единица энергии, а ему нужно две. Поэтому он проплывет полметра назад, а потом вернется вперед. Это займет \(3\) секунды. Теперь у него есть \(2\) единицы энергии, значит он сможет пролететь лаву за \(2\) секунды.

В четвертом примере он будет ходить \(50\) секунд, летать \(10\) секунд, плавать \(15\) секунд и в конце летать \(5\) секунд.

E. Лес минимального диаметра

Деревья жадные алгоритмы Конструктив поиск в глубину и подобное *2000

Задан лес — неориентированный граф из \(n\) вершин такой, что каждая его компонента связности является деревом.

Диаметр (также «длиннейший кратчайший путь») связного неориентированного графа — это максимальное число ребер на кратчайшем пути между всеми парами вершин.

Ваша задача — добавить несколько ребер (возможно ноль) в граф так, чтобы он стал деревом, а диаметр этого дерева был минимально возможным.

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

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

В первой строке записаны два целых числа \(n\) и \(m\) (\(1 \le n \le 1000\), \(0 \le m \le n - 1\)) — количество вершин графа и количество ребер, соответственно.

В каждой из следующих \(m\) строк записаны по два целых числа \(v\) и \(u\) (\(1 \le v, u \le n\), \(v \ne u\)) — описания ребер.

Гарантируется, что заданный граф — это лес.

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

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

В каждой из следующих \((n - 1) - m\) строк выведите по два целых числа \(v\) и \(u\) (\(1 \le v, u \le n\), \(v \ne u\)) — описания добавленных ребер.

Полученный граф должен быть деревом, а его диаметр должен был минимально возможным.

Eсли \(m = n - 1\), то, очевидно, ребра не будут добавлены и весь вывод состоит из одного числа — диаметра заданного дерева.

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

Примечание

В первом примере добавление ребер (1, 4) или (3, 4) приведет к диаметру 3. Добавление ребра (2, 4), однако, сделает диаметр равным 2.

Ребро (1, 2) — это единственный вариант добавляемого ребра для второго примера. Диаметр равен 1.

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

B. Перестановка букв

жадные алгоритмы Конструктив сортировки Строки *900

Задана строка \(s\), состоящая только из строчных букв латинского алфавита.

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

Назовем строку хорошей, если она не является палиндромом. Палиндром — это строка, которая читается слева направо также, как и справа налево. Например, строки «abacaba», «aa» и «z» являются палиндромами, а строки «bba», «xd» — нет.

Вам необходимо ответить на \(t\) независимых запросов.

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

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество запросов.

Каждая из следующих \(t\) строк содержит по одной строке. \(i\)-я строка содержит строку \(s_i\), состоящую только из строчных букв латинского алфавита. Гарантируется, что длина \(s_i\) находится в отрезке от \(1\) до \(1000\) (включительно).

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

Выведите \(t\) строк. В \(i\)-й строке выведите ответ на \(i\)-й запрос: -1, если невозможно получить хорошую строку при помощи перестановки букв строки \(s_i\), иначе любую хорошую строку, которую можно получить из заданной (при помощи перестановки букв).

Примечание

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

Другие примеры (не все) корректных ответов на второй запрос: «ababaca», «abcabaa», «baacaba».

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

E. Егор и RPG игра

жадные алгоритмы Конструктив *3400

Одним субботним вечером Егор играл в свою любимую RPG игрушку. Исследуя новые края и земли, он наткнулся на такой знак:

Егор — увлечённый игрок, но ещё и алгоритмист. Поэтому он моментально заметил 4 повторяющиеся буквы на знаке. Более того, если мы переставим буквы «R», «E», «G», «O» из первого слова, то мы получим буквы «O», «G», «R», «E» во втором слове. Егор вдохновился знаком и тотчас придумал задачу о перестановках.

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

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

Количество подпоследовательностей в разбиении должно быть не очень большим. Пусть \(f(n)\) — это минимальное целое число \(k\) такое, что любую перестановку длины \(n\) можно разбить на не более, чем \(k\) монотонных подпоследовательностей.

Вам нужно разбить перестановку на не более, чем \(f(n)\) монотонных подпоследовательностей.

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

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество тестов.

Во взломах вы можете использовать только \(t = 1\).

Далее следуют описания \(t\) тестов.

Первая строка каждого теста содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — длину перестановки. Вторая строка содержит \(n\) целых различных чисел \(a_i\) (\(1 \leq a_i \leq n\)) задающих перестановку.

Сумма значений \(n\) по всем тестам не превосходит \(10^5\).

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

Для каждого теста выведите ответ в следующем формате:

В первой строке выведите одно целое число \(k\) (\(1 \leq k \leq f(n)\)) — количество последовательностей в разбиении. В следующих \(k\) строках выведите описания найденных подпоследовательностей. Каждое описание начинается с целого числа \(l_i\) (\(1 \leq l_i \leq n\)) — длины соответствующей подпоследовательности. Затем следуют \(l_i\) целых чисел — значения чисел в этой подпоследовательности в том порядке, в котором они встречаются в перестановке.

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

Примечание

В примере мы можем разбить следующим образом:

  • \([4, 3, 1, 2]\) на \([4, 3, 1]\), \([2]\)
  • \([4, 5, 6, 1, 3, 2]\) на \([4, 1]\), \([5, 6]\) и \([3, 2]\)
  • \([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\) на \([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]\)

Разумеется, есть много других возможных вариантов разбиения.

A. Сумма в дереве

Деревья жадные алгоритмы Конструктив поиск в глубину и подобное *1600

У Мити есть корневое дерево из \(n\) вершин, пронумерованных от \(1\) до \(n\), причем корень дерева имеет номер \(1\). В каждой его вершине \(v\) было записано целое число \(a_v \ge 0\). Для каждой вершины \(v\) Митя вычислил величину \(s_v\): сумму чисел, записанных на пути от вершины \(v\) до корня, а также \(h_v\) — глубину вершины \(v\), то есть количество вершин на пути от вершины \(v\) до корня (таким образом, \(s_1=a_1\), \(h_1=1\)).

После этого Митя уничтожил исходные значения \(a_v\). К сожалению, он также случайно уничтожил все значения \(s_v\) для вершин, находящихся на четной глубине (то есть тех, для которых \(h_v\) является четным). Ваша задача состоит в том, чтобы восстановить значения \(a_v\) для каждой из вершин либо определить, что это невозможно. Среди возможных вариантов нужно выбрать тот, при котором сумма значений \(a_v\) во всем дереве является минимально возможной.

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

В первой строке содержится число \(n\) — число вершин в дереве (\(2 \le n \le 10^5\)). В следующей строке заданы числа \(p_2\), \(p_3\), ... \(p_n\), где \(p_i\) обозначает номер вершины, которая является предком вершины \(i\) в дереве (\(1 \le p_i < i\)). В последней строке входных данных содержатся целые числа \(s_1\), \(s_2\), ..., \(s_n\) (\(-1 \le s_v \le 10^9\)), где уничтоженные значения заменены на \(-1\).

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

Выведите единственное число — минимально возможную сумму чисел \(a_v\) в вершинах исходного дерева или \(-1\), если такого дерева не существует.

B. Хорошая таблица

жадные алгоритмы Конструктив математика Перебор *2100

Вам дана таблица \(n \times m\), состоящая из букв «A», «G», «C», «T». Назовем таблицу красивой, если любой квадрат \(2 \times 2\) в ней состоит из различных символов. Ваша задача — найти красивую таблицу, также состоящую из букв «A», «G», «C», «T», которая отличается от данной в минимальном числе символов.

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

В первой строке входных данных записаны два положительных целых числа \(n\) и \(m\) — количество строк и столбцов в данной таблице (\(2 \leq n, m, n \times m \leq 300\,000\)). В каждой из следующих \(n\) строк записано по \(m\) символов — содержимое таблицы. Гарантируется, что в таблице встречаются только символы «A», «G», «C», «T».

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

Выведите \(n\) строк, по \(m\) символов в каждой. Выведенная таблица должна быть красивой и отличаться от данной в минимальном количестве символов.

Примечание

Таблица в первом примере и так является красивой. Таблицу во втором примере можно преобразовать в красивую, изменив 9 символов.

C. Построй дерево

Бинарный поиск графы Деревья жадные алгоритмы Конструктив поиск в глубину и подобное *2400

Погуляв по заснеженному лесу, Миша очень полюбил деревья и решил нарисовать своё!

Это дерево состоит из \(n\) вершин, пронумерованных различными целыми числами от \(1\) до \(n\). В этом дереве вершина \(1\) является корнем, а у любой другой вершины \(i\) есть непосредственный предок \(p_{i}\) (при этом \(i\) — непосредственный потомок \(p_{i}\)).

Вершина \(u\) лежит в поддереве вершины \(v\), если переходя по непосредственным предкам из вершины \(u\) (\(u\), \(p_{u}\), \(p_{p_{u}}\), ...), можно попасть в вершину \(v\). В частности, любая вершина \(v\) лежит в поддереве самой себя. Число вершин в поддереве вершины \(v\) называется размером поддерева. Миша рассматривает только те деревья, в которых все вершины лежат в поддереве вершины \(1\).

На рисунке ниже изображено дерево из \(6\) вершин. Поддерево вершины \(2\) состоит из вершин \(2\), \(3\), \(4\), \(5\). Таким образом, размер поддерева этой вершины равен \(4\).

Назовём разветвлённостью дерева максимальное количество непосредственных потомков какой-то из его вершин. Так, разветвлённость дерева на рисунке выше равна 2. Помогите Мише построить дерево из \(n\) вершин, в котором сумма размеров всех поддеревьев равна в точности \(s\), а разветвлённость — минимально возможная.

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

В первой и единственной строке входных данных записаны два целых числа \(n\) и \(s\) — число вершин в дереве и требуемая сумма размеров поддеревьев (\(2 \le n \le 10^5\); \(1 \le s \le 10^{10}\)).

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

Если требуемого дерева не существует, выведите «No». Иначе в первой строке выходных данных выведите «Yes», а в следующей строке выведите числа \(p_2\), \(p_3\), ..., \(p_n\), где вершина с номером \(p_i\) является непосредственным предком вершины с номером \(i\).

Примечание

Для первого примера одним из оптимальных деревьев изображено ниже. Сумма размеров поддеревьев в этом дереве равна \(3 + 1 + 1 = 5\), а разветвлённость равна \(2\).

Для третьего примера одним из оптимальных деревьев изображено ниже. В этом дереве сумма размеров поддеревьев равна \(6 + 3 + 2 + 1 + 2 + 1 = 15\), а разветвлённость равна \(2\).

B. Квадраты и отрезки

Бинарный поиск Конструктив математика *1100

Маленькая София учится в четвертом классе. Сегодня на уроке геометрии она узнала про отрезки и квадраты. По пути домой она решила нарисовать на снегу \(n\) квадратов со стороной длины \(1\). Для простоты будем считать, что София живёт на плоскости и может рисовать только отрезки длины \(1\), параллельные осям координат, с вершинами в целых точках.

Для того, чтобы нарисовать отрезок, София поступает следующим образом. Пусть она хочет нарисовать вертикальный отрезок с координатами концов \((x, y)\) и \((x, y+1)\). Тогда София смотрит, существует ли уже нарисованный отрезок с координатами концов \((x', y)\) и \((x', y+1)\) для какого-нибудь \(x'\). Если такой отрезок существует, то София быстро рисует новый отрезок, используя старый, как ориентир. Если же такого отрезка нет, то Софии приходится брать линейку и долго отмерять новый отрезок. Аналогично София поступает для горизонтальных отрезков, но только теперь она проверяет существование отрезка с такими же координатами \(x\), \(x+1\) и различающейся координатой \(y\).

Например, если Софии надо нарисовать один квадрат, ей придется нарисовать два отрезка с помощью линейки:

После этого можно нарисовать оставшиеся два отрезка, используя первые в качестве ориентира:

Если же Софии надо нарисовать два квадрата, ей придется нарисовать три отрезка с помощью линейки:

После этого можно нарисовать оставшиеся четыре отрезка, используя первые в качестве ориентира:

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

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

Единственная строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^{9}\)) — количество квадратов, которое София хочет нарисовать.

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

Выведите одно число — минимальное число отрезков, которые Софии придется рисовать с линейкой без ориентира, чтобы нарисовать \(n\) единичных квадратов описанным выше способом.

C. Открытка

Конструктив реализация *1200

Андрей получил открытку от Ирины. В ней были только слова «Привет, Андрей!» и странная строка, состоящая из строчных латинских букв, снежинок и леденцов. Андрей подумал, что эта строка — это зашифрованное сообщение, и решил его разгадать.

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

Например, рассмотрим такую строку:

Эта строка может кодировать сообщение «happynewyear». Для этого леденцы и снежинки нужно использовать следующим образом:

  • леденец 1: удалить букву w,
  • снежинка 1: повторить символ p два раза,
  • леденец 2: оставить букву n,
  • снежинка 2: удалить букву w,
  • снежинка 3: оставить букву e.

Обратите внимание, что одна и та же строка может кодировать разные сообщения. Например, строка, приведенная выше, может кодировать сообщения «hayewyar», «happpppynewwwwwyear» и другие.

Андрей знает, что сообщения от Ирины обычно имеют длину \(k\) символов. Помогите ему понять, может ли данная строка кодировать какое-то сообщение из \(k\) символов, и если да, приведите пример такого сообщения.

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

В первой строке записана строка, полученная в открытке. Строка состоит только из строчных латинских букв, а также символов «*» и «?», обозначающих снежинку и леденец соответственно. Эти символы могут стоять только сразу после буквы. Длина строки не превосходит \(200\).

Во второй строке находится целое число \(k\) (\(1 \leq k \leq 200\)) — необходимая длина сообщения.

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

Выведите любое сообщение длины \(k\), которое может кодировать данная строка, или «Impossible», если такого сообщения не существует.

A. Возрастающая последовательность

Конструктив математика реализация *900

Последовательность a0, a1, ..., at - 1 называется возрастающей если ai - 1 < ai для всех i: 0 < i < t.

Вам задана последовательность b0, b1, ..., bn - 1 и натуральное число d. Каждый ход выбирается один из элементов последовательности и увеличивается на d. Какое минимальное число ходов необходимо совершить, чтобы сделать последовательность возрастающей?

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

Первая строка входных данных содержит два натуральных числа n и d (2 ≤ n ≤ 2000;1 ≤ d ≤ 106). Вторая строка содержит элементы последовательности b0, b1, ..., bn - 1 (1 ≤ bi ≤ 106). Числа в строках разделяются пробелами.

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

Выведите искомое наименьшее количество ходов.

B. Счастливая строка

Конструктив Строки *1100

Петя любит счастливые числа. Всем известно, что счастливыми являются положительные целые числа, в десятичной записи которых содержатся только счастливые цифры 4 и 7. Например, числа 47, 744, 4 являются счастливыми, а 5, 17, 467 — не являются.

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

Например, рассмотрим строку «zbcdzefdzc». Списки позиций одинаковых символов:

  • b: 2
  • c: 3, 10
  • d: 4, 8
  • e: 6
  • f: 7
  • z: 1, 5, 9
  • Списки позиций букв a, g, h, ..., y пусты.

Эта строка счастливая, так как все разности являются счастливыми числами. Для символа z: 5 - 1 = 4, 9 - 5 = 4, для символа c: 10 - 3 = 7, для символа d: 8 - 4 = 4.

Заметим, что если какой-то символ встречается в строке только один раз, то после построения списков позиций на счастливость строки он уже не влияет. Строка, в которой нет повторяющихся символов, является счастливой.

Найдите лексикографически минимальную счастливую строку длины n.

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

В единственной строке задано натуральное число n (1 ≤ n ≤ 105) — длина искомой строки.

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

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

Примечание

Лексикографическое сравнение строк реализует оператор < в современных языках программирования. Строка a лексикографически меньше строки b, если существует такое i (1 ≤ i ≤ n), что ai < bi, а для любого j (1 ≤ j < i) aj = bj.

D. Даша и шахматы

игры интерактив Конструктив *2500

Это интерактивная задача.

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

На шахматной доске размером \(999 \times 999\) расположено \(666\) чёрных ладей и \(1\) белый король. Задача белого короля — попасть под шах ладьи, т. е. встать на такое поле, что на одной горизонтали или вертикали с ним будет находиться чёрная ладья.

Ходы совершаются по очереди, начинают белые. NN играет за белого короля, на каждом ходу он перемещает короля в одну из соседних по стороне или диагонали клеток, т. е. если король стоит на поле \((x, y)\), то он может переместиться на поле \((nx, ny)\) такое, что \(\max (|nx - x|, |ny - y|) = 1\) , \(1 \leq nx, ny \leq 999\). При этом NN не имеет права брать фигуры Даши, т. е. перемещаться на поле, на котором в данный момент находится чёрная ладья. Однако он может вставать на одну горизонталь или вертикаль с черными ладьями.

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

Каждый игрок делает \(2000\) ходов, если за это время белый король не попадет под шах ладьи, то победителем объявляются чёрные.

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

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

В начале работы на вход вашей программе подаётся \(667\) строк. В каждой строке находятся пара целых чисел \(x\) и \(y\) (\(1 \leq x, y \leq 999\)) — координаты фигур. В первой строке подаются координаты короля, в следующих \(666\) строках находятся координаты ладей. Первая координата обозначает номер строки на доске, вторая — номер столбца, в которых находится фигура. Гарантируется, что изначально король не находится под ударом ладьи. Кроме того, все фигуры стоят на различных клетках.

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

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

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

Чтобы сделать ход королем, выведите два целых числа \(x\) и \(y\) (\(1 \leq x, y \leq 999\)) — поле, на которое будет перемещен король. Король не имеет права вставать на поле, на котором в данный момент находится черная ладья (т. е. король не может брать ладьи). Гарантируется, что у короля в каждый момент будет возможность совершить корректный ход.

После каждого вашего хода считайте ход ладьи в следующем формате: в одной строке находятся три целых числа \(k\), \(x\) и \(y\) (\(1 \leq k \leq 666\), \(1 \leq x_i, y_i \leq 999\)) — номер ладьи, совершающей ход и поле, на которое ладья перемещается. Гарантируется, что ладья не будет перемещаться на поле, в котором в данный момент стоит другая ладья или король, но при этом ладья может совершить ход на поле, в котором она находилась до хода (т. е. остаться на том же поле). Гарантируется, что после хода ладьи король не будет под шахом. В случае, если ваш король попал под шах ладьи, все три числа будут равны \(-1\), после чего ваша программа должна немедленно завершиться.

После вывода хода не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

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

Взломы в этой задаче запрещены.

Примечание

Пример сокращен. Полное начальное положение ладей в первом тесте можно найти по ссылке https://pastebin.com/qQCTXgKP. Не гарантируются, что они будут передвигаться так, как показано в примере.

A. Игра на таблице

Конструктив реализация *1400

Вам дана таблица размера 4x4. Вы играете в игру — есть последовательность тайлов, каждый из которых имеет форму 2x1 или 1x2.Ваша задача состоит в том, чтобы последовательно разместить все тайлы на таблице. После каждого размещения каждая клетка, которая находится в строке или столбце, где все клетки заняты, освобождается. Вы можете располагать тайлы в любом месте таблицы, единственное условие состоит в том, чтобы тайлы(и их куски, оставшиеся после удаление некоторых строк и столбцов) не должны перекрываться. Ваша задача состоит в том, чтобы разместить все фигурки, при этом избегая перекрывания в любой момент времени.

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

Во вводе записана единственная строка \(s\), состоящая из нулей и единиц (\(1 \le |s| \le 1000\)). Ноль означает вертикальный тайл, единица — горизонтальный.

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

Выведите \(|s|\) строк —для каждого тайла выведите два натуральных числа \(r,c\), не превышающих \(4\), обозначающих координаты минимальных строки и столбца, пересекающихся с ним.

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

Примечание

Данная картинка иллюстрирует пример из условия:

Далее первый ряд удаляется:

B. Игра с модулем

Бинарный поиск интерактив Конструктив *2000

Это интерактивная задача.

Вася и Петя собираются сыграть в следующую игру: Петя загадает некоторое целое число \(a\). После этого Вася должен будет отгадать его, задав несколько вопросов. Он может сказать пару целых неотрицательных чисел \((x, y)\). В ответ Петя скажет:

  • "x", если \((x \bmod a) \geq (y \bmod a)\).
  • "y", если \((x \bmod a) < (y \bmod a)\).

Операция \((x \bmod a)\) обозначает операцию взятия остатка \(x\) при делении на \(a\).

Вася должен отгадать число \(a\) за не более, чем 60 вопросов.

Гарантируется, что Петя загадал число, удовлетворяющее неравенству \(1 \leq a \leq 10^9\).

Помогите Васе играть в эту игру и напишите программу, которая будет угадывать число \(a\).

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

Вам нужно будет сыграть несколько игр.

Перед началом каждой игры вы должны считать строку:

  • "start" (без кавычек) — начало новой игры.
  • "mistake" (без кавычек) — в предыдущей игре был назван неверный ответ. Считав такую строку ваша программа должна завершиться и тогда она получит вердикт "Неверный ответ".
  • "end" (без кавычек) — все игры закончены. Считав такую строку, ваша программа должна завершиться.

После считывания строки "start" (без кавычек) начинается очередная игра.

Сначала ваша программа может сделать несколько запросов вида спросить пару целых чисел \((x, y)\). Можно спрашивать только числа, удовлетворяющие неравенствам \(0 \leq x, y \leq 2 \cdot 10^9\). Для этого нужно вывести "? x y" (без кавычек). В ответ ваша программа получит один из символов:

  • "x" (без кавычек), если \((x \bmod a) \geq (y \bmod a)\).
  • "y" (без кавычек), если \((x \bmod a) < (y \bmod a)\).
  • "e" (без кавычек) — вы задали больше \(60\) вопросов. Считав такой символ, ваша программа должна завершиться и тогда она получит вердикт "Неверный ответ".

После того, как вы зададите несколько вопросов ваша программа должна вывести ответ в формате "! a" (без кавычек). Выведенное вами число \(a\) должно удовлетворять неравенству \(1 \leq a \leq 10^9\). Гарантируется, что задагаданное число \(a\) удовлетворяло этому неравенству. На этом текущая игра закончится.

Напомним, что ваша программа не может задать больше, чем \(60\) вопросов во время одной игры.

Если ваша программа не завершится после считывания "mistake" (без кавычек), "end" (без кавычек) или "e" (без кавычек), то она может получить любой вердикт, потому что будет считывать данные из закрытого потока ввода. Также, если ваша программа задаст вопрос или выведет ответ в неверном формате, она может получить любой вердикт. Будьте внимательны.

Не забудьте сбрасывать буфер вывода после того, как зададите вопрос или выведете ответ.

Чтобы сбросить буфер вывода вы можете использовать:

  • fflush(stdout) в C++.
  • System.out.flush() в Java.
  • stdout.flush() в Python.
  • flush(output) в Pascal.
  • Прибегните к документации других языков.

Гарантируется, что будет сыграно не меньше \(1\) и не больше, чем \(100\) игр.

Взломы:

Во взломах можно использовать только одну игру. Чтобы взломать решение участника с загаданным числом \(a\) (\(1 \leq a \leq 10^9\)), в первой строке теста должно быть расположено единственное число \(1\), а во второй число \(a\).

Примечание

В тесте из условия будет сыграно \(3\) игры, в которых будут задагаданы числа \(1\), \(2\) и \(3\).

В первой игре ответом на любой вопрос будет "x" (без кавычек), так как \((x \bmod 1) = 0\) для всех целых \(x\).

Во второй игре, если спросить пару \((0, 0)\), то ответом будет "x" (без кавычек), так как \((0 \bmod 2) \geq (0 \bmod 2)\). А если, например, спросить пару \((2, 5)\), то ответом будет "y" (без кавычек), так как \((2 \bmod 2) < (5 \bmod 2)\), потому что \((2 \bmod 2) = 0\) и \((5 \bmod 2) = 1\).

C. Джони Солвинг

графы Конструктив математика поиск в глубину и подобное *2700

Сегодня вторник, а значит в команде Джони Солвинг снова идёт спор, кто из них Джони, а кто Солвинг. Для того, чтобы разрешить спор ребята позвали Умника. Умник дал ребятам связный граф из \(n\) вершин без петель и кратных рёбер, такой что степень каждой вершины не менее \(3\), а также дал число \(1 \leq k \leq n\). Так как Джони - громкий дурачок, то он заявил что сможет найти в этом графе простой путь длины хотя бы \(\frac{n}{k}\). Солвинг же, немного подумав, сказал, что сможет найти \(k\) простых по вершинам циклов с представителями, таких что:

  • Длина каждого цикла не менее \(3\).
  • Длина каждого цикла не кратна \(3\).
  • В каждом цикле найдётся представитель - такая вершина, которая отсутствует во всех других выведенных циклах.
Вам нужно помочь ребятам разрешить спор, для этого по заданному графу выведите либо решение для Джони: простой путь длины хотя бы \(\frac{n}{k}\) (\(n\) необязательно делится на \(k\)), либо решение для Солвинга: \(k\) циклов, удовлетворяющих условиям выше. Если отсутствуют решения для обоих ребят - выведите \(-1\).
Входные данные

Первая строка содержит три числа \(n\), \(m\) и \(k\) (\(1 \leq k \leq n \leq 2.5 \cdot 10^5, 1 \leq m \leq 5 \cdot 10^5\))

Последующие \(m\) строк содержат описание рёбер графа в виде пар вершин \(v\), \(u\) (\(1 \leq v, u \leq n\)). Гарантируется, что \(v \neq u\) и что все \(m\) пар различны.

Гарантируется, что степень каждой вершины не менее \(3\)

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

Выведите PATH в первой строке, если решаете задачу для Джони. Во-второй строке выведите кол-во вершин в пути \(c\) (\(c \geq \frac{n}{k}\)), а в третьей через пробел вершины в пути в порядке следования.

Выведите CYCLES в первой строке, если решаете задачу для Солвинга. Далее нужно вывести ровно \(k\) циклов в следующем формате: в первой строке выведите кол-во вершин в цикле \(c\) (\(c \geq 3\)), во второй строке выведите сам цикл в формате аналогичном пути, причем первая вершина во второй строке должна являться представителем

Выведите одно число \(-1\), если отсутствует оба решения. Кол-во выведенных чисел не должно превосходить \(10^6\). Гарантируется, что если существует хотя бы одно из решений (для Джони или Солвинга), то и существует вывод удовлетворяющий ограничению.

A. Разбиение на цифры

Конструктив математика реализация *800

У Васи есть любимое число \(n\). Он хочет разбить его на несколько ненулевых цифр. Это означает, что он хочет выбрать несколько цифр \(d_1, d_2, \ldots, d_k\), таких, что \(1 \leq d_i \leq 9\) для всех \(i\) и \(d_1 + d_2 + \ldots + d_k = n\).

Поскольку Вася во всем любит красоту, он хочет найти любое решение, в котором количество различных цифр среди \(d_1, d_2, \ldots, d_k\) будет как можно меньше. Помогите ему!

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

В первой строке находится единственное целое число \(n\) — число, которое хочет разбить Вася (\(1 \leq n \leq 1000\)).

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

В первой строке выведите одно целое число \(k\) — количество цифр в разбиении. Заметьте, что \(k\) должно удовлетворять неравенству \(1 \leq k \leq n\). В следующей строке выведите \(k\) цифр \(d_1, d_2, \ldots, d_k\), разделенных пробелами. Для всех цифр должно быть выполнено неравенство \(1 \leq d_i \leq 9\).

Вы должны найти разбиение числа \(n\), в котором количество различных цифр среди \(d_1, d_2, \ldots, d_k\) будет минимальным среди всех разбиений числа \(n\) на ненулевые цифры. Среди таких разбиений разрешается найти любое. Гарантируется, что существует хотя бы одно разбиение числа \(n\) на цифры.

Примечание

В первом тесте число \(1\) можно разбить на \(1\) цифру, равную \(1\).

Во втором тесте существует \(3\) разбиения числа \(4\) на цифры, в которых количество различных цифр равно \(1\). Это разбиения \([1, 1, 1, 1]\), \([2, 2]\) и \([4]\). Любое из этих разбиений подойдет. А, например, разбиение числа \(4\) на цифры \([1, 1, 2]\) не подойдет, так как в нем \(2\) различных цифры, то есть не минимальное возможное количество.

G. Вася и максимальный заработок

Бинарный поиск дп Конструктив снм Структуры данных *2400

Вася сильно устал от кредитов (из задачи F) и теперь хочет заработать деньги сам! Для этого он решил подготовить контест.

Васе предложено \(n\) задач. Они пронумерованы от \(1\) до \(n\). Сложность \(i\)-й задачи равна \(d_i\). Кроме того, задачи заданы в возрастающем относительно сложности порядке. Сложности всех задач различны. Для того чтобы добавить \(i\)-ю задачу в контест Васе нужно заплатить \(c_i\) бурлей автору. За каждую задачу в своем контесте Вася получит \(a\) бурлей.

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

Суммарный заработок за контест считается следующим образом:

  • если Вася берет задачу \(i\) в контест, ему нужно заплатить \(c_i\) её автору;
  • за каждую добавленную задачу Вася получает \(a\) бурлей;
  • пусть \(gap(l, r) = \max\limits_{l \le i < r} (d_{i + 1} - d_i)^2\). Если Вася берет в контест все задачи с индексом от \(l\) до \(r\), он так же платит \(gap(l, r)\). Если \(l = r\) то \(gap(l, r) = 0\).

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

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

Первая строка содержит \(n\) и\(a\) (\(1 \le n \le 3 \cdot 10^5\), \(1 \le a \le 10^9\)) — количество предложенных задач и количество бурлей, которое Вася получает за одну задачу соответственно. В каждой из следующих \(n\) строк содержится два числа \(d_i\) и \(c_i\) (\(1 \le d_i, c_i \le 10^9, d_i < d_{i+1}\)).

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

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

D. Разнообразная гирлянда

дп жадные алгоритмы Конструктив *1400

У вас есть гирлянда, состоящая из \(n\) ламп. Каждая лампа — красная, зеленая или синяя. Цвет \(i\)-й лампы равен \(s_i\) ('R', 'G' и 'B' — цвета ламп в гирлянде).

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

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

Другими словами, если получилась гирлянда \(t\), то для всех \(i\) от \(1\) до \(n-1\) должно выполняться условие \(t_i \ne t_{i + 1}\).

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

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

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество ламп.

Вторая строка входных данных содержит строку \(s\), состоящую из \(n\) символов 'R', 'G' и 'B' — цвета ламп в гирлянде.

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

В первой строке выходных данных выведите одно целое число \(r\)минимальное количество перекрашиваний, необходимых для того, чтобы получить разнообразную гирлянду из заданной.

Во второй строке выходных данных выведите одну строку \(t\) длины \(n\)разнообразную гирлянду, полученную из изначальной за минимальное количество перекрашиваний. Если существует несколько оптимальных решений, выведите любое из них.

B. Саша и ещё одно имя

Конструктив Строки хэши *1800

Саша очень любит читать книги. При прочтении одной книги он познакомился с необычным персонажем. Персонаж говорит про себя так: «У меня много имён в разных странах. Митрандир среди эльфов, Таркун среди гномов; в юности на давно забытом Западе я был Олорином, на юге — Инканус, на севере — Гэндальф, а на востоке я не бываю.»

И тут Саша задумался, а какое имя дали бы герою на Востоке? На Востоке все имена — палиндромы. Строка называется палиндромом, если она одинаково читается слева-направо и справа-налево. Например, строки «kazak», «oo» и «r» — палиндромы, а строки «abb» и «ij» — нет.

Саша считает, что героя назвали бы в честь одного из богов Востока. Так как имена не должны повторяться, на Востоке поступают следующим образом: записывают исходное имя как строку, из которой хотят получить новое имя на лист бумаги. Затем разрезают лист минимальное количество раз \(k\), получив при этом \(k+1\) лист с подстроками имени, и склеивают полученные куски в новую строку. Листы при этом нельзя переворачивать, их можно только менять местами.

Таким образом, выполнив \(3\) разреза в строке f|de|abc|g, может быть получена строка abcdefg (поменяв местами листы с подстроками f и abc), а строка cbadefg — нет.

Более формально, Саша хочет для данного палиндрома \(s\) найти такое минимальное \(k\), что существует способ разрезать исходную строку на \(k + 1\) подстроку, а затем склеить их так, чтобы полученная строка являлась палиндромом и была отлична от исходной строки \(s\). Если решения не существует, выведите «Impossible» (без кавычек).

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

Первая строка содержит одну строку \(s\) (\(1 \le |s| \le 5\,000\)) — исходное имя, которое состоит только из латинских букв нижнего регистра. Гарантируется, что \(s\) — палиндром.

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

Выведите одно целое число \(k\) — минимальное число разрезов, необходимых для получения нового имени, или «Impossible» (без кавычек), если ответа не существует.

Примечание

В первом примере можно выполнить разрезы в следующих местах: no|l|on, а затем склеить их как on|l|no. Можно показать, что не существует решения, использующего один разрез.

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

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

В четвёртом примере можно отрезать суффикс nik и добавить его в начало, получив nikkinnikkin.

C. Операции, не имеющие смысла

Конструктив математика теория чисел *1500

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

Пусть вам дано целое положительное число \(a\). Вы хотите выбрать такое целое число \(b\) от \(1\) до \(a - 1\) включительно, чтобы наибольший общий делитель (НОД) чисел \(a \oplus b\) и \(a \> \& \> b\) был как можно больше. Иными словами, необходимо вычислить следующую функцию:

\(\)f(a) = \max_{0 < b < a}{gcd(a \oplus b, a \> \& \> b)}.\(\)

Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ, а \(\&\) обозначает операцию побитового И.

Наибольший общий делитель двух целых чисел \(x\) и \(y\) — максимальное целое число \(g\) такое, что и \(x\), и \(y\) делится на \(g\) без остатка.

Вам дано \(q\) чисел \(a_1, a_2, \ldots, a_q\). Для каждого из этих чисел посчитайте наибольшее возможное значение наибольшего общего делителя (при оптимальном выборе \(b\)).

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

Первая строка содержит одно целое число \(q\) (\(1 \le q \le 10^3\)) — количество чисел, для которых вам надо вычислить ответ.

Далее следуют \(q\) целых чисел по одному в строке: \(a_1, a_2, \ldots, a_q\) (\(2 \le a_i \le 2^{25} - 1\)) — числа, для которых нужно вычислить ответ.

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

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

Примечание

Для первого числа оптимально выбрать \(b = 1\), тогда \(a \oplus b = 3\), \(a \> \& \> b = 0\), наибольший общий делитель чисел \(3\) и \(0\) равен \(3\).

Для второго числа один возможный вариант — выбрать \(b = 2\), тогда \(a \oplus b = 1\), \(a \> \& \> b = 2\), наибольший общий делитель чисел \(1\) и \(2\) равен \(1\).

Для третьего числа оптимально выбрать \(b = 2\), тогда \(a \oplus b = 7\), \(a \> \& \> b = 0\), наибольший общий делитель чисел \(7\) и \(0\) равен \(7\).

E. Магические камни

Конструктив математика сортировки *2200

У Гриши есть \(n\) магических камней, пронумерованных от \(1\) до \(n\). Заряд \(i\)-го камня равняется \(c_i\).

Иногда Грише становится скучно и он выбирает некоторый внутренний камень (иными словами, камень с индексом \(i\), где \(2 \le i \le n - 1\)), после чего синхронизирует его с соседними камнями. В результате этой операции камень теряет собственный заряд, но приобретает заряды соседних с них камней. То есть его заряд \(c_i\) превращается в \(c_i' = c_{i + 1} + c_{i - 1} - c_i\).

У Андрея, друга Гриши, тоже есть \(n\) пронумерованных магических камней с зарядами \(t_i\). Грише интересно, существует ли такая последовательность (из нуля или более) операций синхронизации, которая переводит заряды камней Гриши в заряды соответствующих камней Андрея, то есть превращает \(c_i\) в \(t_i\) для всех \(i\)?

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

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 10^5\)) — количество магических камней.

Вторая строка содержит целые числа \(c_1, c_2, \ldots, c_n\) (\(0 \le c_i \le 2 \cdot 10^9\)) — заряды камней Гриши.

Третья строка содержит целые числа \(t_1, t_2, \ldots, t_n\) (\(0 \le t_i \le 2 \cdot 10^9\)) — заряды камней Андрея.

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

Если существует (возможно, пустая) последовательность операций синхронизации, применение которой меняет заряды всех камней на искомые, выведите «Yes».

В противном случае выведите «No».

Примечание

В первом примере можно действовать следующим образом (в \(1\)-индексации):

  • На первом шаге синхронизируем третий камень: \([7, 2, \mathbf{4}, 12] \rightarrow [7, 2, \mathbf{10}, 12]\).
  • На второй шаге синхронизируем второй камень: \([7, \mathbf{2}, 10, 12] \rightarrow [7, \mathbf{15}, 10, 12]\).

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

G. Крестики-нолики на дереве

Деревья игры Конструктив *3100

Игра в крестики-нолики начинается на дереве из \(n\) вершин. Некоторые вершины уже окрашены в белый цвет, а остальные пока бесцветны.

Есть два игрока — белый и чёрный. Игроки ходят по очереди, белый игрок начинает игру. В свой ход игрок выбирает ещё не покрашенную вершину и красит её в свой цвет.

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

Не могли бы вы выяснить, кто выиграет эту игру или закончится ли она в ничью, если оба игрока играют оптимально?

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

Первая строка содержит одно целое число \(T\) (\(1 \le T \le 50\,000\)) — количество тестовых случаев. Далее следуют описания \(T\) тестовых случаев.

Первая строка каждого тестового случая содержит одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)) — количество вершин в дереве.

Каждая из следующих \(n - 1\) строк содержит целые числа \(v\) и \(u\) (\(1 \le v, u \le n\)), означающие, что вершины \(u\) и \(v\) соединены очередным ребром.

Последняя строка теста содержит строку длины \(n\), состоящую из букв «W» и «N». Покрашенные в белый цвет вершины отмечены как «W».

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

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

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

Для каждого тестового случая выведите «White», «Draw» или «Black» в зависимости от того, кто выиграет (соответственно белый, ничья или черный).

Примечание

В первом примере вершина \(4\) уже изначально покрашена в белый. Белый игрок может выиграть покрасив своим первым ходом вершину \(1\) и покрасив оставшуюся вершину своим следующим ходом. Этот процесс изображен на картинках ниже.

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

B. Очередная задача про разбиение массива

жадные алгоритмы Конструктив сортировки *1500

Массив \(b\) называется подмассивом массива \(a\), если он образует непрерывный подотрезок \(a\), то есть равен \(a_l\), \(a_{l + 1}\), \(\ldots\), \(a_r\) для некоторых \(l, r\).

Пусть \(m\) — некоторая зафиксированная константа. Для любого массива, содержащего хотя бы \(m\) элементов, определим его симпатичность, как сумму \(m\) наибольших элементов этого массива. Например:

  • Если массив \(x = [4, 3, 1, 5, 2]\) и \(m = 3\), то \(3\) наибольших элемента \(x\) равны \(5\), \(4\) и \(3\), тем самым симпатичность \(x\) равна \(5 + 4 + 3 = 12\).
  • Если массив \(x = [10, 10, 10]\) и \(m = 2\), то симпатичность \(x\) равна \(10 + 10 = 20\).

Вам дан массив \(a_1, a_2, \ldots, a_n\), значение константы \(m\) и целое число \(k\). Вам нужно разбить массив \(a\) на ровно \(k\) подмассивов таких, что:

  • Каждый элемент \(a\) принадлежит ровно одному подмассиву.
  • Каждый подмассив содержит хотя бы \(m\) элементов.
  • Суммарная симпатичность всех \(k\) подмассивов в разбиении является наибольшей возможной.
Входные данные

Первая строка содержит три целых числа \(n\), \(m\) и \(k\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \le m\), \(2 \le k\), \(m \cdot k \le n\)) — количество элементов в \(a\), константа \(m\) в условии и количество подмассивов, на которые нужно разбить.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)).

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

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

Во второй строке выведите \(k-1\) целых чисел \(p_1, p_2, \ldots, p_{k-1}\) (\(1 \le p_1 < p_2 < \ldots < p_{k-1} < n\)) определяющих разбиение массива.

  • В первый подмассив попадают элементы с индексами от \(1\) до \(p_1\).
  • Во второй подмассив попадают элементы с индексами от \(p_1 + 1\) до \(p_2\).
  • \(\ldots\).
  • Все элементы с индексами от \(p_{k-1} + 1\) до \(n\) попадают в последний, \(k\)-й подмассив.

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

Примечание

В первом примере одно из оптимальных разбиений выглядит как \([5, 2, 5]\), \([2, 4]\), \([1, 1, 3, 2]\).

  • Симпатичность подмассива \([5, 2, 5]\) равна \(5 + 5 = 10\).
  • Симпатичность подмассива \([2, 4]\) равна \(2 + 4 = 6\).
  • Симпатичность подмассива \([1, 1, 3, 2]\) равна \(3 + 2 = 5\).

Таким образом, суммарная симпатичность равна \(10 + 6 + 5 = 21\).

Во втором примере одно из оптимальных разбиений выглядит как \([4]\), \([1, 3]\), \([2, 2]\), \([3]\).

E. Расшифруй строку

битмаски интерактив китайская теорема об остатках Конструктив математика *2200

Это интерактивная задача. Не забывайте о том, что ваша программа должна каждый раз после вывода запроса сбрасывать буфер вывода. Для сброса буфера вывода можно использовать fflush(stdout) в C++, system.out.flush() в Java, stdout.flush() в Python или flush(output) в Pascal. Если вы используете другой язык программирования, посмотрите в его документации, как выполняется эта операция. Также рекомендуем вам прочесть руководство по интерактивным задачам: https://cf.m27.workers.dev/blog/entry/45307.

Вам дана строка \(t\), состоящая из \(n\) строчных латинских букв. Эта строка была получена следующим образом: сначала у жюри была строка \(s\), состоящая также из \(n\) строчных латинских букв. Затем к ней применили не более \(n\) (возможно, ни одной) операций. \(i\)-я операция обозначается двумя целыми числами \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le n\)), и означает обмен символов строки под номерами \(a_i\) и \(b_i\). Все операции были выполнены в том порядке, в котором они расположены в последовательности. Например, если \(s\)xyz, и было выполнено \(2\) операции: \(a_1 = 1, b_1 = 2\); \(a_2 = 2, b_2 = 3\), то после первой операции текущая строка будет yxz, после второй — yzx, поэтому \(t\)yzx.

Ваше задание — восстановить исходную строку \(s\). К сожалению, о последовательности операций вы ничего не знаете (вы даже не знаете, была ли в ней хотя бы одна операция). Но вы можете использовать ту же самую последовательность обменов на любой строке, на которой вы хотите, если в этой строке ровно \(n\) символов, и все они — строчные латинские буквы. После применения последовательности операций на строке вы можете узнать, во что она превратилась.

Можете ли вы восстановить исходную строку \(s\), использовав последовательность операций не более \(3\) раз?

Строка \(s\) и последовательность операций в каждом тесте являются фиксированными; интерактор не пытается адаптировать тест под ваше решение.

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

Изначально тестирующая система выводит одну строку \(t\), состоящую из строчных латинских букв (\(1 \le |t| = n \le 10^4\)).

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

Чтобы дать ответ, ваша программа должна вывести одну строку \(!\) \(s\) с переводом строки в конце. После этого программа должна сбросить буфер вывода и завершиться.

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

До того, как ваша программа даст ответ, она может отправить не более \(3\) запросов. Чтобы отправить запрос, выведите строку следующего формата: \(?\) \(s'\), где \(s'\) должна быть строкой из ровно \(n\) строчных латинских букв. Строка, которую вы отправляете, должна заканчиваться символов перевода строки. После отправки запроса программа должна сбросить буфер вывода и прочитать ответ на запрос — строку \(t'\), состоящую из \(n\) строчных латинских букв, которая будет являться результатом применения последовательности обменов к \(s'\). Ответ будет дан на отдельной строке, заканчивающейся символом перевода строки.

Если вы зададите некорректный запрос (или же количество запросов превысит \(3\)), ответом будет строка 0. Если ваша программа получила такой ответ, она должна немедленно завершиться — иначе вы можете получить вердикт «Ошибка исполнения», «Превышено ограничение времени» или какой-нибудь другой, а не «Неправильный ответ».

Примечание

В примере рассматривается тест, который приводился в условии. Участник задает запрос со строкой baa, которая превращается в aab. Во втором запросе задается строка aba, которая превращается в baa. В третьем запросе задается строка aab, которая превращается в aba. Участник может понять, что изначально строка \(s\) была xyz.

Замечание к фазе взломов:

Чтобы отправить тест в фазу взломов, предоставьте его в следующем виде:

В первой строке должна быть записана строка \(s\), которую вы загадываете, состоящая из \(n \in [1, 10000]\) строчных латинских букв.

Во второй строке должно быть записано одно целое число \(k\) (\(0 \le k \le n\)) — количество операций в последовательности обменов.

Затем должны следовать \(k\) строк, \(i\)-я из которых должна задавать \(i\)-ю операцию обмена двумя целыми числами \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le n\)).

Например, тест из условия выглядел бы вот так:

xyz

2

1 2

2 3

C. Палиндромная матрица

Конструктив реализация *1700

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

Например, следующие матрицы палиндромные:

Следующие матрицы не палиндромные, потому что меняются при изменении порядка строк на обратный:

Следующие матрицы не палиндромные, потому что меняются при изменении порядка столбцов на обратный:

Заданы \(n^2\) целых чисел. Разместите их в матрице из \(n\) строк и \(n\) столбцов так, чтобы каждое число было использовано ровно один раз, каждая ячейка содержала ровно одно число и полученная матрица была палиндромной. Если существует несколько решений, выведите любое из них. Если решения не существует, выведите «NO».

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

В первой строке записано одно целое число \(n\) (\(1 \le n \le 20\)).

Во второй строке записаны \(n^2\) целых чисел \(a_1, a_2, \dots, a_{n^2}\) (\(1 \le a_i \le 1000\)) — числа, которые требуется разместить в матрице из \(n\) строк и \(n\) столбцов.

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

Если можно разместить все \(n^2\) чисел в матрице из \(n\) строк и \(n\) столбцов так, чтобы каждое число было использовано ровно один раз, каждая ячейка содержала ровно одно число и полученная матрица была палиндромной, то выведите «YES». Затем выведите \(n\) строк, каждая должна содержать \(n\) целых чисел, разделенных пробелами, — полученная матрица.

Если невозможно собрать ни одну матрицу, то выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, «YeS», «no» и «yES» принимаются.

Примечание

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

E. Очередная задача про бал

Конструктив реализация *1700

Король Берляндии устраивает бал! На него приглашены \(n\) пар, они пронумерованы от \(1\) до \(n\). Каждая пара состоит из одного мужчины и одной женщины. Каждый танцор (то есть и мужчина, и женщина) должен надеть одноцветный костюм. Цвет каждого костюма можно обозначить целым числом от \(1\) до \(k\) включительно.

Пусть \(b_i\) — цвет костюма мужчины, а \(g_i\) — цвет костюма женщины в \(i\)-й паре. Вам необходимо выбрать цвета костюмов для каждого из танцоров (то есть значения \(b_1, b_2, \dots, b_n\) и \(g_1, g_2, \dots g_n\)) таким образом, что:

  1. для каждого \(i\): \(b_i\) и \(g_i\) должны быть целыми числами от \(1\) до \(k\) включительно;
  2. не существует двух абсолютно одинаковых пар, то есть не существует двух таких индексов \(i, j\) (\(i \ne j\)), что \(b_i = b_j\) и \(g_i = g_j\) одновременно;
  3. не существует такой пары, что цвет костюма мужчины равен цвету костюма женщины в этой паре, то есть \(b_i \ne g_i\) для всех \(i\);
  4. для каждых двух последовательных (соседних) пар цвета костюмов мужчин и цвета костюмов женщин отличаются, то есть для всех \(i\) от \(1\) до \(n-1\) должны выполняться условия \(b_i \ne b_{i + 1}\) и \(g_i \ne g_{i + 1}\).

Посмотрим на примеры хороших и плохих выборов цветов (для \(n=4\) и \(k=3\), мужчина — первый в паре, а женщина — вторая):

Плохие выборы цветов:

  • \((1, 2)\), \((2, 3)\), \((3, 2)\), \((1, 2)\) — противоречие со вторым условием (есть одинаковые пары);
  • \((2, 3)\), \((1, 1)\), \((3, 2)\), \((1, 3)\) — противоречие с третьим условием (существует пара в костюмах одинаковых цветов);
  • \((1, 2)\), \((2, 3)\), \((1, 3)\), \((2, 1)\) — противоречие с четвертым условием (есть две последовательные пары такие, что цвета костюмов мужчин/женщин совпадают).

Хорошие выборы цветов:

  • \((1, 2)\), \((2, 1)\), \((1, 3)\), \((3, 1)\);
  • \((1, 2)\), \((3, 1)\), \((2, 3)\), \((3, 2)\);
  • \((3, 1)\), \((1, 2)\), \((2, 3)\), \((3, 2)\).

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

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

Единственная строка входных данных содержит два целых числа \(n\) и \(k\) (\(2 \le n, k \le 2 \cdot 10^5\)) — количество пар и количество цветов.

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

Если невозможно найти любой подходящий выбор цветов, выведите «NO».

Иначе выведите «YES» и затем цвета костюмов пар в следующих \(n\) строках. \(i\)-я строка должна содержать два целых числа \(b_i\) и \(g_i\) — цвета костюмов мужчины и женщины в \(i\)-й паре соответственно.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, «YeS», «no» и «yES» принимаются.

C. Рамзес и инвертирование углов

жадные алгоритмы Конструктив математика реализация *1500

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

Даны две матрицы \(A\) и \(B\) размера \(n \times m\), каждая состоит только из \(0\) и \(1\). Рамзес может сколько угодно раз применять к матрице \(A\) следующую операцию: взять любую подматрицу матрицы \(A\), содержащую хотя бы две строки и два столбца, и инвертировать значение в её углах (то есть все углы подматрицы, в которых раньше стоял \(0\), после операции будут содержать \(1\), а все углы подматрицы, в которых раньше стояла \(1\), после операции будут содержать \(0\)). Требуется ответить, можно ли из матрицы \(A\) получить матрицу \(B\).

Пример операции. Выбранная подматрица выделена голубым и желтым, ее углы выделены желтым.

Так как Рамзес не хочет выполнять эти операции вручную, он просит вас ответить на этот вопрос.

Подматрицей матрицы \(M\) называется матрица, образованная элементами на пересечении множества строк с номерами \(x_1, x_1+1, \ldots, x_2\) матрицы \(M\) и множества столбцов с номерами \(y_1, y_1+1, \ldots, y_2\) матрицы \(M\), где \(x_1, x_2, y_1, y_2\) — крайние строки и столбцы подматрицы. Иными словами, подматрица — это набор ячеек исходной матрицы, которые образуют сплошной (без пустот) прямоугольник со сторонами, параллельными сторонам исходной матрицы, углами подматрицы являются клетки \((x_1, y_1)\), \((x_1, y_2)\), \((x_2, y_1)\), \((x_2, y_2)\), где клетка \((i,j)\) обозначает клетку на пересечении \(i\)-й строки и \(j\)-го столбца.

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

В первой строке находятся два целых числа \(n\) и \(m\), разделенных пробелом (\(1 \leq n, m \leq 500\)) — количество строк и столбцов в матрицах \(A\) и \(B\) соответственно.

В следующих \(n\) строках находятся по \(m\) целых чисел, разделенных пробелом: \(j\)-е число в \(i\)-й из этих строк обозначает \(j\)-й элемент \(i\)-й строки матрицы \(A\) (\(0 \leq A_{ij} \leq 1\)).

В следующих \(n\) строках находятся по \(m\) целых чисел, разделенных пробелом: \(j\)-е число в \(i\)-й из этих строк обозначает \(j\)-й элемент \(i\)-й строки матрицы \(B\) (\(0 \leq B_{ij} \leq 1\)).

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

Выведите «Yes» (без кавычек), если вышеуказанными действиями можно превратить матрицу \(A\) в матрицу \(B\), и «No» (без кавычек), если нельзя. Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

Примеры объяснены на рисунках ниже.

Пример 1.
Пример 2.
Пример 3.

G. Подготовка к сражению

Конструктив реализация *3100

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

В ближайшем сражении армии Евлампия предстоит сразиться с армией противника, состоящей из \(m\) групп, \(i\)-я из которых имеет запас здоровья \(hp_i\).

Сейчас у Евлампия есть \(n\) одинаковых воинов. Перед любой битвой он должен разделить их на ровно \(m\) групп (возможно, пустых) так, что суммарный размер групп равен \(n\). Сражение происходит пошагово. На каждом шаге каждая из групп Евлампия нападает на ровно одну группу противника. Таком образом, каждый шаг задается массивом из \(m\) чисел \(a_1, a_2, \ldots, a_m\), обозначающих, что \(i\)-й отряд Евлампия нападает на \(a_i\)-й отряд противника. Разные отряды могут нападать на одну и ту же группу противника, на каждом шаге массив \(a\) выбирается заново.

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

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

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

Иными словами, вам необходимо найти минимальное количество ходов, за которые можно уничтожить все войска противника, а после этого показать, как это сделать. Для этого опишите разбиение вашего войска на \(m\) групп, и выведите последовательности \(a\), описывающие каждый из ходов игры.

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

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \leq m \leq n \leq 10^{6}\)), разделенные пробелом — количество воинов в армии Евлампия и число групп в армии противника. \(m\) также равно числу групп, на которые Евлампий может разбить свою армию.

Вторая строка содержит \(m\) целых чисел \(hp_1, hp_2, \ldots, hp_m\) (\(1 \leq hp_i \leq 10^{6}\)) — здоровье групп противника.

Гарантируется, что сумма \(hp_i\) не превышает \(10^{6}\).

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

В первой строке выведите одно целое число \(t\) — минимальное чисто ходов, необходимое Евлампию для победы в битве.

После этого выведите \(m\) целых чисел \(s_1, s_2, \ldots, s_m\) (\(s_i \ge 0\), \(s_1 + s_2 + \ldots + s_m = n\)), обозначающих, что в \(i\)-й группе войска Евлампия будет \(s_i\) воинов.

В каждой из следующих \(t\) строках выведите \(m\) целых чисел \(a_1, a_2, \ldots, a_m\) (\(1 \le a_i \le m\)) — описание очередного хода Евлампия. Эти числа означают, что на очередном ходу \(i\)-я группа войска Евлампия должна атаковать \(a_i\)-ю группу войска противника. Разрешается нападать на уже уничтоженный отряд противника.

Примечание

Первый пример показан на рисунке.

B. Неправильный ответ

Конструктив *2000

Рассмотрим следующую задачу: дан массив \(a\), содержащий \(n\) целых чисел (пронумерованных от \(0\) до \(n-1\)), найдите \(\max\limits_{0 \leq l \leq r \leq n-1} \sum\limits_{l \leq i \leq r} (r-l+1) \cdot a_i\). В этой задаче \(1 \leq n \leq 2\,000\) и \(|a_i| \leq 10^6\).

Попытавшись решить эту задачу, Алиса сразу придумала сногсшибательно-быстрый алгоритм и запрограммировала его. Псевдокод ее реализации такой:


function find_answer(n, a)
# Assumes n is an integer between 1 and 2000, inclusive
# Assumes a is a list containing n integers: a[0], a[1], ..., a[n-1]
res = 0
cur = 0
k = -1
for i = 0 to i = n-1
cur = cur + a[i]
if cur < 0
cur = 0
k = i
res = max(res, (i-k)*cur)
return res

Как вы можете видеть, идея Алисы не отличается правильностью. Например, положим \(n = 4\) и \(a = [6, -8, 7, -42]\). Тогда find_answer(n, a) вернет \(7\), но правильный ответ \(3 \cdot (6-8+7) = 15\).

Вы сказали Алисе, что ее решение неправильное, но она вам не поверила.

Дано целое число \(k\), ваша задача — найти любую последовательность \(a\) из \(n\) целых чисел такую, что правильный ответ для нее и ответ алгоритма Алисы отличается ровно на \(k\). Обратите внимание, что не смотря на то, что вы сами выбираете \(n\) и содержание последовательности, вы все равно должны следовать данным ограничениям: \(1 \leq n \leq 2\,000\) и абсолютная величина каждого элемента последовательности не должна превосходить \(10^6\). Если такой последовательности нет, вы должны это определить.

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

Первая и единственная строка ввода содержит одно целое число \(k\) (\(1 \leq k \leq 10^9\)).

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

Если не существует искомой последовательности, выведите «-1».

Иначе в первой строке выведите одно целое число \(n\) (\(1 \leq n \leq 2\,000\)), обозначающее число элементов в последовательности.

Затем, во второй строке выведите \(n\) целых чисел, разделенных пробелами: \(a_0, a_1, \ldots, a_{n-1}\) (\(|a_i| \leq 10^6\)).

Примечание

Первый пример соответствует массиву, разобранному в условии.

Во втором примере один из возможных ответов это \(n = 7\) и \(a = [30, -12, -99, 123, -2, 245, -300]\), на котором find_answer(n, a) вернет \(1098\), когда правильный ответ равен \(1710\).

F. Ася и котята

Конструктив снм *1700

Ася очень любит животных. Недавно она приобрела \(n\) котят, пронумеровала их от \(1\) до \(n\) и поселила в вольере. Вольер представляет собой ряд из \(n\) ячеек, пронумерованных от \(1\) до \(n\) слева направо. Cоседние ячейки разделены сетчатыми перегородками, всего в вольере \(n - 1\) перегородок. Изначально в каждой ячейке поселился ровно один котёнок с некоторым номером.

Наблюдая за котятами, Ася заметила, что они очень дружелюбны и некоторые пары живущих в соседних ячейках котят очень хотят играть друг с другом. Чтобы не лишать их этого удовольствия, Ася стала вынимать перегородки между соседними ячейками. В частности, в \(i\)-й день, Ася:

  • Обратила внимание, что котята \(x_i\) и \(y_i\), живущие в соседних ячейках, хотят играть вместе.
  • Удаляла перегородку между этими ячейками, превращая их в одну, в которой оказывались все котята из двух прежних ячеек.

Поскольку Ася ни разу возвращала перегородки, через \(n - 1\) день вольер стал единой ячейкой, в которой оказались все котята.

Для каждого дня, Ася помнит номера котят \(x_i\) и \(y_i\), которые хотели играть вместе, однако она не помнит как котята были поселены в ячейки изначально. Помогите ей найти какое-нибудь возможное начальное расселение котят по \(n\) ячейкам.

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

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 150\,000\)) — количество котят.

Каждая из следующих \(n - 1\) строк содержит пары целых чисел \(x_i\), \(y_i\) (\(1 \le x_i, y_i \le n\), \(x_i \ne y_i\)) — номера котят, между ячейками которых была удалена перегородка в очередной день.

Гарантируется, что котята \(x_i\) и \(y_i\) ещё не находились в одной ячейке по итогам предыдущих объединений.

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

Для каждой ячейки от \(1\) до \(n\) выведите целое число — номер котёнка от \(1\) до \(n\), который в ней находился изначально.

Все выведенные числа должны быть различны.

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

Примечание

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

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

F2. Покрывающее дерево с одной фиксированной степенью

графы жадные алгоритмы Конструктив поиск в глубину и подобное снм *1900

Задан неориентированный невзвешенный связный граф, состоящий из \(n\) вершин и \(m\) ребер. Гарантируется, что в графе отсутствуют петли и кратные ребра.

Ваша задача — найти любое такое покрывающее дерево этого графа, что степень первой вершины (вершины с номером \(1\)) вершины равна \(D\) (или сказать, что таких покрывающих деревьев не существует). Напомним, что степень вершины — это количество ребер, инцидентных ей.

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

Первая строка входных данных содержит три целых числа \(n\), \(m\) и \(D\) (\(2 \le n \le 2 \cdot 10^5\), \(n - 1 \le m \le min(2 \cdot 10^5, \frac{n(n-1)}{2}), 1 \le D < n\)) — количество вершин, количество ребер и необходимая степень первой вершины соответственно.

Следующие \(m\) строк описывают ребра: ребро \(i\) представлено в виде пары целых чисел \(v_i\), \(u_i\) (\(1 \le v_i, u_i \le n\), \(u_i \ne v_i\)), которые означают номера вершин, соединяемых этим ребром. В заданном графе отсутствуют петли и кратные ребра, то есть для каждой пары (\(v_i, u_i\)) в списке ребер не существует других пар (\(v_i, u_i\)) или (\(u_i, v_i\)), также для каждой пары \((v_i, u_i)\) выполняется условие \(v_i \ne u_i\).

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

Если не существует покрывающего дерева, удовлетворяющего условию задачи выведите «NO» в первой строке.

Иначе выведите «YES» в первой строке и затем выведите \(n-1\) строк, описывающих ребра такого покрывающего дерева, что степень первой вершины (вершины с номером \(1\)) равна \(D\). Убедитесь, что ребра выводимого покрывающего дерева представляют собой подмножество ребер входных данных (порядок ребер не важен, также ребро \((v, u)\) может быть выведено как \((u, v)\)).

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

Примечание

Картинка, соответствующая первому и второму тестовым примерам:

Картинка, соответствующая третьему тестовому примеру:

B. Настя играет в компьютер

Конструктив математика *1000

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

За один ход Настя может сделать одну из следующих операций:

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

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

Заметьте еще раз, что Настя может открыть люк только в том случае, если на нем не лежит ни одного камня.

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

В единственной строка находятся два целых числа, разделенных пробелом: \(n\) и \(k\) (\(2 \leq n \leq 5000\), \(1 \leq k \leq n\)) — количество люков в комнате и номер люка по порядку, рядом с которым изначально стоит Настя. Изначально ровно один камень лежит на каждом из \(n\) люков.

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

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

Примечание

Рассмотрим пример, где \(n = 2\), \(k = 2\). Настя сделает следующее:

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

То есть за \(6\) ходов Настя соберет все монетки.

C. Настя транспонирует матрицу

Конструктив сортировки *1500

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

Даны две матрицы \(A\) и \(B\), каждая размера \(n \times m\). Настя может сколько угодно раз применять к матрице \(A\) следующую операцию: взять любую квадратную подматрицу матрицы \(A\) и транспонировать её (то есть элемент подматрицы, стоявший в \(i\)-й строке и \(j\)-м столбце этой подматрицы, после операции транспонирования будет стоять в ней в \(j\)-й строке и в \(i\)-м столбце, при этом сама подматрица в уже транспонированном виде останется на том же месте в матрице \(A\)). Требуется ответить, можно ли из матрицы \(A\) получить матрицу \(B\).

Пример описанной операции

Так как Настя не хочет выполнять эти операции вручную, она просит вас ответить на этот вопрос.

Квадратной подматрицей матрицы \(M\) называется матрица, образованная элементами на пересечении множества строк с номерами \(x, x+1, \dots, x+k-1\) матрицы \(M\) и множества столбцов с номерами \(y, y+1, \dots, y+k-1\) матрицы \(M\), где \(k\) — размер квадратной подматрицы. Иными словами, квадратная подматрица — это набор ячеек исходной матрицы, которые образуют сплошной (без пустот) квадрат со сторонами параллельными сторонам исходной матрицы.

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

В первой строке вводятся два целых числа \(n\) и \(m\), разделенных пробелом (\(1 \leq n, m \leq 500\)) — количество строк и столбцов в матрицах \(A\) и \(B\) соответственно.

В следующих \(n\) строках вводятся по \(m\) целых чисел, разделенных пробелом: \(j\)-е число в \(i\)-й из этих строк обозначает \(j\)-й элемент \(i\)-й строки матрицы \(A\) (\(1 \leq A_{ij} \leq 10^{9}\)).

В следующих \(n\) строках вводятся по \(m\) целых чисел, разделенных пробелом: \(j\)-е число в \(i\)-й из этих строк обозначает \(j\)-й элемент \(i\)-й строки матрицы \(B\) (\(1 \leq B_{ij} \leq 10^{9}\)).

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

Выведите «YES» (без кавычек), если вышеуказанными действиями можно превратить матрицу \(A\) в матрицу \(B\), и «NO» (без кавычек), если нельзя.

Примечание

Рассмотрим третий пример из условия. Изначальная матрица \(A\) имеет вид

\(\) \begin{bmatrix} 1 & 2 & 3\\ 4 & 5 & 6\\ 7 & 8 & 9 \end{bmatrix} \(\)

Если выбрать как транспонируемую квадратную подматрицу всю матрицу, то после транспонирования получим

\(\) \begin{bmatrix} 1 & 4 & 7\\ 2 & 5 & 8\\ 3 & 6 & 9 \end{bmatrix} \(\)

Теперь транспонируем матрицу с углами в клетках \((2, 2)\) и \((3, 3)\).

\(\) \begin{bmatrix} 1 & 4 & 7\\ 2 & \textbf{5} & \textbf{8}\\ 3 & \textbf{6} & \textbf{9} \end{bmatrix} \(\)

Получим

\(\) \begin{bmatrix} 1 & 4 & 7\\ 2 & 5 & 6\\ 3 & 8 & 9 \end{bmatrix} \(\)

что, в свою очередь, и есть матрица \(B\).

D. Кооперативная игра

интерактив Конструктив теория чисел *2400

Это интерактивная задача.

Миша очень любит играть в кооперативные игры с неполной информацией. Сегодня он предложил десяти своим друзьям сыграть в кооперативную игру «Озеро».

Миша уже нарисовал игровое поле для предстоящей игры. Оно представляет из себя ориентированный граф, состоящий из двух частей. Одна из этих частей — дорожка вдоль берега озера, являющаяся циклом из \(c\) вершин. Вторая часть — тропинка от домика к озеру, представляющая из себя цепь из \(t\) вершин, причём из последней вершины этой цепи проведено ребро в одну из вершин дорожки вокруг озера — в ту, из которой на озеро открывается наилучший вид. Игровое поле Миша решил держать в секрете, так что никто кроме него не знает ни \(t\), ни \(c\).

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

В начале игры игровые фишки всех десяти игроков, для удобства пронумерованных цифрами от \(0\) до \(9\), располагаются в начале тропинки, в вершине у домика. Затем не более \(q\) раз Миша будет одновременно передвигать в следующие вершины фишки игроков, высказавших такое желание на этом ходу, а после этого объявлять, фишки каких игроков находятся в одной вершине, а каких — в разных.

Цель игры — перевести игровые фишки всех игроков в вершину с наилучшим видом на озеро, то есть в ту, которая отмечена финишным флагом. Мишины друзья не представляют, как можно выиграть в такой игре, не зная ни \(c\), ни \(t\), ни \(q\), но, к счастью для них, они ещё и ваши друзья. Помогите им: скоординируйте их действия так, чтобы победить.

Миша нарисовал такое игровое поле, что \(1 \le t, c\), \((t+c) \leq 1000\) и \(q = 3 \cdot (t+c)\).

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

Входных данных нет — сразу переходите к интерактивному взаимодействию.

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

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

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

Для того, чтобы отдать команды перемещения друзьям, выведите «next», а затем через пробел номера друзей, которым необходимо отдать команды. Например, чтобы отдать команду перемещения друзьям с номерами \(0\), \(2\), \(5\) и \(9\) выведите «next 0 2 5 9». На каждом ходу обязательно перемещать хотя бы одного из друзей.

В качестве ответа проверяющая программа выдаст сначала число \(k\), а потом \(10\) цифр, разбитых на \(k\) групп, разделённых пробелами. Друзья, соответствующие цифрам, находящимся в одной группе, находятся в одной вершине. Друзья, соответствующие цифрам, находящимся в разных группах, находятся в разных вершинах. Цифры в каждой группе следуют в порядке возрастания.

Например, ответ «2 05 12346789» означает, что друзья с номерами \(0\) и \(5\) находятся в одной вершине, а все остальные друзья в одной и той же, но другой вершине. Ответ «4 01 567 234 89» означает, что друзья Миши находятся в четырёх различных вершинах: в первой находятся друзья с номерами \(0\) и \(1\), во второй — друзья с номерами \(5\), \(6\) и \(7\), в третьей — друзья с номерами \(2\), \(3\) и \(4\), а в четвёртой — друзья с номерами \(8\) и \(9\).

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Ответ «stop» вместо корректного означает, что ваша программа сделала некорректный запрос или превысила число запросов. Ваша программа должна немедленно завершиться после прочтения ответа «stop», вы получите вердикт Неправильный ответ. В противном случае вы можете получить любой вердикт, так как программа продолжит чтение из закрытого потока.

Взломы

Чтобы совершить взлом, выведите два целых числа \(t\) и \(c\) в одной строке (\(1 \le t, c\), \((t+c) \leq 1000\)).

Примечание

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

В примере перемещение друзей происходит следующим образом:

G. Приватизация дорог в Древляндии

Бинарный поиск графы Деревья жадные алгоритмы Конструктив поиск в глубину и подобное *1900

Древляндия состоит из \(n\) городов и \(n-1\) дороги. Все дороги являются двусторонними и соединяют пару различных городов. Из любого города по дорогам можно добраться до любого другого. Всё верно, топология страны — это именно неориентированное дерево.

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

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

Выберите такое минимальное количество компаний \(r\), что возможно распределить все дороги по этим компаниям так, что количество городов с двумя или более дорогами одной компании не превосходит \(k\). Другими словами, назовём город хорошим, если все его дороги принадлежат различным компаниям. Ваша задача найти минимальное \(r\), что существует распределение всех дорог по компаниям от \(1\) до \(r\), что количество не являющимися хорошими городов не превосходит \(k\).

Картинка иллюстрирует первый пример (\(n=6, k=2\)). Ответ на этот тест содержит \(r=2\) компании. Числа на рёбрах соответствуют номерам дорог. Цвета рёбер соответствуют компаниям: красный цвет обозначает первую компанию, синий цвет обозначает вторую компанию. Серая вершина (с номером \(3\)) соответвует городу, который не является хорошим. Количество таких вершин (в данном случае, только одна) не превосходит \(k=2\). Невозможно получить не более \(k=2\) таких вершин, если ответ содержит только одну компанию.
Входные данные

В первой строке записаны два целых числа \(n\) и \(k\) (\(2 \le n \le 200000, 0 \le k \le n - 1\)) — количество городов и максимальное возможное количество городов с двумя или более дорогами одной компании.

Следующие \(n-1\) строк содержат описания дорог, по одному описанию в строке. Каждая строка содержит пару целых чисел \(x_i\), \(y_i\) (\(1 \le x_i, y_i \le n\)), где \(x_i\), \(y_i\) — номера городов, которые соединены \(i\)-й дорогой.

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

В первую строку выведите искомое число \(r\) (\(1 \le r \le n - 1\)). Во вторую строку выведите \(n-1\) целое число \(c_1, c_2, \dots, c_{n-1}\) (\(1 \le c_i \le r\)), где \(c_i\) — это номер компании, которая должна владеть \(i\)-й дорогой. Если ответов несколько, то выведите любой из них.

C. Две перемешанные последовательности

Конструктив сортировки *1000

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

Строго возрастающая последовательность — это последовательность целых чисел \([x_1 < x_2 < \dots < x_k]\). А строго убывающая последовательность — это последовательность целых чисел \([y_1 > y_2 > \dots > y_l]\). Заметьте, что пустая последовательность и последовательность, состоящая из одного элемента, могут являться как возрастающими, так и убывающими.

Они были объединены в одну последовательность \(a\). После этого последовательность \(a\) была перемешана. Например, некоторыми возможными результирующими последовательностями \(a\) для возрастающей последовательности \([1, 3, 4]\) и убывающей последовательности \([10, 4, 2]\) являются последовательности \([1, 2, 3, 4, 4, 10]\) и \([4, 2, 1, 10, 4, 3]\).

Эта перемешанная последовательность \(a\) задана во входных данных.

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

Если входные данные противоречивы и невозможно разбить заданную последовательность \(a\) на убывающую и возрастающую последовательности, выведите «NO».

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

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество элементов в \(a\).

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 2 \cdot 10^5\)), где \(a_i\)\(i\)-й элемент \(a\).

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

Если входные данные противоречивы и невозможно разбить заданную последовательность \(a\) на убывающую и возрастающую последовательности, выведите «NO» в первой строке.

Иначе выведите «YES» в первой строке и любые две подходящие последовательности. Заметьте, что пустая последовательность и последовательность, состоящая из одного элемента, могут являться как возрастающими, так и убывающими.

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

В третьей строке выведите \(n_i\) целых чисел \(inc_1, inc_2, \dots, inc_{n_i}\) в возрастающем порядке их значений (\(inc_1 < inc_2 < \dots < inc_{n_i}\)) — строго возрастающую последовательность. Вы можете оставить эту строку пустой, если \(n_i = 0\) (или просто вывести пустую строку).

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

В пятой строке выведите \(n_d\) целых чисел \(dec_1, dec_2, \dots, dec_{n_d}\) в убывающем порядке их значений (\(dec_1 > dec_2 > \dots > dec_{n_d}\)) — строго убывающую последовательность. Вы можете оставить эту строку пустой, если \(n_d = 0\) (или просто вывести пустую строку).

\(n_i + n_d\) должны быть равны \(n\), а объединение выведенных последовательностей должно быть перестановкой заданной последовательности (в случае ответа «YES»).

D. Приравняй их все

жадные алгоритмы Конструктив *1400

Задан массив \(a\), состоящий из \(n\) целых чисел. Вы можете выполнять следующие операции любое количество раз (возможно, нулевое):

  1. Выбрать пару индексов \((i, j)\) таких, что \(|i-j|=1\) (индексы \(i\) и \(j\) являются соседними) и присвоить \(a_i := a_i + |a_i - a_j|\);
  2. Выбрать пару индексов \((i, j)\) таких, что \(|i-j|=1\) (индексы \(i\) и \(j\) являются соседними) и присвоить \(a_i := a_i - |a_i - a_j|\).

Значение \(|x|\) означает абсолютную величину \(x\). Например, \(|4| = 4\), \(|-3| = 3\).

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

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

Заметьте, что после каждой операции каждый элемент текущего массива не должен превосходить \(10^{18}\) по абсолютной величине.

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

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество элементов в \(a\).

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 2 \cdot 10^5\)), где \(a_i\)\(i\)-й элемент \(a\).

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

В первой строке выведите одно целое число \(k\) — минимальное количество операций, необходимое для того, чтобы получить массив, состоящий из одинаковых чисел.

В следующих \(k\) строках выведите сами операции. \(p\)-я операция должна быть выведена в виде тройки целых чисел \((t_p, i_p, j_p)\), где \(t_p\) равно либо \(1\), либо \(2\) (\(1\) означает, что Вы выполняете операцию первого типа, а \(2\) означает, что Вы выполняете операцию второго типа), а \(i_p\) и \(j_p\) — индексы соседних элементов массива такие, что \(1 \le i_p, j_p \le n\), \(|i_p - j_p| = 1\). Смотрите в примеры для лучшего понимания.

Заметьте, что после каждой операции каждый элемент текущего массива не должен превосходить \(10^{18}\) по абсолютной величине.

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

C. Crazy Diamond

Конструктив сортировки *1700

Вам дана перестановка \(p\) целых чисел от \(1\) до \(n\), где \(n\) чётно.

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

  • выбрать два индекса \(i\) и \(j\), такие что \(2 \cdot |i - j| \geq n\), и поменять \(p_i\) и \(p_j\).

Вы хотите отсортировать перестановку за не более чем \(5 \cdot n\) операций. Можно показать, что это всегда можно сделать. Обратите внимание, что не требуется минимизировать число операций.

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

Первая строка содержит одно целое число \(n\) (\(2 \leq n \leq 3 \cdot 10^5\), \(n\) чётно) — длина перестановки.

Вторая строка содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)) — данную вам перестановку.

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

В первой строке выведите \(m\) (\(0 \le m \le 5 \cdot n\)) — количество свопов, которое нужно проделать.

В каждой из следующих \(m\) строк выведите два целых числа \(a_i, b_i\) (\(1 \le a_i, b_i \le n\), \(|a_i - b_i| \ge \frac{n}{2}\)) — индексы элементов, которых нужно поменять в соответствующем обмене.

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

Примечание

В первом примере, если поменять элементы с индексами \(1\) и \(2\) массив станет отсортированным.

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

В третьем примере, после того, как были поменяны местами элементы с индексами \(1\) и \(5\), массив выглядит так: \([4, 5, 3, 1, 2, 6]\). После того. как были поменяны местами элементы с индексами \(2\) и \(5\), так: \([4, 2, 3, 1, 5, 6]\). После того, как были поменяны местами элементы с индексами \(1\) и \(4\), массив становится отсортированным: \([1, 2, 3, 4, 5, 6]\).

E. Earth Wind and Fire

жадные алгоритмы Конструктив математика сортировки *2300

На числовой прямой расположены \(n\) камней. Изначально \(i\)-й камень находится в точке с координатой \(s_i\). В одной точке может находиться более одного камня одновременно.

Вы можете выполнить ноль или более операций следующего вида:

  • взять два камня с индексами \(i\) и \(j\) такими, что \(s_i \leq s_j\), выбрать целое число \(d\) (\(0 \leq 2 \cdot d \leq s_j - s_i\)) и заменить координату \(s_i\) на \((s_i + d)\), а координату \(s_j\) на \((s_j - d)\). Другими словами, подвинуть камни друг к другу.

Вы хотите подвинуть камни так, чтобы они находились в позициях \(t_1, t_2, \ldots, t_n\). Порядок камней не важен — требуется лишь, чтобы мультимножество координат камней в конце совпадало с мультимножеством, состоящим из \(t_1, t_2, \ldots, t_n\).

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

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) – количество камней.

Вторая строка содержит целые числа \(s_1, s_2, \ldots, s_n\) (\(1 \le s_i \le 10^9\)) — изначальные позиции камней.

Третья строка содержит целые числа \(t_1, t_2, \ldots, t_n\) (\(1 \le t_i \le 10^9\)) — требуемые позиции камней.

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

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

Иначе на первой строке выведите «YES», на второй строке выведите количество операций \(m\) (\(0 \le m \le 5 \cdot n\)), которое нужно сделать. Вам не нужно минимизировать число операций.

Затем выведите \(m\) строк, каждая из которых содержит три целых числа \(i, j, d\) (\(1 \le i, j \le n\), \(s_i \le s_j\), \(0 \leq 2 \cdot d \leq s_j - s_i\)), обозначающие операцию, которую нужно сделать.

Можно показать, что если какой-то ответ существует, то существует и ответ, использующий не более чем \(5 \cdot n\) операций.

Примечание

Рассмотрим первый пример.

  • После первой операции позиции камней равны \([2, 2, 6, 5, 9]\).
  • После второй операции позиции камней равны \([2, 3, 5, 5, 9]\).
  • После третьей операции позиции камней равны \([2, 5, 5, 5, 7]\).
  • После последней операции позиции камней равны \([4, 5, 5, 5, 5]\).

F. Foo Fighters

битмаски Конструктив *2700

Вам дано \(n\) объектов. У каждого объекта есть два целочисленных свойства: \(val_i\) — его цена — и \(mask_i\). Гарантируется, что изначально сумма цен всех объектов не равна нулю.

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

  • рассмотрим \(mask_i\) и \(s\) в двоичной системе счисления,
  • вычислим побитовое «И» \(s\) и \(mask_i\) (\(s \,\&\, mask_i\)),
  • если (\(s \,\&\, mask_i\)) содержит нечётное число единиц в двоичной записи, то \(val_i\) меняется на \(-val_i\). Иначе с \(i\)-м объектом ничего не происходит.

Нужно найти такое целое число \(s\), что если произвести модификацию, как описано выше, то сумма всех цен сменит знак (если она была отрицательной, то она должна стать положительной, и наоборот; не разрешается сумме становится нулём). При этом абсолютное значение суммы цен может стать любым.

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

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 3 \cdot 10^5\)) — количество объектов.

\(i\)-я из следующих \(n\) строк содержит целые числа \(val_i\) и \(mask_i\) (\(-10^9 \leq val_i \leq 10^9\), \(1 \le mask_i \le 2^{62} - 1\))  — цена объекта и его маска.

Гарантируется, что сумма всех \(val_i\) не равна нулю.

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

Выведите целое число \(s\) (\(1 \le s \le 2^{62} - 1\)) такое, что если его произвести модификацию, как описано выше, то сумма всех \(val_i\) сменит знак.

В случае если существует несколько таких \(s\), выведите любое из них. Можно показать, что всегда существует хотя бы одно подходящее \(s\).

Примечание

В первом тестовом примере все объекты изменят свою стоимость кроме объекта с маской \(151\).

Поэтому их сумма изменит знак: изначально \(24\), после модификаций — \(-28\).

Во втором тестовом примере единственный объект поменяет свою стоимость. Поэтому сумма всех цен изменит знак.

G. Gold Experience

графы Конструктив математика Теория вероятностей теория чисел *3300

Рассмотрим неориентированный граф \(G\) из \(n\) вершин. В каждой вершине расположено целое число \(a_i\).

Две вершины \(i\) и \(j\) соединены ребром, если и только если \(gcd(a_i, a_j) > 1\), где \(gcd(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\).

Рассмотрим множество вершин. Скажем, что вершина в этом множестве честная, если она соединена ребром со всеми остальными вершинами в этом множестве.

Вам нужно найти множество из \(k\) вершин (\(k\) — фиксированное целое число, \(2 \cdot k \le n\)) такое, что в нём все вершины честные или все вершины не являются честными. Можно показать, что хотя бы одно такое множество всегда существует.

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

Первая строка содержит целые числа \(n\) и \(k\) (\(6 \leq 2 \cdot k \leq n \leq 10^5\)) — the количество вершин и значение параметра \(k\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(2 \le a_i \le 10^7\)) — значения, записанные в вершинах.

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

Выведите ровно \(k\) различных целых чисел — индексы элементов в множестве в любом порядке.

Примечание

В первом примере, множество \(\{2, 4, 5\}\) является примером множества без честных вершин. Видно, что вершина \(2\) не имеет общего ребра с вершиной \(4\), так как \(gcd(15, 8) = 1\). Вершина \(4\) не имеет общего ребра с вершиной \(2\). Вершина \(5\) не имеет общего ребра с вершиной \(2\).

Во втором примере множество \(\{8, 5, 6, 4\}\) является примером множества, где все вершины честные.

A. Простые префиксные суммы

жадные алгоритмы Конструктив математика теория чисел *1200

Мы раздаем огромные красивые мешки, содержащие плитки с числами!

Мешок, который мы хотим вам подарить, содержит \(n\) плиток. На каждой из них записано одно число — \(1\) или \(2\).

Тем не менее, есть одно условие, которое вы должны выполнить, чтобы получить приз.

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

Сможете ли вы выиграть приз? Спешите, мешки ждут!

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

В первой строке записано одно целое число \(n\) (\(1 \leq n \leq 200\,000\)) — количество плиток с числами в сумке.

В следующей строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(a_i \in \{1, 2\}\)) — значения, записанные на плитках.

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

Выведите перестановку \(b_1, b_2, \dots, b_n\) данной последовательности \((a_1, a_2, \dots, a_n)\), максимизирующую количество префиксных сумм, которые являются простыми числами.

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

Примечание

В первом примере оптимально выложить плитки так, чтобы префиксные суммы были равны \(1, \mathbf{\color{blue}{2}}, \mathbf{\color{blue}{3}}, \mathbf{\color{blue}{5}}, \mathbf{\color{blue}{7}}\) (четыре простых числа).

Во втором примере оптимально выложить плитки так, чтобы префиксные суммы были равны \(1, \mathbf{\color{blue}{2}}, \mathbf{\color{blue}{3}}, \mathbf{\color{blue}{5}}, 6, \mathbf{\color{blue}{7}}, 8, 10, \mathbf{\color{blue}{11}}\) (пять простых).

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

B. Дима и плохой XOR

битмаски дп Конструктив Перебор *1600

У лицеиста Димы из Кремляндии есть таблица \(a\) размера \(n \times m\), заполненная целыми неотрицательными числами.

Он хочет в каждой строке выбрать ровно одно число так, чтобы побитовое исключающее ИЛИ выбранных чисел было строго больше нуля. Помогите ему!

Формально, он хочет выбрать последовательность чисел \(c_1, c_2, \ldots, c_n\) (\(1 \leq c_j \leq m\)) так, чтобы выполнялось неравенство \(a_{1, c_1} \oplus a_{2, c_2} \oplus \ldots \oplus a_{n, c_n} > 0\), где \(a_{i, j}\) — элемент таблицы в \(i\)-й строке и \(j\)-м столбце.

Здесь \(x \oplus y\) обозначает операцию побитового исключающего ИЛИ чисел \(x\) и \(y\).

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

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

В следующих \(n\) строках записано по \(m\) целых чисел, разделенных пробелом: \(j\)-е число в \(i\)-й из этих строк обозначает \(j\)-й элемент \(i\)-й строки матрицы \(a\), то есть \(a_{i, j}\) (\(0 \leq a_{i, j} \leq 1023\)).

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

Если не существует способа выбрать в каждой строке таблицы одно число, чтобы их побитовое исключающее ИЛИ было строго больше нуля, выведите «NIE».

В противном случае выведите «TAK», и в следующей строке выведите \(n\) целых чисел \(c_1, c_2, \ldots c_n\), разделенных пробелами, (\(1 \leq c_j \leq m\)), чтобы выполнялось неравенство \(a_{1, c_1} \oplus a_{2, c_2} \oplus \ldots \oplus a_{n, c_n} > 0\).

Если существует более одного возможного ответа, вы можете вывести любой.

Примечание

В первом примере все числа в матрице равны \(0\), поэтому невозможно выбрать в каждой строке таблицы по одному числу так, чтобы их побитовое исключающее ИЛИ было строго больше нуля.

Во втором примере выбранные числа \(7\) (первое число в первой строке) и \(10\) (третье число во второй строке), \(7 \oplus 10 = 13\), \(13\) больше чем \(0\), поэтому ответ найден.

C. Задача для Назара

Конструктив математика *1800

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

Рассмотрим два бесконечных множества чисел. Первое состоит из нечётных положительных чисел (\(1, 3, 5, 7, \ldots\)), а второе — из чётных положительных чисел (\(2, 4, 6, 8, \ldots\)). На первом этапе учитель выписывает на бесконечную доску первое число из первого множества, на втором этапе — первых два числа из второго множества, на третьем этапе — следующих четыре числа из первого множества, на четвёртом — следующих восемь чисел из второго множества и так далее. Другими словами, на каждом этапе, начиная со второго, он выписывает в два раза больше чисел, чем на предыдущем, а также меняет множество, из которого эти числа выписываются, на другое.

Десять первых выписанных чисел: \(1, 2, 4, 3, 5, 7, 9, 6, 8, 10\). Пронумеруем выписанные числа, начиная с единицы.

Задача состоит в том, чтобы по заданным числам \(l\) и \(r\) находить сумму чисел с номерами от \(l\) до \(r\). Ответ может получиться большим, так что нужно найти его остаток от деления на \(1000000007\) (\(10^9+7\)).

Назар очень долго думал над этой задачей, но так и не придумал решение. Помогите ему решить эту задачу.

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

Первая строка содержит два целых числа \(l\) и \(r\) (\(1 \leq l \leq r \leq 10^{18}\)) — диапазон, на котором необходимо найти сумму.

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

Выведите единственное целое число — ответ по модулю \(1000000007\) (\(10^9+7\)).

Примечание

В первом примере ответом является сумма первых трёх выписанных чисел (\(1 + 2 + 4 = 7\)).

Во втором примере числа с номерами от \(5\) до \(14\): \(5, 7, 9, 6, 8, 10, 12, 14, 16, 18\). Их сумма равна \(105\).

B. Кошачье преобразование фурфурье

битмаски Конструктив математика поиск в глубину и подобное *1300

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

Предположим у нас есть кошка с целым числом \(x\). Идеальная длинная кошка это кошка с числом равным \(2^m - 1\) для некоторого неотрицательного \(m\). Например числа \(0\), \(1\), \(3\), \(7\), \(15\) подходят для идеальных длинных кошек.

В кошачьем преобразовании фурфурье можно менять \(x\) используя следующие операции:

  • (Операция А): вы выбираете произвольное неотрицательное число \(n\) и заменяете \(x\) на \(x \oplus (2^n - 1)\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.
  • (Операция Ы): заменить \(x\) на \(x + 1\).

Первая применённая операция должна быть типа А, вторая операция — типа Ы, третья снова типа А, и так далее. Формально, если пронумеровать операции с единицы в порядке их выполнения, то операции с нечётным номером должны быть типа А, а операции с чётным номером — типа Ы.

Неко хочет производит идеальных длинных кошек в промышленном масштабе, поэтому на одну кошку он может потратить не более \(40\) операций. Можете ли вы ему помочь и составить план операций, которые нужно проделать?

Обратите внимание, что не требуется минимизировать число выполненных операций. Достаточно лишь, чтобы число операций не превосходило \(40\).

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

Единственная строка содержит одно целое число \(x\) (\(1 \le x \le 10^6\)).

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

В первой строке выведите одно целое число \(t\) (\(0 \le t \le 40\)) — количество операций, которое нужно применить.

Затем для каждой операции с нечётным номером выведите соответствующее число \(n_i\) в ней. В частности, выведите \(\lceil \frac{t}{2} \rceil\) целых чисел \(n_i\) (\(0 \le n_i \le 30\)), обозначающих замену \(x\) на \(x \oplus (2^{n_i} - 1)\) в соответствующем шаге.

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

Примечание

В первом примере один из возможных способов преобразовывать число выглядит следующим образом: \(39 \to 56 \to 57 \to 62 \to 63\). Или более подробно:

  1. Выбираем \(n = 5\). \(x\) заменяется на \(39 \oplus 31\), то есть \(56\).
  2. Увеличиваем \(x\) на \(1\), тем самым он становится равным \(57\).
  3. Выбираем \(n = 3\). \(x\) заменяется на \(57 \oplus 7\), то есть \(62\).
  4. Увеличиваем \(x\) на \(1\), тем самым он становится равным \(63 = 2^6 - 1\).

Во втором и третьем примере число можно не преобразовывать.

E. Неко и флэшбеки

графы Конструктив поиск в глубину и подобное *2400

Перестановкой длины \(k\) называется последовательность из \(k\) целых чисел от \(1\) до \(k\), в которой каждое число встречается ровно один раз. Например последовательность \([3, 1, 2]\) является перестановкой длины \(3\).

Когда Неко было пять лет, он придумал массив \(a\) из \(n\) положительных целых чисел и перестановку \(p\) длины \(n - 1\). Затем он выполнил следующее:

  • Составил массив \(b\) длины \(n-1\), где \(b_i = \min(a_i, a_{i+1})\).
  • Составил массив \(c\) длины \(n-1\), где \(c_i = \max(a_i, a_{i+1})\).
  • Составил массив \(b'\) длины \(n-1\), где \(b'_i = b_{p_i}\).
  • Составил массив \(c'\) длины \(n-1\), где \(c'_i = c_{p_i}\).

Например, если массив \(a\) был равен \([3, 4, 6, 5, 7]\), а перестановка \(p\) была равна \([2, 4, 1, 3]\), то Неко составил бы массивы следующим образом:

  • \(b = [3, 4, 5, 5]\)
  • \(c = [4, 6, 6, 7]\)
  • \(b' = [4, 5, 3, 5]\)
  • \(c' = [6, 7, 4, 6]\)

Затем он записал массивы \(b'\) и \(c'\) на бумажку, после чего благополучно о ней забыл. Спустя 14 лет, в процессе уборки своей комнаты, он обнаружил эту старую бумажку с массивами \(b'\) и \(c'\). К сожалению, Неко не смог вспомнить какой массив \(a\) и перестановку \(p\) он при этом использовал.

В случае если Неко ошибся, и массива \(a\) и перестановки \(p\), приводящим к таким \(b'\) и \(c'\) не существует, выведите -1. Иначе помогите восстановить ему любой возможный массив \(a\).

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

Первая строка содержит одно целое число \(n\) (\(2 \leq n \leq 10^5\)) — количество элементов в массиве \(a\).

Вторая строка содержит \(n-1\) целых чисел \(b'_1, b'_2, \ldots, b'_{n-1}\) (\(1 \leq b'_i \leq 10^9\)).

Третья строка содержит \(n-1\) целых чисел \(c'_1, c'_2, \ldots, c'_{n-1}\) (\(1 \leq c'_i \leq 10^9\)).

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

В случае если Неко совершил ошибку и массива \(a\) и перестановки \(p\), приводящих к описанным \(b'\) и \(c'\) не существует, то выведите -1, иначе выведите \(n\) целых чисел \(a_i\) (\(1 \le a_i \le 10^9\)), обозначающих элементы массива \(a\).

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

Примечание

Первый пример разобран в условии задачи.

В третьем примере для \(a = [3, 4, 5, 2, 1, 4, 3, 2]\), возможная перестановка \(p\) выглядит следующим образом \([7, 1, 5, 4, 3, 2, 6]\). В таком случае Неко построил бы следующие:

  • \(b = [3, 4, 2, 1, 1, 3, 2]\)
  • \(c = [4, 5, 5, 2, 4, 4, 3]\)
  • \(b' = [2, 3, 1, 1, 2, 4, 3]\)
  • \(c' = [3, 4, 4, 2, 5, 5, 4]\)

B. Сервал и игрушечные кубики

жадные алгоритмы Конструктив *1200

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

У него есть интересное хобби — придумывать разные задачки и давать их решать другим. В этот раз с помощью кубиков \(1 \times 1 \times 1\) он построил трехмерную фигуру. Эту фигуру можно описать матрицей \(n \times m\), что на клетке \((i,j)\) стоят друг на друге \(h_{i,j}\) кубиков.

Сервал не расскажет вам \(h_{i,j}\), он даст вам только вид спереди, вид слева, и вид сверху этой фигуры, и попросит вас восстановить фигуру. Вид спереди описывается \(m\) столбцами, и высота \(i\)-го из них равна максимуму среди \(h_{1,i},h_{2,i},\dots,h_{n,i}\). Аналогично описывается и вид слева, он задан \(n\) столбцами. Вид сверху описывается матрицей \(n \times m\) \(t_{i,j}\), где \(t_{i,j}\) равно \(0\) или \(1\). \(t_{i,j}\), равное \(1\), означает, что \(h_{i,j}>0\), иначе \(h_{i,j}=0\).

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

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

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

Во второй строке записаны \(m\) неотрицательных целых чисел, разделенных пробелами, \(a_1,a_2,\dots,a_m\), \(a_i\) равно высоте \(i\)-го слева столбца в виде спереди (\(0\leq a_i \leq h\)).

В третьей строке записаны \(n\) неотрицательных целых чисел, разделенных пробелами, \(b_1,b_2,\dots,b_n\), \(b_j\) равно высоте \(j\)-го слева столбца в виде слева (\(0\leq b_j \leq h\)).

В каждой из следующих \(n\) строк записано по \(m\) целых чисел, каждое из которых равно \(0\) или \(1\), описывающих матрицу. Если \(h_{i, j}>0\), то \(j\)-е число в \(i\)-й строке равно \(1\), и \(0\) иначе.

Гарантируется, что существует хотя бы одна фигура, удовлетворяющая всем трем видам.

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

Выведите \(n\) строк, по \(m\) целых чисел в каждой, \(j\)-е число в \(i\)-й строке должно быть равно высоте фигуры в соотвествующей позиции. Если существует несколько подходящих фигур, вы можете вывести любую.

Примечание

На приведенной выше иллюстрации изображена фигура из первого примера.

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

D. N задач за K дней

жадные алгоритмы Конструктив математика *1900

Поликарп хочет решить ровно \(n\) задач, чтобы прокачать свое умение программировать перед важным соревнованием по программированию. Но это соревнование начнется очень скоро, более точно, оно начнется через \(k\) дней. Это означает, что у Поликарпа есть ровно \(k\) дней на тренировки!

Поликарп не хочет прокрастинировать, поэтому он хочет решать хотя бы по одной задаче в течение каждого из \(k\) дней. Он также не хочет переутомляться, поэтому если он решает \(x\) задач в течение какого-то дня, он должен решать не более, чем \(2x\) задач в течение следующего дня. И, наконец, он хочет прокачивать свое умение программировать, поэтому если он решает \(x\) задач в течение какого-либо дня, он должен решать хотя бы \(x+1\) задачу в течение следующего дня.

Более формально: пусть \([a_1, a_2, \dots, a_k]\) — массив количеств решенных Поликарпом задач. \(i\)-й элемент этого массива равен количеству задач, которые Поликарп решает в течение \(i\)-го дня его тренировок. Тогда должны быть соблюдены следующие условия:

  • сумма всех \(a_i\) для всех \(i\) от \(1\) до \(k\) должна быть равна \(n\);
  • \(a_i\) должно быть больше нуля для всех \(i\) от \(1\) до \(k\);
  • должно выполняться условие \(a_i < a_{i + 1} \le 2 a_i\) для всех \(i\) от \(1\) до \(k-1\).

Ваша задача — найти любой массив \(a\) длины \(k\), удовлетворяющий условиям выше, или сказать, что это невозможно сделать.

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

Первая строка входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 10^9, 1 \le k \le 10^5\)) — количество задач, которые Поликарп хочет решить и количество дней, которые Поликарп хочет тренироваться.

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

Если невозможно найти никакой массив \(a\) длины \(k\), удовлетворяющий правилам тренировок Поликарпа, выведите «NO» в первой строке.

Иначе выведите «YES» в первой строке, затем выведите \(k\) целых чисел \(a_1, a_2, \dots, a_k\) во второй строке, где \(a_i\) должно быть равно количеству задач, которые Поликарп должен решать в течение \(i\)-го дня. Если существует несколько возможных ответов, вы можете вывести любой из них.

F. Максимальный сбалансированный круг

дп жадные алгоритмы Конструктив *2000

В ряду стоит \(n\) людей. Рост \(i\)-го человека равен \(a_i\). Вы можете выбрать любое подмножество этих людей и попробовать переставить их в сбалансированный круг.

Сбалансированным кругом называется такой порядок людей, что разница в росте между любой парой соседних людей не превышает \(1\). Например, пусть роста выбранных людей равны \([a_{i_1}, a_{i_2}, \dots, a_{i_k}]\), где \(k\) — количество людей, которых вы выбрали. Тогда должно выполняться условие \(|a_{i_j} - a_{i_{j + 1}}| \le 1\) для всех \(j\) от \(1\) до \(k-1\), а также должно выполняться условие \(|a_{i_1} - a_{i_k}| \le 1\). \(|x|\) означает абсолютное значение \(x\). Очевидно, что круг, состоящий из одного человека, является сбалансированным.

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

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

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество людей.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 2 \cdot 10^5\)), где \(a_i\) равно росту \(i\)-го человека.

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

В первой строе выведите \(k\) — количество людей в максимальном сбалансированном круге.

Во второй строке выведите \(k\) целых чисел \(res_1, res_2, \dots, res_k\), где \(res_j\) равно росту \(j\)-го человека в максимальном сбалансированном круге. Должно выполняться условие \(|res_{j} - res_{j + 1}| \le 1\) для всех \(j\) от \(1\) до \(k-1\), а также должно выполняться условие \(|res_{1} - res_{k}| \le 1\).

G. Обращение строк и столбцов

Конструктив Перебор *2200

Задана двоичная матрица \(a\) размера \(n \times m\). Двоичная матрица — это такая матрица, в которой каждый элемент равен либо \(0\), либо \(1\).

Вы можете совершить несколько (возможно, ноль) операций над этой матрицей. В течение каждой операции вы можете обратить либо строку этой матрицы, либо столбец этой матрицы. Формально, обращение строки — это изменение всех значений в этой строке на противоположные (\(0\) на \(1\), \(1\) на \(0\)). Обращение столбца — это изменение всех значений в этом столбце на противоположные.

Ваша задача — отсортировать изначальную матрице при помощи какой-то последовательности операций. Матрица является отсортированной, если массив \([a_{1, 1}, a_{1, 2}, \dots, a_{1, m}, a_{2, 1}, a_{2, 2}, \dots, a_{2, m}, \dots, a_{n, m - 1}, a_{n, m}]\) отсортирован в неубывающем порядке.

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

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 200\)) — количество строк и количество столбцов в матрице.

Следующие \(n\) строк содержат \(m\) целых чисел каждая. \(j\)-й элемент в \(i\)-й строке равен \(a_{i, j}\) (\(0 \le a_{i, j} \le 1\)) — элементу \(a\), стоящему на позиции \((i, j)\).

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

Если невозможно получить отсортированную матрицу, выведите «NO» в первой строке.

Иначе выведите «YES» в первой строке. Во второй строке выведите строку \(r\) длины \(n\). \(i\)-й символ этой строки \(r_i\) должен быть равен '1', если \(i\)-я строка матрицы должна быть обращена, и '0' иначе. В третьей строке выведите строку \(c\) длины \(m\). \(j\)-й символ этой строки \(c_j\) должен быть равен '1', если \(j\)-й столбец матрицы должен быть обращен, и '0' иначе. Если существует несколько возможных ответов, вы можете вывести любой из них.

A. Праздник и конфеты

Бинарный поиск жадные алгоритмы Конструктив математика реализация сортировки *1500

На праздник пришло \(n\) мальчиков и \(m\) девочек. Каждый мальчик подарил каждой девочке некоторое целое количество конфет (возможно ноль). Пронумеруем мальчиков целыми числами от \(1\) до \(n\) и девочек целыми числами от \(1\) до \(m\). Для всех \(1 \leq i \leq n\) минимальное количество конфет, которое подарил мальчик с номером \(i\) какой-то девочке равно \(b_i\) и для всех \(1 \leq j \leq m\) максимальное количество конфет, которое получила девочка с номером \(j\) от какого-то мальчика равно \(g_j\).

Более формально, Обозначим за \(a_{i,j}\) количество конфет, которое \(i\)-й мальчик подарил \(j\)-й девочке. Тогда \(b_i\) равно минимуму среди значений \(a_{i,1}, a_{i,2}, \ldots, a_{i,m}\) И \(g_j\) равно максимуму среди значений \(b_{1,j}, b_{2,j}, \ldots, b_{n,j}\).

Вам стало интересно, какое минимальное суммарное количество конфет могли подарить мальчики, то есть вы хотите минимизировать сумму \(a_{i,j}\) по всем таким \((i,j)\), что \(1 \leq i \leq n\) и \(1 \leq j \leq m\). По числам \(b_1, \ldots, b_n\) и \(g_1, \ldots, g_m\) определите это число.

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

В первой строке находятся два целых числа \(n\) и \(m\), разделенные пробелом — количество мальчиков и девочек, соответственно (\(2 \leq n, m \leq 100\,000\)). Во второй строке находятся \(n\) целых чисел \(b_1, \ldots, b_n\), разделенных пробелами — \(b_i\) равно минимальному количеству конфет, подаренных \(i\)-м мальчиком какой-то девочке (\(0 \leq b_i \leq 10^8\)). В третьей строке находятся \(m\) целых чисел \(g_1, \ldots, g_m\), разделенных пробелами — \(g_j\) равно максимальному количеству конфет, полученному \(j\)-й девочкой от какого-то мальчика (\(0 \leq g_j \leq 10^8\)).

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

Если не могло быть такой ситуации выведите \(-1\). Иначе выведите минимальное суммарное количество конфет, которое могли подарить мальчики и при этом все условия были бы выполнены.

Примечание

В первом тесте минимальное суммарное количество конфет, которое могли подарить мальчики равно \(12\). Такое могло быть, например, если первый мальчик подарит \(1\) и \(4\) конфеты, второй мальчик подарит \(3\) и \(2\) конфеты и третий мальчик подарит \(1\) и \(1\) конфету первой и второй девочке, соответственно. Легко видеть, что все условия выполнены и суммарно будет подарено \(12\) конфет.

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

В третьем тесте минимальное суммарное количество конфет, которое могли подарить мальчики равно \(4\). Такое могло быть, например, если первый мальчик подарит \(1\), \(1\), \(2\) конфет первой, второй и третьей девочке, соответственно, а второй мальчик не подарит никому конфет. Легко видеть, что все условия выполнены и суммарно будет подарено \(4\) конфеты.

B. Минимальная уникальная подстрока

Конструктив математика Строки *2200

Пусть у вас есть строка \(s\) из символов "0" и "1". Будем называть строку \(t\) подстрокой строки \(s\), если существует \(1 \leq l \leq |s| - |t| + 1\), такое что \(t = s_l s_{l+1} \ldots s_{l + |t| - 1}\). Будем называть подстроку \(t\) строки \(s\) уникальной, если существует единственное такое \(l\).

Например, пусть \(s = \)"1010111". Тогда \(t = \)"010" является уникальной подстрокой \(s\), так как существует единственное подходящее \(l = 2\). Заметим, что \(t = \)"10" не является уникальной подстрокой \(s\), так как подходят \(l = 1\) и \(l = 3\). А, например, \(t =\)"00" вообще не является подстрокой строки \(s\), так как не существует подходящих \(l\).

Сегодня Вася на уроке информатики решал такую задачу: дана строка из символов "0" и "1", надо найти длину её кратчайшей уникальной подстроки. Написав решение к этой задаче, он решил его протестировать. Он просит помощи у вас.

Вам даны \(2\) таких целых положительных числа \(n\) и \(k\), что \((n \bmod 2) = (k \bmod 2)\), где \((x \bmod 2)\) — это операция взятия остатка числа \(x\) при делении на \(2\). Найдите любую строку \(s\) состоящую из \(n\) символов "0" и "1", такую что наименьшая длина её уникальной подстроки равна \(k\).

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

В первой строке даны два целых числа \(n\) и \(k\), разделённые пробелом (\(1 \leq k \leq n \leq 100\,000\), \((k \bmod 2) = (n \bmod 2)\)).

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

Выведите строку \(s\) длины \(n\), состоящую из символов "0" и "1". Минимальная длина уникальной подстроки \(s\) должна равняться \(k\). Среди таких строк разрешается вывести любую. Гарантируется, что хотя бы одна подходящая строка существует.

Примечание

В первом тесте легко видеть, что единственной уникальной подстрокой строки \(s = \)"1111" является вся строка \(s\), длина которой \(4\).

Во втором тесте у строки \(s = \)"01010" минимальной по длине уникальной подстрокой является строка \(t =\)"101" длина которой \(3\).

Во третьем тесте у строки \(s = \)"1011011" минимальной по длине уникальной подстрокой является строка \(t =\)"110" длина которой \(3\).

C. Восстановление перестановки

графы жадные алгоритмы Конструктив математика поиск в глубину и подобное сортировки Структуры данных *2100

Вася написал в тетради некоторую перестановку \(p_1, p_2, \ldots, p_n\) чисел от \(1\) до \(n\), то есть для всех \(1 \leq i \leq n\) выполнено \(1 \leq p_i \leq n\), и все \(p_1, p_2, \ldots, p_n\) различны. После этого он записал \(n\) значений \(next_1, next_2, \ldots, next_n\). Значение \(next_i\) равно минимальному индексу \(i < j \leq n\), такому что \(p_j > p_i\). Если такого \(j\) не существует, то определим значение как \(next_i = n + 1\).

Вечером Вася шел домой из школы, и из-за дождя тетрадь намокла. Теперь некоторые написанные числа невозможно разобрать. Перестановка, а также некоторые значения \(next_i\) полностью утеряны! Если для какого-то \(i\) значение \(next_i\) теперь неизвестно, то скажем, что \(next_i = -1\).

Вам даны значения \(next_1, next_2, \ldots, next_n\) (возможно, некоторые числа теперь равны \(-1\)). Помогите Васе найти любую такую перестановку \(p_1, p_2, \ldots, p_n\) чисел от \(1\) до \(n\), что он может записать её в тетрадь, и все значения \(next_i\), не равные \(-1\), будут посчитаны правильно.

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

В первой строке находится одно целое число \(t\) — количество тестовых случаев (\(1 \leq t \leq 100\,000\)).

В следующих \(2 \cdot t\) строках находится описание тестовых случаев, по две строки на каждый. В первой из этих строк находится единственное целое число \(n\) — количество чисел в перестановке, выписанной Васей (\(1 \leq n \leq 500\,000\)). В следующей строке находится \(n\) целых чисел \(next_1, next_2, \ldots, next_n\), разделенных пробелами (\(next_i = -1\) или \(i < next_i \leq n + 1\)).

Гарантируется, что сумма \(n\) по всем тестовым случаям не превосходит \(500\,000\).

Во взломах разрешается использовать только один тестовый случай, то есть \(T = 1\).

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

Выведите \(T\) строк, в \(i\)-й ответ на \(i\)-й тестовый случай.

Если таких перестановок \(p_1, p_2, \ldots, p_n\) чисел от \(1\) до \(n\), которые мог выписать Вася не существует, то выведите единственное число \(-1\).

Иначе выведите \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\), разделённых пробелами (\(1 \leq p_i \leq n\)). Все определённые значения \(next_i\), не равные \(-1\), должны быть вычислены верно из перестановки \(p_1, p_2, \ldots, p_n\) по определению из условия задачи. Если существует несколько таких перестановок, найдите любую.

Примечание

В первом тестовом случае для перестановки \(p = [1, 2, 3]\) получится \(next = [2, 3, 4]\), так как каждый элемент перестановки меньше следующего. Можно заметить, что это единственная подходящая перестановка.

Во третьем тестовом случае подойдет любая перестановка, так как все значения \(next_i\) неизвестны.

В четвертом тестовом случае не существует ни одной подходящей перестановки, поэтому ответ \(-1\).

D. Извилистая ломаная

геометрия жадные алгоритмы Конструктив математика *2600

У Васи есть \(n\) различных точек \(A_1, A_2, \ldots A_n\) на плоскости. Никакие три из них не лежат на одной прямой. Он хочет расположить их в некотором порядке \(A_{p_1}, A_{p_2}, \ldots, A_{p_n}\), где \(p_1, p_2, \ldots, p_n\) — это некоторая перестановка чисел от \(1\) до \(n\).

Сделав так, он нарисует ориентированную ломаную на этих вершинах, проведя направленные отрезки из каждой точки в следующую в выбранном порядке точку. То есть для всех \(1 \leq i \leq n-1\) он проведет направленный отрезок из точки \(A_{p_i}\) в точку \(A_{p_{i+1}}\). Он хочет, чтобы получившаяся ломаная удовлетворяла \(2\)-м условиям:

  • она будет несамопересекающейся, то есть любые \(2\) отрезка, которые не являются соседними, не имеют общих точек.
  • она будет извилистой.

У Васи есть строка \(s\), состоящая из \((n-2)\)-х символов "L" или "R". Будем называть направленную ломаную извилистой, если её \(i\)-й поворот будет налево, если \(s_i = \) "L" и направо, если \(s_i = \) "R". Более формально: \(i\)-й поворот ломаной будет в точке \(A_{p_{i+1}}\), в ней направленный отрезок из точки \(A_{p_i}\) в точку \(A_{p_{i+1}}\) поменяется на направленный отрезок из точки \(A_{p_{i+1}}\) в точку \(A_{p_{i+2}}\). Обозначим вектор \(\overrightarrow{v_1} = \overrightarrow{A_{p_i} A_{p_{i+1}}}\) и вектор \(\overrightarrow{v_2} = \overrightarrow{A_{p_{i+1}} A_{p_{i+2}}}\). Тогда если для того, чтобы повернуть вектор \(\overrightarrow{v_1}\) на наименьший возможный угол, чтобы его направление совпало с направлением вектора \(\overrightarrow{v_2}\) надо сделать поворот против часовой стрелки, то будем говорить, что \(i\)-й поворот налево, а иначе направо. Для лучшего понимания посмотрите картинки, на которых изображены различные варианты поворотов:

На этой картинке изображены повороты налево
На этой картинке изображены повороты направо

Вам даны координаты точек \(A_1, A_2, \ldots A_n\) на плоскости и строка \(s\). Найдите перестановку \(p_1, p_2, \ldots, p_n\) чисел от \(1\) до \(n\), такую что ломаная, которую нарисует Вася, будет удовлетворять двум заданным условиям.

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

В первой строке написано одно целое число \(n\) — количество точек (\(3 \leq n \leq 2000\)). В следующих \(n\) строках написаны по два целых числа \(x_i\) и \(y_i\), разделённые пробелом — координаты точки \(A_i\) на плоскости (\(-10^9 \leq x_i, y_i \leq 10^9\)). В последней строке написана строка \(s\) из символов "L" и "R" длины \((n-2)\). Гарантируется, что все точки различны и и никакие три точки не лежат на одной прямой.

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

Если подходящей перестановки не существует выведите \(-1\). Иначе выведите \(n\) чисел \(p_1, p_2, \ldots, p_n\) — найденную перестановку (\(1 \leq p_i \leq n\) и все \(p_1, p_2, \ldots, p_n\) различны). Если подходящих перестановок несколько, выведите любую.

Примечание

Вот картинка, изображающая ломаную из \(1\) теста:

Как мы видим, эта ломаная несамопересекающаяся, а также извилистая, так как поворот в точке \(2\) налево.

Вот картинка, изображающая ломаную из \(2\) теста:

E. Волшебные перестановки

битмаски графы Конструктив математика Перебор Структуры данных *2400

Куро только что узнал о перестановках и этого его вдохновило придумать новый вид перестановок. Он выбрал \(n\) различных целых положительных чисел и сделал из них множество \(S\). Теперь он определяет волшебную перестановку следующим образом:

  • Это перестановка всех целых чисел от \(0\) до \(2^x - 1\), где \(x\) это какое-то неотрицательное целое число.
  • Побитовое исключающее или любых двух соседних элементов перестановки лежит в множестве \(S\).

Так как Куро очень восхищённо относится к волшебным перестановкам, то он хочет создать самую длинную возможную волшебную перестановку. Иначе говоря, он хочет найти такое наибольшее неотрицательное целое число \(x\), что существует волшебная перестановка целых чисел от \(0\) до \(2^x - 1\). Поскольку он немного новичок в вопросе перестановок, он хочет чтобы вы ему помогли и нашли это \(x\), а также волшебную перестановку для этого \(x\).

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

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество элементов в множестве \(S\).

Вторая строка содержит \(n\) различных целых чисел \(S_1, S_2, \ldots, S_n\) (\(1 \leq S_i \leq 2 \cdot 10^5\)) — элементы множества \(S\).

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

В первой строке выведите наибольшее неотрицательное целое число \(x\), такое что существует волшебная перестановка чисел от \(0\) до \(2^x - 1\).

Затем выведите \(2^x\) целых чисел задающую волшебную перестановку чисел от \(0\) до \(2^x - 1\). В случае если существует несколько таких волшебных перестановок, выведите любую из них.

Примечание

В первом примере \(0, 1, 3, 2\) образует волшебную перестановку так как:

  • \(0 \oplus 1 = 1 \in S\)
  • \(1 \oplus 3 = 2 \in S\)
  • \(3 \oplus 2 = 1 \in S\)

Где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

B. Больше гласных!

Конструктив математика теория чисел *1100

Том любит гласные, он обожает длинные слова с большим количеством гласных букв. Его любимые слова — те, которые набиты гласными. Мы считаем, что слово длины \(k\) набито гласными, если существуют такие положительные целые числа \(n\) и \(m\), что \(n\cdot m = k\), и если записать буквы слова в таблицу с \(n\) строками и \(m\) столбцами (сначала заполняется первая строка, потом вторая и так далее, каждая строка заполняется слева направо), то каждая гласная буква латинского алфавита встречается (один или более раз) в каждой строке и каждом столбце.

Вам дано целое число \(k\). Найдите набитое гласными слово длины \(k\) или выведите \(-1\), если такого слова не существует.

Гласными буквами латинского алфавита в этой задаче считаются буквы «a», «e», «i», «o», «u». Словом в данной задаче называется любая последовательность строчных букв латинского алфавита.

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

Единственная строка содержит одно целое число \(k\) (\(1\leq k \leq 10^4\)) — необходимую длину слова.

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

Выведите одну строку, содержащую набитое гласными слово длины \(k\), состоящее только из строчных букв латинского алфавита, или \(-1\), если таких слов нет.

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

Примечание

Во втором примере слово «agoeuioaeiruuimaeoieauoweouoiaouimae» может быть записано в таблицу \(6 \times 6\):

Видно, что в каждом столбце и каждой строке есть все гласные.

E. НОКи должны быть большими

битмаски Конструктив математика Перебор теория чисел *2100

Даша-путешественница решила использовать все заработанные за несколько лет отчисления на шоппинг. А где же еще лучше магазины, чем в Нлогонии?

Всего в Нлогонии \(n\) магазинов, пронумерованных от \(1\) до \(n\). В \(i\)-м из этих магазинов можно купить положительное целое число \(a_i\).

В каждый из последних \(m\) дней Даша покупала по одному числу в некоторых магазинах. В каждый из этих дней лисенок Жулик покупал по одному числу во всех магазинах, в которых Даша не купила число в этот день.

Дора считает, что Жулик соперничает с ней; она считает, что выиграла у Жулика в день \(i\), если и только если наименьшее общее кратное чисел, которые она купила в \(i\)-й день строго больше наименьшего общего кратного чисел, которые купил в \(i\)-й день Жулик.

Наименьшем общем кратном (НОК) набора целых чисел называется наименьшее положительное целое число, делящееся на все числа из набора.

К сожалению, Даша забыла, чему равны значения \(a_i\). Помогите Даше определить, существуют ли такие положительные целые числа \(a_i\), что она выигрывала у Жулика каждый день. Сами значения \(a_i\) находить не нужно.

Обратите внимание, возможно, что некоторые значения \(a_i\) в решении совпадают.

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

Первая строка содержит два целых числа \(m\) и \(n\) (\(1\leq m \leq 50\), \(1\leq n \leq 10^4\)) — количество дней и количество магазинов.

Далее следуют \(m\) строк, \(i\)-я из них начинается с целого числа \(s_i\) (\(1\leq s_i \leq n-1\)) — количества чисел, которые купила Даша в день \(i\), а затем находятся \(s_i\) различных целых чисел — номера магазинов, в которых Даша купила число в день \(i\). Все индексы находятся в диапазоне от \(1\) до \(n\).

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

Выведите единственную строку, содержащую "possible", если существуют положительные целые числа \(a_i\) такие, что в каждый день наименьшее общее кратное чисел, купленных Дашей, было строго больше наименьшего общего кратного всех чисел, купленных Жуликом в тот же день. В противном случае выведите "impossible".

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

Примечание

В первом примере возможные числа \(a_i\) равны \(3, 4, 3, 5, 2\). В первый день Даша покупает числа \(3, 4\) и \(3\), НОК которых равен \(12\), а Жулик покупает числа \(5\) и \(2\), НОК которых равен \(10\). Во второй день Дора покупает числа \(3, 5\) и \(2\), НОК которых равен \(30\), а Жулик покупает числа \(3\) и \(4\), НОК которых равен \(12\).

D. Двухцветная ПСП

жадные алгоритмы Конструктив *1500

Строка называется скобочной последовательностью, если она не содержит никаких символов, кроме «(» и «)». Скобочная последовательность называется правильной (кратко, ПСП), если из нее возможно получить корректное арифметическое выражение, вставляя символы «+» и «1». Например, «», «(())» и «()()» являются ПСП, а «)(» и «(()» не являются ПСП.

Легко заметить, что в ПСП каждой открывающей скобке ставится в пару некоторая закрывающая скобка. Используя данный факт, можно определить вложенность ПСП как максимальное количество пар скобок, таких, что \(2\)-я пара лежит внутри \(1\)-й, \(3\)-я — внутри \(2\)-й, и так далее. Например, вложенность «» равна \(0\), «()()()» — \(1\) и «()((())())» — \(3\).

Теперь, вам задана ПСП \(s\) четной длины \(n\). Вам нужно покрасить каждую скобку \(s\) в один из двух цветов: красный или синий. Скобочная последовательность \(r\), состоящая только из красных скобок, должна быть ПСП, а также скобочная последовательность \(b\), состоящая только из синих скобок, должна быть ПСП. Любая из них может быть пустой. Вам запрещается менять местами символы в \(s\), \(r\) или \(b\). Все скобки должны быть покрашены.

Среди всех возможных вариантов вы должны выбрать такой, что минимизирует максимум из вложенности \(r\) и \(b\). Если существует несколько ответов, вы можете вывести любой.

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

В первой строке задано целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — длина ПСП \(s\).

Во второй строке задана правильная скобочная последовательность \(s\) (\(|s| = n\), \(s_i \in \{\)«(», «)»\(\}\)).

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

Выведите единственную строку \(t\) длины \(n\), состоящую из «0» и «1». Если \(t_i\) равно «0», то символ \(s_i\) принадлежит ПСП \(r\), иначе \(s_i\) принадлежит \(b\).

Примечание

В первом примере одно из оптимальных решений следующее: \(s = \) «\(\color{blue}{()}\)». \(r\) — пустое и \(b = \) «\(()\)». Ответ равен \(\max(0, 1) = 1\).

Во втором примере выгодно сделать, например, \(s = \) «\(\color{red}{(}\color{blue}{(}\color{red}{)}\color{blue}{)}\)». \(r = b = \) «\(()\)» и ответ равен \(1\).

В третьем примере можно сделать \(s = \) «\(\color{red}{(}\color{blue}{((}\color{red}{)()}\color{blue}{)())}\)». \(r = \) «\(()()\)» и \(b = \) «\((()())\)», и ответ равен \(2\).

E. Xor-перестановки

Конструктив математика *3100

У жабы Михаила есть \(2^k\) целых чисел \(a_1, a_2, \ldots, a_{2^k}\).

Найдите две такие перестановки \(p\) и \(q\) целых чисел \(0, 1, \ldots, 2^k-1\), что \(a_i\) равно \(p_i \oplus q_i\) для всех возможных \(i\), или определите, что таких перестановок нет. Здесь \(\oplus\) обозначает операцию побитовое исключающее ИЛИ.

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

В первой строке записано одно целое число \(k\) (\(2 \leq k \leq 12\)), обозначающее, что размер массива равен \(2^k\).

Во второй строке записаны \(2^k\) целых чисел, разделенных пробелами: \(a_1, a_2, \ldots, a_{2^k}\) (\(0 \leq a_i < 2^k\)) — элементы данного массива.

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

Если данный массив не может быть представлен как поэлементный XOR двух перестановок целых чисел \(0, 1, \ldots, 2^k-1\), выведите «Fou».

В противном случае выведите «Shi» в первой строке.

Следующие две строки должны содержать описания подходящих перестановок. Первая из этих строк должна содержать \(2^k\) целых чисел, разделенных пробелами, \(p_{1}, p_{2}, \ldots, p_{2^k}\), и вторая должна содержать \(2^k\) целых чисел, разделенных пробелами, \(q_{1}, q_{2}, \ldots, q_{2^k}\).

Все элементы \(p\) и \(q\) должны быть от \(0\) до \(2^k - 1\) включительно; \(p_i \oplus q_i\) должно быть равно \(a_i\) для всех \(i\) таких, что \(1 \leq i \leq 2^k\). Если существует несколько возможных решений, вы можете вывести любое.

H. Максимальная пила

*особая задача Конструктив

Задана последовательность \(a_1, a_2, \dots, a_n\). Вы можете выбрать любое подмножество элементов, после нужно переупорядочить их так, чтобы получилась «пила».

Последовательность \(b_1, b_2, \dots, b_m\) называется «пилой», если элементы удовлетворяют неравенствам: \(b_1>b_2<b_3>b_4<\dots\) или \(b_1<b_2>b_3<b_4>\dots\).

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

Заметим, что и заданная последовательность \(a\) и искомая «пила» \(b\) могут содержать неуникальные (то есть такие, которые встречаются дважды или более) значения.

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

В первой строке записано целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных в тесте. Далее следуют описания \(t\) наборов входных данных теста. Каждый набор начинается со строки, содержащей целое число \(n\) (\(1 \le n \le 2\cdot10^5\)). Затем следует строка, содержащая \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что \(\sum{n}\) не превосходит \(2 \cdot 10^5\).

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

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

D. Nauuo и порталы

Конструктив *2900

Nauuo — девочка, которая любит играть в игры, связанные с порталами.

Однажды она играла в следующую игру.

В таблице \(n\times n\) строки пронумерованы от \(1\) до \(n\) сверху вниз, столбцы пронумерованы от \(1\) до \(n\) слева направо. Обозначим клетку на пересечении \(r\)-й строки и \(c\)-го столбца за \((r,c)\).

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

«Следующая клетка» — это ближайшая клетка в вашем направлении. Если вы направлены вниз, то следующая клетка для \((2,5)\) равна \((3,5)\).

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

Вы должны расставить несколько (возможно, ноль) порталов в таблице так, что если вы наступите на клетку \((i,1)\) с направлением вправо, то вы выйдете из таблицы из клетки \((r_i,n)\), а если вы наступите на клетку \((1, i)\) с направлением вниз, вы выйдете из таблицы из клетки \((n,c_i)\).

Гарантируется, что и \(r_{1..n}\), и \(c_{1..n}\) — перестановки из \(n\) элементов. Перестановка из \(n\) элементов это последовательность чисел \(p_1,p_2,\ldots,p_n\) , в которой каждое число от \(1\) до \(n\) встречается ровно один раз.

Nauuo запуталась во время игры, можете ли вы помочь ей с решением?

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

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

Во второй строке записаны \(n\) целых чсиел \(r_1,r_2,\ldots,r_n\) (\(1\le r_i\le n\)) — если вы наступите на клетку \((i,1)\) с направлением вправо, вы должны выйти из клетки \((r_i,n)\). Гарантируется, что \(r_{1..n}\) — перестановка из \(n\) элементов.

В третьей строке записаны \(n\) целых чисел \(c_1,c_2,\ldots,c_n\) (\(1\le c_i\le n\)) — если вы наступите на клетку \((1,i)\) с направлением вниз, вы должны выйти из клетки \((n,c_i)\). Гарантируется, что \(c_{1..n}\) — перестановка из \(n\) элементов.

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

Если невозможно удовлетворить всем условиям, выведите \(-1\).

Иначе в первой строке должно быть записано одно целое число \(m\) (\(0\le m\le\frac{n^2}2\)) — количество порталов, которое вы расставили.

В следующих \(m\) строках должны быть записаны по четыре целых числа \(x_1,y_1,x_2,y_2\), обозначающих, что вы поставили портал с дверьми в \((x_1,y_1)\) и \((x_2,y_2)\).

Если есть несколько возможных ответов, выведите любой. Вам не обязательно минимизировать \(m\).

Примечание

Пример 1

Портал — это две клетки с одинаковыми буквами. Вы можете расставить порталы следующим образом:

Это удовлетворяет требованиям, потому что:

Example 2

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

B. Nauuo и шахматы

жадные алгоритмы Конструктив *1100

Nauuo — девочка, которая любит играть в шахматы.

Однажды она сама придумала игру, для которой нужны \(n\) шахматных фигур на доске \(m\times m\). Строки и столбцы пронумерованы целыми числами от \(1\) до \(m\). Обозначим клетку на пересечении \(r\)-й строки и \(c\)-го столбца как \((r,c)\).

Цель игры — расставить на доске \(n\) шахматных фигур, пронумерованных целыми числами от \(1\) до \(n\). Пусть \(i\)-я фигура находится в клетке \((r_i,\,c_i)\). Должно соблюдаться следующее правило: для каждой пары фигур \(i\) и \(j\) должно выполняться \(|r_i-r_j|+|c_i-c_j|\ge|i-j|\). Здесь \(|x|\) обозначает абсолютное значение числа \(x\).

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

Она хочет найти самую маленькую шахматную доску, на которой можно правильно расставить \(n\) фигур.

Nauuo также интересует, как следует расставлять фигуры на доске. Можете ли вы помочь ей?

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

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

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

Выведите одно целое число — минимальное значение \(m\), где \(m\) это длина стороны подходящей шахматной доски.

В \(i\)-й из следующих \(n\) строк выведите два целых числа \(r_i\) и \(c_i\) (\(1\le r_i,c_i\le m\)) — координаты \(i\)-й шахматной фигуры.

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

Примечание

В первом примере вы не можете расставить фигуры на доске \(1\times1\) без нарушения описанных правил. Но вы можете расставить их на доске \(2\times2\) следующим образом:

Во втором примере вы не можете расставить фигуры на доске \(2\times2\) без нарушения описанных правил. Например, если вы расставите их следующим образом:

то \(|r_1-r_3|+|c_1-c_3|=|1-2|+|1-1|=1\), \(|1-3|=2\), \(1<2\), а также \(|r_1-r_4|+|c_1-c_4|=|1-2|+|1-2|=2\), \(|1-4|=3\), \(2<3\), это нарушает правило.

Однако вы можете расставить их на доске \(3\times3\) следующим образом:

A. Ихаб не может стать Таносом

жадные алгоритмы Конструктив сортировки *1000

Вам дан массив \(a\) длины \(2n\). Возможно ли поменять числа местами так, чтобы сумма первых \(n\) чисел не была равна сумме последних \(n\) чисел?

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 1000\)), где \(2n\) — это количество чисел в массиве \(a\).

Вторая строка содержит \(2n\) целых чисел \(a_1\), \(a_2\), \(\ldots\), \(a_{2n}\) (\(1 \le a_i \le 10^6\)) — числа в массиве \(a\).

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

Если решения не существует, выведите «-1» (без кавычек). Иначе выведите \(2n\) целых чисел. Эти числа должны быть перестановкой массива \(a\). Вы можете не менять порядок чисел.

Примечание

В первом примере первые \(n\) чисел имеют сумму \(2+1+3=6\), а последнее \(n\) чисел сумму \(1+1+2=4\). Суммы разные.

Во втором примере ответа не существует.

C. Ихаб и особая задача о раскраске

Конструктив теория чисел *1300

Вам дано целое число \(n\). Для каждого целого числа \(i\) от \(2\) до \(n\) найдите положительное целое число \(a_i\) такое, что выполняются следующие условия:

  • Для каждой пары целых чисел \((i,j)\), если \(i\) и \(j\) взаимно просты, то \(a_i \neq a_j\).
  • Максимальное значение всех \(a_i\) должно быть минимальным (то есть как можно меньшим).

Два натуральных числа называются взаимно простыми, если их наибольший общий делитель равен \(1\).

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

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 10^5\)).

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

Выведите \(n-1\) целое число \(a_2\), \(a_3\), \(\ldots\), \(a_n\) (\(1 \leq a_i \leq n\)).

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

Примечание

Обратите внимание, что \(3\) и \(4\) взаимно просты, поэтому \(a_3 \neq a_4\). Также обратите внимание, что \(a=[1,2,3]\) удовлетворяет первому условию, но это неправильный ответ, поскольку максимальное число равно \(3\).

D. Ихаб и обычная задача на исключающее ИЛИ

битмаски Конструктив *1900

Даны два числа \(n\) и \(x\), найдите массив, который удовлетворяет следующим условиям:

  • для любого числа \(a_i\) в массиве выполняется \(1 \le a_i<2^n\),
  • нет такого непустого подотрезка, на котором побитовое исключающее ИЛИ равно \(0\) или \(x\),
  • длина массива \(l\) должна быть максимальна.

Последовательность \(b\) является подотрезком \(a\), если \(b\) может быть получена из \(a\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца.

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

Первая строка содержит два целых числа \(n\) и \(x\) (\(1 \le n \le 18\), \(1 \le x<2^{18}\)).

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

В первую строку выведите максимальную длину массива \(l\).

Если \(l\) положительное, во вторую строку выведите \(l\) целых чисел \(a_1\), \(a_2\), \(\dots\), \(a_l\) (\(1 \le a_i < 2^n\)) — числа массива \(a\).

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

Примечание

В первом примере побитовые исключающие ИЛИ на подмассивах равны \(\{6,7,4,1,2,3\}\).

F. Ихаб и Большой Финал

графы Деревья интерактив Конструктив разделяй и властвуй реализация *2400

Это интерактивная задача.

Вам дано дерево, состоящее из \(n\) вершин, с корнем в вершине \(1\). Дерево — это связный граф без циклов.

Мы выбрали секретную вершину \(x\). Чтобы найти эту вершину, вы можете задавать запросы двух типов:

  • d \(u\) (\(1 \le u \le n\)). Мы ответим расстоянием между вершинами \(u\) и \(x\). Расстояние между двумя вершинами — это количество ребер в кратчайшем пути между ними.
  • s \(u\) (\(1 \le u \le n\)). Мы ответим номер второй вершины на пути от \(u\) до \(x\). Тем не менее, есть одна хитрость. Если \(u\) не является предком \(x\), вы получите вердикт «Неправильный ответ»!

Вершина \(a\) называется предком вершины \(b\), если \(a \ne b\) и кратчайший путь от вершины \(1\) к вершине \(b\) проходит через вершину \(a\). Обратите внимание, что в этой задаче вершина не является предком сама себе.

Можете ли вы найти \(x\), сделав не более \(36\) запросов? Скрытая вершина зафиксирована в каждом тесте заранее и не зависит от ваших запросов.

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

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин в дереве.

Каждая из следующих \(n-1\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u,v \le n\)), которые значат, что между вершинами \(u\) и \(v\) есть ребро. Гарантируется, что граф образует дерево.

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

Чтобы вывести ответ, выведите «! x» (без кавычек).

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

Чтобы задать запрос, выведите в одном из двух следующих форматов:

  • d \(u\) (\(1 \le u \le n\)), или
  • s \(u\) (\(1 \le u \le n\)).

После каждого вопроса вы должны прочитать ответ: либо расстояние, либо вторую вершину пути, как описано в легенде.

Если мы ответим \(-1\) вместо корректного ответа, это означает, что вы превысили количество запросов, сделали неверный запрос или нарушили условие во втором типе запросов. Завершите вашу программу сразу после получения \(-1\), и вы получите вердикт Wrong answer. В противном случае вы можете получить другой вердикт, потому что ваше решение будет продолжать читать из закрытого потока.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы:

Первая строка должна содержать два целых числа \(n\) и \(x\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \le x \le n\)).

Каждая из следующих \(n-1\) строк должна содержать два целых числа \(u\) и \(v\) (\(1 \le u,v \le n\)), которые значат, что между вершинами \(u\) и \(v\) есть ребро. Граф должен образовать дерево.

Примечание

В первом примере секретной вершиной является вершина \(5\).

Сначала мы спросим о расстоянии между вершинами \(x\) и \(2\). Ответ \(3\), поэтому вершина \(x\) равна либо \(4\), либо \(5\). Затем мы спрашиваем о второй вершине на пути от вершины \(3\) к вершине \(x\). Обратите внимание, что вершина \(3\) является предком вершины \(5\). Мы получаем вершину \(5\) в качестве ответа. Наконец, мы сообщаем, что секретная вершина — это вершина \(5\).

D. Простой граф

жадные алгоритмы Конструктив математика теория чисел *1500

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

При построении графа Бобу нужно выполнить следующие четыре требования:

  • Это должен быть простой неориентированный граф, то есть без петель и кратных (параллельных) ребер.
  • Количество вершин должно быть ровно \(n\) — число, которое выбрал Боб. Это число не обязательно простое.
  • Количество ребер должно быть простым числом.
  • Степень (т.е. количество рёбер, которые соприкасаются с вершиной) каждой вершины должна быть простым числом.

Ниже представлен пример для \(n = 4\). Первый граф (слева) неправильный, так как степень вершины \(2\) (так же как и \(4\)) равна \(1\), а это число не является простым. Второй граф (посередине) неправильный, так как в нем \(4\) ребра, что также не является простым числом. Третий граф (справа) правильный для \(n = 4\).

Обратите внимание, что граф может быть несвязным.

Пожалуйста, помогите Бобу найти любой такой граф!

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

Первая строка содержит одно целое число \(n\) (\(3 \leq n \leq 1\,000\)) — количество вершин.

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

Если нет такого графа, для которого выполняются все условия, то выведите \(-1\).

Иначе в первой строке выведите простое число \(m\) (\(2 \leq m \leq \frac{n(n-1)}{2}\)) — количество ребер в графе. После этого выведите \(m\) строк, в \(i\)-й из которых выведите два целых числа \(u_i\), \(v_i\) (\(1 \leq u_i, v_i \leq n\)), которые значат, что есть ребро между вершинами \(u_i\) и \(v_i\). Степень каждой вершины должна быть простым числом. Не должно быть петель и кратных (параллельных) ребер.

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

Обратите внимание, что граф может быть несвязным.

Примечание

Первый пример объяснен в легенде.

Во втором примере степени вершин равны \([7, 5, 2, 2, 3, 2, 2, 3]\). Каждое из этих чисел простое. Кроме того, количество ребер равно \(13\), что тоже является простым числом, поэтому все условия выполнены.

E. Археология

жадные алгоритмы Конструктив Перебор Строки *1900

После того, как Алиса купила подписку на Congo Prime Video, она начала смотреть документальный фильм об археологических находках с острова Фактор на озере Лох Катрин в Шотландии. Археологи нашли книгу, возраст и происхождение которой неизвестны. Возможно Алиса сможет расшифровать ее?

В книжке записано только одно слово, которое состоит из символов «a», «b» и «c». Было замечено, что нет двух последовательных одинаковых символов. Так же было предположено, что в этой строке есть длинная подпоследовательность, которая читается слева направо так же, как и справа налево.

Помогите Алисе найти любую такую подпоследовательность, которая содержит как минимум половину (округленную вниз) символов из начальной строки. Обратите внимание, что вам не нужно максимизировать ее длину.

Строка \(a\) является подпоследовательностью \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов.

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

Первая строка содержит строку \(s\) (\(2 \leq |s| \leq 10^6\)). Строка \(s\) состоит только из символов «a», «b», «c». Гарантируется, что нет двух последовательных одинаковых символов.

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

Выведите палиндром \(t\), который является подпоследовательностью строки \(s\) и \(|t| \geq \lfloor \frac{|s|}{2} \rfloor\).

Если существует несколько решений, выведите любое из них. Обратите внимание, что вам не нужно максимизировать длину \(t\).

Если решения не существует, выведите «IMPOSSIBLE» (без кавычек).

Примечание

В первом примере другими возможными ответами могут быть «cacac», «caac», «aca» и «ccc».

B. Толик и дядя

Конструктив *1800

Проснувшись утром, Толик понял, что ему в голову пришла отличная задача, которая в самый раз подошла бы на Codeforces! Однако, так как в то время еще не было проекта "Обсуждаем задачи", он решил для начала протестировать задачу на своем дяде.

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

В этой задаче вам дано клетчатое поле \(n \cdot m\), состоящее из \(n\) строк и \(m\) столбцов, где клетка имеет координаты \((x, y)\), если она стоит в \(x\)-й строке и \(y\)-м столбце, если считать, что нумерация идет с единицы (\(1 \leq x \leq n, 1 \leq y \leq m\)). Изначально вы стоите в клетке \((1, 1)\). На каждом ходу вы можете прыгнуть из клетки \((x, y)\), где вы сейчас стоите, на любой вектор \((dx, dy)\), таким образом, оказавшись в клетке \((x+dx, y+dy)\). Разумеется, нельзя выпрыгивать за пределы поля, однако есть еще одно важное условие — вы не можете прыгать на один вектор два раза. Требуется же вам обойти всё поле, посетив каждую клетку ровно один раз (начальная клетка считается уже посещённой).

Так как дядя Толика очень занятой человек, помогите ему решить эту задачу!

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

Первая и единственная строка ввода содержит два числа \(n, m\) (\(1 \leq n \cdot m \leq 10^{6}\)) — размеры поля.

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

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

Иначе выведите \(n \cdot m\) пар чисел, \(i\)-я из которых содержит два числа \(x_i, y_i\) (\(1 \leq x_i \leq n, 1 \leq y_i \leq m\)) — клетки в порядке очередности их посещения, так, чтобы все векторы прыжков были различны.

Обратите внимание, что все клетки вывода должны быть различны, а также первая клетка должна иметь координаты \((1, 1)\)

Примечание

Вектора из первого примера в порядке совершения прыжков — \((0, 2), (0, -1), (1, 0), (0, 1), (0, -2)\).

B. Подарок от Лены

Конструктив реализация *1000

У Васи скоро день рожденья, и Лена захотела сшить ему в подарок расписную салфетку. Эту салфетку Лена решила украсить цифрами от 0 до n. Цифры будут расположены в форме ромба, причем по центру должна находиться самая большая цифра n, а ближе к краям цифры должны уменьшаться. Например, для n = 5 узор на салфетке будет выглядеть следующем образом:


          0
        0 1 0
      0 1 2 1 0
    0 1 2 3 2 1 0
  0 1 2 3 4 3 2 1 0
0 1 2 3 4 5 4 3 2 1 0
  0 1 2 3 4 3 2 1 0
    0 1 2 3 2 1 0
      0 1 2 1 0
        0 1 0
          0

Ваша задача — по заданному n определить, как будет выглядеть салфетка.

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

В первой строке записано единственное целое число n (2 ≤ n ≤ 9).

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

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

D. Полное зеркало

Деревья дп Конструктив поиск в глубину и подобное реализация хэши *2400

Дерево состоит из \(n\) вершин. Выберите одну вершину как корень. Он должен удовлетворять условию ниже.

  • Для каждой пары вершин \(v_{1}\) и \(v_{2}\), если \(distance\)(\(root\), \(v_{1}\)) \(= distance\)(\(root\), \(v_{2})\), тогда \(degree\)(\(v_{1}\)) \(= degree\)(\(v_{2}\)), где \(degree\) — количество смежных вершин, а \(distance\) — количество ребер между двумя вершинами.

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

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^{5}\)) — количество верши.

Каждая из следующих \(n-1\) строк содержит два целых числа \(v_{i}\) и \(u_{i}\) (\(1 \le v_{i} \lt u_{i} \le n\)), которые значат, что существует ребра между вершинами \(v_{i}\) и \(u_{i}\). Гарантируется, что граф — дерево.

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

Если такой корень существует, выведите любой из них. Иначе выведите \(-1\).

Примечание

Рисунок до первого примера. \(1\), \(5\), \(7\) — также могут быть корнями.

Рисунок до второго примера. Невозможно найти корень графа.

D. Казак Вус и числа

жадные алгоритмы Конструктив математика *1500

У Казака Вуса есть \(n\) действительных чисел \(a_i\). Известно, что сумма всех чисел равна \(0\). Он хочет найти такую последовательность \(b\) из \(n\) чисел, что сумма всех чисел равна \(0\) и каждое \(b_i\) равно либо \(\lfloor a_i \rfloor\), либо \(\lceil a_i \rceil\). Другими словами, \(b_i\) равно \(a_i\) округленному либо вверх, либо вниз. Необязательно округлять к ближайшему целому числу.

Например, если \(a = [4.58413, 1.22491, -2.10517, -3.70387]\), то \(b\) может быть, например, \([4, 2, -2, -4]\).

Обратите внимание, что если \(a_i\) целое, то нет разницы между операциями \(\lfloor a_i \rfloor\) и \(\lceil a_i \rceil\), \(b_i\) всегда будет равно \(a_i\).

Помогите Казаку Вусу найти такую последовательность!

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

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — количество чисел.

Каждая из следующих \(n\) строк содержит одно вещественное число \(a_i\) (\(|a_i| < 10^5\)). Гарантируется, что у каждого \(a_i\) ровно \(5\) цифр после запятой. Гарантируется, что сумма всех чисел равна \(0\).

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

В каждой из следующих \(n\) строк выведите по одному целому числу \(b_i\). Для каждого \(i\), должно исполняться условие \(|a_i-b_i|<1\).

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

Примечание

Первый пример объяснен в условии.

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

C. Вася и массив

жадные алгоритмы Конструктив реализация *1800

У Васи есть массив \(a_1, a_2, \dots, a_n\).

Вы не знаете, что это за массив, но Вася сообщил вам \(m\) фактов об этом массиве. \(i\)-й факт – это тройка чисел \(t_i\), \(l_i\) и \(r_i\) (\(0 \le t_i \le 1, 1 \le l_i < r_i \le n\)) которая означает:

  • если \(t_i=1\), то подотрезок массива \(a_{l_i}, a_{l_i + 1}, \dots, a_{r_i}\) отсортирован в порядке неубывания;
  • если \(t_i=0\), то подотрезок массива \(a_{l_i}, a_{l_i + 1}, \dots, a_{r_i}\) не отсортирован в порядке неубывания. Подотрезок считается неотсортированным, если найдется пара соседних элементов такая, что первый элемент больше второго.

Например, если \(a = [2, 1, 1, 3, 2]\) то можно дать три следующих факта: \(t_1=1, l_1=2, r_1=4\) (подотрезок массива \([a_2, a_3, a_4] = [1, 1, 3]\) отсортирован), \(t_2=0, l_2=4, r_2=5\) (подотрезок массива \([a_4, a_5] = [3, 2]\) не отсортирован), и \(t_3=0, l_3=3, r_3=5\) (подотрезок массива \([a_3, a_5] = [1, 3, 2]\) не отсортирован).

Вы не знаете массив \(a\). Найдите любой массив, удовлетворяющий всем фактам.

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

Первая строка содержит два числа \(n\) и \(m\) (\(2 \le n \le 1000, 1 \le m \le 1000\)).

Следующие \(m\) строк содержат по три числа \(t_i\), \(l_i\) и \(r_i\) (\(0 \le t_i \le 1, 1 \le l_i < r_i \le n\)).

Если \(t_i = 1\), то подотрезок массива \(a_{l_i}, a_{l_i + 1}, \dots , a_{r_i}\) отсортирован. Иначе (если \(t_i = 0\)) подотрезок массива \(a_{l_i}, a_{l_i + 1}, \dots , a_{r_i}\) не отсортирован.

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

Если не существует массива, удовлетворяющего всем фактам, в единственной строке выведите NO (в любом регистре).

Если такой массив существует, в первой строке выведите YES (в любом регистре). Во второй строке выведите \(n\) чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — массив \(a\), удовлетворяющий всем фактам. Если существует несколько подходящих массивов, выведите любой.

A2. Прибавление на дереве: революция

Деревья Конструктив поиск в глубину и подобное реализация *2500

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

Вам дано дерево с \(n\) вершинами. Изначально на каждом ребре написан \(0\). За одну операцию вы можете выбрать любые \(2\) различных листа \(u\), \(v\) и любое целое число \(x\), и прибавить \(x\) ко всем числам записанных на ребрах на простом пути с \(u\) до \(v\). Обратите внимание, что в предыдущей подзадаче \(x\) могло быть любым действительным, теперь оно должно быть целым.

Для примера на изображении ниже показан результат применения двух операций к графу: прибавления \(2\) на пути от \(7\) до \(6\), а потом прибавления \(-1\) на пути от \(4\) до \(5\).

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

Лист это вершина степени \(1\). Простой путь это путь, не содержащий ни одну вершину дважды.

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

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 1000\)) — количество вершин в дереве.

Каждая из следующих \(n-1\) строк содержит три целых числа \(u\), \(v\), \(val\) (\(1 \le u, v \le n\), \(u \neq v\), \(0 \le val \le 10\,000\)), обозначающие что между вершинами \(u\) и \(v\) есть ребро, на котором в заданной конфигурации написано \(val\). Гарантируется, что данные ребра образуют дерево. Гарантируется, что все числа \(val\) различные и четные.

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

Если требуемой последовательности операций не существует, в первой строке выведите «NO».

Если же она существует, в первой строке выведите «YES». Во второй строке выведите \(m\) — количество операций, которое вы собираетесь применить (\(0 \le m \le 10^5\)). Заметьте, что минимизировать количество операций не требуется!

В следующих \(m\) строках выведите операции в следующем формате:

\(u, v, x\) (\(1 \le u, v \le n\), \(u \not = v\), \(x\) — целое число, \(-10^9 \le x \le 10^9\)), где \(u, v\) — листья, \(x\) — прибавляемое число.

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

Примечание

Конфигурация с первого примера нарисована ниже, и ее невозможно достичь.

Последовательность операций с второго примера иллюстрирована ниже.

B. Перед экзаменом

Конструктив реализация сортировки *1900

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

К экзамену необходимо было выучить доказательства n теорем. Известно, что на экзамене будет k билетов, в каждом из которых содержится различных теорем. Каждая теорема при этом входит не более чем в один билет (то есть теорем не попадут ни в один билет). В ходе экзамена один и тот же билет может достаться нескольким студентам.

Точное распределение теорем по билетам неизвестно, однако студенты, сдававшие экзамен до Васи, рассказали ему о содержании своих билетов. Сам Вася оценивает свой уровень знаний по i-ой теореме некоторым числом ai. Уровнем знаний по билету называется среднее арифметическое уровней знаний по всем теоремам из этого билета. Теперь на основе сведений, полученных от других студентов, Вася хочет определить минимально и максимально возможные уровни своих знаний по билету, который попадется ему на экзамене. К сожалению, у Васи уже нет времени на подсчеты, поэтому он попросил о помощи вас.

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

В первой строке записаны два целых числа n и k (1 ≤ k ≤ n ≤ 100) — количество теорем и количество билетов соответственно. Во второй строке содержится n целых чисел ai (0 ≤ ai ≤ 100), i-ое число (1 ≤ i ≤ n) соответствует уровню знаний Васи по i-ой теореме.

В третьей строке записано число q (0 ≤ q ≤ 100) — количество человек, сдававших экзамен до Васи. В каждой из последующих q строк находится описание билета очередного человека: целых чисел от 1 до n включительно — номера теорем из билета в соответствии с порядком их перечисления во входных данных. Номера могут быть заданы в произвольном порядке. Гарантируется, что заданные билеты корректны (то есть все теоремы в пределах одного билета различны, а билеты, доставшиеся разным людям, или не содержат одинаковых теорем, или совпадают с точностью до перестановки теорем).

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

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

Примечание

Разберем первый пример. Уровни знаний Васи по тем билетам, содержание которых уже известно, составляют 6 и 15.5 соответственно. Из оставшихся трех теорем можно сформировать только один билет. Рассмотрев все возможные варианты содержания этого билета, можно понять, что при наиболее благоприятном исходе экзамена Васе достанется билет, содержащий теоремы 4 и 7 (уровень знаний 15.5), а при наименее благоприятном — теоремы 3 и 5 (уровень знаний 5).

Операция x обозначает взятие целой части вещественного числа x (округление вниз).

C. Ножницы и скотч

*особая задача геометрия Конструктив

Вам дан кусочек бумаги в форме простого многоугольника \(S\). Ваша задача — превратить его в простой многоугольник \(T\), у которого такая же площадь, как у \(S\).

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

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

Далее следует формальное описание задачи.

Фигурой \(Q=(Q_0,\dots,Q_{n-1})\) называется последовательность из трех или более точек на плоскости такая, что:

  • Замкнутая ломаная \(Q_0Q_1Q_2\dots Q_{n-1}Q_0\) не имеет самокасаний и самопересечений, а поэтому образует простой многоугольник.
  • Эта ломаная обходит многоугольник против часовой стрелки.

Обозначим многоугольник, ограниченный фигурой \(Q\), за \(P(Q)\).

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

Обратите внимание, что отражать фигуры запрещено. Кроме того, обратите внимание, что порядок точек важен: фигура \((Q_1,\dots,Q_{n-1},Q_0)\) не всегда эквивалентна фигуре \((Q_0,\dots,Q_{n-1})\).

На рисунке слева: фигуры \(U\) и \(V\) эквивалентны. Фигура \(W\) не эквивалентна им, потому что точки \(W\) следуют в другом порядке. Четвертая фигура не эквивалентна остальным независимо от порядка точек, потому что отражение не допускается.

Во входных и выходных данных фигура из \(n\) точек представляется как одна строка, содержащая \(2n+1\) число: число \(n\), а затем координаты точек: \(Q_{0,x}\), \(Q_{0,y}\), \(Q_{1,x}\), ...

У фигур есть идентификационные номера (ID). Данная вам фигура \(S\) имеет ID 0, фигуры, которые вы получаете в процессе решения — ID 1, 2, 3, ... в порядке, в которым вы их получаете.

Фигуры \(B_1,\dots,B_k\) образуют разделение фигуры \(A\), если:

  • Объединение всех \(P(B_i)\) дает точно \(P(A)\).
  • Для всех \(i\neq j\) площадь пересечения \(P(B_i)\) и \(P(B_j)\) равна нулю.

Применение ножниц уничтожает одну существующую фигуру \(A\) и создает одну или более фигуру \(B_1,\dots,B_k\), которые образуют разделение \(A\).

На рисунке фигура \(A\) (квадрат) разделена на фигуры \(B_1\), \(B_2\), \(B_3\) (три треугольника). Один из корректных способов представить одну из фигур \(B_i\) есть «3 3 1 6 1 5.1 4».

Применение скотча уничтожает одну или более существующую фигуру \(A_1,\dots,A_k\) и создает одну новую фигуру \(B\). Чтобы эта операция была выполнима, вы должны в начале указать фигуры \(C_1,\dots,C_k\), и только затем конечную фигуру \(B\). Эти фигуры должны удовлетворять следующим ограничениям:

  • Для всех \(i\) фигура \(C_i\) эквивалентна фигуре \(A_i\).
  • Фигуры \(C_1,\dots,C_k\) образуют разделение фигуры \(B\).

Неформально вы должны выбрать фигуру \(B\) и показать, как нужно подвинуть и повернуть все существующие \(A_i\), чтобы они заняли правильные места \(C_i\) внутри \(B\). Обратите внимание, что только фигура \(B\) получает новый ID, фигуры \(C_i\) его не получают.

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

Первая строка содержит исходную фигуру \(S\).

Вторая строка содержит исходную фигуру \(T\).

В обеих фигурах от 3 до 10 точек включительно. Обе фигуры даны в формате, описанном выше.

Все координаты во входных данных — целые числа в пределах от \(-10^6\) до \(10^6\) включительно.

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

Многоугольники \(P(S)\) и \(P(T)\) имеют одинаковую площадь.

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

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


scissors
id(A) k
B_1
B_2
...
B_k

Здесь \(id(A)\) — ID фигуры, которую вы разрезаете, \(k\) — число новых фигур, а \(B_1,\dots,B_k\) — сами эти новые фигуры.

Каждый раз, когда вы используете скотч, выведите блок строк в следующем виде:


tape
k id(A_1) ... id(A_k)
C_1
C_2
...
C_k
B

Здесь \(k\) — количество фигур, которые вы склеиваете, \(id(A_1),\dots,id(A_k)\) — их ID, \(C_1,\dots,C_k\) — их эквивалентные позиции внутри \(B\), а \(B\) — финальная фигура.

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

Ваш вывод должен удовлетворять следующим условиям:

  • Координаты всех точек должны быть в пределах от \(-10^7\) до \(10^7\) включительно.
  • У всех фигур должно быть не более \(100\) точек.
  • В каждой операции число фигур \(k\) должно быть в пределах от \(1\) до \(100\) включительно.
  • Общее число операций не должно превышать \(2000\).
  • Общее число точек во всех фигурах не должно превышать \(20000\).
  • В конце должна быть ровно одна фигура (которая не была уничтожена), и эта фигура должна быть эквивалентна \(T\).
  • Все операции должны быть корректны. Решения с небольшими ошибками округления будут приняты. В проверяющей программе все проверки выполняются с абсолютной или относительной допустимой ошибкой в \(10^{-3}\).
Система оценки

Фигура называется удобным прямоугольником, если она имеет вид \(((0,0),~ (x,0),~ (x,y),~ (0,y))\) для некоторых положительных чисел \(x\) и \(y\).

Фигура называется удобным квадратом, если дополнительно \(x=y\).

Фигура \(A\) называется строго выпуклой, если все внутренние углы многоугольника \(P(A)\) меньше 180 градусов.

Подзадача 1 (5 баллов): \(S\) и \(T\) — удобные прямоугольники. Все координаты точек — целые числа от 0 до 10 включительно

Подзадача 2 (13 баллов): \(S\) — удобный прямоугольник с \(x>y\), а \(T\) — удобный квадрат

Подзадача 3 (12 баллов): \(S\) и \(T\) — удобные прямоугольники

Подзадача 4 (14 баллов): \(S\) — треугольник, а \(T\) — удобный квадрат

Подзадача 5 (10 баллов): \(S\) и \(T\) — треугольники

Подзадача 6 (16 баллов): \(S\) — строго выпуклый многоугольник, а \(T\) — удобный прямоугольник

Подзадача 7 (11 баллов): \(T\) — удобный прямоугольник

Подзадача 8 (19 баллов): нет дополнительных ограничений

Примечание

Рисунок ниже показывает ответ в первом примере. Слева показана изначальная фигура после использования ножниц, справа — соответствующие \(C_i\), когда мы склеиваем все эти части обратно.

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

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

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

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

A. Три кучки с конфетами

Конструктив математика Перебор *800

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

После того как они возьмут все конфеты из кучек, если у Алисы будет больше конфет, чем у Боба, она выкидывает некоторые конфеты таким образом, что количество ее конфет становится равным количеству конфет Боба. Конечно, Боб сделает то же самое, если у него больше конфет.

Алиса и Боб хотят иметь как можно больше конфет каждый, и будут планировать процесс разделения конфет соответственно. Пожалуйста, посчитайте максимально возможное количество конфет, которое может оказаться у Алисы после процесса их разделения (конечно же, у Боба будет столько же конфет).

Вам необходимо ответить на \(q\) независимых запросов.

Рассмотрим следующий пример: \([1, 3, 4]\). Здесь Алиса может взять третью кучку, Боб может взять вторую кучу, и единственную оставшуюся конфету из первой кучки получает Боб — тогда у Алисы будет \(4\) конфеты и у Боба тоже будет \(4\) конфеты.

Другой возможный пример — это \([1, 10, 100]\). Тогда Алиса может выбрать вторую кучку, Боб может выбрать первую кучку, и конфеты из третьей кучки могут быть разделены таким образом, что Боб получит \(54\) конфеты, а Алиса получит \(46\) конфет. Теперь у Боба есть \(55\) конфет, а у Алисы — \(56\) конфет, таким образом, она должна выкинуть одну конфету — и после этого у нее будет также \(55\) конфет.

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

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 1000\)) — количество запросов. Затем следуют \(q\) запросов.

Единственная строка запроса содержит три целых числа \(a, b\) и \(c\) (\(1 \le a, b, c \le 10^{16}\)) — количество конфет в первой, второй и третьей кучках соответственно.

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

Выведите \(q\) строк. \(i\)-я строка должна содержать ответ на \(i\)-й запрос — максимальное количество конфет, которое Алиса может иметь после разделения, если и Алиса, и Боб будут действовать оптимально (конечно же, Боб будет иметь такое же количество конфет).

B. Отрезки с нечетной суммой

Конструктив математика *1200

Вам задан массив \(a\), состоящий из \(n\) целых чисел \(a_1, a_2, \dots, a_n\). Вы хотите разделить его ровно на \(k\) непустых непересекающихся подотрезков таким образом, что каждый подотрезок имеет нечетную сумму (то есть для каждого подотрезка должно выполняться, что сумма элементов, принадлежащих этому подотрезку, нечетна). Переставлять элементы заданного массива нельзя. Каждый из \(n\) элементов массива \(a\) должен принадлежать ровно одному из \(k\) подотрезков.

Рассмотрим некоторые примеры разделения массива длины \(5\) на \(3\) подотрезка (необязательно с нечетной суммой): \([1, 2, 3, 4, 5]\) — это изначальный массив, тогда все возможные способы разделить его на \(3\) непустых непересекающихся подотрезка описаны ниже:

  • \([1], [2], [3, 4, 5]\);
  • \([1], [2, 3], [4, 5]\);
  • \([1], [2, 3, 4], [5]\);
  • \([1, 2], [3], [4, 5]\);
  • \([1, 2], [3, 4], [5]\);
  • \([1, 2, 3], [4], [5]\).

Конечно же, существуют случаи, когда невозможно разделить изначальный массив ровно на \(k\) подотрезков таким образом, что сумма элементов в каждом из них будет нечетна. В этом случае выведите «NO». Иначе выведите «YES» и любое возможное разделение массива. Посмотрите в формат вывода для более детального объяснения.

Вам необходимо ответить на \(q\) независимых запросов.

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

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов. Затем следуют \(q\) запросов.

Первая строка запроса содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2 \cdot 10^5\)) — количество элементов в массиве и количество подотрезков соответственно.

Вторая строка каждого запроса содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) равно \(i\)-му элементу \(a\).

Гарантируется, что сумма \(n\) по всем запросам не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

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

Для каждого запроса выведите ответ на него. Если невозможно разделить изначальный массив на ровно \(k\) подотрезков таким образом, что сумма элементов в каждом из них будет нечетна, выведите «NO» в первой строке. Иначе выведите «YES» в первой строке и любое возможное разделение массива во второй строке. Разделение может быть представлено в виде \(k\) целых чисел \(r_1\), \(r_2\), ..., \(r_k\) таких, что \(1 \le r_1 < r_2 < \dots < r_k = n\), где \(r_j\) равно правой границе \(j\)-го отрезка (индексу последнего элемента, который принадлежит \(j\)-му отрезку), таким образом, массив разделен на подотрезки \([1; r_1], [r_1 + 1; r_2], [r_2 + 1, r_3], \dots, [r_{k - 1} + 1, n]\). Заметьте, что \(r_k\) всегда равно \(n\), но вам все равно необходимо его вывести.

E. Компонента связности шахматной доски

Конструктив реализация *1800

Вам задано два целых числа \(b\) and \(w\). У вас есть шахматная доска размера \(10^9 \times 10^9\) с левой верхней клеткой, находящейся в \((1; 1)\), клетка \((1; 1)\) покрашена в белый цвет.

Ваша задача — найти компоненту связности этой шахматной доски, которая содержит ровно \(b\) черных клеток и ровно \(w\) белых клеток. Две клетки называются связными, если у них есть общая сторона (то есть для клетки \((x, y)\) существует не более четырех связных клеток: \((x - 1, y), (x + 1, y), (x, y - 1), (x, y + 1)\)). Набор клеток называется компонентой связности, если для каждой пары клеток \(C_1\) и \(C_2\) из этого множества найдется последовательность клеток \(c_1\), \(c_2\), ..., \(c_k\) такая, что \(c_1 = C_1\), \(c_k = C_2\), все \(c_i\) от \(1\) до \(k\) принадлежат этому множеству клеток, а также для всех \(i \in [1, k - 1]\), клетки \(c_i\) и \(c_{i + 1}\) связны.

Очевидно, бывают случаи, когда невозможно найти такую компоненту. В этом случае выведите «NO». Иначе выведите «YES» и любую подходящую компоненту связности.

Вам необходимо ответить на \(q\) независимых запросов.

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

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 10^5\)) — количество запросов. Затем следуют \(q\) запросов.

Единственная строка запроса содержит два целых числа \(b\) и \(w\) (\(1 \le b, w \le 10^5\)) — необходимое количество черных клеток и необходимое количество белых клеток.

Гарантируется, что сумма количеств клеток не превосходит \(2 \cdot 10^5\) (\(\sum w + \sum b \le 2 \cdot 10^5\)).

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

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

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

Иначе выведите «YES» в первой строке. В следующих \(b + w\) строках выведите координаты клеток вашей компоненты в любом порядке. В вашем ответе должно быть ровно \(b\) черных клеток и ровно \(w\) белых клеток. Выведенная компонента обязана быть связной.

Если существует несколько возможных ответов, вы можете вывести любой. Все координаты в ответе должны принадлежать отрезку \([1; 10^9]\).

F. К-й путь

Конструктив кратчайшие пути Перебор сортировки *2200

Вам задан связный неориентированный взвешенный граф, состоящий из \(n\) вершин и \(m\) ребер.

Вам необходимо вывести \(k\)-й минимальный кратчайший путь в этом графе (пути из вершины в саму себя не учитываются, пути из вершины \(i\) в вершину \(j\) и из вершины \(j\) в вершину \(i\) считаются за один).

Более формально, если \(d\) — матрица кратчайших путей, где \(d_{i, j}\) равно длине кратчайшего пути между вершинами \(i\) и \(j\) (\(1 \le i < j \le n\)), то вам необходимо вывести \(k\)-й элемент в отсортированном массиве, состоящем из всех \(d_{i, j}\), где \(1 \le i < j \le n\).

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

Первая строка входных данных содержит три целых числа \(n, m\) и \(k\) (\(2 \le n \le 2 \cdot 10^5\), \(n - 1 \le m \le \min\Big(\frac{n(n-1)}{2}, 2 \cdot 10^5\Big)\), \(1 \le k \le \min\Big(\frac{n(n-1)}{2}, 400\Big)\)) — количество вершин в графе, количество ребер в графе и значение \(k\) соответственно.

Затем следуют \(m\) строк, каждая из которых содержит три целых числа \(x\), \(y\) и \(w\) (\(1 \le x, y \le n\), \(1 \le w \le 10^9\), \(x \ne y\)), обозначающих ребро между вершинами \(x\) и \(y\) веса \(w\).

Гарантируется, что заданный граф является связным (существует путь между каждой парой вершин), в графе отсутствуют петли (ребра, соединяющие вершину с самой собой) и кратные ребра (для каждой пары вершин \(x\) и \(y\) существует не более одного ребра между этими вершинами графа).

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

Выведите одно целое число — длину \(k\)-го минимального кратчайшего пути в заданном графе (пути из вершины в саму себя не учитываются, пути из вершины \(i\) в вершину \(j\) и из вершины \(j\) в вершину \(i\) считаются за один).

C. Паросочетание vs независимое множество

графы жадные алгоритмы Конструктив сортировки *2000

Дан неориентированный граф, состоящий из \(3 \cdot n\) вершин и \(m\) ребер. Требуется найти паросочетание, состоящее из \(n\) ребер, или независимое множество, состоящее из \(n\) вершин.

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

Множество вершин называется независимым, если никакие две вершины этого множества не соединены ребром.

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

В первой строке записано одно целое число \(T \ge 1\) — количество графов, которое вам надо обработать. Затем следуют описания \(T\) графов.

В первой строке описания графа записаны два числа \(n\) и \(m\), где \(3 \cdot n\) — количество вершин, а \(m\) — количество ребер в графе (\(1 \leq n \leq 10^{5}\), \(0 \leq m \leq 5 \cdot 10^{5}\)).

В следующих \(m\) строках записаны пары чисел \(v_i\) и \(u_i\) (\(1 \leq v_i, u_i \leq 3 \cdot n\)), означающие, что вершины \(v_i\) и \(u_i\) соединены ребром.

Гарантируется, что в графе нет петель и кратных ребер.

Гарантируется, что сумма \(n\) по всем графам в одном тесте не превышает \(10^{5}\), сумма \(m\) по всем графам в одном тесте не превышает \(5 \cdot 10^{5}\).

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

Выведите ответы для каждого из \(T\) графов. Формат ответа для одного графа описан ниже.

Если вы нашли паросочетание размера \(n\), то в первой строке выведите «Matching» (без кавычек), а во второй строке выведите \(n\) чисел, разделённых пробелами, — номера рёбер паросочетания. Рёбра нумеруются от \(1\) до \(m\) в порядке ввода.

Если вы нашли независимое множество размера \(n\), то в первой строке выведите «IndSet» (без кавычек), а во второй строке выведите \(n\) чисел, разделённых пробелами, — номера вершин независимого множества.

Если в графе нет ни того, ни другого, выведите «Impossible» (без кавычек).

Номера рёбер или вершин можно выводить в произвольном порядке.

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

Примечание

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

В третьем графе нет паросочетания размера 2, однако есть независимое множество размера 2. В этом графе также есть независимое множество размера 5: 2 3 4 5 6. Тем не менее, такой ответ не является верным, потому что вас просят найти независимое множество (или паросочетание) размера ровно \(n\).

В четвёртом графе нет независимого множества размера 2, однако есть паросочетание размера 2.

E. Старт сезона

Конструктив *2100

Перед началом футбольного сезона в Берляндии проводится странный магический ритуал. Опытнейшим шаманам поручается найти волшебную матрицу размера n × n (n — четно), без которой боги не дадут добро на старт чемпионата. Матрица должна состоять из целых чисел от 0 до n - 1, иметь на главной диагонали нули и быть симметричной относительно главной диагонали. Кроме того, в каждой строке этой матрицы все числа должны быть различны. Шаманы устали каждый раз ломать голову над очередной матрицей, поэтому просят вас сделать это программно.

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

В первой строке содержится целое число n (2 ≤ n ≤ 1000), n — четное.

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

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

D. Выведите 1337-строку...

Комбинаторика Конструктив математика Строки *1900

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

Вам задано число \(n\).

Вам нужно найти такую последовательность \(s\), состоящую из цифр \(\{1, 3, 7\}\), что она имеет ровно \(n\) подпоследовательностей \(1337\).

Например, последовательность \(337133377\) имеет \(6\) подпоследовательностей \(1337\):

  1. \(337\underline{1}3\underline{3}\underline{3}7\underline{7}\) (нужно удалить второй и пятый символы);
  2. \(337\underline{1}\underline{3}3\underline{3}7\underline{7}\) (нужно удалить третий и пятый символы);
  3. \(337\underline{1}\underline{3}\underline{3}37\underline{7}\) (нужно удалить четверты и пятый символы);
  4. \(337\underline{1}3\underline{3}\underline{3}\underline{7}7\) (нужно удалить второй и шестой символы);
  5. \(337\underline{1}\underline{3}3\underline{3}\underline{7}7\) (нужно удалить третий и шестой символы);
  6. \(337\underline{1}\underline{3}\underline{3}3\underline{7}7\) (нужно удалить четвертый и шестой символы).

Обратите внимание, что длина последовательности \(s\) не должна превышать \(10^5\).

Вам нужно ответить на \(t\) независимых запросов.

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

Первая строка содержит число \(t\) (\(1 \le t \le 10\)) — количество запросов.

Следующие \(t\) строк содержат описание запросов: \(i\)-я строка содержит единственное число \(n_i\) (\(1 \le n_i \le 10^9\)).

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

На \(i\)-й запрос выведите строку \(s_i\) (\(1 \le |s_i| \le 10^5\)), состоящую из цифр \(\{1, 3, 7\}\). Строка \(s_i\) должна содержать ровно \(n_i\) подпоследовательностей \(1337\). Если подходящих строк несколько, выведите любую из них.

A. Почти равные

жадные алгоритмы Конструктив математика *1200

Дано целое положительное число \(n\). Нужно расставить числа от \(1\) до \(2n\) по кругу таким образом, чтобы выполнялось следующее условие:

Для каждых \(n\) последовательных чисел на окружности выпишем на доску их сумму. Тогда любые два из выписанных на доске \(2n\) чисел отличаются не более, чем на \(1\).

К примеру, выберем \(n = 3\). Слева вы можете увидеть пример правильной расстановки:\(1 + 4 + 5 = 10\), \(4 + 5 + 2 = 11\), \(5 + 2 + 3 = 10\), \(2 + 3 + 6 = 11\), \(3 + 6 + 1 = 10\), \(6 + 1 + 4 = 11\), любые два числа отличаются не более чем на \(1\). Справа вы можете увидеть неправильную расстановку: к примеру, \(5 + 1 + 6 = 12\), а \(3 + 2 + 4 = 9\), \(9\) и \(12\) отличаются более чем на \(1\).

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

Первая и единственная строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)).

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

Если решения не существует, в первой строке выведите «NO».

Если оно существует, в первой строке выведите «YES». После чего, во второй строке выведите \(2n\) чисел — числа от \(1\) до \(2n\) в порядке в котором они будут стоять на окружности. Каждое число должно встречаться только один раз. Если есть несколько решений, выведите любое.

Примечание

Пример из условия приведен для первого примера.

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

D. Почти все

Деревья Конструктив *2700

Дано дерево из \(n\) вершин. Вам необходимо расставить на его ребрах целые неотрицательные числа таким образом, чтобы выполнялось условие:

Для каждых двух вершин \(i\), \(j\) посмотрим на путь между ними и посчитаем сумму чисел на ребрах этого пути. Выпишем полученную сумму на доску. Тогда каждое число от \(1\) до \(\lfloor \frac{2n^2}{9} \rfloor\) должно быть выписано по крайней мере один раз.

Гарантируется, что такая расстановка существует.

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 1000\)) — количество вершин.

Каждая из следующих \(n-1\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)), обозначающие что между вершинами \(u\) и \(v\) есть ребро. Гарантируется, что данные ребра образуют дерево.

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

Выведите \(n-1\) строку, каждую вида \(u\) \(v\) \(x\) (\(0 \le x \le 10^6\)), что будет означать, что вы записали число \(x\) на ребре между \(u\), \(v\).

Множество ребер \((u, v)\) должно совпадать с множеством ребер начального графа, но выводить ребра вы можете в любом порядке. Также вы можете выводить концы ребра в порядке, отличном от указанного во входных данных.

Примечание

В первом примере, расстояние между вершинами \(1\) и \(2\) равно \(2\), между \(2\) и \(3\) равно \(1\), между \(1\) и \(3\) равно \(3\).

В третьем примере, числами от \(1\) to \(9\) (включительно) будут выписаны на доску, в то время как достаточно и от \(1\) до \(5\), чтобы пройти тест.

F. Красота перестановки

Конструктив математика *3400

Назовем красотой перестановки чисел от \(1\) до \(n\) \((p_1, p_2, \dots, p_n)\) количество пар \((L, R)\) таких, что \(1 \le L \le R \le n\) и числа \(p_L, p_{L+1}, \dots, p_R\) являются последовательными \(R-L+1\) числами в каком-то порядке. К примеру, красота перестановки \((1, 2, 5, 3, 4)\) равна \(9\), а отрезки, соответствующие парам индексов — это \([1]\), \([2]\), \([5]\), \([4]\), \([3]\), \([1, 2]\), \([3, 4]\), \([5, 3, 4]\), \([1, 2, 5, 3, 4]\).

Вам нужно ответить на \(q\) независимых запросов. В каждом запросе вам будут даны целые положительные числа \(n\), \(k\). Определите, существует ли перестановка чисел от \(1\) до \(n\) с красотой, равной \(k\), а если существует, то выведите одну из таких.

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

Первая строка содержит целое число \(q\) (\(1\le q \le 10\,000\)) — число запросов.

Далее следует \(q\) строк. Каждая строка содержит два целых числа \(n\), \(k\) (\(1 \le n \le 100\), \(1 \le k \le \frac{n(n+1)}{2}\)) — длину перестановки и необходимую красоту соответственно.

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

Для запроса выведите «NO», если не существует нужной перестановки. Иначе выведите «YES», а в следующей строке выведите \(n\) чисел — элементы перестановки в нужном порядке.

Примечание

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

Первый запрос: в \((1)\) есть только один отрезок, состоящий из последовательных чисел — вся перестановка.

Второй запрос: в \((2, 4, 1, 5, 3)\) есть \(6\) таких отрезков: \([2]\), \([4]\), \([1]\), \([5]\), \([3]\), \([2, 4, 1, 5, 3]\).

Для третьего запроса таких перестановок не существует.

Четвертый запрос: в \((2, 3, 1, 4, 5)\) есть \(10\) таких отрезков: \([2]\), \([3]\), \([1]\), \([4]\), \([5]\), \([2, 3]\), \([2, 3, 1]\), \([2, 3, 1, 4]\), \([4, 5]\), \([2, 3, 1, 4, 5]\).

B. Заполнение квадратов

жадные алгоритмы Конструктив реализация *1200

Вам заданы две матрицы \(A\) и \(B\). В каждой матрице ровно \(n\) строк и \(m\) столбцов. Каждый элемент \(A\)\(0\) или \(1\); каждый элемент \(B\) изначально равен \(0\).

Вы можете провести любое количество операций с матрицей \(B\). Для проведения операции вы должны выбрать любую подматрицу \(B\) размера \(2 \times 2\) и заменить все элементы в этой подматрице на \(1\). Иными словами, вы выбираете два целых числа \(x\) и \(y\) (\(1 \le x < n\), \(1 \le y < m\)), а затем заменяете все элементы \(B_{x, y}\), \(B_{x, y + 1}\), \(B_{x + 1, y}\) и \(B_{x + 1, y + 1}\) на \(1\).

Ваша задача — сделать матрицу \(B\) равной матрице \(A\). Две матрицы \(A\) и \(B\) равны тогда и только тогда, когда каждый элемент матрицы \(A\) равен соответствующему элементу матрицы \(B\).

Можно ли сделать матрицы равными? Если это так, вы должны найти последовательность операций, которые делают матрицу \(B\) равной матрице \(A\). Обратите внимание, что минимизировать количество операций не нужно.

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

В первой строке записаны два целых числа \(n\) и \(m\) (\(2 \le n, m \le 50\)).

Затем следуют \(n\) строк, в каждой по \(m\) целых чисел. \(j\)-е число в \(i\)-й строке — \(A_{i, j}\). Каждое число равно либо \(0\), либо \(1\).

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

Если невозможно сделать \(B\) равной \(A\), выведите одно число \(-1\).

Иначе выведите любую последовательность операций, превращающую \(B\) в \(A\), в следующем формате: в первой строке выведите одно целое число \(k\) — количество операций, а затем выведите \(k\) строк, в каждой из которых должны быть два целых числа \(x\) и \(y\) для соответствующей операции (заменить все элементы \(B_{x, y}\), \(B_{x, y + 1}\), \(B_{x + 1, y}\) и \(B_{x + 1, y + 1}\) на \(1\)). Должно выполняться условие \(0 \le k \le 2500\).

Примечание

Иллюстрация к ответу на первый тест:

\(\begin{matrix} 0 & 0 & 0 & & 1 & 1 & 0 & & 1 & 1 & 1 & & 1 & 1 & 1 \\ 0 & 0 & 0 & \rightarrow & 1 & 1 & 0 & \rightarrow & 1 & 1 & 1 & \rightarrow & 1 & 1 & 1 \\ 0 & 0 & 0 & & 0 & 0 & 0 & & 0 & 0 & 0 & & 0 & 1 & 1 \end{matrix}\)

C. Магическая таблица

Конструктив *1800

Назовем магической таблицой кадратную матрицу размера \(n \times n\), в которой выполняются следующие условия.

  • Все целые числа от \(0\) до \((n^2 - 1)\) включительно встречаются в таблице ровно один раз.
  • Побитовое исключающее ИЛИ всех элементов в строке или в столбце должно быть одинаковым для всех строк и столбцов.

Вам дано целое число \(n\), которое делится на \(4\). Постройте магическую таблицу размера \(n \times n\).

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

В первой строке ввода записано целое число \(n\) (\(4 \leq n \leq 1000\)). Гарантируется, что \(n\) делится на \(4\).

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

Выведите магическую таблицу, т.е. \(n\) строк, в \(i\)-й из которых должно быть записано \(n\) целых числ, разделенных пробелами, описывающих \(i\)-ю строку таблицы.

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

Примечание

В первом примере XOR в каждой строке и в каждом столбце равен \(13\).

Во втором примере XOR в каждой строке и в каждом столбце равен \(60\).

C. Раскрашивание цифр

жадные алгоритмы Конструктив реализация *1500

Вам дана последовательность из \(n\) цифр \(d_1d_2 \dots d_{n}\). Вам нужно раскрасить все цифры в два цвета таким образом, чтобы:

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

Например, для последовательности цифр \(d=914\) единственная корректная раскраска имеет вид \(211\) (в цвет \(1\) покрашены две последние цифры, в цвет \(2\) покрашена первая цифра). Обратите внимание, что \(122\) не соответствует требованиям (результат выписывания \(9\) и следом \(14\) не является неубывающей последовательностью).

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

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

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

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10000\)) — количество наборов входных в тесте.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 2\cdot10^5\)) — длина заданной последовательности цифр.

Следующая строка содержит последовательность из \(n\) цифр \(d_1d_2 \dots d_{n}\) (\(0 \le d_i \le 9\)). Цифры записаны подряд без пробелов или каких-либо других разделителей. Последовательность может начинаться с 0.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных в тесте не превосходит \(2\cdot10^5\).

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

Выведите \(t\) строк — ответы на каждый из наборов входных данных в тесте.

В случае существования решения для набора соответствующая строка вывода должна содержать любую из допустимых раскрасок, записанную в виде строки из \(n\) цифр \(t_1t_2 \dots t_n\) (\(1 \le t_i \le 2\)), где \(t_i\) — это цвет, в который покрашена \(i\)-я цифра. Если допустимых решений несколько, выведите любую из них.

Если решения не существует, то в соответствующая строка вывода должна содержать единственный символ «-» (минус).

Примечание

В первом тестовом наборе \(d=040425524644\). Вывод \(t=121212211211\) является корректным, так как последовательность \(0022444\) (покрашена в \(1\)), сконкатенированная с \(44556\) (покрашена в \(2\)), равна последовательности \(002244444556\), которая является результатом сортировки всех заданных \(n\) цифр.

E. Две маленькие строки

Конструктив Перебор *1900

Вам задано две строки \(s\) и \(t\) обе длины \(2\) и состоящие только из символов 'a', 'b' и 'c'.

Возможные примеры строк \(s\) и \(t\): «ab», «ca», «bb».

Вам необходимо найти строку \(res\), состоящую из \(3n\) символов, \(n\) символов должны быть равны 'a', \(n\) символов должны быть равны 'b' и \(n\) символов должны быть равны 'c', а также \(s\) и \(t\) не должны встречаться в \(res\) в качестве подстрок.

Подстрокой строки называется последовательная подпоследовательность этой строки. Таким образом, строки «ab», «ac» и «cc» являются подстроками строки «abacc», а строки «bc», «aa» и «cb» — не являются подстроками строки «abacc».

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

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

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество символов 'a', 'b' и 'c' в результирующей строке.

Вторая строка входных данных содержит одну строку \(s\) длины \(2\), состоящую из символов 'a', 'b' и 'c'.

Третья строка входных данных содержит одну строку \(t\) длины \(2\), состоящую из символов 'a', 'b' и 'c'.

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

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

Иначе выведите «YES» в первой строке и строку \(res\) во второй строке. \(res\) должна состоять из \(3n\) символов, \(n\) символов должны быть равны 'a', \(n\) символов должны быть равны 'b' и \(n\) символов должны быть равны 'c', а также \(s\) и \(t\) не должны встречаться в \(res\) в качестве подстрок.

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

E. Петя и конструктор

графы Деревья Конструктив математика сортировки *2000

Недавно у Пети был день рождения. Его друзья знают, что Петя очень сильно любит головоломки, поэтому они подарили ему популярный конструктор «Электрик-\(n\)».

Конструктор «Электрик-\(n\)» состоит из \(2n - 1\) проводов и \(2n\) лампочек. При этом каждая лампочка имеет свой уникальный номер, являющийся целыми числом от \(1\) до \(2n\), а все провода являются одинаковыми и неразличимы. Чтобы собрать конструктор требуется каждый из проводов использовать для соединения каких-то двух различных лампочек. Цепочкой в собранном конструкторе назовём последовательность из не менее чем двух различных лампочек, такую что любые две соседние в цепочке лампочки соединены проводом напрямую. Итоговая конфигурация конструктора является корректной, если сеть из проводов и лампочек имеет древовидную структуру, то есть любые две различные лампочки являются концами какой-нибудь цепочки.

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

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

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

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 100\,000\)) — параметр конструктора, определяющий количество лампочек и количество проводов.

В следующей строке записаны \(n\) целых чисел \(d_1, d_2, \ldots, d_n\) (\(1 \leq d_i \leq n\)), где \(d_i\) — требуемое число проводов в цепочке, чтобы лампочки \(2i\) и \(2i - 1\) светились.

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

Выведите \(2n - 1\) строк. В \(i\)-й строке должны быть записаны два различных целых числа \(a_i\) и \(b_i\) (\(1 \leq a_i, b_i \leq 2n\), \(a_i \ne b_i\)), которые означают, что в вашей конфигурации лампочки с этими номерами соединены проводом.

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

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

H. Укладывание плитки

Деревья Конструктив поиск в глубину и подобное *2800

Новая пешеходная зона в центре Москвы состоит из \(n\) площадей, соединённых друг с другом с помощью \(n - 1\) пешеходных дорожек. Простым путём называется такая последовательность площадей, что никакая площадь не встречается в последовательности дважды, и любые две соседние в последовательности площади напрямую соединены пешеходной дорожкой. Размером простого пути будем называть количество площадей в образующей его последовательности. Дорожки спроектированы таким образом, что между любой парой различных площадей существует ровно один простой путь.

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

Определите, можно ли уложить плитку подходящим образом или нет.

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

Первая строка содержит два целых числа \(n\), \(k\) (\(2 \le k \le n \le 200\,000\)) — количество площадей в Москве, количество различных цветов плитки.

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

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

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

Выведите «Yes», если уложить плитку возможно, и «No» иначе.

В случае если ваш ответ «Yes», выведите \(n\) целых чисел от \(1\) до \(k\) — цвет плитки для каждой площади.

Примечание

Ниже изображена карта пешеходной зоны из первого и второго примеров, а также корректный выбор типов плитки для \(k = 4\).

C. Обмен букв

жадные алгоритмы Конструктив *1500

У Монокарпа есть две строки \(s\) и \(t\) одинаковой длины, состоящие из латинских букв «a» и «b».

Монокарп хочет сделать строки \(s\) и \(t\) одинаковыми. Для этого он может выполнять следующие операции: выбрать в строке \(s\) позицию \(pos_1\), выбрать в строке \(t\) позицию \(pos_2\) и поменять местами буквы \(s_{pos_1}\) и \(t_{pos_2}\).

Перед вами стоит задача определить минимальное количество операций, которые должен сделать Монокарп, чтобы сделать строки \(s\) и \(t\) одинаковыми, а также вывести сами операции. Если невозможно сделать строки одинаковыми, сообщите об этом.

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

В первой строке следует целое число \(n\) \((1 \le n \le 2 \cdot 10^{5})\) — длина строк \(s\) и \(t\).

Во второй строке следует строка \(s\) длины \(n\), состоящая из латинских букв «a» и «b».

В третьей строке следует строка \(t\) длины \(n\), состоящая из латинских букв «a» и «b».

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

Если невозможно сделать строки одинаковыми, выведите \(-1\).

В противном случае, в первую строку выведите целое число \(k\) — минимальное количество операций, которые нужно сделать, чтобы сделать строки одинаковыми. В каждой из следующих \(k\) строк выведите по два целых числа — позицию в строке \(s\) и позицию в строке \(t\), которые нужно использовать для обмена букв во время очередной операции.

Примечание

В первом примере достаточно двух операций обмена. Например, можно сначала поменять местами третью букву в строке \(s\) с третьей буквой в строке \(t\). После этого \(s = \) «abbb», \(t = \) «aaab». Затем нужно поменять третью букву в строке \(s\) со второй буквой в строке \(t\). После этого обе строки \(s\) и \(t\) будут равны «abab».

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

D. Покраска ребер

графы Конструктив поиск в глубину и подобное *2100

Вам дан ориентированный граф из \(n\) вершин и \(m\) ориентированных ребер. Гарантируется, что в нем нет ни петель, ни кратных ребер.

Определим \(k\)-покраску орграфа следующим образом: мы красим каждое ребро в один из \(k\) цветов. \(k\)-покраска является хорошей тогда и только тогда, когда в графе не существует цикла, состоящего из ребер одного цвета.

Найдите хорошую \(k\)-покраску с минимально возможным значением \(k\).

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

В первой строке заданы два целых числа \(n\) и \(m\) (\(2 \le n \le 5000\), \(1 \le m \le 5000\)) — количество вершин и ребер, соответственно.

Следующие \(m\) строк содержат описание ребер — по одному в строке. Каждое ребро задается парой целых чисел \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \ne v\)) — они обозначают ребро из вершины \(u\) в вершину \(v\).

Гарантируется, что каждая упорядоченная пара \((u, v)\) входит в список ребер не более одного раза.

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

В первой строке выведите одно целое число \(k\) — количество цветов в \(k\)-покраске графа.

Во второй строке выведите \(m\) целых чисел \(c_1, c_2, \dots, c_m\) (\(1 \le c_i \le k\)), где \(c_i\) — цвет \(i\)-го ребра (ребра нумеруются в том порядке, в котором заданы во входных данных).

Если ответов несколько, выведите любой (но все равно надо минимизировать \(k\)).

G. Alpha planetary system

графы Конструктив кратчайшие пути *3000

Three planets \(X\), \(Y\) and \(Z\) within the Alpha planetary system are inhabited with an advanced civilization. The spaceports of these planets are connected by interplanetary space shuttles. The flight scheduler should decide between \(1\), \(2\) and \(3\) return flights for every existing space shuttle connection. Since the residents of Alpha are strong opponents of the symmetry, there is a strict rule that any two of the spaceports connected by a shuttle must have a different number of flights.

For every pair of connected spaceports, your goal is to propose a number \(1\), \(2\) or \(3\) for each shuttle flight, so that for every two connected spaceports the overall number of flights differs.

You may assume that:

1) Every planet has at least one spaceport

2) There exist only shuttle flights between spaceports of different planets

3) For every two spaceports there is a series of shuttle flights enabling traveling between them

4) Spaceports are not connected by more than one shuttle

Input

The first row of the input is the integer number \(N\) \((3 \leq N \leq 100 000)\), representing overall number of spaceports. The second row is the integer number \(M\) \((2 \leq M \leq 100 000)\) representing number of shuttle flight connections.

Third row contains \(N\) characters from the set \(\{X, Y, Z\}\). Letter on \(I^{th}\) position indicates on which planet is situated spaceport \(I\). For example, "XYYXZZ" indicates that the spaceports \(0\) and \(3\) are located at planet \(X\), spaceports \(1\) and \(2\) are located at \(Y\), and spaceports \(4\) and \(5\) are at \(Z\).

Starting from the fourth row, every row contains two integer numbers separated by a whitespace. These numbers are natural numbers smaller than \(N\) and indicate the numbers of the spaceports that are connected. For example, "\(12\ 15\)" indicates that there is a shuttle flight between spaceports \(12\) and \(15\).

Output

The same representation of shuttle flights in separate rows as in the input, but also containing a third number from the set \(\{1, 2, 3\}\) standing for the number of shuttle flights between these spaceports.

B. Кони

жадные алгоритмы Конструктив *1100

У вас есть шахматная доска с \(n\) рядами и \(n\) столбцами. Изначально все клетки пусты, и в каждую из них вы должны поставить либо белого коня, либо черного коня.

Конь — шахматная фигура, которая может переместиться из клетки (\(x_2\), \(y_2\)) в клетку (\(x_1\), \(y_1\)), если одно из следующих условий выполняется:

  • \(|x_1 - x_2| = 2\) и \(|y_1 - y_2| = 1\), или
  • \(|x_1 - x_2| = 1\) и \(|y_1 - y_2| = 2\).

Ниже приведены примеры, как может ходить (и атаковать) конь. На каждой из нижеприведенных картинок, если конь находится в синей клетке, он атакует все красные клетки (и только их).

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

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

В единственной строке задано одно целое \(n\) (\(3 \le n \le 100\)) — количество рядов (и столбцов), из которых состоит шахматная доска.

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

Выведите \(n\) строк, по \(n\) символов в каждой. \(j\)-й символ в \(i\)-й строке должен быть W, если в клетке (\(i\), \(j\)) должен стоять белый конь, или B, если в эту клетку нужно поставить черного коня. Количество дуэлей должно быть максимально возможным. Если оптимальных ответов несколько, выведите любой из них.

Примечание

В первом примере \(8\) дуэлей:

  1. белый конь в (\(1\), \(1\)) атакует черного коня в (\(3\), \(2\));
  2. белый конь в (\(1\), \(1\)) атакует черного коня в (\(2\), \(3\));
  3. белый конь в (\(1\), \(3\)) атакует черного коня в (\(3\), \(2\));
  4. белый конь в (\(1\), \(3\)) атакует черного коня в (\(2\), \(1\));
  5. белый конь в (\(3\), \(1\)) атакует черного коня в (\(1\), \(2\));
  6. белый конь в (\(3\), \(1\)) атакует черного коня в (\(2\), \(3\));
  7. белый конь в (\(3\), \(3\)) атакует черного коня в (\(1\), \(2\));
  8. белый конь в (\(3\), \(3\)) атакует черного коня в (\(2\), \(1\)).

F. Фабрика деревьев

Деревья жадные алгоритмы Конструктив *2500

Байтландская фабрика деревьев производит деревья для всевозможных промышленных применений. Вам требуется соптимизировать построение дерева определённого типа для большого и важного заказа.

Нужное дерево является подвешенным деревом с \(n\) вершинами, и его вершины пронумерованы различными числами от \(0\) до \(n - 1\). Вершина с номером \(0\) является корнем дерева, и для любой некорневой вершины \(v\) номер её родителя \(p(v)\) меньше номера \(v\).

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

Чтобы превратить бамбук в нужное дерево, вы можете применять один тип операций: выбрать произвольную некорневую вершину \(v\), такую что её родитель \(p(v)\) также не является корнем. Операция состоит в изменении родителя \(v\) на родителя его родителя \(p(p(v))\). Родители всех остальных вершин остаются без изменений, в частности, поддерево \(v\) не меняется.

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

Обратите внимание, что нумерация вершин в полученном дереве должна совпадать с нумерацией в данном дереве. Формально, номера корней должны совпадать, а также для некорневых вершин с одинаковыми номерами должны совпадать номера их родителей.

Гарантируется, что во всех тестах к этой задаче ответ существует, и, более того, в оптимальной последовательности не более \(10^6\) операций. Обратите внимание, что любой взлом, не удовлетворяющий этим ограничениям, будет некорректным.

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

В первой строке записано единственное целое число \(n\) — количество вершин дерева (\(2 \leq n \leq 10^5\)).

Во второй строке записано \(n - 1\) целое число \(p(1), \ldots, p(n - 1)\) — номера родителей вершин \(1, \ldots, n - 1\) соответственно (\(0 \leq p(i) < i\)).

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

В первой строке выведите \(n\) различных целых чисел \(id_1, \ldots, id_n\) — изначальная нумерация вершин бамбука-заготовки, начиная с корня (\(0 \leq id_i < n\)).

Во второй строке выведите одно целое число \(k\) — количество операций в вашей последовательности (\(0 \leq k \leq 10^6\)).

В третьей строке выведите \(k\) целых чисел \(v_1, \ldots, v_k\), описывающих операции по порядку. \(i\)-я операция состоит в изменении \(p(v_i)\) на \(p(p(v_i))\). Каждая операция должна быть корректной, т.е. \(v_i\) и \(p(v_i)\) на момент операции не могут быть корнем.

G. Получить 1

битмаски дп жадные алгоритмы Конструктив теория чисел *3100

На доске написано \(n\) положительных чисел. Также выбрано положительное число \(k \geq 2\), и ни одно из написанных чисел не делится на \(k\). За одну операцию разрешается стереть с доски любые два числа \(x\) и \(y\) и записать вместо них \(f(x + y)\), где \(f(x)\) равно \(x\), если \(x\) не делится на \(k\), и \(f(x) = f(x / k)\) в противном случае.

В конце на доске останется одно число. Возможно ли сделать это число равным \(1\)? Если это так, восстановите любую последовательность операций, которая к этому приводит.

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

В первой строке записано два целых числа \(n\) и \(k\) — исходное количество чисел на доске и выбранное число (\(2 \leq n \leq 16\), \(2 \leq k \leq 2000\)).

Во второй строке записано \(n\) положительных чисел \(a_1, \ldots, a_n\), изначально написанных на доске. Гарантируется, что ни одно из чисел \(a_i\) не делится на \(k\), а также сумма всех \(a_i\) не превосходит \(2000\).

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

Если получить \(1\) в качестве последнего числа невозможно, выведите единственную строку «NO».

В противном случае, в первой строке выведите «YES», а затем выведите \(n - 1\) строку с описанием операций. \(i\)-я из этих строк должна содержать два целых числа \(x_i\) и \(y_i\), которые необходимо заменить на \(f(x_i + y_i)\) на \(i\)-й операции. Если существует несколько подходящих последовательностей, выведите любую из них.

Примечание

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

  • \(f(8 + 7) = f(15) = f(5) = 5\);
  • \(f(23 + 13) = f(36) = f(12) = f(4) = 4\);
  • \(f(5 + 4) = f(9) = f(3) = f(1) = 1\).

B. Коробка

Конструктив *1200

Перестановка \(p\)  — это последовательность целых чисел \(p=[p_1, p_2, \dots, p_n]\), которая состоит из \(n\) различных положительных целых чисел от \(1\) до \(n\). Например, следующие последовательности являются перестановками  — \([3, 4, 1, 2]\), \([1]\), \([1, 2]\). Следующие последовательности не являются перестановками  — \([0]\), \([1, 2, 1]\), \([2, 3]\), \([0, 1, 2]\).

Важный ключ спрятан в закрытой коробке, которую вам нужно открыть. Чтобы открыть коробку вам нужно ввести секретный ключ. Секретный ключ это перестановка \(p\) длины \(n\).

Эту перестановку вы не знаете, вы знаете только массив \(q\) префиксных максимумов этой перестановки. Формально:

  • \(q_1=p_1\),
  • \(q_2=\max(p_1, p_2)\),
  • \(q_3=\max(p_1, p_2,p_3)\),
  • ...
  • \(q_n=\max(p_1, p_2,\dots,p_n)\).

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

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

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

В первой строке описания набора входных данных записано одно целое число \(n\) \((1 \le n \le 10^{5})\) — количество элементов в перестановке-секретном коде \(p\).

Во второй строке описания набора входных данных записаны \(n\) целых чисел, \(q_1, q_2, \dots, q_n\) \((1 \le q_i \le n)\): элементы массива \(q\) для данной перестановки. Гарантируется, что \(q_i \le q_{i+1}\) для всех \(i\) (\(1 \le i < n\)).

Сумма всех значений \(n\) по всем наборам входных данных в тесте не превосходит \(10^5\).

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

Для каждого набора входных данных выведите:

  • Если невозможно найти подходящую перестановку \(p\), выведите «-1» (без кавычек).
  • Иначе, выведите \(n\) различных целых чисел, \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\)). Если для набора входных данных есть несколько возможных ответов, вы можете вывести любой.
Примечание

В первом наборе входных данных примера \([1,3,4,5,2]\) это единственный возможный ответ.

  • \(q_{1} = p_{1} = 1\);
  • \(q_{2} = \max(p_{1}, p_{2}) = 3\);
  • \(q_{3} = \max(p_{1}, p_{2}, p_{3}) = 4\);
  • \(q_{4} = \max(p_{1}, p_{2}, p_{3}, p_{4}) = 5\);
  • \(q_{5} = \max(p_{1}, p_{2}, p_{3}, p_{4}, p_{5}) = 5\).

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

C. Грязно

Конструктив *1700

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

Ваша комната это скобочная последовательность \(s=s_{1}s_{2}\dots s_{n}\) длины \(n\). Каждый символ этой строки это либо открывающая круглая скобка '(', либо закрывающая круглая скобка ')'.

За одну операцию вы можете выбрать любую подстроку строки \(s\) и перевернуть ее. Формально, за одну операцию вы можете выбрать подстроку \(s[l \dots r]=s_l, s_{l+1}, \dots, s_r\) и поменять порядок элементов в ней на \(s_r, s_{r-1}, \dots, s_{l}\).

Например, если вы захотите перевернуть подстроку \(s[2 \dots 4]\) строки \(s=\)«((()))», она станет равна \(s=\)«()(())».

Правильной скобочной последовательностью называется скобочная последовательность, которую можно преобразовать в корректное арифметическое выражение путем вставок между ее символами символов '1' и '+'. Например, скобочные последовательности «()()», «(())» — правильные (полученные выражения: «(1)+(1)», «((1+1)+1)»), а «)(» и «(» — нет.

Префиксом строки \(s\) называется её подстрока, которая начинается с индекса \(1\). Например, для строки \(s=\)«(())()» есть \(6\) префиксов: «(», «((», «(()», «(())», «(())(» и «(())()».

По вашему мнению, красивая и чистая комната \(s\) — это такая, что:

  • вся строка \(s\) целиком является правильной скобочной;
  • и ровно \(k\) ее префиксов(включая всю строку \(s\)) являются правильными скобочными.

Например, если \(k = 2\), то «(())()» это красивая и чистая комната.

Вы хотите использовать не более \(n\) операций, чтобы сделать вашу комнату красивой и чистой. Операции применяются последовательно, одна за другой.

Гарантируется, что ответ существует. Обратите внимание, что вам не нужно минимизировать количество операций — найдите любой способ достичь требуемой конфигурации за \(n\) или менее операций.

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

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных в тесте. Далее следуют описания \(t\) наборов входных данных.

В первой строке записаны два целых числа \(n\) и \(k\) (\(1 \le k \le \frac{n}{2}, 2 \le n \le 2000\), \(n\) четно) — длина \(s\) и необходимое количество правильных префиксов.

Во второй строке записана \(s\) длины \(n\) — данная скобочная последовательность. Все символы строки равны '(' или ')'.

Гарантируется, что в данной строке ровно \(\frac{n}{2}\) символов '(' и ровно \(\frac{n}{2}\) символов ')'.

Сумма всех значений \(n\) по всем наборам входных данных в тесте не превосходит \(2000\).

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

Для каждого из наборов входных данных выведите ответ.

В первой строке выведите число \(m\) (\(0 \le m \le n\)) — количество операций. Вам не требуется минимизировать \(m\), это число может быть любым.

В следующих \(m\) строках выведите описания операций, каждая строка должна содержать два целых числа \(l,r\) (\(1 \le l \le r \le n\)), описывающих операцию переворота подстроки \(s[l \dots r]=s_{l}s_{l+1}\dots s_{r}\). Операции выполняются последовательно одна за другой.

Итоговая строка \(s\) после применения всех операций должна быть правильной, ровно \(k\) её префиксов (включая \(s\)) должны быть правильными.

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

Примечание

В первом примере итоговая последовательность — это «()(()())», в которой два префикса корректные, «()» и «()(()())». Обратите внимание, что все операции кроме «5 8» в примере вывода не меняют текущую строку \(s\).

G. Не равны

Конструктив *2600

Вам задан массив целых чисел \(a_1, a_2, \dots, a_n\), где \(a_i\) означает количество блоков на \(i\)-й позиции. Гарантируется, что \(1 \le a_i \le n\).

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

Все подмножества которые вы выбираете должны быть различными (уникальными).

Вам необходимо удалить все блоки за не более чем \(n+1\) операцию. Можно доказать, что ответ всегда существует.

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

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

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — количество блоков на позициях \(1, 2, \dots, n\).

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

В первой строке выведите целое число \(op\) (\(0 \le op \le n+1\)).

В каждой из следующих \(op\) строк выведите бинарную строку \(s\) длины \(n\). Если \(s_i=\)'0', это означает, что позиция \(i\) не находится в выбранном подмножестве. Иначе, \(s_i\) должно быть равно '1', и позиция \(i\) находится в выбранном подмножестве.

Все строки должны быть различными и \(a_i\) должно быть равно сумме \(s_i\) по всем выбранным бинарным строкам.

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

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

Примечание

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

\(\lbrace 5,5,5,5,5 \rbrace \to \lbrace 4,4,4,4,4 \rbrace \to \lbrace 4,3,3,3,3 \rbrace \to \lbrace 3,3,2,2,2 \rbrace \to \lbrace 2,2,2,1,1 \rbrace \to \lbrace 1,1,1,1,0 \rbrace \to \lbrace 0,0,0,0,0 \rbrace\). Можно заметить, что все эти операции отличаются друг от друга.

D. Три множества

графы Конструктив Перебор реализация хэши *1900

Дан неориентированный простой граф, который состоит из \(n\) вершин и \(m\) ребер. Граф не содержит петель (то есть каждое ребро соединяет две различные вершины), между каждой парой вершин существует не более одного ребра. Заданный граф может быть несвязным.

Определим следующее:

Пусть \(v_1\) и \(v_2\) два некоторых непустых подмножества вершин, которые не пересекаются. Пусть \(f(v_{1}, v_{2})\) будет истиной (true) тогда и только тогда, когда все условия удовлетворены:

  1. Нет ребра, которые соединяет две вершины в множестве вершин \(v_1\).
  2. Нет ребра, которые соединяет две вершины в множестве вершин \(v_2\).
  3. Для каждых двух вершин \(x\) и \(y\) таких, что \(x\) находится в \(v_1\) и \(y\) находится в \(v_2\), есть ребро, которое соединяет \(x\) и \(y\).

Создайте три множества вершин (\(v_{1}\), \(v_{2}\), \(v_{3}\)) таких, что все условия удовлетворены;

  1. Все множества не должны быть пустыми.
  2. Каждая вершина должна принадлежать ровно одному множеству.
  3. \(f(v_{1}, v_{2})\), \(f(v_{2}, v_{3})\), \(f(v_{3}, v_{1})\) должны быть истинами (true).

Возможно ли создать такие три множества? Есть это так, выведите такое разбиение вершин.

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

Первая строка содержит два целых числа \(n\) и \(m\) (\(3 \le n \le 10^{5}\), \(0 \le m \le \text{min}(3 \cdot 10^{5}, \frac{n(n-1)}{2})\)) — количество вершин и ребер в графе.

\(i\)-я из следующих \(m\) строк содержит два целых числа \(a_{i}\) и \(b_{i}\) (\(1 \le a_{i} \lt b_{i} \le n\)), которые значат, что существует ребро между \(a_{i}\) и \(b_{i}\). Граф не содержит петель (то есть каждое ребро соединяет две различные вершины), между каждой парой вершин существует не более одного ребра. Заданный граф может быть несвязным.

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

Если ответ существует, выведите \(n\) целых чисел. \(i\)-е целое число обозначает номер множества (от \(1\) до \(3\)), к которому принадлежит \(i\)-я вершина. Иначе выведите \(-1\).

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

Примечание

В первом примере, если \(v_{1} = \{ 1 \}\), \(v_{2} = \{ 2, 3 \}\) и \(v_{3} = \{ 4, 5, 6 \}\), тогда множества будут удовлетворять всем условиям. Но также существует и другое разбиение. Например, «2 3 3 1 1 1», который также будет засчитан как правильный ответ.

Во втором примере правильное разбиение не существует.

F. Без одной вершины

Деревья Конструктив реализация *2500

Дано целое число \(n\). Определим следующее дерево деревом McDic:

  1. Создадим полное бинарное дерево с \(2^{n} - 1\) вершинами. То есть дерево, где ровно одна вершина является корнем, все листы имеют одинаковую высоту (расстояние до корня) и все не листовые вершины имеют по два прямых потомка.
  2. Выберем любую некорневую вершину \(v\) из этого бинарного дерева.
  3. Удалим \(v\) из дерева и проведем ребра между предком \(v\) и прямыми потомками \(v\). Если у \(v\) нет потомков, тогда ребра не добавляются.

Дано дерево. Определите, является ли это дерево деревом McDic. Если да, найдите предка удаленной вершины.

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

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 17\)).

\(i\)-я из следующих \(2^{n} - 3\) строк содержит два целых числа \(a_{i}\) и \(b_{i}\) (\(1 \le a_{i} \lt b_{i} \le 2^{n} - 2\)), которые значат, что существует ребро между \(a_{i}\) и \(b_{i}\). Гарантируется, что граф — дерево.

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

Выведите две строки.

В первой строке выведите одно целое число — количество ответов. Если это дерево не является деревом McDic, то выведите \(0\).

Во второй строке выведите все возможные ответы в возрастающем порядке. Если это дерево не является деревом McDic, то ничего не выводите.

Примечание

В первом примере \(3\) — это единственный возможный ответ.

Во втором примере есть \(2\) возможных ответа.

В третьем примере дерево не является деревом McDic.

E. Middle-Out

жадные алгоритмы Конструктив Строки *2200

Вдохновением для задачи послужила история компании Pied Piper. После анонса технологии Nucleus со стороны конкурирующей компании Hooli Ричард при содействии друзей изобрёл принципиально новый подход к сжатию: «из середины наружу».

Вам даны две строки \(s\) и \(t\) одинаковой длины \(n\). Пронумеруем их символы то \(1\) до \(n\) слева направо (т.е. от начала к концу)

За один ход вы можете сделать следующую последовательность действий:

  • выбрать произвольный индекс \(i\) (\(1 \le i \le n\)),
  • передвинуть \(i\)-й символ строки \(s\) с текущей позиции в начало строки или передвинуть \(i\)-й символ строки \(s\) с текущей позиции в конец строки.

Заметим, что длина строки \(s\) в результате хода не поменяется. Вы можете применить ход только к строке \(s\).

Например, если \(s=\)«test», то за один ход можно получить:

  • если \(i=1\) и вы перемещаете символ в начало, то результат будет равен «test» (строка не изменяется),
  • если \(i=2\) и вы перемещаете символ в начало, то результат будет равен «etst»,
  • если \(i=3\) и вы перемещаете символ в начало, то результат будет равен «stet»,
  • если \(i=4\) и вы перемещаете символ в начало, то результат будет равен «ttes»,
  • если \(i=1\) и вы перемещаете символ в конец, то результат будет равен «estt»,
  • если \(i=2\) и вы перемещаете символ в конец, то результат будет равен «tste»,
  • если \(i=3\) и вы перемещаете символ в конец, то результат будет равен «tets»,
  • если \(i=4\) и вы перемещаете символ в конец, то результат будет равен «test» (строка не изменяется).

Вы хотите преобразовать строку \(s\) в строку \(t\). Какое минимальное количество ходов для этого потребуется? Если преобразовать \(s\) в \(t\) невозможно, выведите -1.

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

Первая строка содержит одно целое число \(q\) (\(1 \le q \le 100\)) — количество наборов входных данных в тесте.

Описание каждого набора состоит из трёх строк. Первая строка содержит одно целое число \(n\) (\(1 \le n \le 100\)) — длину строк \(s\) и \(t\). Вторая строка содержит строку \(s\), третья строка содержит строку \(t\). Строки \(s\) и \(t\) имеют длину \(n\) и состоят только из строчных латинских букв.

Обратите внимание, что нет каких-либо ограничений на сумму значений \(n\) во входных данных (т.е. тест с \(q=100\) и всеми \(n=100\) допустим).

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

Для каждого набора входных данных выведите минимальное количество ходов, которое нужно чтобы превратить \(s\) в \(t\) или -1, если это сделать невозможно.

Примечание

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

  • в первом наборе: \(s=\)«iredppipe», \(t=\)«piedpiper»: «iredppipe» \(\rightarrow\) «iedppiper» \(\rightarrow\) «piedpiper»;
  • во втором наборе: \(s=\)«estt», \(t=\)«test»: «estt» \(\rightarrow\) «test»;
  • в третьем наборе: \(s=\)«tste», \(t=\)«test»: «tste» \(\rightarrow\) «etst» \(\rightarrow\) «test».

C. Лаборатории

жадные алгоритмы Конструктив реализация *1300

В исследовательских целях, \(n^2\) лабораторий были построены на горе на различных высотах. Давайте пронумеруем их целыми числами от \(1\) до \(n^2\), так что лаборатория с номером \(1\) находится в самом низком месте, лаборатория с номером \(2\) находится во втором по высоте месте, \(\ldots\), лаборатория с номером \(n^2\) находится в самом высоком месте.

Для транспортировки воды между лабораториями, трубы были построены между всеми парами лабораторий. Труба может переместить не больше одной единицы воды в единицу времени из лаборатории с номером \(u\) в лабораторию с номером \(v\), если \(u > v\).

Сейчас необходимо разбить лаборатории на \(n\) групп, каждая группа должна содержать ровно \(n\) лабораторий. Лаборатории из разных групп могут транспортировать воду друг другу. Тогда суммарное количество воды, которое может быть отправлено из группы \(A\) в группу \(B\) равно количеству пар лабораторий (\(u, v\)), таких что лаборатория с номером \(u\) из группы \(A\), лаборатория с номером \(v\) из группы \(B\) и \(u > v\). Давайте обозначим это число за \(f(A,B)\) (то есть \(f(A,B)\) равно суммарному количеству воды, которое может быть отправлено из группы \(A\) в группу \(B\)).

Например, если \(n=3\) и есть \(3\) группы \(X\), \(Y\) и \(Z\): \(X = \{1, 5, 6\}, Y = \{2, 4, 9\}\) и \(Z = \{3, 7, 8\}\). В этом случае значения \(f\) равны:

  • \(f(X,Y)=4\) потому что \(5 \rightarrow 2\), \(5 \rightarrow 4\), \(6 \rightarrow 2\), \(6 \rightarrow 4\),
  • \(f(X,Z)=2\) потому что \(5 \rightarrow 3\), \(6 \rightarrow 3\),
  • \(f(Y,X)=5\) потому что \(2 \rightarrow 1\), \(4 \rightarrow 1\), \(9 \rightarrow 1\), \(9 \rightarrow 5\), \(9 \rightarrow 6\),
  • \(f(Y,Z)=4\) потому что \(4 \rightarrow 3\), \(9 \rightarrow 3\), \(9 \rightarrow 7\), \(9 \rightarrow 8\),
  • \(f(Z,X)=7\) потому что \(3 \rightarrow 1\), \(7 \rightarrow 1\), \(7 \rightarrow 5\), \(7 \rightarrow 6\), \(8 \rightarrow 1\), \(8 \rightarrow 5\), \(8 \rightarrow 6\),
  • \(f(Z,Y)=5\) потому что \(3 \rightarrow 2\), \(7 \rightarrow 2\), \(7 \rightarrow 4\), \(8 \rightarrow 2\), \(8 \rightarrow 4\).

Пожалуйста, разбейте лаборатории на \(n\) групп размера \(n\), так что значение \(\min f(A,B)\) по всем возможным парам групп \(A\) и \(B\) (\(A \neq B\)) было максимально.

Другими словами, разбейте лаборатории на \(n\) групп размера \(n\), таких что минимальное количество воды, которое может быть отправлено из группы \(A\) в группу \(B\) для всех возможных пар групп \(A\) и \(B\) (\(A \neq B\)) было максимально большое.

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

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

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

В единственной строке находится одно целое число \(n\) (\(2 \leq n \leq 300\)).

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

Выведите \(n\) строк:

В \(i\)-й строке выведите \(n\) чисел, которые являются номерами лабораторий, которые составляют \(i\)-ю группу, в любом порядке.

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

Примечание

В первом тесте можно разбить \(9\) лабораторий на группы \(\{2, 8, 5\}, \{9, 3, 4\}, \{7, 6, 1\}\).

Из первой группы во вторую можно отправить \(4\) единицы воды (\(8 \rightarrow 3, 8 \rightarrow 4, 5 \rightarrow 3, 5 \rightarrow 4\)).

Из первой группы в третью можно отправить \(5\) единиц воды (\(2 \rightarrow 1, 8 \rightarrow 7, 8 \rightarrow 6, 8 \rightarrow 1, 5 \rightarrow 1\)).

Из второй группы в первую можно отправить \(5\) единиц воды (\(9 \rightarrow 2, 9 \rightarrow 8, 9 \rightarrow 5, 3 \rightarrow 2, 4 \rightarrow 2\)).

Из второй группы в третью можно отправить \(5\) единиц воды (\(9 \rightarrow 7, 9 \rightarrow 6, 9 \rightarrow 1, 3 \rightarrow 1, 4 \rightarrow 1\)).

Из третьей группы в первую можно отправить \(4\) единицы воды (\(7 \rightarrow 2, 7 \rightarrow 5, 6 \rightarrow 2, 6 \rightarrow 5\)).

Из третьей группы во вторую можно отправить \(4\) единицы воды (\(7 \rightarrow 3, 7 \rightarrow 4, 6 \rightarrow 3, 6 \rightarrow 4\)).

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

C1. Сбалансированные удаления (попроще)

геометрия жадные алгоритмы Конструктив *1700

Это упрощённая версия задачи. В этой версии \(n \le 2000\).

В трёхмерном пространстве заданы \(n\) различных точек, пронумерованных от \(1\) до \(n\). \(i\)-я точка имеет координаты \((x_i, y_i, z_i)\). Число точек \(n\) — чётное.

Вы хотели бы удалить все \(n\) точек, используя последовательность из \(\frac{n}{2}\) щелчков. За один щелчок вы можете удалить любые две ещё не удалённые точки \(a\) и \(b\), которые образуют идеально сбалансированную пару. Пара точек \(a\) и \(b\) идеально сбалансирована, если никакая другая точка \(c\) (которая ещё не удалена) не лежит в пределах минимального ограничивающего точки \(a\) и \(b\) прямоугольного параллелепипеда с рёбрами, параллельными осям координат.

Формально, точка \(c\) лежит внутри ограничивающего параллелепипеда точек \(a\) и \(b\) тогда и только тогда, когда \(\min(x_a, x_b) \le x_c \le \max(x_a, x_b)\), \(\min(y_a, y_b) \le y_c \le \max(y_a, y_b)\) и \(\min(z_a, z_b) \le z_c \le \max(z_a, z_b)\). Обратите внимание, что параллелепипед может быть вырожденным.

Найдите способ удалить все точки за \(\frac{n}{2}\) щелчков.

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

Первая строка содержит целое число \(n\) (\(2 \le n \le 2000\); \(n\) чётно) — число точек.

Каждая из следующих \(n\) строк содержит три целых числа \(x_i\), \(y_i\), \(z_i\) (\(-10^8 \le x_i, y_i, z_i \le 10^8\)) — координаты \(i\)-й точки.

Никакие две точки не совпадают.

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

Выведите \(\frac{n}{2}\) пар целых чисел \(a_i, b_i\) (\(1 \le a_i, b_i \le n\)) — номера точек, удаляемых щелчком \(i\). Каждое целое число от \(1\) до \(n\) должно встретиться в выводе ровно один раз.

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

Примечание

В первом примере точки и их соответствующие параллелепипеды выглядят так (изображённые для простоты в двумерном пространстве, так как все точки лежат на плоскости \(z = 0\)). Обратите внимание, что порядок удаления точек важен: например, точки \(5\) и \(1\) не образуют идеально сбалансированную пару изначально, но начинают её образовывать после того, как удалена точка \(3\).

C2. Сбалансированные удаления (посложнее)

Бинарный поиск жадные алгоритмы Конструктив разделяй и властвуй реализация сортировки *1900

Это усложнённая версия задачи. В этой версии \(n \le 50\,000\).

В трёхмерном пространстве заданы \(n\) различных точек, пронумерованных от \(1\) до \(n\). \(i\)-я точка имеет координаты \((x_i, y_i, z_i)\). Число точек \(n\) — чётное.

Вы хотели бы удалить все \(n\) точек, используя последовательность из \(\frac{n}{2}\) щелчков. За один щелчок вы можете удалить любые две ещё не удалённые точки \(a\) и \(b\), которые образуют идеально сбалансированную пару. Пара точек \(a\) и \(b\) идеально сбалансирована, если никакая другая точка \(c\) (которая ещё не удалена) не лежит в пределах минимального ограничивающего точки \(a\) и \(b\) прямоугольного параллелепипеда с рёбрами, параллельными осям координат.

Формально, точка \(c\) лежит внутри ограничивающего параллелепипеда точек \(a\) и \(b\) тогда и только тогда, когда \(\min(x_a, x_b) \le x_c \le \max(x_a, x_b)\), \(\min(y_a, y_b) \le y_c \le \max(y_a, y_b)\) и \(\min(z_a, z_b) \le z_c \le \max(z_a, z_b)\). Обратите внимание, что параллелепипед может быть вырожденным.

Найдите способ удалить все точки за \(\frac{n}{2}\) щелчков.

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

Первая строка содержит целое число \(n\) (\(2 \le n \le 50\,000\); \(n\) чётно) — число точек.

Каждая из следующих \(n\) строк содержит три целых числа \(x_i\), \(y_i\), \(z_i\) (\(-10^8 \le x_i, y_i, z_i \le 10^8\)) — координаты \(i\)-й точки.

Никакие две точки не совпадают.

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

Выведите \(\frac{n}{2}\) пар целых чисел \(a_i, b_i\) (\(1 \le a_i, b_i \le n\)) — номера точек, удаляемых щелчком \(i\). Каждое целое число от \(1\) до \(n\) должно встретиться в выводе ровно один раз.

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

Примечание

В первом примере точки и их соответствующие параллелепипеды выглядят так (изображённые для простоты в двумерном пространстве, так как все точки лежат на плоскости \(z = 0\)). Обратите внимание, что порядок удаления точек важен: например, точки \(5\) и \(1\) не образуют идеально сбалансированную пару изначально, но начинают её образовывать после того, как удалена точка \(3\).

H. Сбалансированные перевороты

Конструктив *3300

У вас есть две строки \(a\) и \(b\) равной чётной длины \(n\), состоящие из символов 0 и 1.

Пошёл финальный раунд. Чтобы наконец сделать Вселенную идеально сбалансированной, вам нужно сделать строки \(a\) и \(b\) равными.

За один шаг вы можете выбрать любой префикс \(a\) чётной длины и перевернуть его. Формально, если \(a = a_1 a_2 \ldots a_n\), вы можете выбрать любое положительное чётное число \(p \le n\) и сделать \(a\) равной \(a_p a_{p-1} \ldots a_1 a_{p+1} a_{p+2} \ldots a_n\).

Найдите способ сделать строки \(a\) и \(b\) равными, используя не более \(n + 1\) переворотов такого рода, или определите, что такого способа не существует. Минимизировать число переворотов не нужно.

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

Первая строка содержит целое число \(t\) (\(1 \le t \le 2000\)) — число тестов.

Каждый тест состоит из двух строк. Первая строка содержит строку \(a\) длины \(n\), вторая строка содержит строку \(b\) той же длины (\(2 \le n \le 4000\); \(n \bmod 2 = 0\)). Обе строки состоят из символов 0 и 1.

Сумма \(n\) по всем \(t\) тестам не превосходит \(4000\).

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

Для каждого теста, если невозможно сделать \(a\) и \(b\) равными, используя не более \(n + 1\) переворотов, выведите число \(-1\).

В противном случае выведите целое число \(k\) (\(0 \le k \le n + 1\)) — число переворотов в вашей последовательности шагов, и \(k\) чётных чисел \(p_1, p_2, \ldots, p_k\) (\(2 \le p_i \le n\); \(p_i \bmod 2 = 0\)) — длины префиксов \(a\), которые нужно перевернуть, в хронологическом порядке.

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

Примечание

В первом тесте строка \(a\) меняется следующим образом:

  • после первого переворота: 1000101011;
  • после второго переворота: 0001101011;
  • после третьего переворота: 1101011000.

A. Покраска плиток

Конструктив математика теория чисел *1500

В последнее время Уджан стал весьма ленивым, но наконец-то решил привести свой двор в порядок. Сначала он решил покрасить тропинку от своего дома до ворот.

Тропинка состоит из \(n\) последовательных плиток, пронумерованных от \(1\) до \(n\). Уджан покрасит каждую из плиток в некоторый цвет. Он считает, что тропинка эстетична, если каждые две различные плитки с номерами \(i\) и \(j\) такими, что \(|j - i|\) является делителем числа \(n\) строго большим \(1\), покрашены в одинаковые цвета. Формально, любые две плитки с номерами \(i\) и \(j\) должны быть покрашены в одинаковый цвет, если \(|i-j| > 1\) и \(n \bmod |i-j| = 0\) (где \(x \bmod y\) — это остаток при делении \(x\) на \(y\)).

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

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

Единственная строка входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^{12}\)) — длину тропинки.

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

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

Примечание

В первом примере тропинку можно покрасить в максимум два цвета. Плитки \(1\) и \(3\) должны иметь одинаковый цвет, так как \(4 \bmod |3-1| = 0\). Плитки \(2\) и \(4\) тоже должны иметь одинаковый цвет, так как \(4 \bmod |4-2| = 0\).

Во втором примере могут быть использованы все пять цветов.

Примеры покрасок для первого и второго теста.

E. Планарный периметр

графы Конструктив *3200

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

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

Уджан считает ковёр красивым, если он состоит из \(f\) частей, где \(i\)-я часть имеет ровно \(a_i\) сторон, и периметр наименьший возможный. Найдите пример такого ковра, чтобы Уджан мог бы его заказать!

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

Первая строка ввода содержит одно целое число \(f\) (\(1 \leq f \leq 10^5\)), количество частей ковра.

Следующая строка содержит \(f\) целых чисел \(a_1, \ldots, a_f\) (\(3 \leq a_i \leq 3\cdot 10^5\)), количества сторон каждой части ковра. Общее количество сторон частей \(a_1 + \ldots + a_f\) не превышает \(3\cdot10^5\).

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

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

Сначала выведите одно целое число \(n\) (\(3 \leq n \leq 3 \cdot 10^5\)), общее количество вершин в графе (вершины должны быть пронумерованы числами от \(1\) до \(n\)).

Затем выведите \(f\) строк с описанием граней. \(i\)-я строка должна содержать описание \(i\)-й грани и содержать \(a_i\) различных целых чисел \(v_{i,1}, \ldots, v_{i,a_i}\) (\(1 \leq v_{i,j} \leq n\)), что означает, что вершины \(v_{i,j}\) и \(v_{i,(j \bmod{a_i})+1}\) соединены ребром для каждой пары \(1 \leq j \leq a_i\).

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

Примечание

В первом примере, две треугольных грани соединены одним ребром, поэтому периметр получается равным \(4\).

На картинке показана одна возможная конфигурация для второго примера. Наименьший периметр в данном случае равен \(3\).

D. Покраска вершин

графы Деревья дп Конструктив Перебор реализация *1800

Вам задано дерево, состоящее из \(n\) вершин. Дерево — это связный неориентированный граф, не содержащий циклов.

Пример дерева.

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

Вам нужно покрасить все вершины таким образом, чтобы в любом пути, состоящем ровно из трех различных вершин, цвета всех этих трех вершин были различны. Иными словами, рассмотрим все такие тройки вершин \((x, y, z)\), что \(x \neq y, y \neq z, x \neq z\), вершина \(x\) соединена ребром с вершиной \(y\), а вершина \(y\) соединена ребром с вершиной \(z\). Тогда цвета вершин \(x\), \(y\) и \(z\) должны быть попарно различны. Назовем такую покраску вершин хорошей.

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

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

В первой строке следует целое число \(n\) \((3 \le n \le 100\,000)\) — количество вершин в дереве.

Во второй строке следует последовательность \(c_{1, 1}, c_{1, 2}, \dots, c_{1, n}\) \((1 \le c_{1, i} \le 10^{9})\), где \(c_{1, i}\) равно стоимости покраски \(i\)-й вершины в первый цвет.

В третьей строке следует последовательность \(c_{2, 1}, c_{2, 2}, \dots, c_{2, n}\) \((1 \le c_{2, i} \le 10^{9})\), где \(c_{2, i}\) равно стоимости покраски \(i\)-й вершины во второй цвет.

В четвертой строке следует последовательность \(c_{3, 1}, c_{3, 2}, \dots, c_{3, n}\) \((1 \le c_{3, i} \le 10^{9})\), где \(c_{3, i}\) равно стоимости покраски \(i\)-й вершины в третий цвет.

В каждой из следующих \((n - 1)\) строк следует по два целых числа \(u_j\) и \(v_j\) \((1 \le u_j, v_j \le n, u_j \neq v_j)\) — номера вершин, соединенных неориентированным ребром \(j\). Гарантируется, что заданные ребра образуют дерево.

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

Если не существует хорошей покраски дерева, выведите \(-1\).

В противном случае, в первой строке выведите минимальную стоимость хорошей покраски графа. Во второй строке выведите \(n\) целых чисел \(b_1, b_2, \dots, b_n\) \((1 \le b_i \le 3)\), где \(i\)-е число должно быть равно цвету, в который нужно покрасить вершину \(i\). Если подходящих покрасок минимальной стоимости несколько, разрешается вывести любую из них.

Примечание

В первом примере три вершины, поэтому все они должны быть покрашены в разные цвета. Первую вершину нужно покрасить в цвет \(1\), вторую вершину — в цвет \(3\), а третью вершину — в цвет \(2\). Стоимость такой покраски равна \(3 + 2 + 1 = 6\).

E. Минимизация разности

Бинарный поиск жадные алгоритмы Конструктив сортировки Тернарный поиск *2000

В данной задаче вам задана последовательность \(a_1, a_2, \dots, a_n\), состоящая из \(n\) целых чисел.

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

Перед вами стоит задача определить минимально возможную разность между максимальным и минимальным элементами последовательности, которую можно достичь, произведя не более \(k\) описанных операций.

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

В первой строке следуют два целых числа \(n\) и \(k\) \((2 \le n \le 10^{5}, 1 \le k \le 10^{14})\) — количество элементов в последовательности и максимальное количество операций изменения элементов, которое можно произвести.

Во второй строке следует последовательность целых чисел \(a_1, a_2, \dots, a_n\) \((1 \le a_i \le 10^{9})\).

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

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

Примечание

В первом примере можно дважды увеличить на единицу второе число и дважды уменьшить на единицу третье число. Тогда получим последовательности \([3, 3, 5, 5]\), в которой разность между максимальным и минимальным элементами равна \(2\). При этом останется одна еще операция, но ее можно не использовать, так как не удастся сделать разность между максимальным и минимальным элементами меньше \(2\).

Во втором примере можно не использовать ни одной операции, так как все элементы в последовательности одинаковые, а значит разность между максимальным и минимальным элементами равна \(0\).

F. Фишки

Конструктив реализация *2300

На круглом столе расположены \(n\) фишек, которые лежат по кругу. Все фишки пронумерованы подряд целыми числами от \(1\) до \(n\).

Изначально каждая фишка имеет черный или белый цвет. После этого происходит \(k\) итераций. На каждой итерации фишки становятся черными или белыми в соответствии со следующими правилами. Для каждой фишки \(i\) подсчитывается количество белых и черных фишек на предыдущей итерации. В подсчете участвует фишка \(i\), а также ее непосредственные соседи слева и справа. Если белых фишек было больше, то фишка \(i\) должна стать белого цвета. В противном случае, фишка \(i\) должна стать черного цвета.

Обратите внимание, что для всех \(i\) от \(2\) до \((n - 1)\) соседняя фишка слева имеет номер \((i - 1)\), а соседняя фишка справа имеет номер \((i + 1)\). Для \(i = 1\) соседняя фишка слева имеет номер \(n\), а соседняя фишка справа имеет номер \(2\). Для \(i = n\) соседняя фишка слева имеет номер \((n - 1)\), а соседняя фишка справа имеет номер \(1\).

На рисунке представлено изменение цветов фишек после одной итерации для случая \(n = 6\). Фишки \(1\), \(3\) и \(4\) изначально черного цвета, а фишки \(2\), \(5\) и \(6\) — белого. После одной итерации фишки \(2\), \(3\) и \(4\) становятся черного цвета, а фишки \(1\), \(5\) и \(6\) — белого.

Перед вами стоит задача определить какого цвета будут все фишки после \(k\) итераций.

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

В первой строке следуют два целых числа \(n\) и \(k\) \((3 \le n \le 200\,000, 1 \le k \le 10^{9})\) — количество фишек и количество итераций.

Во второй строке следует строка, состоящая из \(n\) букв «W» и «B». Если \(i\)-й символ строки равен «W», то изначально \(i\)-я фишка имеет белый цвет. Если \(i\)-й символ строки равен «B», то изначально \(i\)-я фишка имеет черный цвет.

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

Выведите строку, состоящую из \(n\) букв «W» и «B». Если после \(k\) итераций \(i\)-я фишка будет иметь белый цвет, то \(i\)-й символ выведенной строки должен быть равен «W». В противном случае, \(i\)-й символ выведенной строки должен быть равен «B».

Примечание

Первый пример подробно разобран в условии.

Во втором примере цвета фишек будут изменяться следующим образом: «WBWBWBW» \(\rightarrow\) «WWBWBWW» \(\rightarrow\) «WWWBWWW» \(\rightarrow\) «WWWWWWW». Таким образом, после трех итераций все фишки будут белого цвета.

В третьем примере цвета фишек будут изменяться следующим образом: «BWBWBW» \(\rightarrow\) «WBWBWB» \(\rightarrow\) «BWBWBW» \(\rightarrow\) «WBWBWB» \(\rightarrow\) «BWBWBW».

G. Парные забеги

жадные алгоритмы Конструктив математика *2400

В преддверии олимпийских игр, проходящих в \(20NN\) году в городе Берлятове, министерство спорта приняло решение устроить показательные соревнования. И сегодня на стадионе проходят парные забеги, в которых участвуют бегуны из команды Берлятова. Рассмотрим процесс выступления команды в парных забегах более подробно.

Команда Берлятова состоит из \(2n\) бегунов, которые расположены на двух беговых дорожках, причем на каждой дорожке стоит ровно по \(n\) бегунов. Бегуны на каждой дорожке пронумерованы целыми числами от \(1\) до \(n\). Бегун с номером \(i\) пробегает всю беговую дистанцию ровно за \(i\) секунд.

Забеги проходят следующим образом: сначала забег начинает пара первых бегунов на каждой дорожке, когда самый медленный из них добегает дистанцию до конца, выходит пара вторых бегунов на каждой дорожке, и все опять ждут, пока добежит самый медленный из них, и так далее, пока все \(n\) пар бегунов не пробегут дистанцию.

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

Определите такой порядок выступления бегунов на каждой из дорожек, что забеги продлятся как можно дольше, но при этом их суммарное время не будет превосходить \(k\) секунд.

Более формально, вы хотите найти такие две перестановки \(p\) и \(q\) (обе длины \(n\)), что \(sum = \sum\limits_{i=1}^{n} max(p_i, q_i)\) является максимально возможным числом, не превышающим \(k\). Если такой пары перестановок не существует, сообщите об этом.

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

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

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

Если невозможно найти такой порядок бегунов на каждой из дорожек, что суммарная длительность забегов не превысит \(k\) секунд, выведите \(-1\).

В противном случае, в первую строку выведите одно целое число \(sum\) — максимально возможную суммарную длительность забегов, не превышающую \(k\). Во вторую строку выведите перестановку из \(n\) элементов \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\), все \(p_i\) должны быть различны) — номера бегунов с первой дорожки в порядке их выступления. В третью строку выведите перестановку из \(n\) элементов \(q_1, q_2, \dots, q_n\) (\(1 \le q_i \le n\), все \(q_i\) должны быть различны) — номера бегунов со второй дорожки в порядке их выступления. Значение \(sum = \sum\limits_{i=1}^{n} max(p_i, q_i)\) должно быть максимально возможным числом, не превосходящим \(k\). Если ответов несколько, выведите любой из них.

Примечание

В первом примере порядок бегунов на первой дорожке может быть равен \([5, 3, 2, 1, 4]\), а на второй — \([1, 4, 2, 5, 3]\). Тогда суммарное время всех забегов равно \(max(5, 1) + max(3, 4) + max(2, 2) + max(1, 5) + max(4, 3) = 5 + 4 + 2 + 5 + 4 = 20\), то есть оно в точности равно максимально допустимой длительности забегов.

Во втором примере порядок бегунов на первой дорожке может быть равен \([2, 3, 1]\), а на второй — \([2, 1, 3]\). В таком случае суммарное время всех забегов равно \(8\). Это максимально возможная суммарная длительность забегов для \(n = 3\).

B. Камень-ножницы-бумага с ограничениями

дп жадные алгоритмы Конструктив *1200

Пусть \(n\) — некоторое положительное целое число, а \(a, b, c\) — некоторые неотрицательные целые числа такие, что \(a + b + c = n\).

Алиса и Боб собираются сыграть в камень-ножницы-бумага \(n\) раз. Алиса знает последовательность жестов, которые будет играть Боб. Однако она должна сыграть камень ровно \(a\) раз, бумагу — ровно \(b\) раз, а ножницы — ровно \(c\) раз.

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

Алиса выигрывает, если она побеждает Боба хотя бы в \(\lceil \frac{n}{2} \rceil\) (\(\frac{n}{2}\), округленное вверх до ближайшего целого) раундах, иначе — проигрывает.

Напоминаем, что в камень-ножницы-бумага:

  • камень побеждает ножницы;
  • бумага побеждает камень;
  • ножницы побеждают бумагу.

Ваша задача — по заданной последовательности жестов, которые будет играть Боб, и по числам \(a, b, c\), определить, может ли Алиса выиграть. И если может, то найти некоторую последовательность жестов, которая приведет Алису к победе.

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

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

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

Затем следуют \(t\) наборов входных данных, каждый из которых состоит из трех строк:

  • В первой строке записано одно целое число \(n\) (\(1 \le n \le 100\)).
  • Во второй строке записаны три целых числа \(a, b, c\) (\(0 \le a, b, c \le n\)). Гарантируется, что \(a + b + c = n\).
  • В третьей строке содержится последовательность жестов \(s\) длины \(n\). \(s\) состоит только из символов 'R', 'P' и 'S'. \(i\)-й символ равен 'R', если Боб в \(i\)-м раунде выбирает камень, 'P' — если бумагу и 'S' — если ножницы.
Выходные данные

Для каждого набора входных данных:

  • Если Алиса не может выиграть, то выведите «NO» (без кавычек).
  • Иначе выведите «YES» (без кавычек). Также выведите строку \(t\) длины ровно \(n\), которая состоит только из символов 'R', 'P' и 'S' — последовательность жестов, которую должна сыграть Алиса, чтобы выиграть. В \(t\) должно быть ровно \(a\) букв 'R', ровно \(b\) букв 'P' и ровно \(c\) букв 'S'.
  • Если существует несколько решений, выведите любое из них.

В части вывода с «YES»/«NO» регистр букв не имеет значения (например, «yEs», «no» or «YEs» — все корректные значения). Обратите внимание, что в 'R', 'P' и 'S' регистр важен.

Примечание

В первом наборе входных данных примера, в первой игре Алиса выбирает бумагу, а Боб выбирает камень, поэтому Алиса побеждает Боба. Во второй игре Алиса выбирает ножницы, а Боб выбирает бумагу, поэтому Алиса побеждает Боба. В третьей игре Алиса выбирает камень, а Боб выбирает ножницы, поэтому Алиса побеждает Боба. Алиса побеждает Боба 3 раза, и \(3 \ge \lceil \frac{3}{2} \rceil = 2\), поэтому Алиса выигрывает.

Во втором наборе входных данных примера единственная последовательность жестов, которые может выбрать Алиса — это «RRR». Алиса побеждает Боба только в последней игре, поэтому Алиса не может выиграть: \(1 < \lceil \frac{3}{2} \rceil = 2\).

C. Вечеринка хоббитов

жадные алгоритмы Конструктив *1600

Все знают, что хоббиты любят устраивать различные вечеринки и празднества. В Шире живет n хоббитов. Они решили провести Грандиозный Праздник (ГП), длящийся несколько дней. На каждый день был составлен список приглашенных — некоторое непустое подмножество из всех жителей Шира. Для того чтобы всем было весело, и никто не скучал, необходимо чтобы для любых двух разных дней (скажем, А и В) ГП существовал бы хотя бы один хоббит, приглашенный как в день А, так и в день В. Однако, чтобы никто не поссорился, для любых трех разных дней А, В, С не должно существовать хоббита, приглашенного в день А, В и С. Жители Шира заинтересованы в наибольшей продолжительности ГП. Ваша задача для данного числа n указать наибольшую продолжительность ГП и списки приглашенных на каждый день.

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

В первой строке записано целое число n (3 ≤ n ≤ 10000) — количество хоббитов.

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

В первой строке выходного файла выведите число k — наибольшую продолжительность ГП в днях. Далее в k строках выведите списки приглашенных (через пробел). Каждый список выводите на отдельной строке. Каждый список может содержать произвольное положительное количество хоббитов. Хоббиты нумеруются целыми числами от 1 до n.

D. Две прогрессии

жадные алгоритмы Конструктив *2200

Арифметическая прогрессия — это такая непустая последовательность чисел, в которой разница между любыми двумя последовательными членами равна константе, называемой разностью прогрессии. Например, последовательность 3, 7, 11, 15 — арифметическая прогрессия. Из определения следует, что любые последовательности длины 1 или 2 — арифметические, а длины 0 — не арифметические.

Задана последовательность различных целых чисел a1, a2, ..., an. Требуется разбить ее на две арифметические прогрессии или определить, что это невозможно сделать. При разбиении каждый член заданной последовательности должен быть отнесен в одну из двух прогрессий, при этом относительный порядок чисел остается неизменным. Разбиение — это обратная операция к слиянию последовательностей.

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

В первой строке записано целое положительное число n (2 ≤ n ≤ 30000), n — длина заданной последовательности. Вторая строка содержит элементы заданной последовательности a1, a2, ..., an ( - 108 ≤ ai ≤ 108). Элементы последовательности — различные целые числа.

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

Выведите искомые арифметические прогрессии, по одной на строке. Прогрессии можно располагать в любом порядке. Каждая прогрессия должна содержать хотя бы одно число. Если решения не существует, то выведите «No solution» (без кавычек) в единственную строку выходного файла. Если решений несколько, выведите любое из них.

Примечание

Во втором примере возможен другой вариант ответа (число 3 может быть отнесено во вторую прогрессию): 1, 2 и 3, -2, -7.

B. The Feast and the Bus

жадные алгоритмы Конструктив математика Перебор *1800

Employees of JebTrains are on their way to celebrate the 256-th day of the year! There are \(n\) employees and \(k\) teams in JebTrains. Each employee is a member of some (exactly one) team. All teams are numbered from \(1\) to \(k\). You are given an array of numbers \(t_1, t_2, \dots, t_n\) where \(t_i\) is the \(i\)-th employee's team number.

JebTrains is going to rent a single bus to get employees to the feast. The bus will take one or more rides. A bus can pick up an entire team or two entire teams. If three or more teams take a ride together they may start a new project which is considered unacceptable. It's prohibited to split a team, so all members of a team should take the same ride.

It is possible to rent a bus of any capacity \(s\). Such a bus can take up to \(s\) people on a single ride. The total cost of the rent is equal to \(s \cdot r\) burles where \(r\) is the number of rides. Note that it's impossible to rent two or more buses.

Help JebTrains to calculate the minimum cost of the rent, required to get all employees to the feast, fulfilling all the conditions above.

Input

The first line contains two integers \(n\) and \(k\) (\(1 \le n \le 5\cdot10^5, 1 \le k \le 8000\)) — the number of employees and the number of teams in JebTrains. The second line contains a sequence of integers \(t_1, t_2, \dots, t_n\), where \(t_i\) (\(1 \le t_i \le k\)) is the \(i\)-th employee's team number. Every team contains at least one employee.

Output

Print the minimum cost of the rent.

M. SmartGarden

Конструктив разделяй и властвуй *2500

Berland Gardeners United Inc. hired you for the project called "SmartGarden". The main feature of this project is automatic garden watering.

Formally the garden can be represented as a square of \(n \times n\) cells with rows numbered \(1\) to \(n\) from top to bottom and columns numbered \(1\) to \(n\) from left to right. Each cell of the garden contains either a plant or a slab.

It's known that slabs are located on the main diagonal of the matrix representing the garden, and in the cells that are below the main diagonal and share a side with at least one cell of the main diagonal. All the remaining cells of the garden are filled with plants.

Example of the garden for \(n=5\).

During implementation of the project you created a smart robot that takes a list of commands as an input, which are processed one by one. Each command contains:

  • a list of horizontal lines (rows in the matrix representing the garden);
  • a list of vertical lines (columns in the matrix representing the garden).

While executing each command robot waters only cells in the intersection of specified rows and specified columns. So, if you specify \(r\) rows and \(c\) columns, then exactly \(r \cdot c\) cells will be watered.

In the demo for the customer you have tuned robot in such a way that it waters all the garden. To do that you prepared a single command containing all \(n\) rows and all \(n\) columns.

Unfortunately, 5 hours before the demo for your customer it turned out that the CEO of Berland Gardeners United Inc. was going to take part in it. Moreover, most probably he will be standing on a garden slab during the demo!

Now you need to create a list of commands for the robot so that it waters all the plants and doesn't water any cell containing a slab. Since it's only a beta version of "SmartGarden", the total number of commands shouldn't exceed \(50\).

Create a program that, for a given size of the garden, will find a list of no more than \(50\) commands that allow the robot to water all the plants in the garden without watering the slabs. It is allowed to water a plant several times.

Input

The first and the only line of the input contains a single integer \(n\) (\(2 \le n \le 5000\)), where \(n\) is the size of the garden.

Output

In the first line print the total number of commands for the robot \(k\) (\(1 \le k \le 50\)). In the next \(2 \cdot k\) lines print all the commands. Each command should be specified by \(2\) lines. The first line of each command should describe rows in the command and the second line should describe columns in the command. Each of these \(2\) lines should have the following format:

  • the first number of the line should specify the total number of items \(x\) in the appropriate list;
  • then \(x\) distinct numbers follow, where each number is in the range \(1 \dots n\) and describes a chosen row for the first line and a chosen column for the second line.

If there are multiple ways to water the garden, print any of them.

D. Гармоничный граф

графы жадные алгоритмы Конструктив поиск в глубину и подобное снм сортировки *1700

Вам дан неориентированный граф из \(n\) вершин и \(m\) ребер. Вершины пронумерованы целыми числами от \(1\) до \(n\).

Назовем граф гармоничным если и только если выполняется следующее свойство:

  • Для каждой такой тройки целых чисел \((l, m, r)\), что \(1 \le l < m < r \le n\), если есть путь из вершины \(l\) в вершину \(r\), тогда существует путь из вершины \(l\) в вершину \(m\).

Иначе говоря, в гармоничном графе, если из вершины \(l\) можно по ребрам дойти до вершины \(r\) (\(l < r\)), тогда также должно быть можно дойти до вершин \((l+1), (l+2), \ldots, (r-1)\).

Какое минимальное число ребер надо добавить в граф, чтобы он стал гармоничным?

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

В первой строке входного файла записаны два целых числа \(n\) и \(m\) (\(3 \le n \le 200\ 000\) и \(1 \le m \le 200\ 000\)).

В \(i\)-й из следующих \(m\) строк записаны два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\), \(u_i \neq v_i\)), описывающих ребро между вершинами \(u\) и \(v\).

Гарантируется, что граф простой (в нем нет петель, а также между каждой парой вершин существует не более одного ребра).

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

Выведите минимальное количество ребер которое нужно добавить в граф, чтобы он стал гармоничным.

Примечание

В первом примере граф не гармоничный (например, при \(1 < 6 < 7\), из вершины \(1\) можно достичь вершину \(7\) по пути \(1 \rightarrow 2 \rightarrow 7\), но из вершины \(1\) нельзя достичь вершину \(6\)). Однако добавление ребра \((2, 4)\) достаточно, чтобы сделать его гармоничным.

Во втором примере граф уже гармоничный.

A. Кормление куриц

жадные алгоритмы Конструктив реализация *1700

Лун — большой фанат CFC (Codeforces Fried Chicken/жареные курицы Codeforces). Однако цена на CFC растет, поэтому он решил разводить куриц на собственной ферме.

Его ферму можно представить как прямоугольную сетку с \(r\) строками и \(c\) столбцами. Некоторые из этих клеток содержат рис, другие пусты. На ферме живут \(k\) куриц. Количество куриц не превышает количество клеток с рисом.

Лун хочет подарить своим курицам клетки с рисом. Он хотел бы удовлетворить следующие требования:

  • Каждая клетка фермы должна быть отдана ровно одной курице.
  • Каждая курица должна получить как минимум одну клетку.
  • Набор клеток, отданных одной курице, должен образовать связную область. Другими словами, если две клетки \((x, y)\) и \((u, v)\) отданы одной и той же курице, эта курица может пройти от \((x, y)\) до \((u, v)\), проходя только свои клетки и перемещаясь из каждой клетки в другую, разделяющую одну сторону (то есть, связность «по стороне»).

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

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

Во входных данных находятся несколько (один или более) наборов входных данных. В первой строке находится одно целое число \(T\) (\(1 \le T \le 2 \cdot 10^4\)) — количество наборов входных данных. Далее следуют их описания.

Первая строка каждого набора содержит три целых числа \(r\), \(c\) и \(k\) (\(1 \leq r, c \leq 100, 1 \leq k \leq 62\)), которые обозначают размер фермы Луна и количество его куриц.

Каждая из следующих \(r\) строк содержит \(c\) символов, либо «.», либо «R», которые обозначают пустую клетку и клетку с рисом. Гарантируется, что количество куриц не превосходит количество клеток с рисом.

Гарантируется, что сумма значений \(r \cdot c\) по всем наборам входных данных в тесте не превосходит \(2 \cdot 10^4\).

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

Для каждого теста выведите \(r\) строк по \(c\) символов на каждой из них. Каждый символ должен быть либо буквой английского алфавита (либо прописной, либо строчной), либо цифрой. Два символа должны быть одинаковы тогда и только тогда, когда соответствующие клетки принадлежат одной и той же курице. Большие и маленькие буквы считаются различными, поэтому «A» и «a» принадлежат различным курицам.

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

Примечание

Эти рисунки объясняют пример вывода. Каждый цвет представляет одну курицу. Клетки, заполненные узорами (не однотонные), содержат рис.

В первом примере каждая курица имеет одну клетку с рисом. Следовательно, разница между максимальным и минимальным количеством клеток с рисом, отданных для курицы, равна \(0\).

Во втором примере есть \(4\) курицы, у которых по \(3\) клетки с рисом, и \(2\) курицы с \(2\) клетками. Следовательно, разница между максимальным и минимальным количеством клеток с рисом, отданных для курицы, составляет \(3 - 2 = 1\).

В третьем примере каждая курица имеет \(3\) клетки с рисом.

В последнем примере есть \(62\) курицы и ровно \(62\) клетки с рисом, каждая курица должна получить ровно одну клетку. Есть несколько возможных разбиений.

B1. Отправьте коробки Алисе (упрощенная версия)

жадные алгоритмы Конструктив математика теория чисел Тернарный поиск *1800

Это — упрощённая версия задачи. В этой версии, \(1 \le n \le 10^5\) и \(0 \le a_i \le 1\). Вы можете взламывать эту задачу только тогда, когда решите и заблокируете обе версии.

Приближается Рождество, и наш главный герой, Боб, готовит эффектный подарок для своей давней лучшей подруги Алисы. В этом году он решил приготовить \(n\) коробок шоколада, пронумерованных от \(1\) до \(n\). Изначально \(i\)-я коробка содержит \(a_i\) кусочков шоколада.

Поскольку Боб — типичный приятный парень, он не отправит Алисе \(n\) пустых ящиков. Другими словами, минимум одно число из \(a_1, a_2, \ldots, a_n\) является положительным. Поскольку Алиса не любит взаимно простые множества, она будет счастлива, только если существует какое-то целое число \(k > 1\), такое, что количество кусочков в каждой коробке делится на \(k\). Обратите внимание, что Алиса не будет возражать, если будут какие-то пустые коробки.

Чарли, парень Алисы, также является вторым лучшим другом Боба, поэтому он решает помочь Бобу, переставляя кусочки шоколада. За одну секунду Чарли может взять кусок в \(i\)-й коробке, и поместить его либо в \(i-1\)-ю коробку или \(i+1\)-ю коробку (если такие коробки существуют). Конечно, он хочет помочь своему другу как можно быстрее. Поэтому он просит вас подсчитать минимальное количество секунд, которое понадобится ему, чтобы сделать Алису счастливой.

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество коробок шоколада.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 1\)) — количество кусков шоколада в \(i\)-й коробке.

Гарантируется, что как минимум одно число среди \(a_1, a_2, \ldots, a_n\) положительное.

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

Если Чарли не может сделать Алису счастливой, выведите \(-1\).

Иначе выведите \(x\) — минимальное количество секунд, которые нужны Чарли, чтобы помочь Бобу сделать Алису счастливой.

B2. Отправьте коробки Алисе (усложнённая версия)

жадные алгоритмы Конструктив математика теория чисел Тернарный поиск *2100

Это — сложная версия задачи. В ней \(1 \le n \le 10^6\) и \(0 \leq a_i \leq 10^6\). Вы можете взламывать эту версию тогда, когда решите ее (но предыдущую только тогда, когда заблокировали обе версии).

Приближается Рождество, и наш главный герой, Боб, готовит эффектный подарок для своей давней лучшей подруги Алисы. В этом году он решил приготовить \(n\) коробок шоколада, пронумерованных от \(1\) до \(n\). Изначально \(i\)-я коробка содержит \(a_i\) кусочков шоколада.

Поскольку Боб — типичный приятный парень, он не отправит Алисе \(n\) пустых ящиков. Другими словами, минимум одно число из \(a_1, a_2, \ldots, a_n\) является положительным. Поскольку Алиса не любит взаимно простые множества, она будет счастлива, только если существует какое-то целое число \(k > 1\), такое, что количество кусочков в каждой коробке делится на \(k\). Обратите внимание, что Алиса не будет возражать, если будут какие-то пустые коробки.

Чарли, парень Алисы, также является вторым лучшим другом Боба, поэтому он решает помочь Бобу, переставляя кусочки шоколада. За одну секунду Чарли может взять кусок в \(i\)-й коробке, и поместить его либо в \(i-1\)-ю коробку или \(i+1\)-ю коробку (если такие коробки существуют). Конечно, он хочет помочь своему другу как можно быстрее. Поэтому он просит вас подсчитать минимальное количество секунд, которое понадобится ему, чтобы сделать Алису счастливой.

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^6\)) — количество коробок шоколада.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^6\)) — количество кусков шоколада в \(i\)-й коробке.

Гарантируется, что как минимум одно число среди \(a_1, a_2, \ldots, a_n\) положительное.

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

Если Чарли не может сделать Алису счастливой, выведите \(-1\).

Иначе выведите \(x\) — минимальное количество секунд, которые нужны Чарли, чтобы помочь Бобу сделать Алису счастливой.

Примечание

В первом примере Чарли может передвинуть все шоколадные кусочки во вторую коробку. Каждая коробка будет делиться на \(17\).

Во втором примере Чарли может передвинуть кусочек из \(2\)-й коробки в \(3\)-ю и еще один из \(4\)-й в \(5\)-ю. Каждая коробка делится на \(3\).

В третьем примере каждая коробка уже делится на \(5\).

В четвертом примере Чарли не может ничего сделать, он не может помочь Бобу сделать Алису счастливой.

C. Упорядочьте точки

геометрия интерактив Конструктив математика *2300

Это — интерактивная задача.

У Кханя есть \(n\) точек в декартовой системе координат, которые обозначаются как \(a_1, a_2, \ldots, a_n\). Все координаты точек — целые числа от \(-10^9\) до \(10^9\) включительно. Нет трех коллинеарных точек. Он говорит, что эти точки являются вершинами выпуклого многоугольника; другими словами, существует перестановка \(p_1, p_2, \ldots, p_n\) целых чисел от \(1\) до \(n\), такая, что многоугольник \(a_{p_1} a_{p_2} \ldots a_{p_n}\) является выпуклым и вершины перечислены против часовой стрелки.

Кхань дает вам число \(n\), но не координаты своих точек. Ваша задача — угадать вышеуказанную перестановку, задав несколько запросов. В каждом запросе вы даете Кханю \(4\) целых чисел \(t\), \(i\), \(j\), \(k\); где либо \(t = 1\), либо \(t = 2\); и \(i\), \(j\), \(k\) — это три различных индекса от \(1\) до \(n\) включительно. В ответ Хан говорит вам:

  • Если \(t = 1\), то площадь треугольника \(a_ia_ja_k\) умноженную на \(2\).
  • Если \(t = 2\), то знак векторного произведения двух векторов \(\overrightarrow{a_ia_j}\) и \(\overrightarrow{a_ia_k}\).

Напомним, что векторное произведение вектора \(\overrightarrow{a} = (x_a, y_a)\) и вектора \(\overrightarrow{b} = (x_b, y_b)\) — это целое число \(x_a \cdot y_b - x_b \cdot y_a\). Знак числа равен \(1\), если оно положительное, и \(-1\) иначе. Можно показать, что векторное произведение в запросах никогда не будет \(0\).

Вы можете задать не более \(3 \cdot n\) запросов.

Обратите внимание, что Кхань фиксирует координаты своих точек и не меняет их, отвечая на ваши запросы. Вам не нужно угадывать координаты. В вашей перестановке \(a_{p_1}a_{p_2}\ldots a_{p_n}\), \(p_1\) должен быть равен \(1\) и все индексы вершин должны быть перечисленны против часовой стрелки.

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

Сначала считайте целое число \(n\) (\(3 \leq n \leq 1\,000\)) — количество вершин.

Чтобы задать запрос, выведите \(4\) целых числа \(t\), \(i\), \(j\), \(k\) (\(1 \leq t \leq 2\), \(1 \leq i, j, k \leq n\)) на отдельной строке. \(i\), \(j\) и \(k\) должны быть различны.

После этого считайте ответ на запрос. Можно показать, что ответ на любой запрос всегда целое число.

Когда вы найдете перестановку, выведите \(0\). Затем выведите \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) на той же строке.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Формат взломов

Для взломов используйте следующий формат:

Первая строка должна содержать целое число \(n\) (\(3 \leq n \leq 1\,000\)) — количество вершин.

\(i\)-я из следующих \(n\) строк должна содержать два целых числа \(x_i\) и \(y_i\) (\(-10^9 \le x_i, y_i \le 10^9\)) — координаты точки \(a_i\).

Примечание

Рисунок ниже показывает спрятанный многоугольник в примере:

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

  • Участник считывает \(n = 6\).
  • Участник задает запрос \(t = 1\), \(i = 1\), \(j = 4\), \(k = 6\).
  • Жюри отвечает \(15\). Площадь \(A_1A_4A_6\) равна \(7.5\). Обратите внимание, что ответ — это площадь умноженная на два.
  • Участник задает запрос \(t = 2\), \(i = 1\), \(j = 5\), \(k = 6\).
  • Жюри отвечает \(-1\). Векторное произведение \(\overrightarrow{A_1A_5} = (2, 2)\) и \(\overrightarrow{A_1A_6} = (4, 1)\) равно \(-2\). Знак \(-2\) равен \(-1\).
  • Участник задает запрос \(t = 2\), \(i = 2\), \(j = 1\), \(k = 4\).
  • Жюри отвечает \(1\). Векторное произведение \(\overrightarrow{A_2A_1} = (-5, 2)\) и \(\overrightarrow{A_2A_4} = (-2, -1)\) равно \(1\). Знак \(1\) равен \(1\).
  • Участник отвечает \((1, 3, 4, 2, 6, 5)\).

C. League of Leesins

Конструктив реализация *1600

Боб является страстным поклонником видеоигры «League of Leesins», и сегодня он празднует то, что подходит к концу Чемпионат мира League of Leesins!

В турнире приняли участие \(n\) (\(n \ge 5\)) команд по всему миру. Перед началом турнира Боб сделал прогноз рейтинга каждой команды от \(1\) до \(n\). После финала он сравнил прогноз с фактическим результатом и обнаружил, что \(i\)-я команда в соответствии с его прогнозом оказалась на \(p_i\)-й позиции (\(1 \le p_i \le n\), все \(p_i\) различны). Другими словами, \(p\) является перестановкой чисел \(1, 2, \dots, n\).

Поскольку любимый игрок Боба в Лиге — знаменитый «3ga», он решил записать каждые \(3\) последовательные элементы перестановки \(p\). Формально Боб создал массив \(q\) из \(n-2\) троек, где \(q_i = (p_i, p_{i+1}, p_{i+2})\) для каждого \(1 \le i \le n-2\). Боб очень гордился своим набором, поэтому он показал его своей подруге Алисе.

Узнав о массиве Боба, Алиса заявила, что может найти перестановку \(p\), даже если Боб переставит (перемешает) элементы \(q\) и элементы в каждой тройке. Конечно, Боб не поверил в такую магию, поэтому он сделал то, что и сказала, чтобы увидеть, что она ему скажет.

Например, если \(n = 5\) и \(p = [1, 4, 2, 3, 5]\), тогда массив \(q\) будет равен \([(1, 4, 2), (4, 2, 3), (2, 3, 5)]\). Боб может перемешать сами тройки и числа в тройках, чтобы получить \([(4, 3, 2), (2, 3, 5), (4, 1, 2)]\). Обратите внимание, что \([(1, 4, 2), (4, 2, 2), (3, 3, 5)]\) — неправильная перестановка \(q\), так как Боб не может менять местами числа между тройками.

Как друг Алисы, вы точно знаете, что Алиса просто пыталась похвастаться, поэтому вы решили ее спасти, дав ей любую перестановку \(p\), которая соответствует массиву \(q\), который ей дали.

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

Первая строка содержит одно целое число \(n\) (\(5 \le n \le 10^5\)) — размер перестановки \(p\).

\(i\)-я из следующих \(n-2\) строк содержит \(3\) целых числа \(q_{i, 1}\), \(q_{i, 2}\), \(q_{i, 3}\) (\(1 \le q_{i, j} \le n\)) — элементы \(i\)-й тройки перемешанного массива \(q_i\) в случайном порядке. Помните, что числа в тройке могут быть перемешаны, а также сами тройки могут быть перемешаны.

Гарантируется, что как минимум одна перестановка \(p\) может произвести такие тройки (то есть ответ существует).

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

Выведите \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)) такие, что из перестановки \(p\) можно получить массив \(q\).

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

F. Приравнивание двух строк

Конструктив сортировки Строки *2000

Задано две строки \(s\) и \(t\), обе длины \(n\) и обе состоят из строчных букв латинского алфавита.

За один ход вы можете выбрать любую длину \(len\) от \(1\) до \(n\) и выполнить следующую операцию:

  • Выбрать любую непрерывную подстроку строки \(s\) длины \(len\) и перевернуть ее;
  • в тот же момент выбрать любую непрерывную подстроку строки \(t\) длины \(len\) и также перевернуть ее.

Заметьте, что в течение одного хода вы переворачиваете ровно одну подстроку строки \(s\) и ровно одну подстроку строки \(t\).

Также заметьте, что границы подстрок, которые вы переворачиваете в \(s\) и в \(t\), могут быть различны, единственное ограничение — вы должны переворачивать подстроки одинаковых длин. Например, если \(len=3\) и \(n=5\), то вы можете перевернуть \(s[1 \dots 3]\) и \(t[3 \dots 5]\), \(s[2 \dots 4]\) и \(t[2 \dots 4]\), но не \(s[1 \dots 3]\) и \(t[1 \dots 2]\).

Ваша задача — сказать, можно ли сделать строки \(s\) и \(t\) одинаковыми после какой-то (возможно, пустой) последовательности ходов.

Вам необходимо ответить на \(q\) независимых наборов входных данных.

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

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 10^4\)) — количество наборов входных данных. Затем следуют \(q\) наборов входных данных.

Первая строка набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину \(s\) и \(t\).

Вторая строка набора входных данных содержит одну строку \(s\), состоящую из \(n\) строчных букв латинского алфавита.

Третья строка набора входных данных содержит одну строку \(t\), состоящую из \(n\) строчных букв латинского алфавита.

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

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

Для каждого набора входных данных выведите ответ на него — «YES» (без кавычек), если возможно сделать строки \(s\) и \(t\) равными после какой-то (возможно, пустой) последовательности ходов и «NO» иначе.

C. Дисплей для читалки

жадные алгоритмы Конструктив *2000

Усилиями исследователей был создан качественно новый дисплей для читалок. Новый дисплей имеет большее разрешение, потребляет меньше энергии, дешевле в производстве, а ко всему прочему, еще и гнется. Единственное неудобство — необычное управление, проблемы с которым разработчики решили списать на программистов ПО для читалок.

Дисплей имеет вид квадрата n × n пикселей, каждый из которых может быть черного или белого цвета. Строки дисплея пронумерованы целыми числами от 1 до n сверху вниз, столбцы пронумерованы целыми числами от 1 до n слева направо. Дисплей может выполнять команды вида «x, y». Обычный дисплей при выполнении такой команды просто меняет цвет пиксела с координатами (x, y) на противоположный, где x — номер строки, а y — номер столбца. Но в нашем новом дисплее на противоположный меняют свои цвета пиксели, принадлежащие хотя бы одному из отрезков (x, x) - (x, y) и (y, y) - (x, y) (у обоих отрезков оба конца включаются).

Например, если изначально дисплей размера 5 × 5 полностью белый, то последовательность команд (1, 4), (3, 5), (5, 1), (3, 3) приведет к следующим изменениям:

Вам, как программисту ПО для читалок, требуется определить наименьшее количество команд, нужное для формирования картинки. Можете считать, что изначально все пиксели дисплея белого цвета.

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

В первой строке дано число n (1 ≤ n ≤ 2000).

В следующих n строках имеется по n символов в каждой — описание картинки, которую следует получить. «0» означает белый цвет, «1» — черный.

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

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

B. Красивая последовательность

жадные алгоритмы Конструктив Перебор *1900

Последовательность целых чисел называется красивой если абсолютная разница между любыми двумя соседними числами равна \(1\). Более формально, последовательность \(s_1, s_2, \ldots, s_{n}\) красивая, если \(|s_i - s_{i+1}| = 1\) для всех \(1 \leq i \leq n - 1\).

У Вани есть \(a\) чисел равных \(0\), \(b\) чисел равных \(1\), \(c\) чисел равных \(2\) и \(d\) чисел равных \(3\). Он хочет построить красивую последовательность используя все эти \(a + b + c + d\) чисел.

Оказалось, что это непростая задача и Ваня не справился решить ее. Помогите Ване!

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

В единственной строке находятся четыре неотрицательных целых числа \(a\), \(b\), \(c\) и \(d\) (\(0 < a+b+c+d \leq 10^5\)).

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

Если невозможно построить красивую последовательность, удовлетворяющую ограничениям, выведите «NO» (без кавычек) в единственной строке.

Иначе, выведите «YES» (без кавычек) в первой строке. Затем, во второй строке выведите \(a + b + c + d\) целых чисел, разделенных пробелом — найденная красивая последовательность. Среди выведенных чисел должно быть ровно \(a\) чисел, равных \(0\), ровно \(b\) чисел, равных \(1\), ровно \(c\) чисел, равных \(2\) и ровно \(d\) чисел, равных \(3\).

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

Примечание

В первом тесте, легко заметить, что последовательность красивая, потому что абсолютная разница между любыми двумя соседними числами равна \(1\). Также, в последовательности ровно два числа, равных \(0\), \(1\), \(2\) и ровно одно число, равное \(3\).

Можно доказать, что невозможно построить красивые последовательности во втором и третьем тесте.

E. Красивая лига

Конструктив Паросочетания Потоки *2700

Футбольная лига недавно стартовала в Красивой долине. Всего \(n\) команд участвует в этой лиге. Пронумеруем их для удобства целыми числами от \(1\) до \(n\).

Всего будет проведено ровно \(\frac{n(n-1)}{2}\) матчей: каждая команда будет играть со всеми оставшимися командами ровно по одному разу. В каждом матче всегда есть победившая и проигравшая команда, ничьих не бывает.

После того, как все матчи будут сыграны, организаторы посчитают количество красивых троек. Тройка команд \((A, B, C)\) называется красивой, если команда \(A\) победила команду \(B\), команда \(B\) победила команду \(C\) и команда \(C\) победила команду \(A\). Мы рассматриваем только тройки различных команд, порядок команд внутри тройки имеет значение.

Красотой лиги назовем количество красивых троек.

В данный момент, \(m\) матчей уже было проведено и их результаты уже известны.

Какая максимальная красота лиги может быть в итоге, после проведения оставшихся матчей? Также найдите возможные результаты оставшихся \(\frac{n(n-1)}{2} - m\) матчей, при которых красота лиги максимально возможная.

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

В первой строке находится два целых числа \(n, m\) (\(3 \leq n \leq 50, 0 \leq m \leq \frac{n(n-1)}{2}\)) — количество команд в футбольной лиге и количество матчей, которое уже проведено.

Следующие \(m\) строк содержат два целых числа \(u\) и \(v\) (\(1 \leq u, v \leq n\), \(u \neq v\)), означающих, что команда с номером \(u\) победила команду с номером \(v\). Гарантируется, что каждая неупорядоченная пара команд встретится не более одного раза.

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

Выведите \(n\) строк, в каждой из них строку, содержащую ровно \(n\) символов. Каждый символ должен быть равен \(0\) или \(1\).

Обозначим за \(a_{ij}\) \(j\)-е число в \(i\)-й строке. Для всех \(1 \leq i \leq n\) должно быть выполнено \(a_{ii} = 0\). Для всех пар команд \(i \neq j\) число \(a_{ij}\) обозначает результат матча между командой с номером \(i\) и командой с номером \(j\):

  • Если \(a_{ij}\) это \(1\), то \(i\)-я команда победила \(j\)-ю команду;
  • Иначе \(j\)-я команда победила \(i\)-ю команду;
  • Также, должно быть выполнено, что \(a_{ij} + a_{ji} = 1\).

Также заметьте, что результаты \(m\) матчей, которые уже были сыграны, не могут быть изменены в вашей лиге.

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

Примечание

Красота лиги в первом тесте равна \(3\), потому что есть ровно три красивые тройки команд: \((1, 2, 3)\), \((2, 3, 1)\), \((3, 1, 2)\).

Красота лиги во втором тесте равна \(6\) потому что существует шесть красивых троек команд: \((1, 2, 4)\), \((2, 4, 1)\), \((4, 1, 2)\), \((2, 4, 3)\), \((4, 3, 2)\), \((3, 2, 4)\).

F. Красивая задача с числами Фиббоначи

Конструктив теория чисел *3500

Известные числа Фиббоначи \(F_0, F_1, F_2,\ldots \) определяются следующим образом:

  • \(F_0 = 0, F_1 = 1\).
  • Для всех \(i \geq 2\): \(F_i = F_{i - 1} + F_{i - 2}\).

Дана возрастающая арифметическая прогрессия положительных целых чисел с \(n\) числами \((a, a + d, a + 2\cdot d,\ldots, a + (n - 1)\cdot d)\).

Вы должны найди другую возрастающую арифметическую прогрессию положительных целых чисел с \(n\) числами \((b, b + e, b + 2\cdot e,\ldots, b + (n - 1)\cdot e)\), такую что:

  • \(0 < b, e < 2^{64}\),
  • для всех \(0\leq i < n\), запись числа \(a + i \cdot d\) в десятичной системе счисления встречается как подстрока в строке, образованной последними \(18\)-ю цифрами десятичной записи числа \(F_{b + i \cdot e}\) (если это число содержит меньше чем \(18\) цифр, тогда рассмотрим все его цифры).
Входные данные

Первая строка содержит три положительных целых числа \(n\), \(a\), \(d\) (\(1 \leq n, a, d, a + (n - 1) \cdot d < 10^6\)).

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

Если не существует подходящей арифметической прогрессии, выведите единственное число \(-1\).

Иначе, выведите два целых числа \(b\) и \(e\), разделенных пробелом в единственной строке (\(0 < b, e < 2^{64}\)).

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

Примечание

В первом тесте, мы можем выбрать \((b, e) = (2, 1)\), потому что \(F_2 = 1, F_3 = 2, F_4 = 3\).

Во втором тесте, мы можем выбрать \((b, e) = (19, 5)\), потому что:

  • \(F_{19} = 4181\) содержит \(1\);
  • \(F_{24} = 46368\) содержит \(3\);
  • \(F_{29} = 514229\) содержит \(5\);
  • \(F_{34} = 5702887\) содержит \(7\);
  • \(F_{39} = 63245986\) содержит \(9\).

A. Красивая строка

жадные алгоритмы Конструктив *1000

Строка называется красивой, если никакие два последовательных символа строки не равны. Например, строки «ababcb», «a» и «abab» красивые, тогда как «aaaaaa», «abaa» и «bb» нет.

Ahcl хочет построить красивую строку. У него есть строка \(s\), состоящая только из символов 'a', 'b', 'c' и '?'. Ahcl должен поменять каждый символ '?' на один из трех символов 'a', 'b' или 'c', так что получившаяся строка будет красивой. Помогите ему!

Более формально, после замены всех символов '?', условие \(s_i \neq s_{i+1}\) должно быть выполнено для всех \(1 \leq i \leq |s| - 1\), где \(|s|\) это длина строки \(s\).

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

В первой строке находится положительное целое число \(t\) (\(1 \leq t \leq 1000\)) — количество тестовых случаев. Следующие \(t\) строк содержат описания тестовых случаев.

Каждая строка содержит непустую строку \(s\), состоящую только из символов 'a', 'b', 'c' и '?'.

Гарантируется, что в каждом тестовом случае строка \(s\) содержит хотя бы один символ '?'. Сумма длин строк \(s\) по всем тестовым случаям не превосходит \(10^5\).

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

Для каждого тестового случая во входных данных выведите ответ в следующем формате:

  • Если невозможно получить красивую строку, выведите «-1» (без кавычек);
  • Иначе, выведите получившуюся красивую строку после замены всех символов '?'. Если существует несколько возможных ответов, вы можете найти любой из них.
Примечание

В первом тестовом случае, все возможные правильные ответы это «ababcb», «abcacb», «abcbcb», «acabcb» и «acbacb». Два ответа «abcbab» and «abaabc» являются неправильными, потому что можно заменять только символы '?' и получившаяся строка должна быть красивой.

Во втором тестовом случае, невозможно получить красивую строку, потому что \(4\)-й и \(5\)-й символы будут всегда совпадать.

В третьем тестовом случае, единственный возможный ответ это «acbac».

B. Башня из кубиков

Конструктив математика *1000

Боб играет со стандартными \(6\)-гранными костями (кубиками). Развертка стандартного кубика приведена на рисунке ниже.

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

Например, количество видимых точек на башне, нарисованной ниже, равно \(29\) — число точек на верхней грани верхнего кубика равно \(1\), а с четырех сторон башни видны грани со следующим количеством точек: \(5\) и \(3\) с южной стороны, \(4\) и \(2\) с западной стороны, \(2\) и \(4\) с северной стороны, и \(3\) и \(5\) с восточной стороны.

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

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

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

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество любимых чисел Боба.

Во второй строке заданы \(t\) целых чисел \(x_i\) (\(1 \leq x_i \leq 10^{18}\)) — любимые числа Боба.

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

Для каждого любимого числа Боба выведите «YES», если можно построить башню, или «NO» в противном случае (без кавычек).

Примечание

Первый пример разобран в условии.

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

В третьем примере достаточно единственного кубика, поставленного таким образом, что на верхней грани изображено \(5\) точек.

В четвертом примере не существует башни с нужным количеством видимых точек.

C. Разнообразная матрица

жадные алгоритмы Конструктив математика теория чисел *1400

Пусть \(a\) — матрица размера \(r \times c\), в каждой ячейке которой записано положительное целое число (эти числа не обязательно различны). Строки матрицы пронумерованы от \(1\) до \(r\), а столбцы — от \(1\) до \(c\). Мы можем построить массив \(b\), состоящий из \(r + c\) целых чисел, следующим образом: для каждого \(i \in [1, r]\) обозначим за \(b_i\) наибольший общий делитель всех чисел в \(i\)-й строке, а для каждого \(j \in [1, c]\) обозначим за \(b_{r+j}\) наибольший общий делитель всех чисел в \(j\)-м столбце.

Назовем матрицу разнообразной, если все \(r + c\) чисел \(b_k\) (\(k \in [1, r + c]\)) попарно различны.

Назовем модулем матрицы максимальное число среди \(b_k\).

Например, рассмотрим следующую матрицу:

\(\begin{pmatrix} 2 & 9 & 7\\ 4 & 144 & 84 \end{pmatrix}\)

Построим массив \(b\):

  1. \(b_1\) — наибольший общий делитель \(2\), \(9\) и \(7\), он равен \(1\);
  2. \(b_2\) — наибольший общий делитель \(4\), \(144\) и \(84\), он равен \(4\);
  3. \(b_3\) — наибольший общий делитель \(2\) и \(4\), он равен \(2\);
  4. \(b_4\) — наибольший общий делитель \(9\) и \(144\), он равен \(9\);
  5. \(b_5\) — наибольший общий делитель \(7\) и \(84\), он равен \(7\).

Итак, \(b = [1, 4, 2, 9, 7]\). Все значения в этом массиве различны, поэтому матрица является разнообразной. Модулем матрицы является число \(9\).

Для заданных \(r\) и \(c\) найдите разнообразную матрицу с минимально возможным модулем. Если таких матриц несколько, найдите любую из них. Если решения нет, выведите единственное целое число \(0\).

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

В единственной строке заданы два целых числа \(r\) и \(c\) (\(1 \leq r,c \leq 500\)) — количество строк и столбцов в требуемой матрице.

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

Если решения нет, выведите одно целое число \(0\).

Иначе выведите \(r\) строк. В \(i\)-й строке выведите \(c\) целых чисел, разделенных пробелами, \(j\)-е из которых равно \(a_{i,j}\) — положительному целому числу на пересечении \(i\)-й строки и \(j\)-го столбца в разнообразной матрице с минимальным модулем.

Для всех элементов матрицы должно соблюдаться условие \(1 \leq a_{i,j} \leq 10^9\). Можно показать, что если решение существует, существует и решение, удовлетворяющее этим ограничениям (с тем же самым минимально возможным модулем).

Примечание

В первом примере НОДы в строках равны \(b_1 = 4\) и \(b_2 = 1\), а НОДы в столбцах равны \(b_3 = 2\) и \(b_4 = 3\). Все НОДы различны, а максимальный из них равен \(4\). Так как все НОДы должны быть различны и не могут быть меньше \(1\), не существует разнообразных матриц \(2 \times 2\) с модулем меньше \(4\).

Во втором примере независимо от значения \(a_{1,1}\) условие \(b_1 = b_2\) будет всегда соблюдаться, поэтому разнообразных матриц не существует.

D. Уменьшаем долги

графы жадные алгоритмы Конструктив математика реализация Структуры данных *2000

Рассмотрим компанию из \(n\) людей, пронумерованных от \(1\) до \(n\). Они используют бурли, чтобы платить за товары и услуги. Иногда человеку не хватает денег на какую-либо покупку, тогда он занимает деньги у другого человека с намерением потом отдать их с процентами. Мы обозначим за \(d(a,b)\) сумму, которую \(a\) должен отдать \(b\), или \(0\), если долга нет.

Иногда система долгов может усложняться — например, в ситуации, когда один человек дал на время денег другому, но первому самому не хватает денег на покупку, а второй еще не отдал долг. Тогда первому человеку придется занимать у кого-то ещё.

Если процесс одалживания денег длится достаточно долго, система долгов может стать очень сложной и потребовать упрощения. Упрощать систему можно при помощи двух операций:

  1. Пусть \(d(a,b) > 0\) и \(d(c,d) > 0\), при этом \(a \neq c\) или \(b \neq d\). Можно уменьшить \(d(a,b)\) и \(d(c,d)\) на \(z\) и при этом увеличить \(d(c,b)\) и \(d(a,d)\) на \(z\), если \(0 < z \leq \min(d(a,b),d(c,d))\).
  2. Пусть \(d(a,a) > 0\). Можно уменьшить \(d(a,a)\) до \(0\).

Суммарный долг определяется следующей величиной:

\(\)\Sigma_d = \sum_{a,b} d(a,b)\(\)

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

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

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

Далее следуют \(m\) строк, каждая из которых содержит три целых числа \(u_i\), \(v_i\) (\(1 \leq u_i, v_i \leq n, u_i \neq v_i\)), \(d_i\) (\(1 \leq d_i \leq 10^9\)), обозначающих, что человек \(u_i\) должен \(d_i\) бурлей человеку \(v_i\).

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

В первой строке выведите число \(m'\) (\(0 \leq m' \leq 3\cdot 10^5\)) — количество долгов после уменьшения системы долгов. Можно показать, что всегда существует способ упростить систему до минимального суммарного долга с соблюдением этого условия.

Далее выведите \(m'\) строк, \(i\)-я из которых содержит три целых числа \(u_i, v_i, d_i\), обозначающих, что человек \(u_i\) должен отдать человеку \(v_i\) ровно \(d_i\) бурлей. На эти числа накладываются следующие ограничения: \(1 \leq u_i, v_i \leq n\), \(u_i \neq v_i\) и \(0 < d_i \leq 10^{18}\).

Для каждой пары \(i \neq j\) должно соблюдаться условие \(u_i \neq u_j\) или условие \(v_i \neq v_j\). Иными словами, каждая пара людей должна встречаться в выходных данных только один раз.

Примечание

В первом примере одна из оптимальных последовательностей операций — следующая:

  1. Проведём операцию первого типа с \(a = 1\), \(b = 2\), \(c = 2\), \(d = 3\) и \(z = 5\). В результате система долгов становится следующей: \(d(1, 2) = 5\), \(d(2, 2) = 5\), \(d(1, 3) = 5\), все остальные долги равны \(0\);
  2. Проведём операцию второго типа с \(a = 2\). В результате система долгов становится следующей: \(d(1, 2) = 5\), \(d(1, 3) = 5\), все остальные долги равны \(0\).

Во втором примере одна из оптимальных последовательностей операций — следующая:

  1. Проведём операцию первого типа с \(a = 1\), \(b = 2\), \(c = 3\), \(d = 1\) и \(z = 10\). В результате система долгов становится следующей: \(d(3, 2) = 10\), \(d(2, 3) = 15\), \(d(1, 1) = 10\), все остальные долги равны \(0\);
  2. проведём операцию первого типа с \(a = 2\), \(b = 3\), \(c = 3\), \(d = 2\) и \(z = 10\). В результате система долгов становится следующей: \(d(2, 2) = 10\), \(d(3, 3) = 10\), \(d(2, 3) = 5\), \(d(1, 1) = 10\), все остальные долги равны \(0\);
  3. Проведём операцию второго типа с \(a = 2\). В результате система долгов становится следующей: \(d(3, 3) = 10\), \(d(2, 3) = 5\), \(d(1, 1) = 10\), все остальные долги равны \(0\);
  4. Проведём операцию второго типа с \(a = 3\). В результате система долгов становится следующей: \(d(2, 3) = 5\), \(d(1, 1) = 10\), все остальные долги равны \(0\);
  5. Проведём операцию второго типа с \(a = 1\). В результате система долгов становится следующей: \(d(2, 3) = 5\), все остальные долги равны \(0\).

D. DevOps Best Practices

Конструктив *2800

Daisy is a senior software engineer at RainyDay, LLC. She has just implemented three new features in their product: the first feature makes their product work, the second one makes their product fast, and the third one makes their product correct. The company encourages at least some testing of new features, so Daisy appointed her intern Demid to write some tests for the new features.

Interestingly enough, these three features pass all the tests on Demid's development server, which has index 1, but might fail the tests on some other servers.

After Demid has completed this task, Daisy appointed you to deploy these three features to all \(n\) servers of your company. For every feature \(f\) and every server \(s\), Daisy told you whether she wants the feature \(f\) to be deployed on the server \(s\). If she wants it to be deployed, it must be done even if the feature \(f\) fails the tests on the server \(s\). If she does not want it to be deployed, you may not deploy it there.

Your company has two important instruments for the deployment of new features to servers: Continuous Deployment (CD) and Continuous Testing (CT). CD can be established between several pairs of servers, forming a directed graph. CT can be set up on some set of servers.

If CD is configured from the server \(s_1\) to the server \(s_2\) then every time \(s_1\) receives a new feature \(f\) the system starts the following deployment process of \(f\) to \(s_2\):

  • If the feature \(f\) is already deployed on the server \(s_2\), then nothing is done.
  • Otherwise, if CT is not set up on the server \(s_1\), then the server \(s_1\) just deploys the feature \(f\) to the server \(s_2\) without any testing.
  • Otherwise, the server \(s_1\) runs tests for the feature \(f\). If the tests fail on the server \(s_1\), nothing is done. If the tests pass, then the server \(s_1\) deploys the feature \(f\) to the server \(s_2\).

You are to configure the CD/CT system, and after that Demid will deploy all three features on his development server. Your CD/CT system must deploy each feature exactly to the set of servers that Daisy wants.

Your company does not have a lot of computing resources, so you can establish CD from one server to another at most \(264\) times.

Input

The first line contains integer \(n\) (\(2 \le n \le 256\)) — the number of servers in your company.

Next \(n\) lines contain three integers each. The \(j\)-th integer in the \(i\)-th line is \(1\) if Daisy wants the \(j\)-th feature to be deployed to the \(i\)-th server, or \(0\) otherwise.

Next \(n\) lines contain three integers each. The \(j\)-th integer in the \(i\)-th line is \(1\) if tests pass for the \(j\)-th feature on the \(i\)-th server, or \(0\) otherwise.

Demid's development server has index \(1\). It is guaranteed that Daisy wants all three features to be deployed to the server number 1, and all three features pass their tests on the server number 1.

Output

If it is impossible to configure CD/CT system with CD being set up between at most \(264\) pairs of servers, then output the single line "Impossible".

Otherwise, the first line of the output must contain the line "Possible".

Next line must contain \(n\) space-separated integers — the configuration of CT. The \(i\)-th integer should be \(1\) if you set up CT on the \(i\)-th server, or \(0\) otherwise.

Next line must contain the integer \(m\) (\(0 \le m \le 264\)) — the number of CD pairs you want to set up.

Each of the next \(m\) lines must describe CD configuration, each line with two integers \(s_i\) and \(t_i\) (\(1 \le s_i, t_i \le n\); \(s_i \ne t_i\)), establishing automated deployment of new features from the server \(s_i\) to the server \(t_i\).

Note

CD/CT system for the first sample test is shown below.

H. Help BerLine

Конструктив *3200

Very soon, the new cell phone services provider "BerLine" will begin its work in Berland!

The start of customer service is planned along the main street of the capital. There are \(n\) base stations that are already installed. They are located one after another along the main street in the order from the \(1\)-st to the \(n\)-th from left to right.

Currently, all these base stations are turned off. They will be turned on one by one, one base station per day, according to some permutation \(p = [p_1, p_2, \dots, p_n]\) (\( 1 \le p_i \le n\)), where \(p_i\) is the index of a base station that will be turned on on the \(i\)-th day. Thus, it will take \(n\) days to turn on all base stations.

Each base station is characterized by its operating frequency \(f_i\) — an integer between \(1\) and \(24\), inclusive.

There is an important requirement for operating frequencies of base stations. Consider an arbitrary moment in time. For any phone owner, if we consider all base stations turned on in the access area of their phone, then in this set of base stations there should be at least one whose operating frequency is unique among the frequencies of these stations. Since the power of the phone and the position are not known in advance, this means that for any nonempty subsegment of turned on base stations, at least one of them has to have the operating frequency that is unique among the stations of this subsegment.

For example, let's take a look at a case of \(n = 7\), all \(n\) stations are turned on, and their frequencies are equal to \(f = [1, 2, 1, 3, 1, 2, 1]\). Consider any subsegment of the base stations — there is a base station with a unique frequency within this subsegment. However, if \(f = [1, 2, 1, 2, 3, 2, 1]\), then there is no unique frequency on the segment \([1, 2, 1, 2]\) from the index \(1\) to the index \(4\), inclusive.

Your task is to assign a frequency from \(1\) to \(24\) to each of \(n\) base stations in such a way that the frequency requirement is met at every moment. Remember that the base stations are turned on in the order of the given permutation \(p\).

Input

The first line of the input contains an integer \(t\) (\(1 \le t \le 50\)) — the number of test cases in the input. Then \(t\) test case descriptions follow.

The first line of a test case contains an integer \(n\) (\( 1 \le n \le 8\,500\)) — the number of "BerLine" base stations.

The following line contains \(n\) distinct integers \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\)) — the order in which the base stations are turned on, i. e. on the \(i\)-th day the base station with the index \(p_i\) is turned on.

It is guaranteed that a correct answer exists for all test cases in the input.

Output

Print exactly \(t\) lines, where the \(j\)-th line contains the answer for the \(j\)-th test case in the input. Print the required frequencies \(f_1, f_2, \dots, f_n\) (\(1 \le f_i \le 24\)). If there are several possible answers, print any of them.

Note

In the first test case \(n = 3\) and \(p = [1, 3, 2]\). The base stations can be assigned frequencies \([1, 3, 2]\).

  • Day 1: only the base station \(1\) is turned on, its frequency is \(1\).
  • Day 2: the base stations \(1\) and \(3\) are turned on, their frequencies are \([1, 2]\).
  • Day 3: all base stations are turned on, their frequencies are \([1, 3, 2]\) (in the direction along the street).

On each day, each nonempty subsegment of turned on base stations has a base station with a unique frequency among this subsegment. It can be shown that three distinct frequencies are necessary in this test case.

I. Intriguing Selection

интерактив Конструктив Перебор реализация сортировки *2600

This is an interactive problem.

You are the head coach of a chess club. The club has \(2n\) players, each player has some strength which can be represented by a number, and all those numbers are distinct. The strengths of the players are not known to you.

You need to select \(n\) players who would represent your club in the upcoming championship. Naturally, you want to select \(n\) players with the highest strengths.

You can organize matches between the players to do that. In every match, you pick two players, they play some games, and you learn which one of the two has higher strength. You can wait for the outcome of a match before deciding who will participate in the next one.

However, you do not want to know exactly how those \(n\) players compare between themselves, as that would make the championship itself less intriguing. More formally, you must reach a state where there is exactly one way to choose \(n\) players with the highest strengths that is consistent with the outcomes of the matches you organized, but there must be at least two possible orderings of those \(n\) players by strength that are consistent with the outcomes of the matches you organized.

Interaction

Your program has to process multiple test cases in one run. First, it should read the integer \(t\) (\(t \ge 1\)) — the number of test cases. Then, it should process the test cases one by one.

In each test case, your program should start by reading the integer \(n\) (\(3 \le n \le 100\)) — the number of players to select out of \(2n\) players. The sum of squares of the values of \(n\) over all test cases does not exceed \(10\,000\).

Then your program can organize matches zero or more times. To organize a match, your program should print a match description formatted as ? \(i\) \(j\) — a question mark followed by two distinct numbers of players participating in the match. The players are numbered from 1 to \(2n\), inclusive. Remember to flush the output after printing the match description. Then your program should read the match outcome — it will be either the greater-than character (>), if the first player in the match description has higher strength, or the less-than character (<), if the second player in the match description has higher strength.

Your program can organize at most \(4n^2\) matches. After it is done organizing matches, it should print the exclamation mark (!) and continue to the next test case, or exit gracefully if this was the last test case. Remember to flush the output after printing the exclamation mark.

There must be exactly one way to choose \(n\) players with the highest strength that is consistent with the outcomes of the matches you organized, but there must be at least two possible orderings of those \(n\) players by their strength that are consistent with the outcomes of the matches you organized.

The judging program picks some distinct numbers as the strengths of all players before your program starts organizing matches and uses them to answer the requests.

Note

In the example, the players in the first test case are sorted by strength in decreasing order. From the matches in the example output, we can deduce that players 1, 2, and 3 have the highest strength, but we do not know how the player 1 compares to the player 2.

L. Lexicography

Конструктив Строки *1800

Lucy likes letters. She studied the definition of the lexicographical order at school and plays with it.

At first, she tried to construct the lexicographically smallest word out of given letters. It was so easy! Then she tried to build multiple words and minimize one of them. This was much harder!

Formally, Lucy wants to make \(n\) words of length \(l\) each out of the given \(n \cdot l\) letters, so that the \(k\)-th of them in the lexicographic order is lexicographically as small as possible.

Input

The first line contains three integers \(n\), \(l\), and \(k\) (\(1\le k \le n \le 1\,000\); \(1 \le l \le 1\,000\)) — the total number of words, the length of each word, and the index of the word Lucy wants to minimize.

The next line contains a string of \(n \cdot l\) lowercase letters of the English alphabet.

Output

Output \(n\) words of \(l\) letters each, one per line, using the letters from the input. Words must be sorted in the lexicographic order, and the \(k\)-th of them must be lexicographically as small as possible. If there are multiple answers with the smallest \(k\)-th word, output any of them.

A. Длинное красивое число

жадные алгоритмы Конструктив реализация Строки *1700

Вам дано положительное целое число \(x\) из \(n\) цифр \(a_1, a_2, \ldots, a_n\), которые составляют его десятичную запись в порядке слева направо.

А также, вам дано положительное целое число \(k < n\).

Назовем число \(b_1, b_2, \ldots, b_m\) красивым если \(b_i = b_{i+k}\) для всех \(i\), что \(1 \leq i \leq m - k\).

Вам необходимо найти минимальное красивое целое число \(y\), что \(y \geq x\).

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

В первой строке записаны два целых числа \(n, k\) (\(2 \leq n \leq 200\,000, 1 \leq k < n\)): количество цифр в \(x\) и \(k\).

В следующей строке записаны \(n\) цифр \(a_1, a_2, \ldots, a_n\) (\(a_1 \neq 0\), \(0 \leq a_i \leq 9\)): цифры \(x\).

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

В первой строке выведите одно целое число \(m\): количество цифр в \(y\).

В следующей строке выведите \(m\) цифр \(b_1, b_2, \ldots, b_m\) (\(b_1 \neq 0\), \(0 \leq b_i \leq 9\)): цифры \(y\).

B. Интересный подмассив

жадные алгоритмы Конструктив математика *1200

Для массива \(a\) из целых чисел обозначим его максимальный элемент через \(\max(a)\), а минимальный через \(\min(a)\). Будем называть массив \(a\) из \(k\) целых чисел интересным, если \(\max(a) - \min(a) \ge k\). К примеру, массив \([1, 3, 4, 3]\) не является интересным, так как \(\max(a) - \min(a) = 4 - 1 = 3 < 4\), а массив \([7, 3, 0, 4, 3]\) является, так как \(\max(a) - \min(a) = 7 - 0 = 7 \ge 5\).

Вам дан массив \(a\) из \(n\) целых чисел. Найдите какой-то интересный непустой подмассив \(a\), или сообщите, что его не существует.

Массив \(b\) является подмассивом \(a\), если \(b\) может быть получен из \(a\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца. В частности, массив является своим подмассивом.

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

В первой строке записано целое число \(t\) (\(1 \le t \le 10\,000\)). Далее следуют \(t\) наборов входных данных.

Первая строка описания тестового случая содержит единственное число \(n\) (\(2\le n \le 2\cdot 10^5\)) — длина массива.

Вторая строка описания тестового случая содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0\le a_i \le 10^9\)) — элементы массива.

Гарантируется, что сумма значений \(n\) по всем тестовым случаям не превосходит \(2 \cdot 10^5\).

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

Для каждого тестового случая, выведите «NO» с новой строки, если в \(a\) нет интересного непустого подмассива.

Иначе, выведите «YES» с новой строки. В следующей строке выведите два целых числа \(l\) и \(r\) (\(1\le l \le r \le n\)) — границы выбранного вами подмассива. Если существует несколько решений, выведите любое из них.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

Во втором тестовом случае примера, одним из возможных интересных подмассивов является \(a = [2, 0, 1, 9]\): \(\max(a) - \min(a) = 9 - 0 = 9 \ge 4\).

C. Сделай хорошим

битмаски Конструктив математика *1400

Будем называть массив \(a_1, a_2, \dots, a_m\) неотрицательных целых чисел хорошим, если \(a_1 + a_2 + \dots + a_m = 2\cdot(a_1 \oplus a_2 \oplus \dots \oplus a_m)\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

К примеру, массив \([1, 2, 3, 6]\) является хорошим, так как \(1 + 2 + 3 + 6 = 12 = 2\cdot 6 = 2\cdot (1\oplus 2 \oplus 3 \oplus 6)\). В то же время, массив \([1, 2, 1, 3]\) хорошим не является, так как \(1 + 2 + 1 + 3 = 7 \neq 2\cdot 1 = 2\cdot(1\oplus 2 \oplus 1 \oplus 3)\).

Вам дан массив длины \(n\): \(a_1, a_2, \dots, a_n\). Добавьте к нему не более \(3\) элементов, чтобы он стал хорошим. Добавленные элементы не обязаны быть различными. Можно показать, что при данных ограничениях решение всегда существует. Если существует несколько возможных решений, выведите любое из них. Обратите внимание, что минимизировать количество добавленных элементов не требуется!. В частности если массив изначально уже хороший, то вы можете не добавлять элементов.

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

Во входных данных находятся несколько (не меньше одного) тестовых случаев. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество тестовых случаев. Далее следуют описания тестовых случаев.

Первая строка описания тестового случая содержит единственное число \(n\) \((1\le n \le 10^5)\) — длину массива.

Вторая строка описания тестового случая содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0\le a_i \le 10^9\)) — элементы массива.

Гарантируется, что сумма значений \(n\) по всем тестовым случаям не превосходит \(10^5\).

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

Для каждого тестового случая выведите две строки.

В первой строке, выведите единственное целое число \(s\) (\(0\le s\le 3\)) — количество элементов, которые вы хотите добавить.

Во второй строке, выведите \(s\) целых чисел \(b_1, \dots, b_s\) (\(0\le b_i \le 10^{18}\)) — элементы, которые вы хотите добавить.

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

Примечание

В первом тестовом случае из примера, сумма элементов массива равна \(12\), а их \(\oplus\) равен \(6\), поэтому условие уже выполнено.

Во втором тестовом случае из примера, после добавления \(4, 4\), массив принимает вид \([8, 4, 4]\). Сумма элементов в нем равна \(16\), а их \(\oplus\) равен \(8\).

D. Странный прибор

интерактив Конструктив математика сортировки *1900

Это интерактивная задача.

Мы загадали массив \(a\) из \(n\) попарно различных чисел (это значит, что нет одинаковых чисел). Вы можете узнавать информацию об этом массиве с помощью нового прибора, который вы заказали на Amazon.

Данный прибор может отвечать на запрос следующего вида: в ответ на индексы \(k\) различных элементов массива, он вернет вам позицию и значение \(m\)-го по возрастанию среди них.

К сожалению, инструкция к прибору потерялась при доставке. Вы помните \(k\), но не помните \(m\). Ваша задача — найти \(m\) с помощью запросов к данному прибору.

Вы можете задать не более \(n\) запросов.

Обратите внимание, что массив \(a\), а также число \(m\) зафиксированы перед началом взаимодействия и не зависят от ваших запросов. Иными словами, интерактор не адаптивен.

Заметьте, что число запросов минимизировать не нужно, как и угадывать весь массив \(a\). Вам нужно только угадать \(m\).

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

Первая строка содержит два целых числа \(n\) и \(k\) (\(1\le k < n \le 500\)) — длина массива и количество элементов в запросе соответственно.

Гарантируется, что искомое \(m\) удовлетворяет \(1\le m \le k\), элементы \(a_1, a_2, \dots, a_n\) массива удовлетворяют \(0\le a_i \le 10^9\) и все они различны.

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

Вы начинаете взаимодействие, считав \(n\) и \(k\).

Чтобы задать вопрос об элементах на позициях \(x_1, x_2, \dots, x_k\), в отдельной строке выведите

\(?\) \(x_1\) \(x_2\) \(x_3\) ... \(x_k\)

Числа в запросе должны удовлетворять условию \(1 \le x_i \le n\), и все \(x_i\) должны быть различными. Не забудьте сделать операцию 'flush', чтобы получить ответ.

В ответ, вы получите два числа \(pos\) и \(a_{pos}\) — позиция в массиве \(a\) \(m\)-го в порядке возрастания элемента среди \(a_{x_1}, a_{x_2}, \dots, a_{x_k}\), и сам элемент на этой позиции.

В случае, если ваш запрос не соответствует требованиям, или вы задали более \(n\) запросов, программа выведет \(-1\) и прекратит взаимодействие. Вы получите вердикт Неправильный ответ. Вам нужно завершить работу вашей программы, чтобы не получить другие вердикты.

Когда вы определили \(m\), выведите

\(!\) \(m\)

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Формат взломов

Для взломов используйте следующий формат:

Первая строка должна содержать три целых числа \(n, k, m\) (\(1 \le m \le k < n \le 500\)) — длина массива, количество чисел в запросе, и какое в порядке возрастания число возвращает прибор.

В следующей строке выведите \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0\le a_i \le 10^9\)) — элементы массива. Они должны быть попарно различными.

Примечание

В примере, \(n = 4\), \(k = 3\), \(m = 3\), \(a = [2, 0, 1, 9]\).

E. Разделите точки

геометрия Конструктив математика *2300

Вам дано множество из \(n\ge 2\) попарно различных точек с целыми координатами. Вы должны разделить эти точки на 2 непустые группы \(A\) и \(B\), чтобы следующее условие выполнялось:

Для любых двух точек \(P\) и \(Q\), напишите Евклидово расстояние между ними на доске: если они принадлежат одной и той же группе — желтым цветом, а если различным группам — синим цветом. Тогда ни одное желтое число не должно равняться ни одному синему числу.

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

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

Первая строка содержит одно целое число \(n\) \((2 \le n \le 10^3)\) — количество точек.

\(i\)-я из следующих \(n\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(-10^6 \le x_i, y_i \le 10^6\)) — координаты \(i\)-й точки.

Гарантируется, что все \(n\) точек попарно различны.

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

В первой строке, выведите \(a\) (\(1 \le a \le n-1\)) — количество точек в группе \(A\).

Во второй строке, выведите \(a\) чисел — номера точек, которые вы берете в группу \(A\).

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

Примечание

В первом примере, мы берем точку \((0, 0)\) в группу \(A\), а точки \((0, 1)\) и \((1, 0)\) в группу \(B\). Таким образом, на доске будет написано \(1\) желтое число \(\sqrt{2}\) и \(2\) синих числа \(1\).

Во втором примере, мы берем точки \((0, 1)\) и \((0, -1)\) в группу \(A\), а точки \((-1, 0)\) и \((1, 0)\) в группу \(B\). Таким образом, на доске будет написано \(2\) желтых числа \(2\) и \(4\) синих числа \(\sqrt{2}\).

G. Подмножество с суммой ноль

графы Конструктив математика поиск в глубину и подобное *2700

Вам даны \(n\) целых чисел \(a_1, a_2, \dots, a_n\), причем для каждого \(1\le i \le n\) выполняется \(i-n\le a_i\le i-1\).

Найдите какое-то непустое подмножество этих чисел, сумма которых равна \(0\). Можно показать, что при данных ограничениях такое подмножество существует. Если существуют несколько подмножеств с суммой ноль, вы можете вывести любое из них.

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

Во входных данных находятся несколько (не меньше одного) тестовых случаев. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^6\)) — количество тестовых случаев. Далее следуют описания тестовых случаев.

Первая строка описания тестового случая содержит единственное целое число \(n\) (\(1\le n \le 10^6\)).

Вторая строка описания тестового случая содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(i-n \le a_i \le i-1\)).

Гарантируется, что сумма значений \(n\) по всем тестовым случаям не превосходит \(10^6\).

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

Для каждого теста, выведите две строки.

В первой строке выведите \(s\) (\(1\le s \le n\)) — количество элементов в вашем подмножестве.

В второй строке выведите \(s\) чисел \(i_1, i_2, \dots, i_s\) (\(1\le i_k \le n\)). Все числа должны быть попарно различными, а сумма \(a_{i_1} + a_{i_2} + \dots + a_{i_s}\) должна быть равна \(0\). Если существуют несколько подмножеств с суммой ноль, вы можете вывести любое из них.

Примечание

В первом примере, сумма равна \(a_1 = 0\).

Во втором примере, сумма равна \(a_1 + a_4 + a_3 + a_2 = 0\).

I. Ксорим на фигурах

бпф Конструктив математика *3500

Дано целое число \(k\) и доска \(2^k \times 2^k\), в клетках которой записаны числа, клетка \((i, j)\) изначально содержит число \(a_{ij}\). Доска считается тором, то есть, клетка справа от \((i, 2^k)\) это \((i, 1)\), а клетка вниз от \((2^k, i)\) это \((1, i)\). Также дана клетчатая фигурка \(F\), состоящая из \(t\) клеток, где \(t\) нечетное. \(F\) не обязана быть связной.

Мы можем выполнять следующую операцию: положить \(F\) на доску (разрешены только параллельные переносы, повороты и симметрии запрещены). Теперь выберите произвольное неотрицательное число \(p\). После этого, для каждой клетки \((i, j)\), покрытой \(F\), замените \(a_{ij}\) на \(a_{ij}\oplus p\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Более формально, пусть \(F\) задана клетками \((x_1, y_1), (x_2, y_2), \dots, (x_t, y_t)\). Тогда вы можете проделать следующую операцию: выбрать любые \(x, y\) с \(1\le x, y \le 2^k\), любое неотрицательное число \(p\), и для каждого \(i\) от \(1\) до \(n\) заменить число в клетке \((((x + x_i - 1)\bmod 2^k) + 1, ((y + y_i - 1)\bmod 2^k) + 1)\) на \(a_{((x + x_i - 1)\bmod 2^k) + 1, ((y + y_i - 1)\bmod 2^k) + 1}\oplus p\).

Мы хотим сделать все числа равными \(0\). Можем ли мы этого достичь? Если да, то найдите наименьшее возможное число операций, с помощью которых этого можно добиться.

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

Первая строка содержит единственное целое число \(k\) (\(1 \le k \le 9\)).

\(i\)-я из следующих \(2^k\) строк содержит \(2^k\) целых чисел \(a_{i1}, a_{i2}, \dots, a_{i2^k}\) (\(0 \le a_{ij} < 2^{60}\)) — изначальные значения чисел в \(i\)-й строке доски.

Следующая строка содержит единственное целое число \(t\) (\(1\le t \le \min(99, 4^k)\), \(t\) нечетное) — количество клеток фигуры.

\(i\)-я из следующих \(t\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le 2^k\)), описывающих позицию \(i\)-й клетки фигуры.

Гарантируется, что все клетки различны, но не гарантируется, что фигура связная.

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

Если невозможно сделать все числа на доске равными \(0\) с этими операциями, выведите \(-1\).

Иначе, выведите единственное число — минимальное количество операций, необходимых, чтобы это сделать. Можно показать, что если возможно сделать все числа равными \(0\), это можно сделать за не более чем \(10^{18}\) операций.

Примечание

Фигурка и операции для примера приведены ниже:

B. Робот-cнегоход

жадные алгоритмы Конструктив реализация *1200

Недавно вы купили робота-снегохода и принесли его домой. Ваш дом — это клетка \((0, 0)\) на бесконечной координатной сетке.

Вы также получили последовательность инструкций этого робота. Она записана в виде строки \(s\), состоящей из символов 'L', 'R', 'U' и 'D'. Если сейчас робот находится в клетке \((x, y)\), он может передвинуться в одну из смежных клеток (зависит от текущей инструкции).

  • Если текущая инструкция — 'L', тогда робот может передвинуться влево в \((x - 1, y)\);
  • если текущая инструкция — 'R', тогда робот может передвинуться вправо в \((x + 1, y)\);
  • если текущая инструкция — 'U', тогда робот может передвинуться вверх в \((x, y + 1)\);
  • если текущая инструкция — 'D', тогда робот может передвинуться вниз в \((x, y - 1)\).

Вы заметили предупреждение на последней странице руководства: если робот посетит какую-то клетку (кроме \((0, 0)\)) дважды, то он сломается.

Таким образом, последовательность инструкций является корректной, если робот начинает в клетке \((0, 0)\), выполняет заданные инструкции, не посещает никакую клетку, кроме \((0, 0)\), два или более раз и заканчивает свой путь в клетке \((0, 0)\). Также клетка \((0, 0)\) должна быть посещена не более двух раз: в начале и в конце (если путь пустой, то она будет посещена только единожды). Например, следующие последовательности инструкций являются корректными: «UD», «RL», «UUURULLDDDDLDDRRUU», а следующие являются некорректными: «U» (конечная клетка не равна \((0, 0)\)) и «UUDD» (клетка \((0, 1)\) посещается дважды).

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

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

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

Вам необходимо ответить на \(q\) независимых наборов входных данных.

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

Первая строка входных данных содержит одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^4\)) — количество наборов входных данных.

Следующие \(q\) строк содержат наборы входных данных. \(i\)-й набор входных данных задан строкой \(s\), состоящей из не менее, чем \(1\) и не более, чем \(10^5\) символов 'L', 'R', 'U' и 'D' — изначальной последовательности инструкций.

Гарантируется, что сумма \(|s|\) (где \(|s|\) — длина \(s\)) не превосходит \(10^5\) по всем наборам входных данных (\(\sum |s| \le 10^5\)).

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

Выведите ответ на каждый набор входных данных. В первой строке выведите максимальное количество оставшихся инструкций. Во второй строке выведите корректную последовательность оставшихся инструкций \(t\), которую робот сможет выполнить. Ходы выполняются слева направо в порядке выведенной последовательности. Если существует несколько возможных ответов, выведите любой. Если ответ равен \(0\), вам разрешается вывести пустую строку (но вы можете не выводить ее).

Примечание

В первом наборе входных данных существует только два правильных ответа: «LR» и «RL».

Картинка, соответствующая второму набору входных данных:

Заметьте, что направление обхода неважно

Другим корректным ответом на третий набор входных данных является «URDDLLLUURDR».

E. Четыре камня

Конструктив *3500

На бесконечной прямой расположено четыре камня в целочисленных координатах \(a_1, a_2, a_3, a_4\). Цель — переместить камни в позиции с координатами \(b_1, b_2, b_3, b_4\). Порядок камней не важен, то есть камень из любой позиции \(a_i\) может оказаться в любой из позиций \(b_j\), если в итоге каждая позиция содержит нужное количество камней (то есть, если координата \(x\) встречается \(k\) раз среди чисел \(b_1, \ldots, b_4\), в конце в позиции \(x\) должно быть ровно \(k\) камней).

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

Найдите любую последовательность операций, приводящую к цели, или определите, что это невозможно. Ваша последовательность не обязана быть кратчайшей, но может содержать не более \(1000\) операций.

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

В первой строке записано четыре целых числа \(a_1, \ldots, a_4\) (\(-10^9 \leq a_i \leq 10^9\)) — исходные позиции камней. Любое количество камней могут находиться в одной точке.

Во второй строке записано четыре целых \(b_1, \ldots, b_4\) (\(-10^9 \leq b_i \leq 10^9\)) — необходимые позиции камней. Любое количество из этих позиций могут находится в одной точке.

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

Если не существует последовательности операций, приводящей к цели, выведите одно число \(-1\). В противном случае, в первой строке выведите одно целое число \(k\) (\(0 \leq k \leq 1000\)) — количество операций в вашей последовательности. В следующих \(k\) строках опишите операции. \(i\)-я из этих строк должна содержать два целых числа \(x_i\) и \(y_i\) (\(x_i \neq y_i\)) — координата перемещаемого камня и координата центра симметрии для \(i\)-й операции соответственно.

Перед каждой операцией \(i\) в координатах \(x_i\) и \(y_i\) должно быть хотя бы по одному камню, и новая координата камня \(2y_i - x_i\) не должна превосходить \(10^{18}\) по абсолютной величине.

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

E. Тесты для задачи D

Деревья Конструктив поиск в глубину и подобное разделяй и властвуй *2200

Нам было очень сложно придумать тесты для задачи D. Чтобы подготовить сильные тесты, нам пришлось решить следующую задачу.

Для заданного неориентированного помеченного дерева, состоящего из \(n\) вершин, найдите набор отрезков, такой что:

  1. концы каждого отрезка являются целыми числами от \(1\) до \(2n\), и каждое целое число от \(1\) до \(2n\) должно встречаться как конец ровно одного отрезка;
  2. все отрезки — невырожденные;
  3. для каждой такой пары чисел \((i, j)\), что \(i \ne j\), \(i \in [1, n]\) и \(j \in [1, n]\), вершины \(i\) и \(j\) соединены ребром тогда и только тогда, когда отрезки \(i\) и \(j\) пересекаются, но ни отрезок \(i\) не содержится полностью в отрезке \(j\), ни отрезок \(j\) полностью не содержится в отрезке \(i\).

А вы можете решить эту задачу?

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

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)) — количество вершин в дереве.

Следующие \(n - 1\) строк содержат по два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\), \(x_i \ne y_i\)), описывающие концы \(i\)-го ребра.

Гарантируется, что данный граф является деревом.

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

Выведите \(n\) пар целых чисел, \(i\)-я пара должна содержать два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i < r_i \le 2n\)) — концы \(i\)-го отрезка. Все \(2n\) целых чисел, которые вы вывели, должны быть различными.

Гарантируется, что ответ всегда существует.

B. Строка

Конструктив Перебор реализация Строки строковые суфф. структуры хэши *2100

Однажды на уроке информатики Аня и Маша прошли лексикографический порядок.

Строка x лексикографически меньше строки y, если либо x является префиксом y (и при этом x ≠ y), либо существует такое i (1 ≤ i ≤ min(|x|, |y|)), что xi < yi, и для любого j (1 ≤ j < i) xj = yj. Здесь |a| обозначает длину строки a. Лексикографическое сравнение строк реализует оператор < в современных языках программирования.

Учительница задала Ане и Маше домашнее задание. Она выдала им строку длины n. Из этой строки требуется выписать все подстроки, в том числе всю строчку целиком и все одинаковые подстроки (например, из строки «aab» требуется выписать «a», «a», «aa», «ab», «aab», «b»). После этого полученные строки требуется расположить в лексикографическом порядке. А чтобы не проверять все эти строки, хитрая учительница попросила предъявить лишь k-тую строку из этого списка. Помогите Ане с Машей выполнить домашнее задание.

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

В первой строке задана непустая строка, состоящая из строчных латинских букв («a»-«z»), длины не больше, чем 105. Во второй строке задано единственное целое число k (1 ≤ k ≤ 105).

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

Выведите строку, которую требуется выписать Ане с Машей — лексикографически k-ую подстроку заданной строки. Если у строки всего меньше, чем k подстрок, выведите строку «No such line.» (без кавычек).

Примечание

Во втором тесте перед строкой «bc» идут строки «a», «ab», «abc», «b».

D. Числа

Конструктив реализация *2000

Однажды Ане в школе дали задание — расставить несколько чисел по кругу так, чтобы любые два соседних числа отличались ровно на 1. Аня раздобыла несколько чисел и расставила их по кругу, пытаясь выполнить задание. Затем она захотела проверить, правильно ли она расставила числа, но тут пришла ее младшая сестренка Маша, и все числа перемешала. Аня была очень сердита, но было поздно — задание было безнадежно испорчено. Скажите Ане хотя бы, могла ли она его в принципе сделать, используя все эти числа?

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

В первой строке записано целое число n — количество чисел, которые были у Ани (3 ≤ n ≤ 105). В следующей строке через пробел записаны сами числа. Все числа целые и находятся в диапазоне от 1 до 109.

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

Выведите в единственной строке «YES» (без кавычек), если Аня могла правильно выполнить задание, используя все (обязательно все) эти числа. Если Аня не могла сделать задание, как бы ни старалась, выведите «NO» (без кавычек).

F. Межгалактическая головоломка

Комбинаторика Конструктив математика *3400

Вы межгалактический хирург, и у вас есть инопланетный пациент. Для целей этой задачи мы будем моделировать тело этого пациента, используя прямоугольную сетку размером \(2 \times (2k + 1)\). Инопланетянин имеет \(4k + 1\) различных органов, пронумерованных целыми числами от \(1\) до \(4k + 1\).

У здоровых инопланетян органы устроены особым образом. Например, вот как будут расположены органы здорового инопланетянина, если смотреть сверху, для \(k = 4\):

Здесь E обозначает пустое место.

В общем случае у здорового инопланетянина первая строка содержит органы от \(1\) до \(2k + 1\) (в порядке слева направо) и вторая строка содержит органы от \(2k + 2\) до \(4k + 1\) (в порядке слева направо) и пустое место после этого, в конце второй строки.

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

  • Вы можете поменять пустую позицию E с любым органом непосредственно слева или справа от нее (если они существуют). Вы делаете это, перемещая рассматриваемый орган в пустое место;
  • Вы можете поменять пустую позицию E с любым органом непосредственно сверху или снизу от нее (если они существуют). Это можно сделать только если пустая позиция в самой левой колонке, самой правой колонке или центральной колонке. Аналогично вы перемещаете рассматриваемый орган в пустое место.

Вашей задачей является получить последовательность шагов которые вы должны сделать при операции, чтобы вернуть все \(4k + 1\) органов пациента на правильные места. Если это сделать невозможно, вы должны сообщить об этом.

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

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 4\)), количество тестовых случаев. В следующих строках находится описание тестовых случаев.

Каждый тестовый случай содержит три строки. Первая строка содержит единственное целое число \(k\) (\(1 \le k \le 15\)), которое задает размер сетки. Затем следует две строки. Каждая из них содержит \(2k + 1\) целое число или символ E. Они описывают первую и вторую строку органов, соответственно. Гарантируется, что все \(4k + 1\) органов присутствуют и также был ровно один символ E.

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

Для каждого тестового случая выведите сначала строку, содержащую:

  • SURGERY COMPLETE если возможно вернуть все органы на изначальные места по правилам;
  • SURGERY FAILED если это невозможно.

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

Строкой ходов (возможно пустой) является строка из символов u, d, l или r, обозначающие действия замены пустой позиции с органом непосредственно сверху, снизу, слева или справа, соответсвенно. Выведите последовательность ходов в следующей строке в этом формате.

Для удобства, вы можете использовать сокращения для уменьшения размера вывода. Вы можете использовать большие латинские буквы как сокращения последовательности команд. Например, вы можете использовать T для представления строки lddrr. Эти сокращения могут использоваться внутри других сокращений! Например, вы можете использовать E для того, чтобы обозначить TruT, и так далее.

Вы можете использовать любое количество больших латинских букв (включая ноль) как сокращения. Единственные требования это:

  • Суммарная длина выведенных строк для одного тестового случая не превосходит \(10^4\);
  • Не должно быть циклов на сокращениях, которые достижимы из главной последовательности;
  • Итоговая последовательность конечна после раскрытия всех замен. Заметьте, что итоговая последовательность (после раскрытия) может быть длиннее чем \(10^4\), единственное ограничение это конечность.

Например, если T = lddrr, E = TruT и R = rrr, тогда TurTlER раскроется в:

  • TurTlER
  • lddrrurTlER
  • lddrrurlddrrlER
  • lddrrurlddrrlTruTR
  • lddrrurlddrrllddrrruTR
  • lddrrurlddrrllddrrrulddrrR
  • lddrrurlddrrllddrrrulddrrrrr

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

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

Ваша последовательность не обязана получиться кратчайшей. Любая подходящая последовательность перемещений (удовлетворяющая всем ограничениям) будет принята.

Примечание

Так три сокращения выглядят в первом тестовом случае:

  • R = SrS
  • S = rr
  • I = lldll

Тогда последовательность команд IR раскроется в:

  • IR
  • lldllR
  • lldllSrS
  • lldllrrrS
  • lldllrrrrr

D. Заколдованный артефакт

интерактив Конструктив Строки *2300

Это интерактивная задача.

Пройдя последний уровень зачарованного храма, вы получили могущественный артефакт 255-го уровня. Не стоит спешить радоваться, ведь на данном артефакте установлена мощная руна, которую можно разрушить единственным секретным заклинанием \(s\). Именно это заклинание вам и предстоит найти.

Определим заклинание как некоторую непустую строку, состоящую только из букв a и b.

В любой момент времени Вы можете произнести произвольное непустое заклинание \(t\), при этом руна на артефакте начнёт сопротивляться. Сопротивлением руны называется редакционное расстояние между строками, задающих произнесённое заклинание \(t\) и искомое секретное заклинание \(s\), при произнесении которого руна разрушается.

Редакционным расстоянием двух строк \(s\) и \(t\) называется величина, равная минимальному количеству односимвольных операций замены, вставки и удаления символов в \(s\) для получения \(t\). К примеру, расстояние между ababa и aaa равно \(2\), aaa и aba — \(1\), bbaba и abb — \(3\). Редакционное расстояние равно \(0\) тогда и только тогда, когда строки равны.

Также стоит учитывать, что у артефакта есть предел сопротивляемости — если вы произнесёте более чем \(n + 2\) заклинаний, где \(n\) — это длина заклинания \(s\), то руна заблокируется.

Таким образом, требуется за \(n + 2\) или меньшее количество заклинаний разрушить руну, находящуюся на Вашем артефакте. Следует учитывать, что искомое разрушающее заклинание \(s\) также должно быть учтено среди этих \(n + 2\) заклинаний.

Учтите, что длина \(n\) разрушающего руну заклинания \(s\) вам заранее не известна. Известно только то, что его длина \(n\) не превосходит \(300\).

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

Взаимодействие происходит с помощью запросов.

Каждый запрос состоит из единственной непустой строки \(t\) — заклинания, которое вы хотите произнести. Длина строки \(t\) не должна превышать \(300\). Строка должна состоять только из букв a и b.

В ответ на запрос вы получите сопротивление руны — редакционное расстояние между строками, задающих произнесённое заклинание \(t\) и искомое заклинание \(s\), при произнесении которого руна разрушается. Помните, что \(s\) содержит только буквы a и b.

После разрушения руны ваша программа должна немедленно завершиться. Руна разрушается, если её сопротивление достигает значения \(0\). После получения значения \(0\) ваша программа должна завершиться штатным образом.

В этой задаче интерактор не адаптивный. Это означает, что в рамках одного теста искомое заклинание \(s\) не меняется.

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

При превышении количества заклинаний (то есть числа \(n + 2\), где \(n\) — длина заклинания \(s\), это число вам неизвестно) будет выведен вердикт неправильный ответ.

Ваше решение может получить вердикт Решение «зависло», если вы ничего не выведете или забудете сбросить буфер вывода.

Чтобы сбросить буфер вывода вам нужно сделать следующее сразу после вывода запроса и символа конца строки:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • см. документацию других языков.

Взломы

Используйте следующий формат для взломов:

В единственной строке выведите строку \(s\) (\(1 \le |s| \le 300\)) из букв a и b, задающую разрушающее заклинание.

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

E. Тортик - ложь

графы Конструктив поиск в глубину и подобное Структуры данных *2400

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

Ох, кто-то уже разрезал торт! Мы просили их дождаться вас, но они не послушали. Если поторопитесь, успеете взять кусочек. Вы, конечно, перед тем, как попробовать торт, задумались, как торт был разрезан.

Известно, что торт изначально представлял собой правильный \(n\)-угольник, каждая вершина которого имела уникальный номер от \(1\) до \(n\). Вершины были пронумерованы в некотором произвольном порядке.

Каждый кусок торта — это треугольник. Торт разрезали на \(n - 2\) куска следующим образом: каждый раз проводили один разрез ножом (от вершины до вершины) такой, что от текущего торта отделялся ровно один треугольный кусок, а оставшаяся часть продолжала составлять выпуклый многоугольник. Иными словами, каждый раз выбирали три подряд идущие вершины многоугольника и отрезали соответствующий треугольник.

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

Пример разрезания 6-угольного торта.

Вам задан набор получившихся \(n-2\) треугольных кусочков в произвольном порядке. Вершины каждого из кусочков записаны в произвольном порядке — по или против часовой стрелки. Каждый кусочек задается тремя числами — номерами соответствующих ему вершин \(n\)-угольного торта.

Например, для ситуации с рисунком выше вам мог быть задан набор кусочков: \([3, 6, 5], [5, 2, 4], [5, 4, 6], [6, 3, 1]\).

Вас интересуют два вопроса.

  • Какая была нумерация вершин \(n\)-угольного торта?
  • В каком порядке отрезались кусочки?

Формально, вам предстоит найти две перестановки \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\)) и \(q_1, q_2, \dots, q_{n - 2}\) (\(1 \le q_i \le n - 2\)) такие, что если вершины торта пронумерованы числами \(p_1, p_2, \dots, p_n\) в порядке по или против часовой стрелки, то при отрезании кусков торта в порядке \(q_1, q_2, \dots, q_{n - 2}\) всегда отрезается треугольный кусок так, что оставшаяся часть образует один выпуклый многоугольник.

Например, для рисунка выше искомыми перестановками могли бы быть: \(p=[2, 4, 6, 1, 3, 5]\) (или любой её циклический сдвиг, или её переворот и после этого любой циклический сдвиг) и \(q=[2, 4, 1, 3]\).

Напишите программу, которая по заданным треугольным кусочкам находит любую подходящую пару перестановок \(p\) и \(q\).

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

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следуют \(t\) независимых наборов входных данных.

Первая строка каждого набора состоит из одного целого числа \(n\) (\(3 \le n \le 10^5\)) — количество вершин в торте.

Далее следуют \(n - 2\) строк, описывающих номера вершин кусков торта: каждая строка состоит из трех различных целых чисел \(a, b, c\) (\(1 \le a, b, c \le n\)) — номера вершин куска торта, записанные в произвольном порядке. Сами куски тоже заданы в произвольном порядке.

Гарантируется, что ответ на каждый из тестов существует. Также гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

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

Выведите \(2t\) строк — ответы на заданные \(t\) наборов в порядке их записи во входных данных. Каждый ответ должен состоять из \(2\) строк.

В первой строке ответа на набор входных данных выведите \(n\) различных чисел \(p_1, p_2, \dots, p_n\)(\(1 \le p_i \le n\)) — номера вершин торта в порядке по или против часовой стрелки. Просмотр вершин торта можно начать с любой из них.

Во второй строке ответа на набор входных данных выведите \(n - 2\) различных чисел \(q_1, q_2, \dots, q_{n - 2}\)(\(1 \le q_i \le n - 2\)) — порядок отрезания кусков торта. Номер куска торта соответствует его номеру во входных данных.

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

C. Друзья и подарки

Конструктив математика Структуры данных *1500

\(n\) друзей хотят подарить друг другу подарки на Новый год. Каждый друг должен подарить ровно один подарок и получить ровно один подарок. Друг не может подарить подарок самому себе.

Для каждого друга известно значение \(f_i\): оно или равно \(f_i = 0\), если \(i\)-й друг не знает, кому он хочет подарить подарок, или равно \(1 \le f_i \le n\), если \(i\)-й друг хочет подарить подарок другу \(f_i\).

Вы хотите заполнить неизвестные значения (\(f_i = 0\)) таким образом, чтобы каждый друг подарил ровно один подарок и получил ровно один подарок, а также не было друга, который дарит подарок сам себе. Гарантируется, что изначальная информация не противоречива.

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

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

Первая строка входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество друзей.

Вторая строка входных данных содержит \(n\) целых чисел \(f_1, f_2, \dots, f_n\) (\(0 \le f_i \le n\), \(f_i \ne i\), все \(f_i \ne 0\) различны), где \(f_i\) или равно \(f_i = 0\), если \(i\)-й друг не знает, кому он хочет подарить подарок, или равно \(1 \le f_i \le n\), если \(i\)-й друг хочет подарить подарок другу \(f_i\). Также гарантируется, что есть хотя бы два значения \(f_i = 0\).

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

Выведите \(n\) целых чисел \(nf_1, nf_2, \dots, nf_n\), где \(nf_i\) должно быть равно \(f_i\), если \(f_i \ne 0\), или номеру друга, которому \(i\)-й друг хочет подарить подарок. Все значения \(nf_i\) должны быть различны, \(nf_i\) не может быть равно \(i\). Каждый друг должен подарить ровно один подарок и получить ровно один подарок, а также не должно быть друга, который дарит подарок сам себе.

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

F. Гирлянда своими руками

Деревья жадные алгоритмы Конструктив *2200

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

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

У каждой лампочки есть своя яркость, причем яркость \(i\)-й лампочки равна \(2^i\). Назовем важностью провода суммарную яркость тех лампочек, которые окажутся отсоединены от источника энергии, если этот провод (и только его) удалить. Естественно, более важные провода должны быть более надежными.

Поликарп нарисовал схему гирлянды, которую он хочет спаять (на схеме указаны все \(n\) лампочек и \(n - 1\) проводов, а также отмечена лампочка, которая будет подключена к электросети; провода расположены так, что энергия может передаваться до всех лампочек). После этого Поликарп посчитал важность каждого провода, пронумеровал их от \(1\) до \(n - 1\) в порядке уменьшения важности, а затем (с учётом новой нумерации проводов) для каждого провода записал номер его главной лампочки.

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

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

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

Во второй строке заданы \(n - 1\) целых чисел \(a_1\), \(a_2\), ..., \(a_{n - 1}\) (\(1 \le a_i \le n\)), где \(a_i\) — номер главной лампочки для \(i\)-го провода (провода пронумерованы в порядке уменьшения важности).

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

Если схему восстановить невозможно, выведите одно целое число: \(-1\).

В противном случае выведите схему следующим образом. В первой строке выведите одно целое число \(k\) (\(1 \le k \le n\)) — номер лампочки, подключенной к электросети. Затем выведите \(n - 1\) строк, в каждой из которых должны быть заданы два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\), \(x_i \ne y_i\)) — номера лампочек, соединенных некоторым проводом. Описания проводов (и номера лампочек, соединенных проводом) могут быть выведены в любом порядке. Вывод должен соответствовать некоторой схеме, по которой Поликарп мог бы выписать список чисел \(a_1\), \(a_2\), ..., \(a_{n - 1}\). Если таких схем несколько, выведите любую из них.

Примечание

Схема для первого примера (R обозначает лампу, подключенную к сети; числа на проводах обозначают их важность):

E. Удали один отрезок

графы Деревья дп Конструктив Перебор сортировки Структуры данных *2300

На координатной прямой \(Ox\) заданы \(n\) отрезков \([l_1, r_1]\), \([l_2, r_2]\), ..., \([l_n, r_n]\). Отрезок \([l, r]\) покрывает все точки от \(l\) до \(r\) включительно, то есть такие \(x\), что \(l \le x \le r\).

Отрезки могут располагаться произвольным образом  — вкладываться друг в друга, совпадать и т.п. Отрезки могут вырождаться в точку, то есть допустимо, что \(l_i=r_i\).

Объединением набора отрезков называется такой минимальный набор отрезков, который покрывает в точности тот же набор точек, что и заданный набор. Например:

  • если \(n=3\) и отрезки имеют вид \([3, 6]\), \([100, 100]\), \([5, 8]\), то их объединение состоит из \(2\) отрезков: \([3, 8]\) и \([100, 100]\);
  • если \(n=5\) и отрезки имеют вид \([1, 2]\), \([2, 3]\), \([4, 5]\), \([4, 6]\), \([6, 6]\) то их объединение состоит из \(2\) отрезков: \([1, 3]\) и \([4, 6]\).

Очевидно, что объединение — это набор непересекающихся отрезков.

Требуется удалить ровно один отрезок из заданных \(n\) таким образом, чтобы количество отрезков в объединении оставшихся \(n-1\) было наибольшим.

Например, если \(n=4\) и отрезки имеют вид \([1, 4]\), \([2, 3]\), \([3, 6]\), \([5, 7]\), то:

  • если из набора удалить первый отрезок, то останутся отрезки \([2, 3]\), \([3, 6]\), \([5, 7]\), объединение которых состоит из \(1\) отрезка;
  • если из набора удалить второй отрезок, то останутся отрезки \([1, 4]\), \([3, 6]\), \([5, 7]\), объединение которых состоит из \(1\) отрезка;
  • если из набора удалить третий отрезок, то останутся отрезки \([1, 4]\), \([2, 3]\), \([5, 7]\), объединение которых состоит из \(2\) отрезков;
  • если из набора удалить четвертый отрезок, то останутся отрезки \([1, 4]\), \([2, 3]\), \([3, 6]\), объединение которых состоит из \(1\) отрезка.

Таким образом, в примере выше надо обязательно удалять третий отрезок, чтобы получить ответ \(2\).

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

Обратите внимание, что если в заданном наборе есть несколько одинаковых отрезков, то удалить вы всё-равно можете ровно один из них. То есть набор отрезков после удаления одного будет содержать ровно \(n-1\) отрезок.

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

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

Первая строка каждого набора содержит целое число \(n\) (\(2 \le n \le 2\cdot10^5\)) — количество отрезков в заданном наборе. Далее в \(n\) строках заданы сами отрезки парами целых чисел \(l_i\), \(r_i\) (\(-10^9 \le l_i \le r_i \le 10^9\)), где \(l_i\) и \(r_i\) — координаты левого и правого конца \(i\)-го отрезка, соответственно.

Отрезки заданы в произвольном порядке.

Гарантируется, что сумма значений \(n\) по всем наборам во входных данных не превосходит \(2\cdot10^5\).

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

Выведите \(t\) чисел — ответы на заданные \(t\) наборов входных данных в порядке их следования в тесте. Ответ равен максимальному количеству отрезков в объединении \(n-1\) отрезка из \(n\) заданных, если допускается удалить один любой отрезок.

B. Числа на дереве

графы Деревья жадные алгоритмы Конструктив поиск в глубину и подобное Структуры данных *1800

Евлампию подарили корневое дерево, вершины которого пронумерованы от \(1\) до \(n\). В каждой \(i\)-й вершине написано число \(a_i\). Евлампий посчитал для каждой вершины \(i\) величину \(c_i\) — количество вершин \(j\) в поддереве вершины \(i\), для которых \(a_j < a_i\).

Иллюстрация ко второму примеру, первым написано \(a_i\), а в скобках написано \(c_i\)

После нового года Евлампий не смог вспомнить, каким был его подарок! Он помнит дерево и значения \(c_i\), однако совсем забыл, какие числа \(a_i\) были написаны в вершинах. Помогите ему восстановить исходные числа!

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

В первой строке содержится целое число \(n\) \((1 \leq n \leq 2000)\) — количество вершин в дереве.

Далее в \(n\) строках идёт описание вершин дерева: в \(i\)-й строке находятся два целых числа \(p_i\) и \(c_i\) (\(0 \leq p_i \leq n\); \(0 \leq c_i \leq n-1\)), где \(p_i\) — номер родителя вершины \(i\) или \(0\) для корня дерева, а \(c_i\) — количество вершин \(j\) в поддереве вершины \(i\), для которых \(a_j < a_i\).

Гарантируется, что значения \(p_i\) задают некоторое корневое дерево из \(n\) вершин.

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

Если решение существует, то в первой строке выведите «YES», а во второй строке выведите \(n\) чисел \(a_i\) \((1 \leq a_i \leq {10}^{9})\) — искомые числа, которые были записаны в вершинах дерева. Если решений несколько, выведите любое из них. Можно показать, что если решение существует, то также существует решение, где все \(a_i\) лежат от \(1\) до \(10^9\).

Если же решения не существует, то выведите «NO».

C1. Дурдом (простая версия)

интерактив Конструктив математика Перебор *2400

Эта задача отличается от сложной версии только ограничением на суммарную длину ответов

Это интерактивная задача.

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

  • ? l r — запросить все подстроки \(s[l..r]\). При этом в ответе все подстроки будут перемешаны, а в каждой из подстрок будут перемешаны буквы.
  • ! s — сделать предположение о загаданной строке. Этот запрос нужно сделать ровно один раз, после него игра завершается. Если строка угадана, то пациент побеждает, а иначе проигрывает.

Пациенту разрешено сделать не более \(3\) запросов первого типа. Чтобы игра была не так утомительна для санитаров, существует следующее ограничение: суммарно на запросы первого типа должно быть возвращено не более \((n+1)^2\) подстрок.

Помогите пациенту выиграть и выбраться из дурдома!

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

Обратите внимание, что в каждом тесте строка фиксирована и не меняется в ходе игры. Иными словами, интерактор не адаптивен.

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

Первая и единственная строка содержит число \(n\) (\(1 \le n \le 100\)) — длину загадываемой строки.

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

Вы начинаете своё взаимодействие, считав \(n\).

Для того, чтобы задать вопрос о подстроке с \(l\) по \(r\) включительно (\(1 \le l \le r \le n\)) выведите в отдельной строке

? l r

В ответ вы получите все подстроки строки \(s[l..r]\) в случайном порядке, каждую ровно один раз. В каждой из подстрок будут случайным образом перемешаны буквы.

В случае, если вы сделаете некорректный запрос, зададите более \(3\) запросов данного типа, или в результате заданных запросов Вам будет возвращено суммарно более \((n+1)^2\) подстрок, то ваше решение получит вердикт Неправильный ответ.

Для того, чтобы сделать предположение о загаданной строке \(s\) выведите в отдельной строке

! s

После вывода каждого запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Если вы получили строку - (дефис) в качестве ответа на какой-либо запрос, то вам надо завершить программу штатным образом с кодом возврата 0 (например, сделав exit(0)). Это означает, что интерактор зафиксировал ошибку в протоколе или поведении программы. Если вы не завершите в этом случае программу штатным образом с кодом возврата 0, то можете получить любой неуспешный вердикт.

Формат взломов

Для взломов используйте следующий формат:

В первой строке должно быть единственное число \(n\) (\(1 \le n \le 100\)) — длина загадываемой строки.

Во второй строке выведите строку \(s\) — сама загадываемая строка.

C2. Дурдом (сложная версия)

интерактив Конструктив математика Перебор хэши *2800

Эта задача отличается от простой версии только ограничением на суммарную длину ответов

Это интерактивная задача.

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

  • ? l r — запросить все подстроки \(s[l..r]\). При этом в ответе все подстроки будут перемешаны, а в каждой из подстрок будут перемешаны буквы.
  • ! s — сделать предположение о загаданной строке. Этот запрос нужно сделать ровно один раз, после него игра завершается. Если строка угадана, то пациент побеждает, а иначе проигрывает.

Пациенту разрешено сделать не более \(3\) запросов первого типа. Чтобы игра была не так утомительна для санитаров, существует следующее ограничение: суммарно на запросы первого типа должно быть возвращено не более \(\left\lceil 0.777(n+1)^2 \right\rceil\) подстрок (\(\lceil x \rceil\) — округление вверх числа \(x\)).

Помогите пациенту выиграть и выбраться из дурдома!

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

Обратите внимание, что в каждом тесте строка фиксирована и не меняется в ходе игры. Иными словами, интерактор не адаптивен.

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

Первая и единственная строка содержит число \(n\) (\(1 \le n \le 100\)) — длину загадываемой строки.

Протокол взаимодействия

Вы начинаете своё взаимодействие, считав \(n\).

Для того, чтобы задать вопрос о подстроке с \(l\) по \(r\) включительно (\(1 \le l \le r \le n\)) выведите в отдельной строке

? l r

В ответ вы получите все подстроки строки \(s[l..r]\) в случайном порядке, каждую ровно один раз. В каждой из подстрок будут случайным образом перемешаны буквы.

В случае, если вы сделаете некорректный запрос, зададите более \(3\) запросов данного типа, или в результате заданных запросов Вам будет возвращено суммарно более \(\left\lceil 0.777(n+1)^2 \right\rceil\) подстрок, то ваше решение получит вердикт Неправильный ответ.

Для того, чтобы сделать предположение о загаданной строке \(s\) выведите в отдельной строке

! s

После вывода каждого запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Если вы получили строку - (дефис) в качестве ответа на какой-либо запрос, то вам надо завершить программу штатным образом с кодом возврата 0 (например, сделав exit(0)). Это означает, что интерактор зафиксировал ошибку в протоколе или поведении программы. Если вы не завершите в этом случае программу штатным образом с кодом возврата 0, то можете получить любой неуспешный вердикт.

Формат взломов.

Для взломов используйте следующий формат:

В первой строке должно быть единственное число \(n\) (\(1 \le n \le 100\)) — длина загадываемой строки.

Во второй строке выведите строку \(s\) – сама загадываемая строка.

F. Гарри Гончар

бпф дп Конструктив математика Перебор реализация *3100

Как известно, чтобы победить лорда Волан-де-Морта, Гарри необходимо сперва уничтожить все крестражи. Последний крестраж лорда Сами-Знаете-кого представляет собой массив \(a\) состоящий из \(n\) целых чисел, который Гарри необходимо уничтожить. Массив считается уничтоженным, если все его элементы равны 0. Чтобы его уничтожить, Гарри может производить два типа операций:

  1. выбрать индекс \(i\) (\(1 \le i \le n\)), целое число \(x\) и вычесть из \(a_i\) число \(x\).
  2. выбрать индексы \(i\) и \(j\) (\(1 \le i, j \le n; i \ne j\)), целое число \(x\) и вычесть из \(a_i\) число \(x\), а из \(a_j\) — число \(x + 1\).

Обратите внимание, что \(x\) может быть произвольным, в том числе и отрицательным.

У Гарри осталось совсем немного времени. Помогите ему и узнайте, какое минимальное число операций с массивом ему придётся совершить, чтобы уничтожить массив и покончить с лордом Волан-де-Мортом!

Входные данные

Первая строка входных данных содержит одно целое число \(n\) — количество элементов в массиве \(a\) (\(1 \le n \le 20\)).

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) — элементы массива (\(-10^{15} \le a_i \le 10^{15}\)).

Выходные данные

Выведите одно число — минимальное количество действий, за которое Гарри сможет уничтожить массив \(a\).

Примечание

В первом примере можно три раза применить операцию первого типа к массиву.

Во втором примере можно два раза применить операцию второго типа: сначала выбрать \(i = 2, j = 1, x = 4\) и получить массив \((0, -1, -2)\), затем выбрать \(i = 3, j = 2, x = -2\) чтобы уничтожить массив.

В третьем примере ничего делать не надо, так как массив уже состоит из нулей.

F. Красно-синий граф

Конструктив Потоки *2900

Вам задан двудольный граф: первая доля графа содержит \(n_1\) вершин, вторая — \(n_2\) вершин, а также в графе \(m\) ребер. Граф может содержать кратные ребра.

Первоначально, все ребра графа бесцветные. Каждое ребро вы можете либо оставить бесцветным (это бесплатно), либо покрасить в красный (стоимость данного действия \(r\) монет), либо покрасить в синий (за \(b\) монет). Никакое ребро не может быть покрашено в оба цвета одновременно.

Также в графе вершины разбиваются на три типа — бесцветные, красные и синие. Цветные вершины добавляют дополнительные ограничения на раскраску ребер:

  • у каждой красной вершины количество смежных с ней красных ребер должно быть строго больше, чем смежных с ней синих ребер;
  • у каждой синей вершины количество смежных с ней синих ребер должно быть строго больше, чем смежных с ней красных ребер.

Бесцветные вершины не накладывают никаких ограничений.

Ваша задача — раскрасить некоторые (возможно, никакие) ребра так, чтобы выполнялись заданные ограничения, и среди всех возможных раскрасок выбрать такую, суммарная стоимость которой минимальна.

Входные данные

В первой строке заданы пять целых чисел \(n_1\), \(n_2\), \(m\), \(r\) и \(b\) (\(1 \le n_1, n_2, m, r, b \le 200\)) — количество вершин в первой доле, количество вершин во второй доле, количество ребер, стоимость покраски одного ребра в красный и стоимость покраски в синий соответственно.

Во второй строке задана одна строка из \(n_1\) символов. Каждый символ — это U, R или B. Если \(i\)-й символ — это U, то \(i\)-я вершина первой доли бесцветная; R соответствует красной вершине, а B — синей вершине.

В третьей строке задана строка из \(n_2\) символов. Каждый символ — это также U, R или B. Данная строка задает цвета вершин второй доли аналогичным образом.

Далее следуют \(m\) строк: в \(i\)-й строке заданы два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i \le n_1\), \(1 \le v_i \le n_2\)), задающие ребро между вершиной \(u_i\) из первой доли и вершиной \(v_i\) из второй доли.

Граф может содержать кратные ребра.

Выходные данные

Если не существует раскраски ребер, которая удовлетворяет всем заданным ограничениям, — выведите \(-1\).

Иначе, выведите число \(c\), обозначающее минимальную суммарную стоимость раскраски, и строку из \(m\) символов. \(i\)-й символ должен быть U, если \(i\)-е ребро осталось бесцветным, R, если \(i\)-е ребро покрашено в красный, или B, если \(i\)-е ребро покрашено в синий. Если существует несколько оптимальных раскрасок — выведите любое.

B. Неприводимые анаграммы

Бинарный поиск Конструктив Строки Структуры данных *1800

Назовем две строки \(s\) и \(t\) анаграммами друг друга, если можно так переставить символы в строке \(s\), чтобы получить строку, равную \(t\).

Рассмотрим две строки \(s\) и \(t\), являющиеся анаграммами друг друга. Будем говорить, что \(t\) это приводимая анаграмма строки \(s\), если существует такое целое число \(k \ge 2\) и \(2k\) непустых строк \(s_1, t_1, s_2, t_2, \dots, s_k, t_k\), которые удовлетворяют следующим условиям:

  1. Если мы запишем в линию строки \(s_1, s_2, \dots, s_k\) в таком порядке, то получившаяся строка будет равна \(s\);
  2. Если мы запишем в линию строки \(t_1, t_2, \dots, t_k\) в таком порядке, то получившаяся строка будет равна \(t\);
  3. Для всех целых \(i\) между \(1\) и \(k\) включительно, \(s_i\) и \(t_i\) являются анаграммами.

Если таких строк не существует, тогда \(t\) называется неприводимой анаграммой строки \(s\). Обратите внимание, что этот термин определяется только в случае, когда \(s\) и \(t\) это анаграммы.

Например, рассмотрим строку \(s = \) «gamegame». Тогда строка \(t = \) «megamage» это приводимая анаграмма для \(s\), потому что мы можем выбрать, например, \(s_1 = \) «game», \(s_2 = \) «gam», \(s_3 = \) «e» и \(t_1 = \) «mega», \(t_2 = \) «mag», \(t_3 = \) «e»:

С другой стороны, можно показать, что \(t = \) «memegaga» это неприводимая анаграмма для \(s\).

Вам будет дана строка \(s\) и \(q\) запросов, каждый представляется двумя целыми числами \(1 \le l \le r \le |s|\) (где за \(|s|\) обозначается длина строки \(s\)). Для каждого запроса, вы должны определить, имеет ли подстрока строки \(s\), с \(l\)-о по \(r\)-й символ, включительно, хотя бы одну неприводимую анаграмму.

Входные данные

В первой строке находится строка \(s\), состоящая из строчных символов латинского алфавита (\(1 \le |s| \le 2 \cdot 10^5\)).

Во второй строке содержится единственное целое число \(q\) (\(1 \le q \le 10^5\))  — количество запросов.

Следующие \(q\) строк содержат по два целых числа \(l\) и \(r\) (\(1 \le l \le r \le |s|\)), обозначающие очередной запрос для подстроки \(s\), состоящей из символов с \(l\)-о по \(r\)-й.

Выходные данные

Для каждого запроса, выведите единственную строку, содержащую «Yes» (без кавычек), если соответствующая запросу подстрока имеет хотя бы одну неприводимую анаграмму и «No» (без кавычек), иначе.

Примечание

В первом тесте, в первом и третьем запросах, подстрока будет «a» и она имеет саму себя как неприводимую анаграмму, так как две и больше непустые строки, записанные вместе, не смогут дать строку «a». С другой стороны, во втором запросе, подстрока будет «aaa», которая не имеет неприводимых анаграмм: ее единственная анаграмма это она сама и мы можем выбрать \(s_1 = \) «a», \(s_2 = \) «aa», \(t_1 = \) «a», \(t_2 = \) «aa», чтобы показать, что это приводимая анаграмма.

Во втором запросе второго тестового случая, подстрока будет «abb» и она имеет, например, неприводимую анаграмму «bba».

D. Сорта кофе (сложная версия)

графы интерактив Конструктив *3000

Это сложная версия этой задачи. Вы можете найти простую версию в Div. 2 контесте. Обе версии отличаются только в ограничении на количество раз, которое вы можете попросить вашего друга попробовать кофе.

Это интерактивная задача.

Вы собираетесь поехать в другой город, где живет один из ваших друзей. В этом городе \(n\) кафе, где число \(n\) является степенью двойки. В \(i\)-м кафе варят кофе сорта \(a_i\).

Поскольку вы большой любитель кофе, перед тем, как выбрать поехать ли в этот город или нет, вы хотите узнать количество различных сортов кофе \(d\), которое варят в этом городе.

Вы не знаете значений \(a_1, \ldots, a_n\). К счастью, ваш друг хорошо запоминает события последних \(k\) дней, где \(k\) это степень двойки.

Каждый день, вы можете попросить его попробовать чашечку кофе, сваренного в кафе с номером \(c\) и он скажет, пробовал ли он кофе того же сорта в последние \(k\) дней.

Также вы можете попросить его забыть все, что он пробовал до этого. После этого он забудет все предыдущие разы, когда он пробовал кофе. Вы можете делать это не больше \(30\ 000\) раз.

Более формально, память вашего друга это некоторая очередь \(S\). Сделать запрос сходить попробовать кофе в кафе с номером \(c\) означает:

  • Сказать вам, есть ли \(a_c\) в \(S\);
  • Добавить \(a_c\) в конец очереди \(S\);
  • Если \(|S| > k\), удалить первый элемент очереди \(S\).

Запрос забывания всех посещений кафе удаляет все элементы очереди \(S\), то есть отчищает ее.

Вы можете попросить вашего друга попробовать не больше \(\dfrac{3n^2}{2k}\) чашек кофе. Найдите разнообразность города \(d\) (количество различных значений в массиве \(a\)).

Обратите внимание, что попросить вашего друга забыть все походы в кафе, что были до этого не считается среди количества запросов попросить вашего друга попробовать кофе.

В некоторых тестах поведение интерактора будет адаптивным. Это означает, что массив \(a\) может быть не фиксированным до начала тестирования вашей программы и может зависеть от ваших запросов. Гарантируется, что в любой момент тестирования, существует хотя бы один массив \(a\), для которого верны все данные до этого ответы на запросы.

Входные данные

В первой строке находится два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 1024\), \(k\) и \(n\) это степени двойки).

Гарантируется, что \(\dfrac{3n^2}{2k} \le 15\ 000\).

Протокол взаимодействия

Вы начинаете взаимодействие со считывания двух чисел \(n\) и \(k\).

  • Для того, чтобы попросить вашего друга попробовать чашечку кофе в кафе с номером \(c\), в отдельной строке выведите

    ? \(c\)

    Тут \(c\) должно удовлетворять условиям \(1 \le c \le n\). Не забывайте сделать сброс буфера потока вывода после этого.

    В ответ вы получите символ Y (да) или N (нет), сообщающий вам, встречался ли сорт кофе \(a_c\) среди последних \(k\) сортов кофе в памяти вашего друга.

  • Для того чтобы отчистить память вашего друга, в отдельной строке выведите единственный символ R (большая латинская буква). Вы можете сделать этот запрос не более \(30\ 000\) раз.
  • После того, как вы определили количество \(d\) различных сортов кофе, выведите

    ! \(d\)

В случае, если запрос, сделанный вами, некорректный или вы сделали больше, чем \(\frac{3n^2}{2k}\) запросов типа ? или больше, чем \(30\ 000\) запросов типа R, в ответ тестирующая программа выведет символ E и закончит тестирование. Вы получите вердикт Wrong Answer. Будьте осторожны, для этого ваша программа должна немедленно завершиться в этом случае, иначе вердикт посылки может быть любым.

После вывода запроса не забывайте переводить строку и делать сброс буфера потока вывода. Иначе, вы получите вердикт Idleness limit exceeded. Для того, чтобы сделать сброс буфера потока вывода, используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • обратитесь к документации для остальных языков.

Взломы

В первой строке теста должно находиться слово fixed

Во второй строке должны содержаться два целых числа \(n\) и \(k\), разделенных пробелом (\(1 \le k \le n \le 1024\), \(k\) и \(n\) это степени двойки).

Должно быть выполнено, что \(\dfrac{3n^2}{2k} \le 15\ 000\).

В третьей строке должны содержаться \(n\) целых чисел \(a_1, a_2, \ldots, a_n\), разделенных пробелом (\(1 \le a_i \le n\)).

Примечание

В первом тесте, массив \(a = [1, 4, 1, 3]\). В городе производится \(3\) различных сорта кофе (\(1\), \(3\) и \(4\)).

Последовательные сорта кофе, попробованные вашим другом это \(1, 4, \textbf{1}, 3, 3, 1, 4\) (жирным выделены запросы с ответом Y). Обратите внимание, что между двумя запросами ? 4, был запрос отчищения памяти, поэтому ответ на второй запрос ? 4 был N. Если бы этого запроса не было, то ответ на второй запрос ? 4 был бы Y.

Во втором тесте, массив \(a = [1, 2, 3, 4, 5, 6, 6, 6]\). В городе производится \(6\) различных сортов кофе.

Последовательные сорта кофе, попробованные вашим другом это \(2, 6, 4, 5, \textbf{2}, \textbf{5}\).

B. Арома и её поиск

геометрия жадные алгоритмы Конструктив Перебор реализация *1700

С новым телом наш идол Арома Белая (или лучше было сказать Каори Минамийа?) начинает восстанавливать своё потерянное прошлое через OS-пространство.

Это пространство можно представить как 2D плоскость, с бесконечным количеством устройств с данными, пронумерованных с \(0\). Координаты устройств можно описать следующим образом:

  • Координаты \(0\)-го устройства равны \((x_0, y_0)\)
  • Для \(i > 0\), координаты \(i\)-го устройства равны \((a_x \cdot x_{i-1} + b_x, a_y \cdot y_{i-1} + b_y)\)

Изначально Арома расположена в точке \((x_s, y_s)\). Она может находиться в OS-пространстве не более \(t\) секунд, после этого ей придётся вернуться в реальный мир. Чтобы вернутся в реальный мир не требуется возвращаться в изначальную точку \((x_s, y_s)\).

Внутри OS-пространства Арома может делать следующие действия:

  • Из точки \((x, y)\) Арома может перейти в одну из следующих точек \((x-1, y)\), \((x+1, y)\), \((x, y-1)\) или \((x, y+1)\). Это действие занимает \(1\) секунду.
  • Если Арома стоит в точке с устройством, то она может его собрать. Можно считать, что это действие занимает \(0\) секунд. Разумеется, каждое устройство можно собрать не более одного раза.

Арома хочет собрать как можно больше данных перед тем как вернётся назад. Помогите ей определить максимальное количество устройств с данными, которые она сможет собрать за \(t\) секунд.

Входные данные

Первая строка содержит целые числа \(x_0\), \(y_0\), \(a_x\), \(a_y\), \(b_x\), \(b_y\) (\(1 \leq x_0, y_0 \leq 10^{16}\), \(2 \leq a_x, a_y \leq 100\), \(0 \leq b_x, b_y \leq 10^{16}\)), которые задают координаты устройств с данными.

Вторая строка содержит целые числа \(x_s\), \(y_s\), \(t\) (\(1 \leq x_s, y_s, t \leq 10^{16}\)), изначальные координаты Аромы и доступное время.

Выходные данные

Выведите одно целое число — максимальное количество устройств с данными которые Арома сможет собрать за \(t\) секунд.

Примечание

Во всех трёх примерах, координаты первых \(5\) устройств равны \((1, 1)\), \((3, 3)\), \((7, 9)\), \((15, 27)\) и \((31, 81)\) (напомним, что устройства пронумерованы начиная с \(0\)).

В первом примере оптимальный маршрут чтобы собрать \(3\) вершины выглядит следующим образом:

  • Перейти в точку \((3, 3)\) и собрать \(1\)-е устройство. Это занимает \(|3 - 2| + |3 - 4| = 2\) секунд.
  • Перейти в точку \((1, 1)\) и собрать \(0\)-е устройство. Это занимает \(|1 - 3| + |1 - 3| = 4\) секунд.
  • Перейти в точку \((7, 9)\) и собрать \(2\)-е устройство. Это занимает \(|7 - 1| + |9 - 1| = 14\) секунд.

Во втором примере оптимальный маршрут чтобы собрать \(2\) вершины выглядит следующим образом:

  • Собрать \(3\)-е устройство. Это занимает ноль секунд.
  • Перейти в точку \((7, 9)\) и собрать \(2\)-е устройство. Это занимает \(|15 - 7| + |27 - 9| = 26\) секунд.

В третьем примере Арома не может собрать ни одного устройства. Пожалуй стоило отдохнуть, а не рваться в OS-пространство без подготовки.

E. Рин и неизвестный цветок

жадные алгоритмы интерактив Конструктив математика *3500

Это интерактивная задача!

Это был обычный день в тайном офисе в A.R.C. Markland-N, когда капитан-исследователь Сагар передал Рин необычный артефакт.

После некоторого анализа, Рин поняла, что этот артефакт содержит информацию о странном цветке, который существовал задолго до нашей эры. Однако информация о химической структуре цветка оказалась зашифрованной.

Химическая структура цветка может быть представлена как строка \(p\). Исходя из незашифрованных бумаг рядом, Рин выяснила, длину строки \(n\) и что эта строка может содержать только следующие три буквы: «C» (углерод), «H» (водород), и «O» (кислород).

В каждый момент Рин может ввести строку \(s\) произвольной длины в специальный терминал артефакт, и он в ответ выведет все возможные начальные позиции вхождения \(s\) как подстроки в \(p\).

Тем не менее, запас энергии артефакта достаточно ограничен, и артефакт нельзя перезарядить, так как его технология слишком несовременная и несовместима ни с одним устройством A.R.C. Более точно:

  • Артефакт содержит \(\frac{7}{5}\) единиц энергии.
  • Каждый раз, когда Рин вводит строку \(s\) длины \(t\), артефакт тратит \(\frac{1}{t^2}\) единиц энергии.
  • Если уровень энергии достигнет нуля, то задание будет считаться проваленным, а артефакт навсегда затемнится.

Артефакт очень ценен, но и столь же хрупок. Рин очень боится повредить артефакт навсегда в попытках извлечь данные. Не могли бы вы ей помочь?

Протокол взаимодействия

Взаимодействие начинается с целого числа \(t\) (\(1 \le t \le 500\)), количества тестовых случаев. Взаимодействие для каждого тестового случая описано ниже:

Сначала вам нужно считать целое число \(n\) (\(4 \le n \le 50\)), длину строки \(p\).

После этого вы можете делать запросы вида «? s» (\(1 \le |s| \le n\)), чтобы найти вхождения \(s\) в \(p\).

После запроса, вам нужно считать ответ на него как последовательность целых чисел в одной строке:

  • Первое число \(k\) обозначает количество вхождений \(s\) как подстроку в \(p\) (\(-1 \le k \le n\)). Если \(k = -1\), то это означает, что вы превысили ограничение на энергию или сделали некорректный запрос, в этом случае вам нужно немедленно завершить программу, чтобы гарантировать вердикт «Неправильный ответ». В противном случае вердикт может оказаться любым, так как ваше решение продолжит чтение из закрытого потока.
  • Следующие \(k\) целых чисел \(a_1, a_2, \ldots, a_k\) (\(1 \le a_1 < a_2 < \ldots < a_k \le n\)) обозначают начальные позиции подстрок равных строке \(s\) .

Когда вы выясните строку \(p\) выведите «! \(p\)» чтобы завершить текущий тестовый случай. Это действие не тратит энергию. Интерактор в ответ вернёт \(1\) или \(0\). Если интерактор вернул \(1\), то вы можете начать обрабатывать следующий тестовый случай, если он есть, или завершить программу, если это был последний тестовый случай.

Если интерактор вернул \(0\), то это означает что ваше предположение некорректно и вы должны немедленно завершить программу, чтобы гарантировать вердикт «Неправильный ответ».

Обратите внимание что в каждом тестовом случае строка \(p\) зафиксирована заранее и не меняется в зависимости от запросов, иначе говоря, интерактор не адаптивен.

После вывода любого запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы можете получить вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Для взломов используйте следующий формат:

Первая строка должна содержать целое число \(t\) (\(t = 1\)).

Вторая строка строка должна содержит целое число \(n\) (\(4 \le n \le 50\)) — длину строки.

Вторая строка должна содержать строку длины \(n\), состоящую только из символов «C», «H» и «O». Эта та строка, которую взламываемому решению придётся угадать.

Примечание

Обратите внимание что в примере взаимодействия есть лишние пустые строки для удобства чтения.

В реальном взаимодействия таких строк нет, и ваша программа тоже не должна их выводить.

E1. Покраска строки (простая версия)

графы дп жадные алгоритмы Конструктив сортировки *1800

Это простая версия задачи. Задачи отличаются друг от друга, но простая версия почти является подзадачей сложной версии. Обратите внимание на то, что ограничения и формат вывода различаются.

Дана строка \(s\), состоящая из \(n\) строчных латинских букв.

Вам нужно раскрасить все её символы в один из двух цветов (каждый символ покрашен ровно в один цвет, одинаковые буквы могут быть покрашены как одним цветом, так и разными, т.е. вам нужно выбрать ровно один цвет для каждого индекса в \(s\)).

После покраски вы можете поменять местами два любых соседних символа строки, которые раскрашены в разные цвета. Вы можете применить эту операцию произвольное (возможно, нулевое) количество раз.

Цель — сделать строку отсортированной, т.е. все символы должны быть расположены в алфавитном порядке.

Ваша задача — определить, возможно ли покрасить заданную строку так, что после покраски она может быть отсортирована с помощью какой-либо последовательности шагов. Обратите внимание: вам нужно восстановить только раскраску, но не последовательность шагов.

Входные данные

Первая строка входных данных содержит одно целое число \(n\) (\(1 \le n \le 200\)) — длина строки \(s\).

Вторая строка входных данных содержит строку \(s\), состоящую ровно из \(n\) строчных латинских букв.

Выходные данные

Если невозможно раскрасить заданную строку так, что после покраски она может быть отсортирована после какой-либо последовательности шагов, выведите «NO» (без кавычек) первой строкой.

В противном случае выведите «YES» первой строкой и любую корректную раскраску второй строкой (раскраской считается строка, состоящая из \(n\) символов, где \(i\)-й символ должен быть '0', если \(i\)-й символ покрашен в первый цвет и '1' иначе).

F. Красоты Берляндии

Деревья жадные алгоритмы Конструктив поиск в глубину и подобное сортировки *2100

В Берляндии есть \(n\) железнодорожных станций, которые соединены \(n-1\) участками железной дороги, по которым может ходить поезд в любом из двух направлений. Железнодорожная сеть связна, то есть представляет собой неориентированное дерево.

У вас есть карта этой сети, таким образом для каждого участка железной дороги известно, какие станции он соединяет.

У каждого из \(n-1\) участков есть целочисленный параметр красота пейзажа за окном, однако эти значения на карте не указаны и вам неизвестны. Все эти значения лежат в границах от \(1\) до \(10^6\), включительно.

Вы произвели опрос \(m\) пассажиров: \(j\)-й пассажир сообщил три значения:

  • станция отправления \(a_j\);
  • станция прибытия \(b_j\);
  • минимальную из красот пейзажа за окном на пути следования из \(a_j\) в \(b_j\) (поезд ехал кратчайшим путём из \(a_j\) в \(b_j\)).

Вы хотите улучшить карту и на каждом участке железной дороги указать величину \(f_i\)красота пейзажа за окном. Эти значения должны быть согласованы с опросом пассажиров.

Выведите любой возможный набор значений \(f_1, f_2, \dots, f_{n-1}\), которые согласуется с опросами или укажите, что такой не существует.

Входные данные

В первой строке входных данных записано целое число \(n\) (\(2 \le n \le 5000\)) — количество железнодорожных станций в Берляндии.

В следующих \(n-1\) строках записаны описания участков железных дорог: \(i\)-й участок задаётся двумя целыми числами \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n, x_i \ne y_i\)), где \(x_i\) и \(y_i\) — номера станций, которые соединены \(i\)-м участком железной дороги. Все участки железной дороги — двунаправлены. Из любой станции можно проехать в любую другую по железной дороге.

Следующая строка содержит число \(m\) (\(1 \le m \le 5000\)) — количество опрошенных пассажиров. Далее содержится \(m\) строк, \(j\)-я строка содержит три целых числа \(a_j\), \(b_j\) и \(g_j\) (\(1 \le a_j, b_j \le n\); \(a_j \ne b_j\); \(1 \le g_j \le 10^6\)) — станция отправления, прибытия и минимальная красота пейзажа за окном во время пути.

Выходные данные

Если ответа не существует, то выведите единственное число -1.

В противном случае выведите \(n-1\) целое число \(f_1, f_2, \dots, f_{n-1}\) (\(1 \le f_i \le 10^6\)), где \(f_i\) — возможная красота пейзажа за окном для \(i\)-й дороги.

Если существует несколько возможных ответов, вы можете вывести любой из них.

D. Время бега

графы Конструктив реализация *2000

Башар готовится к национальному констесту по программированию. Из-за слишком частого сидения перед компьютером без совершения каких-либо физических действий Башар стал толстеть. Он собирается уйти из программирования после национального контеста и стать актером (как его отец), поэтому ему нужно сбросить вес.

Поэтому, Башар решил пробежать \(k\) километров. Башар собирается бежать в месте, которое выглядит как таблица с \(n\) строками и \(m\) столбцами. В этой таблице есть по две односторонние дороги длинной в один километр между каждой парой соседних по стороне клеток: одна дорога идет от первой клетки ко второй, другая от второй к первой. Поэтому, всего ровно \((4 n m - 2n - 2m)\) дорог.

Давайте рассмотрим, например \(n = 3\) и \(m = 4\). В этом случае, есть ровно \(34\) дороги. Это картинка, демонстрирующая этот случай (стрелки обозначают дороги):

Башар хочет бежать по следующим правилам:

  • Он начинает в левой верхней клетке таблицы;
  • За один ход он может переместиться на одну клетку вверх (символ 'U'), вниз (символ 'D'), влево (символ 'L') или вправо (символ 'R'). Более формально, если он сейчас находится в клетке в строке \(i\) и в столбце \(j\), то есть в клетке \((i, j)\), то он переместится:
    • в случае 'U' в клетку \((i-1, j)\);
    • в случае 'D' в клетку \((i+1, j)\);
    • в случае 'L' в клетку \((i, j-1)\);
    • в случае 'R' в клетку \((i, j+1)\);
  • Он хочет пробежать ровно \(k\) километров, то есть он хочет совершить ровно \(k\) ходов;
  • Башар может закончить в любой клетке таблицы;
  • Он не может выходить за пределы таблицы, то есть в любой момент времени он должен находиться в одной из клеток таблицы;
  • Башар не хочет, чтобы ему было скучно во время бега, поэтому он не должен посещать одну и ту же дорогу более одного раза. Но он может посещать одну и ту же клетку любое количество раз.

Башар спрашивает вас, можно ли пробежать по таким правилам. Если это возможно, вы должны сказать ему, как он должен бежать.

Вы должны дать ему \(a\) шагов и поскольку Башар не может запомнить слишком много шагов, \(a\) не должно превосходить \(3000\). Для каждого шага вы должны дать ему положительное целое число \(f\) и строчку ходов \(s\) длиной не больше \(4\). Этот шаг означает, что вы должны повторять ходы строки \(s\) \(f\) раз. Он будет выполнять шаги в порядке, в котором вы их вывели.

Например, если шаги это \(2\) RUD, \(3\) UUL, то его ходы будут RUD \(+\) RUD \(+\) UUL \(+\) UUL \(+\) UUL \(=\) RUDRUDUULUULUUL.

Можете ли вы помочь ему и дать ему корректную последовательность шагов, такую что общее расстояние, которое он пробежит равно \(k\) или сказать, что это невозможно?

Входные данные

В единственной строке находится три целых числа \(n\), \(m\) и \(k\) (\(1 \leq n, m \leq 500\), \(1 \leq k \leq 10 ^{9}\)), которые равны количеству строк, количеству столбцов в таблице и расстоянию, которое Башар хочет пробежать.

Выходные данные

Если не существует способа пробежать \(k\) километров, выведите «NO» (без кавычек), иначе выведите «YES» (без кавычек) в первой строке.

Если ответ «YES», во второй строке выведите целое число \(a\) (\(1 \leq a \leq 3000\)) — количество шагов, затем выведите \(a\) строк, описывающих шаги.

Для того, чтобы описать шаг, выведите положительное целое число \(f\) (\(1 \leq f \leq 10^{9}\)) и строку ходов \(s\) длины не более \(4\). Каждый символ строки \(s\) должен быть равен 'U', 'D', 'L' или 'R'.

Башар будет начинать в левой верхней клетке. Обратите внимание, что он должен пробежать ровно \(k\) километров и не пробежать по одной и той же дороге дважды. Он не должен выходить за пределы таблицы. Он может закончить в любой клетке.

Можно показать, что если можно пробежать ровно \(k\) километров, соблюдая все условия, то можно описать какой-то путь в данных ограничениях на выходные данные.

Примечание

Ходы, которые Башар собирается сделать в первом тесте это: «RRLL».

Невозможно пробежать \(1000000000\) километров во втором тесте, потому что суммарная длина дорог будет намного меньше, а Башар не может посещать одну и ту же дорогу дважды.

Ходы, которые Башар собирается сделать в третьем тесте это: «RRDDLLRR».

Ходы, которые Башар собирается сделать в пятом тесте это: «RRRLLLDRRRDULLLD». Это картинка его маршрута (дороги вдоль его маршрута покрашены в красный и пронумерованы в порядке, в котором он будет пробегать их):

B. DAG

Конструктив

This is an unusual problem in an unusual contest, here is the announcement: http://cf.m27.workers.dev/blog/entry/73543

You are given a directed acyclic graph \(G\) with \(n\) vertices and \(m\) edges. Denote by \(R(v)\) the set of all vertices \(u\) reachable from \(v\) by moving along the edges of \(G\). Find \(\sum\limits_{v=1}^n |R(v)|^2\).

Input

The first line contains two integers \(n, m\) (\(1 \leq n, m \leq 5 \cdot 10^4\)) denoting the number of vertices and the number of edges of \(G\).

Each of the next \(m\) lines contains two integers \(u, v\) (\(1 \leq u \neq v \leq n\)), denoting the edge from \(u\) to \(v\).

It's guaranteed that the given graph does not contain any cycles.

Output

Print one integer — the answer to the problem.

B. Самый длинный палиндром

жадные алгоритмы Конструктив Перебор реализация Строки *1100

Вернувшись к решению задач, Гильдонг взялся за изучение палиндромов. Он выяснил, что палиндром это строка, которая равна своему перевороту. Например, строки «pop», «noon», «x», и «kkkkkk» являются палиндромами, а строки «moon», «tv», и «abab» не являются. Пустая строка также является палиндромом.

Гильдонгу очень понравился этот концепт, так что он решил немного с ним поиграть. У него есть \(n\) различных строк равной длины \(m\). Он хочет удалить некоторые из этих строк (возможно, ни одну, или все) и переставить оставшиеся, чтобы их конкатенация была палиндромом. Он также хочет, чтобы палиндром был как можно длиннее. Помогите ему решить эту задачу!

Входные данные

В первой строке записаны два целых числа \(n\) и \(m\) (\(1 \le n \le 100\), \(1 \le m \le 50\)) — количество строк и длина каждой строки.

В следующих \(n\) строках записаны строки длины \(m\), состоящие только из строчных букв латинского алфавита. Все данные строки различны.

Выходные данные

В первую строку выведите длину наибольшего палиндрома.

Во вторую строку выведите искомый палиндром. Если есть несколько возможных ответов, выведите любой. Если палиндром пуст, то можете как вывести пустую строку, так и не выводить эту строку вообще.

Примечание

В первом примере «battab» также является корректным ответом.

Во втором примере есть 4 разных возможных корректных ответа, включая ответ из примера. Мы не будем давать никаких подсказок, какими являются остальные ответы.

В третьем примере единственная возможная строка — пустая.

D. Короткая и длинная НВП

графы жадные алгоритмы Конструктив *1800

Гильдон недавно научился искать Наибольшую Возрастающую Подпоследовательность (НВП) за \(O(n\log{n})\) для последовательности длины \(n\). Он решил проверить себя, может ли он реализовать этот алгоритм корректно, но он не смог найти эту задачу ни в одном архиве (ни смотря на то, что на самом деле, она есть во многих). Так что вместо этого он решил загадать вам загадку на построение последовательности из \(n\) различных целых чисел от \(1\) до \(n\), включительно, чтобы протестировать своим кодом ваш ответ.

Опишем загадку.

Гильдонг дает вам строку длины \(n-1\), состоящую только из символов '<' и '>'. \(i\)-й (в 1-индексации) символ это результат сравнения \(i\)-го и \(i+1\)-го элемента последовательности. Если \(i\)-й символ строки это '<', тогда \(i\)-й элемент последовательности меньше чем \(i+1\)-й. Иначе, \(i\)-й символ строки '>', и \(i\)-й элемент последовательности больше чем \(i+1\)-й элемент.

Он просит вас найти два возможные последовательности (не обязательно различных) состоящих из \(n\) различных целых чисел от \(1\) до \(n\), включительно, что обе последовательности удовлетворяют всем результатам сравнения, и длина НВП первой последовательности минимально возможная, а длина НВП второй последовательности максимально возможная.

Входные данные

Каждый тест состоит из одного или более тестовых случаев. В первой строке записано количество тестовых случаев \(t\) (\(1 \le t \le 10^4\)).

Каждый тестовый случай состоит из ровно одной строки, состоящей из целого числа и строки, состоящей только из символов '<' и '>'. Целое число это \(n\) (\(2 \le n \le 2 \cdot 10^5\)), длина перестановки, которую вам нужно найти. Строка это результаты сравнений, описанных в условии. Длина строки равна \(n-1\).

Гарантируется, что сумма \(n\) по всем тестовым случаям не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого тестового случая, выведите две строки, по \(n\) целых чисел в каждой. Первая строка должна содержать последовательность с минимальной НВП, а вторая строка последовательность с максимальным НВП. Если есть несколько возможных ответов, вы можете вывести любой. Каждая последовательность должна содержать все целые числа от \(1\) до \(n\), включительно, и должна удовлетворять всем результатам сравнения.

Можно показать, что всегда найдется хотя бы один ответ.

Примечание

В первом тестовом случае, \(1\) \(2\) \(3\) это единственный возможный ответ.

Во втором тестовом случае, наименьшая длина НВП это \(2\), а наибольшая это \(3\). Для примера с наибольшей НВП, \(4\) '\(3\)' \(1\) \(7\) '\(5\)' \(2\) '\(6\)'может быть одной из возможных НВП.

A. Курони и подарки

жадные алгоритмы Конструктив Перебор сортировки *800

У Курони есть \(n\) дочерей. В качестве подарков им он купил \(n\) ожерелий и \(n\) браслетов:

  • \(i\)-е ожерелье имеет яркость \(a_i\), где все \(a_i\) попарно различны (то есть все \(a_i\) имеют различные значения);
  • \(i\)-й браслет имеет яркость \(b_i\), где все \(b_i\) попарно различны (то есть все \(b_i\) имеют различные значения).

Курони хочет дать ровно одно ожерелье и ровно один браслет каждой из своих дочерей. Чтобы все они выглядели уникально, общие яркости обоих подарков, вручаемых каждой дочери, должны быть попарно различными. Формально, если \(i\)-я дочь получает ожерелье с яркостью \(x_i\) и браслет с яркостью \(y_i\), то суммы \(x_i + y_i\) должны быть попарно различными. Помогите Курони раздать подарки.

Например, если яркости равны \(a = [1, 7, 5]\) и \(b = [6, 1, 2]\), то мы можем распределить подарки следующим образом:

  • Дать третье ожерелье и первый браслет первой дочери, чтобы получить общую яркость \(a_3 + b_1 = 11\).
  • Дать первое ожерелье и третий браслет второй дочери, чтобы получить общую яркость \(a_1 + b_3 = 3\).
  • Дать второе ожерелье и второй браслет третьей дочери, чтобы получить общую яркость \(a_2 + b_2 = 8\).

А вот пример неправильного распределения:

  • Дать первое ожерелье и первый браслет первой дочери, чтобы получить общую яркость \(a_1 + b_1 = 7\).
  • Дать второе ожерелье и второй браслет второй дочери, чтобы получить общую яркость \(a_2 + b_2 = 8\).
  • Дать третье ожерелье и третий браслет третьей дочери, чтобы получить общую яркость \(a_3 + b_3 = 7\).

Это распределение неправильное, так как общие яркости подарков, полученных первой и третьей дочерью равны. Не расстраивайте их так!

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 100\)). Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\))  — количество дочерей, ожерелий, и браслетов.

Вторая строка каждого набора входных данных содержит \(n\) попарно различныx целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 1000\))  — яркости ожерелий.

Третья строка каждого набора входных данных содержит \(n\) попарно различныx целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 1000\))  — яркости браслетов.

Выходные данные

Для каждого набора входных данных в первой строке выведите \(n\) целых чисел \(x_1, x_2, \dots, x_n\), обозначающих, что \(i\)-я дочь получит ожерелье с яркостью \(x_i\). Во второй строке выведите \(n\) целых чисел \(y_1, y_2, \dots, y_n\), обозначающих, что \(i\)-я дочь получит браслет с яркостью \(y_i\).

Суммы \(x_1 + y_1, x_2 + y_2, \dots, x_n + y_n\) должны быть попарно различными. Числа \(x_1, \dots, x_n\) должны быть равны числам \(a_1, \dots, a_n\) в каком-то порядке, а числа \(y_1, \dots, y_n\) должны быть равны числам \(b_1, \dots, b_n\) в каком-то порядке.

Можно показать, что решение всегда существует. Если существует несколько решений, вы можете вывести любое из них.

Примечание

В первом наборе входных данных достаточно дать \(i\)-е ожерелье и \(i\)-й браслет \(i\)-й дочери. Соответствующие суммы будут равняться \(1 + 8 = 9\), \(8 + 4 = 12\), и \(5 + 5 = 10\).

Второй набор входных данных описан в условии.

B. Курони и простые строки

жадные алгоритмы Конструктив Строки *1200

Теперь, когда Курони исполнилось 10 лет, он большой мальчик и больше не любит массивы целых чисел в качестве подарков. В этом году он хочет получить скобочную последовательность в качестве подарка на день рождения. В частности, он хочет, чтобы последовательность скобок была настолько сложной, что, как бы он ни старался, он не сможет удалить простую подпоследовательность!

Назовем строку, образованную \(n\) символами '(' или ')' простой, если ее длина \(n\) четна и положительная, ее первые \(\frac{n}{2}\) символов  — это '(', а ее последние \(\frac{n}{2}\) символов  — это ')'. Например, строки () и (()) являются простыми, в то время как строки )( и ()() не являются простыми.

Курони будет дана строка, образованная символами '(' и ')' (заданная строка не обязательно является простой). Операция состоит из выбора подпоследовательности символов строки, которая образует простую строку, и удаления всех символов этой подпоследовательности из строки. Заметьте, символы подпоследовательности не обязаны идти подряд. К примеру, он может применить операцию к строке ')()(()))', выбрать подпоследовательность из выделенных жирным шрифтом символов, так как они формируют простую строку '(())', удалить эти символы с строки и получить '))()'.

Курони должен выполнить минимально возможное количество операций над строкой таким образом, чтобы с оставшейся строкой больше нельзя было выполнить ни одной операции. Результирующая строка не обязана быть пустой.

Поскольку заданная строка слишком велика, Курони не может понять, как минимизировать количество операций. Можете ли вы помочь ему сделать это?

Последовательность символов \(a\) является подпоследовательностью строки \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов.

Входные данные

Единственная строка ввода содержит строку \(s\) (\(1 \le |s| \le 1000\)), образованную символами '(' и ')', где \(|s|\) — длина строки \(s\).

Выходные данные

В первой строке выведите единственное целое число \(k\)  — минимальное количество операций, которые вы должны применить. Затем выведите \(2k\) строк, описывающих операции в следующем формате:

Для каждой операции выведите строку, содержащую целое число \(m\)  — количество символов в подпоследовательности, которую вы удалите.

Затем выведите строку, содержащую \(m\) целых чисел \(1 \le a_1 < a_2 < \dots < a_m\)  — индексы символов, которые вы удалите. Все целые числа должны быть меньше или равны длине текущей строки, а соответствующая подпоследовательность должна образовывать простую строку.

Если существует несколько различных последовательностей операций с минимальным \(k\), вы можете вывести любую из них.

Примечание

В первом примере строка равна '(()(('. Описанная операция соответствует удалению выделенной жирным шрифтом подпоследовательности. Получившаяся строка равна '(((', и над ней больше нельзя выполнить ни одну операцию. Другой правильный ответ  — это выбор индексов \(2\) и \(3\), что приводит к той же самой конечной строке.

Во втором примере уже невозможно выполнить ни одну операцию.

D. Курони и празднование

Деревья интерактив Конструктив поиск в глубину и подобное *1900

Это интерактивная задача.

После АС после 13 вердиктов Превышено Время Исполнения по задаче с геометрии, Курони отправился в итальянский ресторан, чтобы отпраздновать это святое достижение. К сожалению, лишний соус дезориентировал его, и он теперь потерялся!

Соединенные Штаты Америки могут быть смоделированы как дерево (хотя стойте...) с \(n\) вершинами. Корень дерева находится в вершине \(r\), в которой находится гостиница Курони.

У Курони есть приложение для телефона, предназначенное для оказания ему помощи в таких экстренных случаях. Чтобы использовать приложение, ему нужно ввести две вершины \(u\) и \(v\), и оно вернет вершину \(w\), которая является наименьшим общим предком этих двух вершин.

Однако, поскольку батарея телефона была почти полностью разряжена во время праздничной вечеринки Курони, он может использовать приложение не более \(\lfloor \frac{n}{2} \rfloor\) раз. После этого телефон разрядится и не останется ничего, чтобы помочь нашему дорогому другу! :(

Поскольку ночь холодная и темная, Курони должен вернуться, чтобы он мог воссоединиться со своей удобной кроватью и подушками. Можете ли вы помочь ему выяснить местоположение своего отеля?

Протокол взаимодействия

Взаимодействие начинается с чтения одного целого числа \(n\) (\(2 \le n \le 1000\)), количества вершин дерева.

Затем прочтите \(n-1\) строку, \(i\)-я из которых содержит два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\), \(x_i \ne y_i\)), обозначающие, что есть ребро, соединяющее вершины \(x_i\) и \(y_i\). Гарантируется, что ребра сформируют дерево.

После этого, вы можете делать запросы типа "? u v" (\(1 \le u, v \le n\)), чтобы найти наименьшего общего предка вершин \(u\) и \(v\).

После запроса считайте результат \(w\) как целое число.

В случае, если ваш запрос не соответствует требованиям, или вы задали более \(\lfloor \frac{n}{2} \rfloor\) запросов, программа выведет \(-1\) и прекратит взаимодействие. Вы получите вердикт Неправильный ответ. Вам нужно завершить работу вашей программы, чтобы не получить другие вердикты.

Когда вы узнаете вершину \(r\), выведите "! \(r\)" и выйдите после этого. Этот запрос не учитывается в пределе \(\lfloor \frac{n}{2} \rfloor\).

Обратите внимание, что дерево фиксировано заранее и не будет изменяться во время запросов, то есть интерактор не адаптивен. После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Формат взломов

Для взломов используйте следующий формат:

Первая строка должна содержать два целых числа \(n\) и \(r\) (\(2 \le n \le 1000\), \(1 \le r \le n\)), обозначающих количество вершин и вершину с отелем Курони.

\(i\)-я из следующих \(n-1\) строк должна содержать два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\))  — обозначающих, что есть ребро, соединяющее вершины \(x_i\) и \(y_i\).

Представленные ребра должны сформировать дерево.

Примечание

Обратите внимание, что пример взаимодействия содержит дополнительные пустые строки, чтобы его было легче читать. Реальное взаимодействие не содержит пустых строк, и вы не должны также печатать лишние пустые строки.

Рисунок ниже изображает дерево с примера:

E. Курони и разбалловка

жадные алгоритмы Конструктив математика реализация *2200

Курони является координатором следующего раунда Mathforces, написанного командой «Proof by AC». Вся подготовка позади, и он обсуждает с командой распределение баллов за раунд.

Раунд состоит из \(n\) задач, пронумерованных от \(1\) до \(n\). Задачи упорядочены в порядке возрастания сложности, никакие две задачи не имеют одинаковую сложность. Распределение баллов за раунд можно обозначить массивом \(a_1, a_2, \dots, a_n\), где \(a_i\)  — баллы за \(i\)-ю задачу.

Курони считает, что распределение очков должно удовлетворять следующим требованиям:

  • Балл за каждую задачу должен быть положительным целым числом, не превышающим \(10^9\).
  • Более сложная задача должна стоит больше баллов, чем более простая. Другими словами, \(1 \leq a_1 < a_2 < \dots < a_n \leq 10^9\)..
  • Баланс распределения баллов, определяемый как количество троек \((i, j, k)\), таких, что \(1 \leq i < j < k \leq n\) и \(a_i + a_j = a_k\), должен быть равен ровно \(m\).

Помогите команде найти распределение баллов, которое удовлетворяет требованиям Курони. Если такого распределения баллов не существует, выведите \(-1\).

Входные данные

Первая и единственная строка содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 5000\), \(0 \leq m \leq 10^9\))  — количество задач и требуемый баланс.

Выходные данные

Если решения не существует, выведите единственное целое число \(-1\).

В противном случае выведите \(n\) целых чисел \(a_1, a_2, \dots, a_n\), представляющие распределение баллов, которое удовлетворяет всем требованиям. Если есть несколько решений, выведите любой из них.

Примечание

В первом примере следующие \(3\) тройки \((i, j, k)\) вносят вклад в баланс распределения баллов.

  • \((1, 2, 3)\)
  • \((1, 3, 4)\)
  • \((2, 4, 5)\)

E. Построить бинарное дерево

Деревья Конструктив Перебор *2200

Вам даны два целых числа \(n\) и \(d\). Нужно построить корневое бинарное дерево из \(n\) вершин с корнем в вершине \(1\) с суммой глубин всех вершин равной \(d\).

Дерево — это связный граф без циклов. Корневое дерево имеет специальную вершину — корень. Родитель вершины \(v\) — это последняя отличная от \(v\) вершина на пути от корня к вершине \(v\). Глубина вершины \(v\) — это длина пути от корня к вершине \(v\). Дети вершины \(v\) — все вершины, для которых \(v\) является родителем. Бинарное дерево — это такое дерево, в котором ни одна вершина не имеет более \(2\) детей.

Вам нужно ответить на \(t\) независимых наборов входных данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Единственная строка каждого набора содержит два целых числа \(n\) и \(d\) (\(2 \le n, d \le 5000\)) — количество вершин в дереве и требуемую сумму глубин всех вершин.

Гарантируется, что сумма всех \(n\) и сумма всех \(d\) не превышают \(5000\) (\(\sum n \le 5000, \sum d \le 5000\)).

Выходные данные

Для каждого набора входных данных выведите ответ на него.

Если невозможно построить такое дерево, выведите «NO» (без кавычек) первой строкой. Иначе выведите «{YES}» первой строкой. Затем выведите \(n-1\) целое число \(p_2, p_3, \dots, p_n\) второй строкой, где \(p_i\) — родитель вершины \(i\). Обратите внимание: последовательность родителей, которую вы выведете, должна описывать некоторое бинарной дерево.

Примечание

Изображения, соответствующие первому и второму наборам входных данных из примера:

B. Bogosort

Конструктив сортировки *1000

Вам задан массив \(a_1, a_2, \dots , a_n\). Массив хороший, если для каждой пары индексов \(i < j\) выполняется условие \(j - a_j \ne i - a_i\) . Можете ли вы переставить местами элементы массива так, чтобы он стал хорошим (если исходный массив хороший — можно оставить старый порядок)?

Например, если \(a = [1, 1, 3, 5]\), то перемешанные массивы \([1, 3, 5, 1]\), \([3, 5, 1, 1]\) и \([5, 3, 1, 1]\) — хорошие, но перемешанные массивы \([3, 1, 5, 1]\), \([1, 1, 3, 5]\) и \([1, 1, 5, 3]\) — нет.

Гарантируется, что всегда возможно перемешать массив так, чтобы он стал хорошим.

Входные данные

Первая строка содержит число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно число \(n\) (\(1 \le n \le 100\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) чисел \(a_1, a_2, \dots , a_n\) (\(1 \le a_i \le 100\)).

Выходные данные

На каждый набор входных данных выведите перемешанный массив \(a\), являющийся хорошим.

B. Альтернативные правила

жадные алгоритмы Конструктив математика реализация *1700

Николай только недавно начал заниматься олимпиадным программированием, но уже смог пройти в финал престижной олимпиады. Всего в финале будет \(n\) участников, один из которых Николай. Как и любая хорошая олимпиада, она состоит из двух туров. Уставшие от традиционных правил, в которых участник, решивший наибольшее число задач, побеждает, организаторы придумали альтернативные правила.

Пусть по результатам первого тура участник А занял место \(x\), а по результатам второго — \(y\). Тогда суммарным баллом участника А считается сумма \(x + y\). Итоговое место А определяется как количество участников (включая А), у которых суммарный балл не превосходит суммарный балл А. Обратите внимание, что таким образом некоторые участники могут делить места между собой. Также важно заметить, что и в первом, и во втором туре никакие два участника не поделили место, таким образом для каждого \(i\) от \(1\) до \(n\) ровно один участник занял \(i\)-е место в первом и ровно один участник занял \(i\)-е место во втором туре.

По окончании олимпиады Николаю сообщили, что он занял \(x\)-е место в первом туре, \(y\)-е место во втором. Результаты других участников ему неизвестны. В ожидании результатов олимпиады Николай заинтересовался, какое минимальное и максимальное место он может занять, если рассмотреть самый благоприятный для него результат других участников и самый неблагоприятный. Помогите Николаю найти ответ на этот вопрос.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество тестовых случаев, которое надо решить.

Каждая из следующих \(t\) строк содержит целые числа \(n\), \(x\), \(y\) (\(1 \leq n \leq 10^9\), \(1 \le x, y \le n\)) — число участников олимпиады, место занятое Николаем в первом туре, место занятое Николаев во втором туре.

Выходные данные

Для каждого тестового случая выведите два целых числа — минимальное и максимальное итоговое место, которое может занять Николай.

Примечание

Пояснение к первому тесту:

Пусть было 5 участников A-E. Николая обозначим за А. Тогда наиболее благоприятные для Николая результаты олимпиады могли выглядеть так:

Однако результаты олимпиады могли выглядеть и так:

В первом случае Николай занял бы первое место, во втором — третье.

B. Преобразование строки

Конструктив Перебор реализация сортировки Строки *1400

У Васи есть строка \(s\) длины \(n\). Он решает применить к ней следующее преобразование:

  1. Выберите целое \(k\), (\(1 \leq k \leq n\)).
  2. Для \(i\) от \(1\) до \(n-k+1\), переверните подстроку \(s[i:i+k-1]\) строки \(s\). К примеру, если строка \(s\) равна qwer и \(k = 2\), то строка пройдет следующую последовательность изменений:
    • qwer (начальная строка)
    • wqer (после переворачивания первой подстроки длины \(2\))
    • weqr (после переворачивания второй подстроки длины \(2\))
    • werq (после переворачивания последней подстроки длины \(2\))
    Следовательно, получившаяся строка после преобразования \(s\) с \(k = 2\) равна werq.

Вася хочет выбрать такое \(k\), чтобы строка, полученная в результате преобразования, была лексикографически минимальной возможной среди всех выборов \(k\). Среди всех таких \(k\) он хочет выбрать наименьшее. Так как он занят посещением Felicity 2020, он просит вашей помощи.

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\) — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).
Входные данные

Каждый тест содержит несколько наборов входных данных.

Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 5000\)). Далее следуют описания наборов входных данных.

Вторая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 5000\)) — длину строки \(s\).

Третья строка каждого набора входных данных содержит строку \(s\) из \(n\) строчных букв латинского алфавита.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5000\).

Выходные данные

Для каждого набора входных данных выведите две строки:

В первой строке выведите лексикографически минимально возможную строку \(s'\), получающуюся как результат преобразования.

Во второй строке выведите подходящее значение \(k\) (\(1 \leq k \leq n\)), которое вы выбрали для преобрразования. Если несколько значений \(k\) дают лексикографически минимальную строку, выведите минимальное \(k\) среди них.

Примечание

В первом наборе тестовых данных примера, преобразование строки abab даст следующие результаты:

  • для \(k = 1\) : abab
  • для \(k = 2\) : baba
  • для \(k = 3\) : abab
  • для \(k = 4\) : baba

    Лексикографически наименьшая строка, которую можно получить  — это abab для \(k = 1\) и \(3\). Следовательно, наименьшее значение \(k\) равно \(1\).

C. Простые простые

Конструктив математика Тернарный поиск *1800

Это последний класс Профессора R в его карьере преподавателя. Каждый раз, когда Профессор R вел класс, он давал своим ученикам особенную задачу. Как его любимый ученик, вложите всю душу в решение этой задачи в последний раз.

Вам даны два многочлена \(f(x) = a_0 + a_1x + \dots + a_{n-1}x^{n-1}\) и \(g(x) = b_0 + b_1x + \dots + b_{m-1}x^{m-1}\), с целыми положительными коэффициентами. Гарантируется, что общий НОД всех коэффициентов равен \(1\) для обоих многочленов. Другими словами, \(gcd(a_0, a_1, \dots, a_{n-1}) = gcd(b_0, b_1, \dots, b_{m-1}) = 1\). Пусть \(h(x) = f(x)\cdot g(x)\). Пусть \(h(x) = c_0 + c_1x + \dots + c_{n+m-2}x^{n+m-2}\).

Вам также дано простое число \(p\). Профессор R просит вас найти любое такое \(t\), что \(c_t\) не делится на \(p\). Он гарантирует вам, что при данных ограничениях такое \(t\) всегда существует. Если существует несколько таких \(t\), выведите любое из них.

Так как ввод может быть достаточно большим, рекомендуем использовать быстрые способы ввода.

Входные данные

Первая строка содержит три целых числа, \(n\), \(m\) и \(p\) (\(1 \leq n, m \leq 10^6, 2 \leq p \leq 10^9\)),  — \(n\) и \(m\) это количества членов в \(f(x)\) и \(g(x)\) соответственно (на один большие чем степени соответствующих многочленов), а \(p\)  — данное простое число.

Гарантируется, что \(p\) простое.

Вторая строка содержит \(n\) целых чисел \(a_0, a_1, \dots, a_{n-1}\) (\(1 \leq a_{i} \leq 10^{9}\)) — \(a_i\) равен коэффициенту при \(x^{i}\) в \(f(x)\).

Третья строка содержит \(m\) целых чисел \(b_0, b_1, \dots, b_{m-1}\) (\(1 \leq b_{i} \leq 10^{9}\))  — \(b_i\) равен коэффициенту при \(x^{i}\) в \(g(x)\).

Выходные данные

Выведите одно число \(t\) (\(0\le t \le n+m-2\))  — подходящая степень \(x\) в \(h(x)\), коэффициент при которой не делится на данное простое \(p\). Если несколько степеней \(x\) удовлетворяют условию, выведите любую.

Примечание

В первом примере, \(f(x)\) равен \(2x^2 + x + 1\) и \(g(x)\) равен \(x + 2\), их произведение \(h(x)\) равно \(2x^3 + 5x^2 + 3x + 2\), поэтому ответ может быть 1 или 2, так как и 3 и 5 не делятся на 2.

Во втором примере, \(f(x)\) равен \(x + 2\) и \(g(x)\) равен \(x + 3\), их произведение \(h(x)\) равно \(x^2 + 5x + 6\), поэтому ответом может быть любая из этих степеней, так как ни один коэффициент не делится на данное простое число.

D. Матрица Нэша

графы Конструктив поиск в глубину и подобное реализация *2000

Нэш придумал интересную, но простую игру, где игрок просто должен выполнять инструкции, написанные на клетке, где игрок сейчас стоит.

В эту игру играют на доске \(n\times n\). Строки и столбцы этой доски пронумерованны от \(1\) до \(n\). Клетку на пересечении \(r\)-й строки и \(c\)-го столбца будем обозначать, как \((r, c)\).

Некоторые клетки этой доски называются заблокированными зонами. На каждой клетке доски написан один из следующих \(5\) символов  — \(U\), \(D\), \(L\), \(R\) или \(X\)  — инструкции для игрока. Пусть текущая клетка  — \((r, c)\). Если символ в клетке \(R\), игрок должен переместиться в клетку справа, \((r, c+1)\), для \(L\) игрок должен переместиться в клетку слева, \((r, c-1)\), для \(U\) игрок должен переместиться в клетку выше, \((r-1, c)\), для \(D\) игрок должен переместиться в клетку ниже, \((r+1, c)\). Если же символ в клетке равен \(X\), то эта клетка является заблокированной зоной. Игрок должен оставаться в этой клетке (и с этого момента игра для него не слишком интересна).

Гарантируется, что символы записаны таким образом, что игрок никогда не будет вынужден сойти с доски, в какой бы клетке он не начал.

Когда игрок начинает в какой-то клетке, он должен двигаться в соответствии с символом в текущей клетке. Игрок двигается до тех пор, пока он не попадет в заблокированную зону. Может оказаться так, что игрок будет двигаться бесконечно долго.

Для каждой из \(n^2\) клеток таблицы Алиса, ваш друг, хотела бы узнать, как пройдет игра, если игрок начнет в этой клетке. Для каждой стартовой клетки доски, она запишет клетку, в которой игрок остановится, или то, что игрок никогда не остановится. Она предоставила вам эту информацию: для каждой клетки \((r, c)\) она написала:

  • пару (\(x\),\(y\)), значащую, что если игрок начинает в клетке \((r, c)\), то он остановится в клетке (\(x\),\(y\)).
  • или пару (\(-1\),\(-1\)), значащую, что если игрок начинает в клетке \((r, c)\), он будет двигаться бесконечно долго, и никогда не попадет в заблокированную зону.

Возможно, Алиса хочет вас обмануть, и не существует доски, которая удовлетворяет всей информации, которую она вам предоставила. Для данной информации, восстановите подходящую доску, или определите, что ее не существует. Если существует несколько подходящих досок, вы можете найти любую из них. 

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^{3}\))  — сторону доски.

\(i\)-я из последующих \(n\) строк содержит \(2n\) чисел \(x_1, y_1, x_2, y_2, \dots, x_n, y_n\), где \((x_j, y_j)\) (\(1 \leq x_j \leq n, 1 \leq y_j \leq n\), или \((x_j,y_j)=(-1,-1)\))  — пара, записанная Алисой для клетки \((i, j)\).

Выходные данные

Если не существует доски, удовлетворяющей информации, которую вам дала Алиса, выведите INVALID.

Иначе, выведите VALID. В \(i\)-й из следующих \(n\) строк, выведите строку из \(n\) символов, соответствующих \(i\)-й строке найденной вами подходящей доски. Каждый символ должен быть равен \(U\), \(D\), \(L\), \(R\) или \(X\). Если существует несколько подходящих досок, вы можете найти любую из них. 

Примечание

В первом примере:

Доска с вывода подходит.

  • Если игрок начинает в \((1,1)\), он не будет двигаться, следуя \(X\), и останется там.
  • Если игрок начинает в \((1,2)\), он пойдет влево, следуя \(L\), и остановится в \((1,1)\).
  • Если игрок начинает в \((2,1)\), он пойдет вправо, следуя \(R\), и остановится в \((2,2)\).
  • Если игрок начинает в \((2,2)\), он не будет двигаться, следуя \(X\), и останется там.

Ходы игрока для разных клеток изображены на картинке ниже:

Во втором примере:

Доска с вывода подходит, так как игрок, начавший с клетки, отличной от центральной клетки \((2,2)\), будет двигаться по циклу и никогда не остановится. Если бы он начал в \((2,2)\), он бы там и остался, следуя инструкции \(X\) .

Ходы игрока для разных клеток изображены на картинке ниже:

D. Константы на языке Шекспира

дп жадные алгоритмы Конструктив *2100

Shakespeare — известный эзотерический язык, в котором программы имеют вид пьес Шекспира, а числа задаются комбинациями цветистых эпитетов. В этой задаче мы подробнее рассмотрим механизм задания чисел на этом языке.

Любая константа на Shakespeare формируется из неотрицательных степеней двойки при помощи арифметических действий. Для простоты разрешим использовать только сложение и вычитание и будем искать представление заданного числа, которое потребует минимального количества действий.

Задано натуральное число n. Надо представить его в виде n = a1 + a2 + ... + am, где каждой ai — это степень числа 2, взятая со знаком плюс или минус. Найдите такое преставление, что m — минимально.

Входные данные

Единственная строка содержит целое положительное число n, записанное в двоичной системе счисления. Длина заданного числа не превосходит 106. Гарантируется, что первая цифра числа равна 1.

Выходные данные

Выведите искомое минимальное m. Далее выведите m строк. Каждая строка должны иметь вид «+2^x» или «-2^x», где x — это показатель соответствующей степени двойки. Порядок вывода строк не имеет значения.

C. Удаление соседних

жадные алгоритмы Конструктив Перебор Строки *1600

Вам задана строка \(s\), состоящая из строчных букв латинского алфавита. Пусть длина \(s\) равна \(|s|\).

За один ход вы можете выбрать любой индекс \(i\) и удалить \(i\)-й символ \(s\) (\(s_i\)), если хотя бы один из его соседних символов является предыдущей буквой в латинском алфавите для \(s_i\). Например, для буквы b предыдущей буквой является a, для буквы s предыдущей букой является r, для буквы a предыдущей буквы не существует. Заметьте, что после каждого удаления длина строки уменьшается на единицу. Таким образом, индекс \(i\) должен удовлетворять условию \(1 \le i \le |s|\) в течение каждого хода.

Соседними символами для символа \(s_i\) являются символы \(s_{i-1}\) и \(s_{i+1}\). Первый и последний символы \(s\) имеют только один соседний символ (за исключением случая \(|s| = 1\)).

Рассмотрим следующий пример. Пусть \(s=\) bacabcab.

  1. В течение первого хода вы можете удалить первый символ \(s_1=\) b, так как \(s_2=\) a. Тогда строка станет равна \(s=\) acabcab.
  2. В течение второго хода вы можете удалить пятый символ \(s_5=\) c, так как \(s_4=\) b. Тогда строка станет равна \(s=\) acabab.
  3. В течение третьего хода вы можете удалить шестой символ \(s_6=\) b, так как \(s_5=\) a. Тогда строка станет равна \(s=\) acaba.
  4. В течение четвертого хода единственным символом, который вы можете удалить, является \(s_4=\) b, так как \(s_3=\) a (или \(s_5=\) a). Строка станет равна \(s=\) acaa, и вы больше не сможете ничего с ней сделать.

Ваша задача — найти максимальное количество символов, которые вы можете удалить, если вы выберете последовательность ходов оптимально.

Входные данные

Первая строка входных данных содержит одно целое число \(|s|\) (\(1 \le |s| \le 100\)) — длину \(s\).

Вторая строка входных данных содержит строку \(s\), состоящую из \(|s|\) строчных букв латинского алфавита.

Выходные данные

Выведите одно целое число — максимально возможное количество символов, которые вы можете удалить, если вы выберете последовательность ходов оптимально.

Примечание

Первый тестовый пример разобран в условии задачи. Заметьте, что последовательность ходов, представленная в условии, не является единственной, но можно показать, что максимально возможный ответ на этот тест равен \(4\).

Во втором тестовом примере вы можете удалить все символы \(s\), кроме одного. Единственный возможный ответ описан ниже.

  1. В течение первого хода следует удалить третий символ \(s_3=\) d, \(s\) станет равна bca.
  2. В течение второго хода следует удалить второй символ \(s_2=\) c, \(s\) станет равна ba.
  3. Наконец, в течение третьего хода следует удалить первый символ \(s_1=\) b, \(s\) станет равна a.

B. Подарок

Бинарный поиск битмаски Конструктив математика сортировки Структуры данных *2100

На восьмое марта Катерине подарили массив чисел. Со временем ей стало скучно просто смотреть на него, и она решила посчитать некоторые его бесполезные характеристики. Со всеми, что она придумывала, ей это удавалось. Придумав очередную — xor попарных сумм чисел в массиве, она поняла, что не может придумать, как посчитать её для большого массива, и попросила вас помочь. А вы сможете? Более формально, вам нужно посчитать

\(\) (a_1 + a_2) \oplus (a_1 + a_3) \oplus \ldots \oplus (a_1 + a_n) \\ \oplus (a_2 + a_3) \oplus \ldots \oplus (a_2 + a_n) \\ \ldots \\ \oplus (a_{n-1} + a_n) \\ \(\)

Запись \(x \oplus y\) обозначает битовый XOR чисел (т.е. \(x\) ^ \(y\) для многих современных языков программирования). Об этой операции вы можете прочитать по ссылке в Wikipedia: https://tiny.cc/34xykz.

Входные данные

Первая строка содержит целое число \(n\) (\(2 \leq n \leq 400\,000\)) — количество чисел в массиве.

Вторая строка содержит целые числа \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^7\)).

Выходные данные

Выведите одно число — xor попарных сумм чисел в данном массиве.

Примечание

В первом примере есть всего одна сумма: \(1 + 2 = 3\).

Во втором примере есть три суммы: \(1 + 2 = 3\), \(1 + 3 = 4\), \(2 + 3 = 5\). В двоичной системе счисления это \(011_2 \oplus 100_2 \oplus 101_2 = 010_2\), то есть 2.

\(\oplus\) означает операцию побитового xor. Чтобы определить \(x \oplus y\) рассмотрим двоичную запись чисел \(x\) и \(y\). Скажем, что \(i\)-й бит результата равен 1, если ровно один из \(i\)-х битов \(x\) и \(y\) равен 1. В противном случае \(i\)-й бит результата равен 0. Например, \(0101_2 \, \oplus \, 0011_2 = 0110_2\).

A. ЕхАб И нОд

жадные алгоритмы Конструктив теория чисел *800

Вам дано целое положительное число \(x\). Найдите любые такие два \(2\) целые положительные числа \(a\) и \(b\), для которых \(НОД(a,b)+НОК(a,b)=x\).

Напомним, что \(НОД(a,b)\)  — это наибольшее целое число, на которое делятся и \(a\) и \(b\). Аналогично, \(НОК(a,b)\) - это наименьшее целое число, которое делится и на \(a\) и на \(b\).

Гарантируется, что решение всегда существует. Если существует несколько таких пар \((a, b)\), вы можете вывести любую из них.

Входные данные

Первая строка содержит одно целое число \(t\) \((1 \le t \le 100)\)  — количество наборов тестовых данных.

Каждый набор тестовых данных состоит из одной строки, содержащей одно целое число, \(x\) \((2 \le x \le 10^9)\).

Выходные данные

Для каждого набора тестовых данных, выведите пару целых положительных чисел \(a\) и \(b\) (\(1 \le a, b \le 10^9)\) таких, что \(НОД(a,b)+НОК(a,b)=x\). Гарантируется, что решение всегда существует. Если существует несколько таких пар \((a, b)\), вы можете вывести любую из них.

Примечание

В первом наборе тестовых данных примера, \(НОД(1,1)+НОК(1,1)=1+1=2\).

Во втором наборе тестовых данных примера, \(НОД(6,4)+НОК(6,4)=2+12=14\).

C. Ехаб и неПутевые MEXы

Деревья жадные алгоритмы Конструктив поиск в глубину и подобное *1500

Вам дано дерево, состоящее из \(n\) вершин. Вы хотите написать какие-то числа на ребрах дерева, чтобы выполнялись следующие условия:

  • Каждое написанное число является целым числом от \(0\) до \(n-2\) включительно.
  • Все написанные числа различны.
  • Наибольшее значение среди \(MEX(u,v)\) среди всех пар вершин \((u,v)\) минимально возможно.

Здесь \(MEX(u,v)\) обозначает наименьшее неотрицательное целое число, которое не записано ни на одном ребре уникального простого пути между вершинами \(u\) и \(v\).

Входные данные

В первой строке записано целое число \(n\) (\(2 \le n \le 10^5\))   — количество узлов в дереве.

Каждая из следующих \(n-1\) строк содержит два разделенных пробелом целых числа \(u\) и \(v\) (\(1 \le u,v \le n\)), которые означают, что между узлами \(u\) и \(v\) есть ребро. Гарантируется, что данный граф является деревом.

Выходные данные

Выведите \(n-1\) целых чисел. \(i\)-е из них должно быть равно числу, записанным на \(i\)-м ребре (в порядке ввода).

Примечание

Дерево с второго примера:

D. Ехаб, XORминатор

битмаски жадные алгоритмы Конструктив теория чисел *1700

Для данных 2 чисел \(u\) и \(v\), найдите самые короткий массив такой, что побитовое исключающее ИЛИ его элементов равно \(u\), а сумма его элементов равна \(v\).

Входные данные

Единственная строка содержит 2 целых числа \(u\) и \(v\) \((0 \le u,v \le 10^{18})\).

Выходные данные

Если нет массива, удовлетворяющего условию, выведите "-1 ". В противном случае:

Первая строка должна содержать одно целое число, \(n\), равное длине нужного массива. Следующая строка должна содержать \(n\) положительных целых чисел, сам массив. Если есть несколько возможных ответов, выведите любой.

Примечание

В первом примере, \(3\oplus 1 = 2\) and \(3 + 1 = 4\). Заметьте, что подходящего массива меньшей длины не существует.

Обратите внимание, что в четвертом примере массив пуст.

F. Последняя теорема Ехаба

графы жадные алгоритмы Конструктив поиск в глубину и подобное *2500

Идет 5555-й год. У вас есть граф, и вы хотите найти длинный цикл и огромный независимый набор просто потому, что можете. Но пока что вы хотите найти хоть одно из двух.

Для связного графа с \(n\) вершинами вы можете или:

  • найти независимое множество с ровно \(\lceil\sqrt{n}\rceil\) вершинами.
  • найти простой цикл длиной не менее \(\lceil\sqrt{n}\rceil\).

Независимое множество  — это множество вершин такое, что никакие две вершины из него не связаны ребром. Простой цикл  — это цикл, который не содержит ни одной вершины дважды. Гарантировано, что вы всегда можете решить хотя бы одну из этих задач.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(5 \le n \le 10^5\), \(n-1 \le m \le 2 \cdot 10^5\))  — количество вершин и ребер в графе.

Каждая из следующих \(m\) строк содержит два разделенных пробелом целых числа \(u\) и \(v\) (\(1 \le u,v \le n\)), которые означают, что между вершинами \(u\) и \(v\) есть ребро. Гарантируется, что граф связен и не содержит никаких петель или двойных ребер.

Выходные данные

Если вы решили решить первую задачу, то в первой строке выведите 1, а затем строку, содержащую \(\lceil\sqrt{n}\rceil\) различных целых чисел, не превышающих \(n\), вершины в желаемом независимом наборе.

Если вы решили решить вторую задачу, то в первой строке выведите 2, затем строку, содержащую одно целое число \(c\), представляющее длину найденного цикла, за которой следует строка, содержащая \(c\) различных целых чисел, не превышающих \(n\)  — вершины в нужном цикле, в порядке, в котором они идут в цикле.

Примечание

В первом примере:

Обратите внимание, что вы можете решить обе задачи, поэтому вывод цикла \(2-4-3-1-5-6\) также является решением.

Во втором примере:

Обратите внимание, что если есть несколько ответов, вы можете вывести любой, поэтому, например, вывод цикла \(2-5-6\) разрешен.

В третьем примере:

A. Плохие некрасивые числа

Конструктив теория чисел *1000

Вам дано целое число \(n\) (\(n > 0\)). Вы должны найти любое целое число \(s\), которое удовлетворяет следующим условиям, или сказать, что таких чисел не существует:

Если рассмотреть десятичное представление числа \(s\), то:

  • \(s > 0\),
  • \(s\) содержит ровно \(n\) цифр,
  • никакая из цифр \(s\) не равна \(0\),
  • \(s\) не делится ни на одну из своих цифр.
Входные данные

Входные данные содержат несколько наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 400\))  — количество наборов входных данных. Следующие \(t\) строк описывают наборы.

Для каждого набора входных данных единственная строка содержит одно положительное целое число \(n\) (\(1 \leq n \leq 10^5\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных в тесте не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите целое число \(s\), которое удовлетворяет всем описанным условиям или «-1» (без кавычек), если таких чисел не существует. Если существует несколько возможных \(s\), вы можете найти любое.

Примечание

Не существует таких чисел \(s\), состоящих из одной цифры, потому что такие числа делятся сами на себя.

Все возможные ответы на второй тестовый случай это \(23\), \(27\), \(29\), \(34\), \(37\), \(38\), \(43\), \(46\), \(47\), \(49\), \(53\), \(54\), \(56\), \(57\), \(58\), \(59\), \(67\), \(68\), \(69\), \(73\), \(74\), \(76\), \(78\), \(79\), \(83\), \(86\), \(87\), \(89\), \(94\), \(97\), \(98\).

Число \(239\) является одним из возможных ответов на третий тестовый случай, потому что \(239\) не делится на \(2\), \(3\) и \(9\), содержит ровно три цифры, ни одна из которых не равна нулю.

C. Игра с фишками

Конструктив реализация *1600

У Пети есть прямоугольная доска размера \(n \times m\). Изначально на доске размещено \(k\) фишек, \(i\)-я из них находится в клетке, на пересечении \(sx_i\)-й строки и \(sy_i\)-го столбца.

За одно действие Петя может сдвинуть все фишки влево, вправо, вниз или вверх на \(1\) ячейку.

Если фишка была в клетке \((x, y)\), то после операции:

  • влево, ее координаты будут \((x, y - 1)\);
  • вправо, ее координаты будут \((x, y + 1)\);
  • вниз, ее координаты будут \((x + 1, y)\);
  • вверх, ее координаты будут \((x - 1, y)\).

Если фишка находится у стенки доски, и действие, выбранное Петей, двигает ее в направлении стены, то фишка остается на своей текущей позиции.

Обратите внимание, что несколько фишек могут располагаться в одной и той же клетке.

Для каждой фишки Петя выбрал позицию, в которой она должна побывать. Обратите внимание, что фишка не обязательно заканчивает в этой позиции.

Так как у Пети не очень много свободного времени, он готов сделать не более \(2nm\) действий, описанных выше.

Вам предстоит выяснить, какие действия должен делать Петя, чтобы все фишки побывали хотя бы раз в выбранных для них клетках. Или определить, что за \(2nm\) действий выполнить это невозможно.

Входные данные

Первая строка содержит три целых числа \(n, m, k\) (\(1 \le n, m, k \le 200\)) — количество строк и столбцов доски и количество фишек соответственно.

Следующие \(k\) содержат по два целых чисел \(sx_i, sy_i\) (\( 1 \le sx_i \le n, 1 \le sy_i \le m\)) — начальная позиция \(i\)-й фишки.

Следующие \(k\) содержат по два целых чисел \(fx_i, fy_i\) (\( 1 \le fx_i \le n, 1 \le fy_i \le m\)) — позиция, которую должна посетить \(i\)-я фишка хотя бы раз.

Выходные данные

В первой строке выведите количество операций, чтобы каждая фишка посетила хотя бы раз позицию, которую выбрал для нее Петя.

Во второй строке выведите последовательность операций. Для обозначения операций влево, вправо, вниз, вверх используйте символы \(L, R, D, U\) соответственно.

Если искомой последовательности не существует, в единственной строке выведите -1.

D. Карусель, карусель — это радость для нас

графы дп жадные алгоритмы Конструктив математика *1800

Круглая карусель состоит из \(n\) фигур различных животных. Фигуры пронумерованы от \(1\) до \(n\) по ходу движения карусели. Таким образом, после \(n\)-й фигуры идёт фигура с номером \(1\). Каждая фигура имеет вид — это животного этой фигуры (лошадка, тигр и др.). Вид животного \(i\)-й фигуры равен \(t_i\).

Пример изображения карусели для \(n=9\) и \(t=[5, 5, 1, 15, 1, 5, 5, 1, 1]\).

Вы хотите покрасить каждую фигуру в один из цветов. Вам кажется скучным, если в каруселе разные фигуры (с разными видами животных) идут подряд и покрашены в одинаковые цвета.

Ваша задача — покрасить фигуры так, чтобы количество различных использованных цветов было минимальным и не существовало двух фигур разного вида, которые идут подряд и покрашены в один цвет одновременно. Если Вы используете ровно \(k\) различных цветов, то цвета фигур должны быть пронумерованы целыми числами от \(1\) до \(k\).

Входные данные

Входные данные состоят из одного или более набора входных данных.

В первой строке записано целое число \(q\) (\(1 \le q \le 10^4\)) — количество наборов входных данных в тесте. Далее следуют описания \(q\) наборов входных данных, по две строки на каждый набор.

Первая строка набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — количество фигур на карусели. Фигуры пронумерованы от \(1\) до \(n\) по ходу вращения карусели. Считайте, что после фигуры \(n\) идёт фигура \(1\).

Вторая строка набора входных данных содержит \(n\) целых чисел \(t_1, t_2, \dots, t_n\) (\(1 \le t_i \le 2 \cdot 10^5\)), где \(t_i\) равно виду животного \(i\)-й фигуры.

Сумма значений \(n\) по всем наборам входных данных в тесте не превосходит \(2\cdot10^5\).

Выходные данные

Выведите \(q\) ответов — на для каждого набора входных данных выведите две строки.

В первую строку выведите одно целое число \(k\) — минимально возможное количество различных цветов фигур.

Во вторую строку выведите \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le k\)), где \(c_i\) обозначает номер цвета \(i\)-й фигуры. Если существует несколько возможных ответов, вы можете вывести любой из них.

A. Dreamoon любит красить

жадные алгоритмы Конструктив математика реализация *1800

Dreamoon очень любит красить клетки.

Есть ряд из \(n\) клеток. Исходно, все клетки пустые (не содержат никакой цвет). Клетки пронумерованы от \(1\) до \(n\).

Вам дано целое число \(m\) и \(m\) целых чисел \(l_1, l_2, \ldots, l_m\) (\(1 \le l_i \le n\))

Dreamoon совершит \(m\) операций.

В \(i\)-й операции, Dreamoon выберет число \(p_i\) из отрезка \([1, n-l_i+1]\) (включительно) и покрасит все клетки от \(p_i\) до \(p_i+l_i-1\) (включительно) в \(i\)-й цвет. Обратите внимание, что клетки могут быть покрашены несколько раз, в таком случае, клетка будет покрашена в цвет из самой последней операции.

Dreamoon надеется, что после \(m\) операций, все цвета будут встречаться хотя бы один раз и все клетки будут покрашены. Пожалуйста, помогите Dreamoon выбрать \(p_i\) в каждой операции, чтобы удовлетворить всем ограничениям.

Входные данные

В первой строке записаны два целых числа \(n,m\) (\(1 \leq m \leq n \leq 100\,000\)).

Во второй строке записано \(m\) целых чисел \(l_1, l_2, \ldots, l_m\) (\(1 \leq l_i \leq n\)).

Выходные данные

Если невозможно совершить \(m\) операций, чтобы удовлетворить всем ограничениям, выведите «-1» (без кавычек).

Иначе, выведите \(m\) целых чисел \(p_1, p_2, \ldots, p_m\) (\(1 \leq p_i \leq n - l_i + 1\)), после этих \(m\) операций, все цвета должны встречаться хотя бы один раз и все клетки должны быть покрашены.

Если есть несколько возможных решений, вы можете вывести любое.

C. Drazil любит кучи

жадные алгоритмы Конструктив реализация Структуры данных *2400

Drazil очень любит кучи, поэтому он придумал задачу про кучу:

Есть куча на максимум глубины \(h\), реализованная на массиве. Эта куча устроена следующим образом: куча содержит ровно \(2^h - 1\) различных положительных ненулевых целых чисел. Все целые числа различны. Эти числа содержатся в массиве \(a\), в котором элементы пронумерованы от \(1\) до \(2^h-1\). Для всех \(1 < i < 2^h\), \(a[i] < a[\left \lfloor{\frac{i}{2}}\right \rfloor]\).

Теперь он хочет уменьшить глубину кучи так, чтобы глубина стала \(g\), и куча содержала ровно \(2^g-1\) чисел. Чтобы уменьшить глубину, нужно применить следующую операцию \(2^h-2^g\) раз:

Выбрать индекс \(i\), который содержит элемент, и запустить функцию \(f\) от индекса \(i\):

Обратите внимание, что мы считаем, что если \(a[i]=0\), то индекс \(i\) не содержит элемент.

После всех операций, оставшиеся \(2^g-1\) элементов должны находиться в индексах от \(1\) до \(2^g-1\). Теперь Drazil хочет узнать, какая может быть минимальная сумма оставшихся \(2^g-1\) элементов. Пожалуйста, найдите эту сумму и последовательность вызовов функции, на которой эта сумма достигается.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \leq t \leq 70\,000\)): количество наборов входных данных.

Каждый набор входных данных содержит две строки. В первой строке записаны два целых числа \(h\) и \(g\) (\(1 \leq g < h \leq 20\)). Во второй строке записаны \(n = 2^h-1\) различных положительных целых чисел \(a[1], a[2], \ldots, a[n]\) (\(1 \leq a[i] < 2^{20}\)). Для всех \(i\) от \(2\) до \(2^h - 1\), \(a[i] < a[\left \lfloor{\frac{i}{2}}\right \rfloor]\).

Сумма по всем \(n\) меньше чем \(2^{20}\).

Выходные данные

Для каждого набора входных данных, выведите две строки.

В первой строке вы должны вывести минимальную сумму элементов после уменьшения глубины кучи до \(g\). Вторая строка должна содержать \(2^h - 2^g\) целых чисел \(v_1, v_2, \ldots, v_{2^h-2^g}\). В \(i\)-й операции должна быть вызвана \(f(v_i)\).

D. Dreamoon любит строки

Конструктив Структуры данных *3100

Dreamoon любит строки. Сегодня он придумал игру про строки:

Строка \(s_1, s_2, \ldots, s_n\) красивая если и только если для всех \(1 \le i < n, s_i \ne s_{i+1}\).

Исходно, у Dreamoon есть строка \(a\). За один ход Dreamoon может выбрать красивую подстроку \(a\) и удалить ее. Затем он должен сконкатенировать оставшиеся символы (в правильном порядке).

Dreamoon хочет использовать минимальное число ходов, чтобы сделать \(a\) пустой. Пожалуйста, помогите Dreamoon, и выведите любую последовательность, состоящую из минимального числа ходов, чтобы сделать \(a\) пустой.

Входные данные

В первой строке записано целое число \(t\) (\(1 \leq t \leq 200\,000\)), равное количество наборов входных данных.

Каждый набор входных данных содержит одну строку \(a\) из строчных латинских символов.

Гарантируется, что суммарный размер строк не превосходит \(200\,000\).

Выходные данные

Для каждого набора входных данных, в первой строке вы должны вывести \(m\): минимальное количество ходов, чтобы сделать \(a\) пустой. Каждая из следующих \(m\) строк должна содержать два целых числа \(l_i, r_i\) (\(1 \leq l_i \leq r_i \leq |a|\)), описывающих, что на \(i\)-м шагу нужно удалить символы с индексами от \(l_i\) до \(r_i\) из исходной строки. (Индексы пронумерованы начиная с \(1\)).

Обратите внимание, что после удаления подстроки, индексы оставшихся символов могут измениться, и \(r_i\) не должен превышать текущий размер \(a\).

Если есть несколько возможных решений, вы можете вывести любое.

B. Непростая покраска

жадные алгоритмы Конструктив математика Перебор теория чисел *1400

Положительное целое число называется составным, если оно представимо в виде произведения двух положительных целых чисел, каждое из которых больше \(1\). Например, следующие числа составные: \(6\), \(4\), \(120\), \(27\). Следующие числа составными не являются: \(1\), \(2\), \(3\), \(17\), \(97\).

Задана последовательность из \(n\) составных чисел \(a_1,a_2,\ldots,a_n\).

Алиса хочет выбрать любое целое число \(m \le 11\) и покрасить каждый элемент в один из \(m\) цветов от \(1\) до \(m\) так, что:

  • для каждого цвета от \(1\) до \(m\) существует хотя бы один элемент этого цвета;
  • каждый элемент покрашен и притом ровно в один цвет;
  • наибольший общий делитель любых двух одноцветных элементов больше \(1\), то есть \(\gcd(a_i, a_j)>1\) для любой пары индексов \(i, j\), если эти элементы покрашены в одинаковый цвет.

Обратите внимание, что одинаковые элементы могут быть покрашены в разные цвета — просто для каждого индекса от \(1\) до \(n\) надо выбрать один из \(m\) цветов.

Алиса уже показала, что если все \(a_i \le 1000\), то она всегда может решить эту задачу, выбрав некоторое \(m \le 11\).

Помогите Алисе найти требуемую покраску элементов. Обратите внимание, что вам не нужно минимизировать или максимизировать количество цветов, достаточно найти решения с любым \(m\) от \(1\) до \(11\).

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных в тесте. Далее содержатся сами описания наборов.

В первой строке набора записано целое число \(n\) (\(1 \le n \le 1000\)) — количество чисел в последовательности \(a\).

Вторая строка набора входных данных содержит \(n\) составных целых чисел \(a_1,a_2,\ldots,a_n\) (\(4 \le a_i \le 1000\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите \(2\) строки. В первую выведите \(m\) (\(1 \le m \le 11\)) — количество использованных цветов. Считайте, что цвета пронумерованы от \(1\) до \(m\). Во вторую строку выведите любую раскраску элементов, которая удовлетворяет условиям выше. Выведите \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le m\)), где \(c_i\) — цвет \(i\)-го элемента. Если решений несколько, то выведите любое из них. Обратите внимание, что вам не нужно минимизировать или максимизировать количество цветов, достаточно найти решения с любым \(m\) от \(1\) до \(11\).

Помните, что каждый цвет от \(1\) до \(m\) должен быть использован хотя бы раз. Любые два одноцветных элемента должны не быть взаимно просты (то есть их НОД должен быть больше \(1\)).

Примечание

В первом наборе входных данных \(\gcd(6,10)=2\), \(\gcd(6,15)=3\) и \(\gcd(10,15)=5\). Таким образом, допустимо раскрасить все три элемента в один цвет. Обратите внимание, что для данного набора входных данных существуют и другие раскраски, которые удовлетворяют требованиям Алисы.

Во втором наборе входных данных в каждый цвет покрашен только один элемент, так что раскраска точно походит под все требования Алисы.

D. Прогулка по матрице

битмаски Конструктив математика *1700

Боб играет в игру под названием «Прогулка по матрице»

В этой игре игроку дается \(n \times m\) матрица \(A=(a_{i,j})\), то есть элемент в \(i\)-й строке в \(j\)-м столбце — \(a_{i,j}\). В начале игры игрок стоит на позиции \((1,1)\) со счетом \(a_{1,1}\).

Чтобы достичь финиша, позиции \((n,m)\), игрок может ходить вправо или вниз, то есть из \((x,y)\) в \((x,y+1)\) или \((x+1,y)\), до тех пор, пока не выходит за пределы матрицы.

Каждый шаг, однако, изменяет счет игрока на побитовое И текущего счета и значения клетки, в которую он переходит.

Конечно же, Боб сразу решил вычислить максимальный счет, который он может набрать, с помощью недавно изученной им техники динамического программирования. Вот его алгоритм для данной задачи.

Однако, он тут же понял, что его алгоритм неправильно находит максимальный счет для некоторой матрицы \(A\). Поэтому теперь он хочет для каждого неотрицательного целого числа \(k\) найти такую \(n \times m\) матрицу \(A=(a_{i,j})\), что

  • \(1 \le n,m \le 500\) (Боб ненавидит большие матрицы);
  • \(0 \le a_{i,j} \le 3 \cdot 10^5\) для всех \(1 \le i\le n,1 \le j\le m\) (Боб ненавидит большие числа);
  • разница между максимальным счетом, который он может набрать, и выводом алгоритма составляет ровно \(k\).

Можно показать, что для любого целого \(k\) такого, что \(0 \le k \le 10^5\), существует матрица, удовлетворяющая данным условиям.

Помогите Бобу с этой задачей!

Входные данные

В единственной строке записано одно целое число \(k\) (\(0 \le k \le 10^5\)).

Выходные данные

В первой строке выведите два целых числа \(n\), \(m\) (\(1 \le n,m \le 500\)), обозначающие размеры матрицы.

Затем выведите \(n\) строк по \(m\) целых чисел в каждой строке, \(a_{i,j}\) в \((i+1)\)-й строке, \(j\)-м столбце.

Примечание

В первом примере максимальный счет, который может набрать Боб, равен \(300000\), и вывод его алгоритма тоже \(300000\).

Во втором примере максимальный счет, который Боб может набрать, равен \(7\&3\&3\&3\&7\&3=3\), когда вывод его алгоритма — это \(2\).

E. Все высоты равны

Комбинаторика Конструктив математика матрицы *2100

Алиса недавно подсела на игру, которая называется Сиртет.

В игре Сиртет игроку дается поле \(n \times m\). В начале игры \(a_{i,j}\) кубиков поставлены друг на друга в клетке \((i,j)\). Две клетки называются соседними, если у них есть общая сторона. Игрок может делать следующие ходы:

  • поставить по одному кубику на две соседние клетки;
  • поставить два кубика в одну клетку.

Упомянутые кубики все одинаковой высоты.

Пример игры изображен на картинке. Состояния справа достигаются с помощью выполнения данных ходов из состояния слева, и после хода добавляются серые кубики.

Цель игрока — сделать высоты всех клеток одинаковыми (то есть в каждой клетке должно быть одинаковое количество кубиков) при помощи данных ходов.

Алиса обнаружила, что на некоторых начальных полях невозможно достичь цели, какие бы ходы игрок не делал. Поэтому ей стало интересно, сколько существует таких начальных полей, что

  • \(L \le a_{i,j} \le R\) для всех \(1 \le i \le n\), \(1 \le j \le m\);
  • игрок может достичь цели, используя данные ходы.

Пожалуйста, помогите Алисе с этим. Обратите внимание, что ответ может быть довольно большой, поэтому выведите его по модулю \(998,244,353\).

Входные данные

В единственной строке записаны четыре целых числа \(n\), \(m\), \(L\) и \(R\) (\(1\le n,m,L,R \le 10^9\), \(L \le R\), \(n \cdot m \ge 2\)).

Выходные данные

Выведите одно целое число, обозначающее ответ по модулю \(998,244,353\).

Примечание

В первом примере единственное поле, которое удовлетворяет условиям — это \(a_{1,1}=a_{2,1}=a_{1,2}=a_{2,2}=1\). Поэтому ответ \(1\).

Во втором примере начальные поля, которые удовлетворяют условиям, — это \(a_{1,1}=a_{1,2}=1\) и \(a_{1,1}=a_{1,2}=2\). Поэтому ответ \(2\).

A. Маленький Артем

Конструктив *1000

Маленькому мальчику Артему понадобилась помощь его мамы Медины в одной раскраске. Медина очень занята, поэтому она просит вашей помощи.

Артем хочет раскрасить доску \(n \times m\). Каждая клетка доски должна быть покрашена либо в белый, либо в черный цвет.

Пусть \(B\)  — количество черных клеток, у которых есть хотя бы один белый сосед по стороне. Аналогично \(W\)  — количество белых клеток, у которых есть хотя бы один черный сосед по стороне. Раскраска доски называется хорошей, если \(B = W + 1\).

На первой из раскрасок ниже \(B=5\), \(W=4\) (каждая клетка имеет хотя бы одного соседа противоположного цвета). На второй же раскраска плохая, так как \(B=4\), \(W=4\) (только правая нижняя клетка не имеет соседа противоположного цвета).

Пожалуйста, помогите Медине найти любую хорошую раскраску. Гарантируется, что для данных ограничений решение всегда существует. Если существует несколько различных решений, выведите любое из них.

Входные данные

Каждый тест содержит несколько наборов входных данных.

Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 20\)). Каждя из следующих \(t\) строк содержит два целых числа \(n, m\) (\(2 \le n,m \le 100\))  — размеры таблицы, которую нужно покрасить.

Выходные данные

Для каждого тестового случая выведите \(n\) строк, каждая длины \(m\), где \(i\)-я обозначает \(i\)-ю строку раскрашенной таблицы (B обозначает черную клетку и W обозначает белую клетку). Выводите все без использования кавычек.

Гарантируется, что для данных ограничений решение всегда существует.

Примечание

В первом тестовом случае \(B=3\) и \(W=2\).

Во втором тестовом случае \(B=5\), \(W=4\). Пример этой раскраски есть в условии.

D. Досуг в школе №41

графы жадные алгоритмы игры Конструктив Перебор реализация сортировки *2100

В средней школе №41 учатся \(n\) детей. Всем известно, что они хорошие математики. Однажды на перемене ребята решили провести исследование. Они выстроились в один ряд и повернули головы налево или направо.

Дети проделывали следующую операцию: каждую секунду несколько пар соседних в ряду детей, смотрящих друг на друга, могли одновременно развернуться в противоположную сторону. Таким образом, ребенок, смотрящий на правого соседа, повернется налево, и наоборот для второго ребенка. Более того, каждую секунду хотя бы одна пара соседних детей проделывала подобную операцию. Процесс заканчивается, когда нет пары соседних детей смотрящих друг на друга.

Дано число детей \(n\), изначальная расстановка детей в ряду и целое положительное число \(k\). Необходимо найти последовательность действий детей, завершающий процесс ровно за \(k\) секунд. Более формально, на каждый из \(k\) ходов нужно вывести номера детей, которые повернутся налево во время хода.

Для примера, дети могут действовать с конфигурацией приведенной ниже и \(k = 2\) следующим образом:

На первом ходу развернутся две пары: \((1, 2)\) и \((3, 4)\). После этого получается такая конфигурация:
На втором ходу развернется только пара \((2, 3)\). В итоговой конфигурации никакая пара детей не смотрит друг на друга. Хорошая работа.

Если решение существует, то гарантируется что дети совершат не более чем \(n^2\) разворотов.

Входные данные

Первая строка входных данных содержит два целых числа \(n\), \(k\) (\(2 \le n \le 3000\), \(1 \le k \le 3000000\))  — количество детей и количество ходов через которые нужно закончить.

Вторая строка входных данных содержит строку длины \(n\), которая состоит только из символов L и R. L значит, что ребенок смотрит налево, а R  — направо.

Выходные данные

Если решения не существует, выведите \(-1\).

Иначе, вывод должен состоять из \(k\) строк. Каждая строка должна начинаться с положительного целого числа \(n_i\) (\(1\le n_i \le \frac{n}{2}\))  — количества пар детей, которые развернутся на этом ходу. Далее в этой же строке должно следовать \(n_i\) попарно различных чисел  — номера детей, которые повернут голову налево во время этого хода.

После проведения всех разворотов, не должно быть пары соседних детей, смотрящих друг на друга.

Если существует более одного решения, выведите любое из них.

Примечание

Первый тест описывает пару детей смотрящих друг на друга. За один ход они развернутся.

Во втором тесте дети не могут сделать ни одного хода. В итоге они не смогут закончить за \(k>0\) ходов.

Третий тест описан в условии.

E. Путь к 1600

Конструктив Перебор *2400

Егор стремится набрать 1600 баллов на известном шахматном портале ChessForces и ему нужна ваша помощь!

Прежде чем приступить к решению проблемы, Егор хочет напомнить вам, как ходят шахматные фигуры. Шахматная ладья движется по прямым линиям вверх и вниз, влево и вправо на столько квадратов, сколько захочет. И когда она хочет, может остановиться. Ферзь ходит во всех направлениях по вертикали, горизонтали и по диагоналям на любом расстоянии. Вы можете увидеть примеры ниже.

Для достижения цели Егор должен исследовать следующую проблему:

Дана доска \(N \times N\). Каждая ячейка доски имеет число от \(1\) до \(N ^ 2\), и все числа в клетках попарно различны.

В начале некоторая фигура ставится в ячейку с номером \(1\). Заметьте, что эта ячейка уже считается посещенной. После этого каждый ход определяется следующим образом:

  1. Среди всех пока непосещенных клеток, которые могут быть достигнуты одним движением фигуры, фигура движется в ячейку с минимальным номером.
  2. Если все доступные ячейки уже посещены и на доске остались непосещенные клетки, то шахматная фигура телепортируется в непосещенную клетку с минимальным номером. В конце этого шага фигура вынуждена заплатить \(1\) vun.
  3. Если все ячейки уже посещены, тогда процесс останавливается.

Егор должен найти такую нумерацию доски размера \(N \times N\), что ладья, обойдя всю доску, заплатит строго меньше vun–ов, чем ферзь на этой доске. Помогите Егору найти подходящую доску размера \(N \times N\), или скажите, что ее не существует.

Входные данные

Единственная строка содержит число \(N\)  — размер доски, \(1\le N \le 500\).

Выходные данные

Вывод должен содержать \(N\) строк.

В \(i\)–ой строке выведите \(N\) чисел  — числа в \(i\)-м горизонтальном ряду доски. Все числа от \(1\) до \(N \times N\) должны быть использованы ровно один раз.

На вашей доске ладья должна платить строго меньше vun–ов, чем ферзь.

Если решения не существует, выведите \(-1\).

Если существует более одного решения, выведите любое из них.

Примечание

В случае с доской размера \(1 \times 1\), и ладья, и ферзь не платят ничего.

Во втором примере ладья проходит через клетки \(1 \to 3 \to 4 \to 6 \to 9 \to 5 \to 7 \to 13 \to 2 \to 8 \to 16 \to 11 \to 10 \to 12 \to 15 \to \textbf{(1 vun)} \to 14\).

Ферзь проходит через \(1 \to 3 \to 4 \to 2 \to 5 \to 6 \to 9 \to 7 \to 13 \to 8 \to 11 \to 10 \to 12 \to 15 \to \textbf{(1 vun)} \to 14 \to \textbf{(1 vun)} \to 16\).

В результате ладья платит 1 vun, а ферзь платит 2 vun.

C. Круг монстров

жадные алгоритмы Конструктив математика Перебор *1600

Вы играете в очередную компьютерную игру, и теперь вам предстоит убить \(n\) монстров. Эти монстры стоят в круге, пронумерованном по часовой стрелке от \(1\) до \(n\). Изначально \(i\)-й монстр имеет \(a_i\) единиц здоровья.

Вы можете стрелять в монстров, чтобы убить их. Каждый выстрел требует ровно одной пули и уменьшает здоровье монстра на \(1\) (наносит ему \(1\) единицу урона). Кроме того, когда здоровье некоторого монстра \(i\) становится \(0\) или меньше \(0\), он умирает и взрывается, нанося \(b_i\) урон следующему монстру (монстру под номером \(i + 1\), если \(i < n\), или монстру под номером \(1\), если \(i = n\)). Если следующий монстр уже мертв, то ничего не происходит. Если взрыв убивает следующего монстра, он тоже взрывается, повреждая монстра после него и, возможно, вызывая еще один взрыв, и так далее.

Вы должны посчитать минимальное количество пуль, которое нужно выстрелить, чтобы убить всех \(n\) монстров в кругу.

Входные данные

Первая строка содержит одно целое число \(T\) (\(1 \le T \le 150000\)) — количество наборов входных данных.

Затем следуют наборы входных данных, каждый из них начинается со строки, содержащей одно целое число \(n\) (\(2 \le n \le 300000\)) — количество монстров. Затем следуют \(n\) строк, каждая из которых содержит два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le 10^{12}\)) — параметры \(i\)-го монстра в круге.

Гарантируется, что общее количество монстров во всех тестовых случаях не превышает \(300000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество пуль, которые нужно выстрелить, чтобы убить всех монстров.

D. Минимальный эйлеров цикл

графы жадные алгоритмы Конструктив реализация *1800

Вам задан полный ориентированный граф \(K_n\) из \(n\) вершин: у каждой пары вершин \(u \neq v\) в \(K_n\) есть обе дуги \((u, v)\) и \((v, u)\); петель в графе нет.

Вам нужно найти такой цикл в \(K_n\), который проходит по каждой дуге ровно один раз (вершины можно посещать несколько раз).

Мы можем выписать такой цикл как список из \(n(n - 1) + 1\) вершин \(v_1, v_2, v_3, \dots, v_{n(n - 1) - 1}, v_{n(n - 1)}, v_{n(n - 1) + 1} = v_1\) — порядок обхода, в котором каждая дуга \((v_i, v_{i + 1})\) встречается по одному разу.

Найдите лексикографически минимальный такой цикл. Не трудно доказать, что такой цикл всегда существует.

Так как ответ может быть слишком большим, выведите только его \([l, r]\) отрезок, то есть \(v_l, v_{l + 1}, \dots, v_r\).

Входные данные

В первой строке задано единственное число \(T\) (\(1 \le T \le 100\)) — количество наборов входных данных.

В следующих \(T\) строках заданы сами наборы входных данных — по одному на строку. В данной строке задано три целых числа \(n\), \(l\) и \(r\) (\(2 \le n \le 10^5\), \(1 \le l \le r \le n(n - 1) + 1\), \(r - l + 1 \le 10^5\)) — количество вершин в \(K_n\) и отрезок цикла, который нужно вывести.

Гарантируется, что сумма по \(n\) не превосходит \(10^5\) и сумма длин отрезков \(r - l + 1\) не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите отрезок \(v_l, v_{l + 1}, \dots, v_r\) лексикографически минимального цикла, который проходит по каждой дуге ровно один раз.

Примечание

Во втором наборе, лексикографически минимальный цикл выглядит следующим образом: \(1, 2, 1, 3, 2, 3, 1\).

В третьем примере, довольно очевидно, что цикл должен начинаться и заканчиваться в вершине \(1\).

B. Построить строку

Конструктив *900

Вам даны три целых положительных числа \(n\), \(a\) и \(b\). Вам хочется построить такую строку \(s\) длины \(n\), состоящую из строчных букв латинского алфавита, что каждая подстрока длины \(a\) содержит ровно \(b\) различных букв. Гарантируется, что ответ существует.

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Напомним, что подстрокой строки \(s[l \dots r]\) называется строка \(s_l, s_{l+1}, \dots, s_{r}\), длина которой равна \(r - l + 1\). В этой задаче вам интересны только подстроки длины \(a\).

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 2000\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Единственная строка каждого набора содержит три разделенных пробелами целых числа \(n\), \(a\) и \(b\) (\(1 \le a \le n \le 2000, 1 \le b \le \min(26, a)\)), где \(n\) — длина необходимой строки, \(a\) — длина подстроки, а \(b\) — требуемое количество различных букв в каждой подстроке длины \(a\).

Гарантируется, что сумма чисел \(n\) по всем наборам тестовых данных не превосходит \(2000\) (\(\sum n \le 2000\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ на него — такую строку \(s\) длины \(n\), состоящую из строчных букв латинского алфавита, что каждая подстрока длины \(a\) содержит ровно \(b\) различных букв. Если ответов несколько, выведите любой из них. Гарантируется, что ответ существует.

Примечание

В первом наборе тестовых данных примера посмотрим на все подстроки длины \(5\):

  • «tleel» — в ней три различных буквы \(3\),
  • «leelt» — в ней три различных буквы \(3\),
  • «eelte» — в ней три различных буквы \(3\).

D. Анти-судоку

Конструктив реализация *1300

Вам дано корректное решение головоломки судоку. Если вы не знаете, что такое судоку, то вы можете прочитать об этом здесь.

Картинка, показывающая корректное решение судоку:

Блоки ограничены жирным черным цветом.

Ваша задача — заменить не более \(9\) элементов этого поля (то есть, выбрать некоторые \(1 \le i, j \le 9\) и заменить число в позиции \((i, j)\) на любое другое число в отрезке \([1; 9]\)), чтобы получить анти-судоку. Анти-судоку — это поле размера \(9 \times 9\), в котором:

  • Каждое число на этом поле находится в отрезке \([1; 9]\);
  • каждая строка содержит как минимум два одинаковых элемента;
  • каждый столбец содержит как минимум два одинаковых элемента;
  • каждый блок размера \(3 \times 3\) (о том, что такое блок, вы можете прочитать по ссылке выше) содержит как минимум два одинаковых элемента.

Гарантируется, что ответ существует.

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка тестовых данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Каждый набор состоит из \(9\) строк, каждая строка состоит из \(9\) символов от \(1\) до \(9\) без пробелов — то есть, представляет собой корректное решение головоломки судоку.

Выходные данные

Для каждого набора тестовых данных выведите ответ на него — заданное изначально поле с не более, чем \(9\) измененными в нем элементами так, что полученное поле является анти-судоку. Если существует несколько подходящих решений, вы можете вывести любое. Гарантируется, что ответ существует.

D. Yui и маджонг

интерактив Конструктив *3200

Это интерактивная задача.

Yui девочка, которая очень любит играть в маджонг.

 

У нее есть таинственный набор, который состоит из нескольких плиток (этот набор может быть пустым). Каждая плитка содержит целое число от \(1\) до \(n\) и не больше, чем \(n\) плиток в множестве имеют одинаковое значение. Таким образом, в множество содержит не больше, чем \(n^2\) плиток.

Вы хотите узнать, какие числа написаны на плитках в множестве. Для этого Yui хочет сыграть с вами в игру.

Давайте назовем множество, состоящее из трех плиток равной тройкой, если значения на плитках одинаковые. Например, \(\{2,\,2,\,2\}\) это равная тройка, а \(\{2,\,3,\,3\}\) нет.

Давайте назовем множество, состоящее из трех плиток последовательной тройкой, если значения на плитках последовательные целые числа. Например, \(\{2,\,3,\,4\}\) это последовательная тройка, а \(\{1,\,3,\,5\}\) нет.

Сначала, Yui называет вам количество подмножеств плиток, которые являются равными тройками и количество подмножеств плиток, которые являются последовательными тройками в ее множестве плиток. После этого, вы можете добавить плитку с целым числом от \(1\) до \(n\) в множество не более, чем \(n\) раз. Каждый раз добавляя плитку, в ответ вы получите количество подмножеств плиток в текущем множестве плиток, которые являются равными тройками и количество подмножеств плиток в текущем множестве плиток, которые являются последовательными тройками.

Обратите внимание, что любые две различные плитки с одинаковым значением считаются различными. Другими словами, в множестве \(\{1,\,1,\,2,\,2,\,3\}\) вы можете найти \(4\) подмножества \(\{1,\,2,\,3\}\).

Угадайте количество плиток в изначальном множестве с числом \(i\) для всех целых чисел \(i\) от \(1\) до \(n\).

Входные данные

В первой строке находится единственное целое число \(n\) (\(4 \le n \le 100\)).

Во второй строке находится два целых числа, равные количеству подмножеств плиток, которые являются равными тройками и количеству подмножеств плиток, которые являются последовательными тройками в изначальном множестве плиток.

Выходные данные

Когда ваша программа будет готова ответить, выведите строку в формате «! \(a_1\) \(a_2\) \(\ldots\) \(a_n\)» (\(0 \le a_i \le n\)), где \(a_i\) будет равно количеству плиток в изначальном множестве с числом \(i\).

Протокол взаимодействия

Для того, чтобы добавить плитку в множество, выведите строку в формате «+ \(x\)» (\(1 \le x \le n\)), где \(x\) равно числу, которое будет на плитке, которую вы добавляете. В ответ вы должны считать два целых числа, равных количеству подмножеств плиток, которые являются равными тройками и количеству подмножеств плиток, которые являются последовательными тройками в текущем множестве плиток.

После вывода строки с запросом добавления плитки или строки с ответом не забывайте сбрасывать буфер вывода. Иначе ваше решение получит вердикт Idleness limit exceeded.

Для того, чтобы сделать это, используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascall;
  • stdout.flush() в Python;
  • обратитесь к документации для остальных языков.

Вы получите вердикт Wrong answer, если вы добавите больше, чем \(n\) плиток в множество.

Взломы

Для того, чтобы сделать взлом, вы должны предоставить тест в следующем формате:

В первой строке находится единственное целое число \(n\) (\(4 \le n \le 100\)).

Во второй строке находится \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(0 \le a_i \le n\))  — \(a_i\) равно количеству плиток с числом \(i\) в множестве.

Примечание

В первом тесте, изначальное множество плиток \(\{1, 1, 2, 3, 3, 3, 5, 5\}\). Оно содержит одну равную тройку \(\{3, 3, 3\}\) и шесть последовательных троек, которые все равны \(\{1, 2, 3\}\). После добавления в множество плитки со значением \(1\) множество плиток станет \(\{1, 1, 1, 2, 3, 3, 3, 5, 5\}\) и будет содержать две равные тройки \(\{1, 1, 1\}\), \(\{3, 3, 3\}\) и девять последовательных троек, которые все равны \(\{1, 2, 3\}\).

A. Ichihime и треугольник

Конструктив математика *800

Ichihime нынешняя жрица храма души Маджонга. Она утверждает, что она человек, несмотря на свои кошачьи ушки.

Сейчас в храме проводится соревнование по математике. Обычно Ichihime не проявляет интереса к подобным вещам, но в этот раз призом является ее любимое печенье, поэтому она решила принять участие. Сейчас она решает следующую задачу.

 

Вам даны четыре положительных целых числа \(a\), \(b\), \(c\), \(d\), такие что \(a \leq b \leq c \leq d\).

Вам нужно найти три целых числа \(x\), \(y\), \(z\), удовлетворяющие следующим условиям:

  • \(a \leq x \leq b\).
  • \(b \leq y \leq c\).
  • \(c \leq z \leq d\).
  • Существует треугольник положительной площади, длины сторон которого равны \(x\), \(y\) и \(z\).

Ichihime хочет получить печенье, но эта задачка очень трудная для нее. Можете ли вы помочь ей?

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 1000\))  — количество тестовых случаев.

Следующие \(t\) строк содержат описания тестовых случаев. Каждая строка описания тестового случая содержит четыре положительных целых числа \(a\), \(b\), \(c\), \(d\) (\(1 \leq a \leq b \leq c \leq d \leq 10^9\)).

Выходные данные

Для каждого тестового случая выведите три целых числа \(x\), \(y\), \(z\) — три числа, которые вы нашли, удовлетворяющие описанным требованиям.

Гарантируется, что ответ всегда существует. Если существует несколько возможных ответов, выведите любой.

Примечание

Одно из возможных решений для первого тестового случая:

Одно из возможных решений для второго тестового случая:

B. Назначение весов ребрам

битмаски Деревья жадные алгоритмы Конструктив математика поиск в глубину и подобное *1800

У вас есть невзвешенное дерево на \(n\) вершинах. Вы должны назначить положительный вес каждому ребру, чтобы выполнялось следующее условие:

  • Для каждых двух разных листов \(v_{1}\) и \(v_{2}\) этого дерева, побитовое исключающее ИЛИ весов всех ребер на простом пути между \(v_{1}\) и \(v_{2}\) должно быть равно \(0\).

Обратите внимание, что вы можете назначать очень большие натуральные числа (такие как \(10^{(10^{10})}\)).

Гарантируется, что такое назначение всегда существует при данных ограничениях. Теперь определим \(f\) как количество различных весов среди назначенных весов.

В этом примере назначение верно, потому что побитовое исключающее ИЛИ всех весов ребер между каждой парой листьев равно \(0\). Значение \(f\) здесь равно \(2\), потому что есть \(2\) различных веса ребер (\(4\) и \(5\)).

В этом примере назначение не удовлетворяет условию, поскольку побитовое исключающее ИЛИ всех весов ребер между вершинами \(1\) и \(6\) (\(3, 4, 5, 4\)) не равно \(0\).

Чему равны минимальное и максимальное возможные значения \(f\) для данного дерева? Найдите и выведите оба.

Входные данные

Первая строка содержит целое число \(n\) (\(3 \le n \le 10^{5}\))  — количество вершин в данном дереве.

\(i\)-я из следующих \(n-1\) строк содержит два целых числа \(a_{i}\) и \(b_{i}\) (\(1 \le a_{i} \lt b_{i} \le n\))  — это означает, что существует ребро между \(a_{i}\) и \(b_{i}\). Гарантируется, что данный граф образует дерево из \(n\) вершин.

Выходные данные

Выведите два целых числа  — минимальное и максимальное возможное значения \(f\), которые могут быть получены из правильного назначения данного дерева. Обратите внимание, что такое назначение всегда существует при данных ограничениях.

Примечание

В первом примере возможные назначения для минимума и максимума показаны на рисунке ниже. Конечно, есть и другие назначения.

Во втором примере возможные назначения для минимума и максимума показаны на рисунке ниже. Значение \(f\) для правильного назначения этого дерева всегда равно \(3\).

В третьем примере возможные назначения для минимума и максимума показаны на рисунке ниже. Конечно, есть и другие назначения.

C. Прекрасные тройки

битмаски Конструктив математика Перебор разделяй и властвуй *2200

Рассмотрим бесконечную последовательность \(s\) натуральных чисел, построенную повторением следующих шагов:

  1. Найдите лексикографически наименьшую тройку натуральных чисел \((a, b, c)\) такую, ​​что Здесь тройка целых чисел \((a_1, b_1, c_1)\) считается лексикографически меньше тройки \((a_2, b_2, c_2)\), если последовательность \([a_1, b_1, c_1]\) лексикографически меньше последовательности \([a_2, b_2, c_2]\)
  2. Добавьте \(a\), \(b\), \(c\) в конец \(s\) в этом порядке.
  3. Вернитесь к первому шагу.

У вас есть целое число \(n\). Найдите \(n\)-й элемент \(s\).

Вы должны ответить на \(t\) независимых тестовых случаев.

Последовательность \(a\) лексикографически меньше последовательности \(b\), если в первой позиции, где \(a\) и \(b\) различны, в последовательности \(a\) элемент меньше, чем соответствующий элемент в \(b\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\))  — количество тестовых случаев.

Каждая из следующих \(t\) строк содержит одно целое число \(n\) (\(1\le n \le 10^{16}\))  — позицию элемента, который вы хотите узнать.

Выходные данные

В каждой из строк \(t\) выведите ответ на соответствующий тестовый случай.

Примечание

Первые несколько элементов \(s\) это \(1, 2, 3, 4, 8, 12, 5, 10, 15, \dots \)

D. Вложенные резинки

Деревья дп Конструктив математика поиск в глубину и подобное *2700

У вас есть дерево из \(n\) вершин. Вы собираетесь преобразовать это дерево в \(n\) резинок на бесконечной плоскости. Должно выполняться следующее;

  • Для каждой пары вершин \(a\) и \(b\), резинки \(a\) и \(b\) должны пересекаться тогда и только тогда, когда между \(a\) и \(b\) в дереве существует ребро.
  • Форма резинки должна быть простой петлей. Другими словами, резинка  — это замкнутая кривая без самопересечений.

Теперь давайте дадим следующие определения:

  • Резинка \(a\) включает резинку \(b\), если и только если резинка \(b\) находится полностью внутри резинки \(a\), и они не пересекаются.
  • Последовательность резинок \(a_{1}, a_{2}, \ldots, a_{k}\) (\(k \ge 2\)) называется вложенной, если и только если для всех \(i\) (\(2 \le i \le k\)), \(a_{i-1}\) включает в себя \(a_{i}\).
Это пример преобразования. Обратите внимание, что резинки \(5\) и \(6\) являются вложенными.

Можно доказать, что при заданных ограничениях существует преобразование и последовательность вложенных резинок.

Какую максимальную длину последовательности вложенных резинок можно получить из данного дерева? Найдите и выведите ее.

Входные данные

Первая строка содержит целое число \(n\) (\(3 \le n \le 10^{5}\))  — количество вершин в данном дереве.

\(i\)-я из следующих \(n-1\) строк содержит два целых числа \(a_{i}\) и \(b_{i}\) (\(1 \le a_{i} \lt b_{i} \le n\))  — это означает, что существует ребро между \(a_{i}\) и \(b_{i}\). Гарантируется, что данный граф образует дерево из \(n\) вершин.

Выходные данные

Выведите ответ.

Примечание

В первом примере можно получить вложенную последовательность из \(4\) резинок (\(1\), \(2\), \(5\) и \(6\)) с помощью следующего преобразования, приведенного ниже. Конечно, существуют и другие преобразования для создания вложенной последовательности длины \(4\). Однако вы не можете сделать последовательность из \(5\) или более вложенных резинок для данного дерева.

Одно из возможных преобразований для второго примера приведено ниже.

B. Отсортированные разности соседних

Конструктив сортировки *1200

У вас есть массив из \(n\) чисел \(a_{1}, a_{2}, \ldots, a_{n}\).

Переставьте эти числа так, чтобы они удовлетворяли \(|a_{1} - a_{2}| \le |a_{2} - a_{3}| \le \ldots \le |a_{n-1} - a_{n}|\), где \(|x|\) обозначает абсолютное значение \(x\). Гарантируется, что для данных ограничений всегда можно найти такую перестановку.

Обратите внимание, что элементы в \(a\) не обязательно попарно различны. Другими словами, некоторые элементы \(a\) могут быть одинаковыми.

Вы должны ответить на \(t\) независимых тестовых случаев.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^{4}\))  — количество тестовых случаев.

Первая строка каждого тестового случая содержит одно целое число \(n\) (\(3 \le n \le 10^{5}\))  — длину массива \(a\). Гарантируется, что сумма значений \(n\) по всем тестовых случаях не превышает \(10^{5}\).

Вторая строка каждого тестового случая содержит \(n\) целых чисел \(a_{1}, a_{2}, \ldots, a_{n}\) (\(-10^{9} \le a_{i} \le 10^{9}\)).

Выходные данные

Для каждого тестового случая выведите перестановку массива \(a\), которая удовлетворяет данному условию. Если существует несколько допустимых перестановок, выведите любую из них.

Примечание

В первом тестовом случае, для данной перестановки, мы имеем \(|a_{1} - a_{2}| = 0 \le |a_{2} - a_{3}| = 1 \le |a_{3} - a_{4}| = 2 \le |a_{4} - a_{5}| = 2 \le |a_{5} - a_{6}| = 10\). Существуют также другие ответы, к примеру "5 4 5 6 -2 8".

Во втором тестовом случае, для данной перестановки, мы имеем \(|a_{1} - a_{2}| = 1 \le |a_{2} - a_{3}| = 2 \le |a_{3} - a_{4}| = 4\). Существуют также другие ответы, к примеру "2 4 8 1".

C. Обмены

графы жадные алгоритмы Конструктив *2200

За круглым столом сидят n игроков. У всех них в сумме s карт n цветов, причем на начальный момент у первого человека карты только первого цвета, у второго — второго цвета и так далее. Они могут меняться картами, согласно следующим правилам:

  • человек может отдавать в процессе обмена карту только своего цвета;
  • игрок не может брать карту цвета, уже у него имеющегося (в частности, карты своего цвета он брать не может, независимо от того раздал он их все или нет);
  • в процессе одного обмена пара людей обменивается картами (каждый человек отдает одну карту и получает одну карту).

Цель всех n человек: каждый из них должен отдать все карты, которые были у него в начале (то есть все карты своего цвета). Ваша задача указать, возможна ли такая последовательность обменов. Если ответ положительный, нужно указать все обмены.

Входные данные

В первой строке записаны целые числа n (1 ≤ n ≤ 200000) и s (1 ≤ s ≤ 200000). Вторая строка содержит n чисел — количество карт у 1-го, 2-го, ..., n-го игрока на момент начала игры. Игрок может не иметь карт вообще на момент начала игры.

Выходные данные

Выведите в первой строке «No», если такая последовательность обменов невозможна, и «Yes» в противном случае. Если ответ положительный, выведите далее число k — количество обменов. Далее в k строках опишите обмены — парой номеров меняющихся игроков. Обмены и номера в обменах выводите в любом порядке.

D. Настя и машина времени

графы Деревья Конструктив поиск в глубину и подобное *2600

Придя к Насте, Денис обнаружил, что она ему не рада... Но у молодого человека есть последняя надежда. Он хочет купить все вещи, что нравятся Насте. Тогда-то она уж точно согласится с ним общаться.

Карта города, в котором живут наши герои, представляет собой множество площадей, некоторые из которых соединены дорогами. От любой площади можно добраться до любой другой ровно одним способом, используя эти дороги и не посещая одну и ту же площадь дважды. Получается, что граф города  — это дерево.

Денис находится в вершине \(1\) в момент времени \(0\). Он хочет хоть раз побывать в каждой вершине и вернуться назад как можно раньше.

Денис может проходить вдоль любой дороги за \(1\) времени. Увы, город столь велик, что сделать это быстро никак не выйдет. Поэтому Денис пошел на отчаянный шаг. Он достал свою карманную машину времени, которую он собрал у себя в подвале. С ее помощью Денис может стоя на месте сменить время на любое неотрицательное время, которое меньше текущего.

Но у машины времени есть один нюанс. Если герой окажется в одном месте и в одно и то же время дважды, произойдет взрыв вселенских масштабов и не получится порадовать Настю. Поэтому Денис просит вас проложить ему маршрут с использованием машины времени такой, что он обойдет все площади и вернется на первую и при этом максимальное время в котором он побывал будет минимально.

Формально, маршрут Дениса можно представить как последовательность пар \(\{v_1, t_1\}, \{v_2, t_2\}, \{v_3, t_3\}, \ldots, \{v_k, t_k\}\), где \(v_i\) — номер площади, а \(t_i\)  — время, в котором сейчас находится мальчик.

Должны быть выполнены следующие условия:

  • Маршрут начинается на площади \(1\) в момент времени \(0\), то есть \(v_1 = 1, t_1 = 0\) и заканчивается на площади \(1\), то есть \(v_k = 1\).
  • Все переходы делятся на два типа:
    1. Стоя на площади сменить время: \(\{ v_i, t_i \} \to \{ v_{i+1}, t_{i+1} \} : v_{i+1} = v_i, 0 \leq t_{i+1} < t_i\).
    2. Пройти по одной из дорог: \(\{ v_i, t_i \} \to \{ v_{i+1}, t_{i+1} \}\). При этом \(v_i\) и \(v_{i+1}\) соединены дорогой и \(t_{i+1} = t_i + 1\).
  • Все пары \(\{ v_i, t_i \}\) должны быть различны.
  • Среди \(v_1, v_2, \ldots, v_k\) встречаются все площади.

Вам нужно найти маршрут такой, что максимальное время, в котором побывает Денис будет минимальным, то есть маршрут, для которого \(\max{(t_1, t_2, \ldots, t_k)}\) будет минимально возможным.

Входные данные

В первой строке находится единственное целое число \(n\) \((1 \leq n \leq 10^5)\)  — количество площадей в городе.

В следующих \(n - 1\) строках находится по два целых числа \(u\) и \(v\) \((1 \leq v, u \leq n, u \neq v)\)  — номера площадей, соединенных дорогой.

Гарантируется, что заданный граф является деревом.

Выходные данные

В первой строке выведите целое число \(k\) \((1 \leq k \leq 10^6)\)  — длина пути Дениса.

В следующих \(k\) строках выведите пары \(v_i, t_i\)  — пары, описывающие маршрут Дениса (как в условии).

Все требования к маршруту, описанные в условии должны быть выполнены.

Гарантируется, что при заданных ограничениях существует хотя бы один маршрут и ответ, длина которого не превосходит \(10^6\). Если возможных ответов несколько, выведите любой.

B. Двоичный период

Конструктив Строки *1100

Скажем, что строка \(s\) имеет период \(k\), если \(s_i = s_{i + k}\) для всех \(i\) от \(1\) по \(|s| - k\) (\(|s|\) — это длина строки \(s\)), и \(k\) — минимальное положительное целое число с этим свойством.

Несколько примеров вычисления периода: для \(s\)0101» период равен \(k=2\), для \(s\)0000» период равен \(k=1\), для \(s\)010» период равен \(k=2\), для \(s\)0011» период равен \(k=4\).

Вам задана строка \(t\), состоящая только из 0 и 1, и вам нужно найти такую строку \(s\), что:

  1. Строка \(s\) состоит только из 0 и 1;
  2. Длина \(s\) не превосходит \(2 \cdot |t|\);
  3. Строка \(t\) является подпоследовательностью строки \(s\);
  4. Строка \(s\) имеет минимальный возможный период среди всех строк, удовлетворяющих условиям 1—3.

Напомним, что \(t\) является подпоследовательностью \(s\), если \(t\) можно получить из \(s\) путем удаления нуля или более элементов (любых) и не меняя порядок оставшихся элементов. Например, \(t\)011» — это подпоследовательность строки \(s\)10101».

Входные данные

В первой строке задано единственное целое число \(T\) (\(1 \le T \le 100\)) — количество наборов входных данных.

В следующих \(T\) строках заданы сами наборы — по одному на строку. В каждой строке задана строка \(t\) (\(1 \le |t| \le 100\)), состоящая только из 0 и 1.

Выходные данные

Выведите по одной строке на каждый набор входных данных — строку \(s\), которую вам надо найти. Если существует несколько решений — выведите любое из них.

Примечание

В первом и втором наборе \(s = t\), так как это уже одни из оптимальных решений. Периоды ответов равны \(1\) и \(2\), соответственно.

В третьем наборе, есть и другие более короткие ответы, но все в порядке, потому что не требуется минимизировать ответ \(s\). Строка \(s\) имеет период \(1\).

D. Наборы входных данных

Бинарный поиск жадные алгоритмы Конструктив сортировки Структуры данных *1900

Итак, вы решили провести свой раунд на Codeforces. Приготовили задачи: условия, решения, чекеры, валидаторы, тесты... И тут внезапно ваш координатор просит вас заменить все ваши тесты в самой простой задачи на наборы входных данных!

Изначально каждый тест в данной задаче — это просто массив. Максимальный размер массива равен \(k\). Для простоты будем считать, что содержимое массива не важно. У вас есть \(n\) тестов; \(i\)-й тест — это массив размера \(m_i\) (\(1 \le m_i \le k\)).

Ваш координатор просит вас распределить все ваши массивы по нескольким наборам входных данных. Каждый набор может включать в себя несколько массивов. Однако, в каждом наборе входных данных должно быть не больше \(c_1\) массивов размера больше или равного \(1\) (\(\ge 1\)), не больше \(c_2\) массивов размера больше или равного \(2\), \(\dots\), не больше \(c_k\) массивов размера больше или равного \(k\). Также \(c_1 \ge c_2 \ge \dots \ge c_k\).

Теперь ваша задача — составить новые наборы входных данных так, чтобы:

  • каждый из изначальных массивов встречается ровно в одном наборе входных данных;
  • для каждого набора тестовых данных выполняются приведенные условия;
  • количество наборов тестовых данных минимально возможно.

Выведите минимальное количество наборов тестовых данных, которое можно достичь, а также размеры массивов в каждом наборе входных данных.

Входные данные

В первой строке записаны два целых числа \(n\) и \(k\) (\(1 \le n, k \le 2 \cdot 10^5\)) — изначальное количество тестов и ограничение на размер каждого массива.

Во второй строке записаны \(n\) целых чисел \(m_1, m_2, \dots, m_n\) (\(1 \le m_i \le k\)) — размеры массивов в изначальных тестах.

В третьей строке записаны \(k\) целых чисел \(c_1, c_2, \dots, c_k\) (\(n \ge c_1 \ge c_2 \ge \dots \ge c_k \ge 1\)); \(c_i\) — это максимальное количество массивов размера больше или равного \(i\), которые могут быть внутри одного набора входных данных.

Выходные данные

В первой строке выведите одно целое число \(ans\) (\(1 \le ans \le n\)) — минимальное количество наборов входных данных, которое можно достичь.

Каждая из следующих \(ans\) строк должна содержать описание набора входных данных в следующем формате:

\(t\) \(a_1\) \(a_2\) \(\dots\) \(a_{t}\) (\(1 \le t\le n\)) — в наборе входных данных содержится \(t\) массивов, \(a_i\) — это размер \(i\)-го массива в этом наборе входных данных.

Каждый из изначальных массивов должен содержаться в ровно одном наборе входных данных. В частности, это подразумевает, что сумма всех значений \(t\) по всем \(ans\) наборам входных данных должна быть равна \(n\).

Обратите внимание, что ответ существует всегда, потому что \(c_k \ge 1\) (а следовательно \(c_1 \ge 1\)).

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере не существует способа распределить все тесты по меньше, чем \(3\), наборам входных данных. Данный ответ удовлетворяет всем условиям: в каждом наборе входных данных не больше \(4\) массивов размера больше или равного \(1\) и не больше \(1\) массива размера больше или равного \(2\) и \(3\).

Обратите внимание, что существует несколько правильных ответов на данный тест. Например, наборы входных данных с размерами \([[2], [1, 2], [3]]\) тоже будут правильными.

Однако, наборы тестовых данных с размерами \([[1, 2], [2, 3]]\) будут неправильными, потому что во втором наборе входных данных есть \(2\) массива размера больше или равного \(2\).

Обратите внимание на разницу между третьим и четвертым примером. В третьем примере можно собрать до \(5\) массивов размера больше или равного \(1\) в набор входных данных, поэтому одного набора достаточно. А в четвертом примере можно иметь не больше \(1\) массива. Поэтому каждый массив приходится выделять в отдельный набор входных данных.

B. Сбалансированный массив

Конструктив математика *800

Вам задано положительное целое число \(n\), гарантируется, что \(n\) четное (то есть делится на \(2\)).

Вы хотите построить такой массив \(a\) длины \(n\), что:

  • Первые \(\frac{n}{2}\) элементов \(a\) четные (делятся на \(2\));
  • вторые \(\frac{n}{2}\) элементов \(a\) нечетные (не делятся на \(2\));
  • все элементы в \(a\) различны и положительны;
  • сумма элементов первой половины равна сумме элементов второй половины (\(\sum\limits_{i=1}^{\frac{n}{2}} a_i = \sum\limits_{i=\frac{n}{2} + 1}^{n} a_i\)).

Если есть несколько ответов, вы можете вывести любой. Не гарантируется, что ответ существует.

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Единственная строка набора тестовых данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — длину массива. Гарантируется, что \(n\) четное (то есть делится на \(2\)).

Гарантируется, что сумма чисел \(n\) по всем наборам тестовых данных не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ на него — «NO» (без кавычек), если не существует подходящего ответа для заданного набора, или «YES» первой строкой и любой подходящий массив \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)), удовлетворяющий условиям из условия задачи, второй строкой.

F. Восстановить перестановку по отсортированным отрезкам

жадные алгоритмы Конструктив Перебор реализация Структуры данных *2400

Мы загадали перестановку \(p\), состоящую из \(n\) целых чисел. Перестановкой длины \(n\) называется массив длины \(n\), где каждый элемент от \(1\) до \(n\) встречается ровно один раз. Эта перестановка вам неизвестна.

Для каждой позиции \(r\) от \(2\) до \(n\) мы выбрали некоторый другой индекс \(l\) (\(l < r\)) и дали вам отрезок \(p_l, p_{l + 1}, \dots, p_r\) в отсортированном порядке (то есть мы переставили элементы на этом отрезке так, что элементы на этом отрезке оказались отсортированными). Таким образом, вам задан ровно \(n-1\) отрезок первоначальной перестановки, но элементы внутри каждого отрезка отсортированы. Отрезки даны вам в случайном порядке.

Например, если загаданная перестановка — \(p=[3, 1, 4, 6, 2, 5]\), то возможное заданное множество отрезков:

  • \([2, 5, 6]\)
  • \([4, 6]\)
  • \([1, 3, 4]\)
  • \([1, 3]\)
  • \([1, 2, 4, 6]\)

Ваша задача — найти любую подходящую перестановку (то есть любую перестановку, соответствующую входным данным). Гарантируется, что входные данные соответствуют некоторой перестановке (то есть перестановка существует).

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(2 \le n \le 200\)) — длину перестановки.

Следующая \(n-1\) строка описывает заданные отрезки.

\(i\)-я строка содержит описание \(i\)-го отрезка. Строка начинается с числа \(k_i\) (\(2 \le k_i \le n\)) — длины \(i\)-го отрезка. Затем следуют \(k_i\) целых чисел. Все числа в строке различны, отсортированы по возрастанию, между \(1\) и \(n\), включительно.

Гарантируется, что искомая перестановка \(p\) существует для каждого набора тестовых данных.

Также гарантируется, что сумма чисел \(n\) по всем наборам тестовых данных не превосходит \(200\) (\(\sum n \le 200\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ: \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\), все \(p_i\) должны быть различны) — любую подходящую перестановку (то есть любую перестановку, удовлетворяющую входным данным набора тестовых данных).

B. Однополюсные магниты

графы Конструктив поиск в глубину и подобное снм *2000

Однополюсный магнит — это магнит, у которого ровно один полюс: либо северный, либо южный. Они не существуют в природе, потому что настоящие магниты имеют два полюса, но это задача по программированию, поэтому будем считать, что такие магниты существуют.

У вас есть таблица размером \(n\times m\). Изначально вы можете поставить несколько магнитов с северным полюсом и несколько магнитов с южным полюсом в некоторые клетки этой таблицы. Вам разрешено расставлять сколько угодно магнитов, в том числе несколько в одну клетку.

Можно выполнять следующую операцию: выбрать один магнит с северным полюсом и один магнит с южным полюсом для активации. Если они находятся в одной строке или в одном столбце, но занимают разные клетки, то магнит с северным полюсом переместится на одну клетку ближе к магниту с южным полюсом. Иначе, если они занимают одинаковые клетки или не находятся в одной строке или в одном столбце, то ничего не произойдет. Обратите внимание, что магниты с южным полюсом неподвижны.

Каждая клетка таблицы покрашена в черный или белый цвет. Будем рассматривать расстановки магнитов в таблице, для которых следующие условия будут выполнены.

  1. В каждой строке и каждом столбце таблицы находится хотя бы один магнит с южным полюсом.
  2. Если клетка таблицы черная, тогда можно переместить какой-нибудь магнит с северным полюсом в эту клетку с помощью некоторой последовательности операций из начального расположения магнитов.
  3. Если клетка таблицы белая, тогда никакой магнит с северным полюсом невозможно переместить в эту клетку с помощью некоторой последовательности операций из начального расположения магнитов.

Определите, можно ли расположить магниты в таблице так, что все условия будут выполнены. Если это возможно, найдите минимальное количество магнитов с северным полюсом, которое для этого требуется (минимизировать количество магнитов с южным полюсом не нужно).

Входные данные

В первой строке находятся два целых числа \(n\) и \(m\) (\(1\le n,m\le 1000\))  — количество строк и столбцов в таблице, соответственно.

Следующие \(n\) строк описывают раскраску таблицы: \(i\)-я из этих строк содержит строку длины \(m\), в которой \(j\)-й символ обозначает цвет клетки таблицы, находящейся в строке \(i\) и столбце \(j\). Символы «#» и «.» обозначают черный и белый цвета соответственно. Гарантируется, что строка не содержит других символов.

Выходные данные

Выведите единственное целое число, которое равно минимальному количеству магнитов с северным полюсом, которое требуется.

Если не существует способа расставить магниты, который будет удовлетворять всем условиям, выведите единственное целое число \(-1\).

Примечание

В первом тесте возможно расположить магниты следующим образом:

Во втором тесте можно показать, что не существует необходимых расположений магнитов. На следующей картинке показаны три примера расположений, которые удовлетворяют не всем условиям. Первый пример нарушает правило \(3\), потому что мы можем переместить магнит с северным полюсом вниз на белую клетку. Второй пример нарушает правило \(2\), потому что мы не можем переместить магнит с северным полюсом в левую нижнюю черную клетку никакой последовательностью операций. Третий пример нарушает правило \(1\), потому что нет ни одного магнита с южным полюсом в первом столбце.

Следующая картинка показывает пример возможного расположения магнитов в третьем тесте. Можно показать, что не существует необходимых расположений магнитов с меньшим количеством магнитов с северным полюсом.

Во четвертом тесте можно показать, что не существует необходимых расположений магнитов. На следующей картинке два примера расположений, которые удовлетворяют не всем условиям. Первый пример нарушает правило \(1\), потому что нет ни одного магнита с южным полюсом в первой строке. Второй пример нарушает правила \(1\) и \(3\), потому что нет ни одного магнита с южным полюсом во второй строке, а кроме того, мы можем переместить магнит с северным полюсом на одну клетку вверх, и он попадет на белую клетку.

В пятом тесте мы можем поставить магниты с южным полюсом во все клетки и не использовать ни одного магнита с северным полюсом. Поскольку нет ни одной черной клетки, это будет корректной расстановкой магнитов.

B. Феникс и красота

жадные алгоритмы Конструктив сортировки Структуры данных *1400

Феникс любит красивые массивы. Он считает массив красивым, если все его подмассивы длины \(k\) имеют равную сумму. Подмассив массива — это последовательность подряд идущих элементов массива.

У Феникса есть массив \(a\) длины \(n\). Он хочет вставить несколько (возможно, ноль) целых чисел в свой массив, чтобы он стал красивым. Вставляемые числа должны иметь значения от \(1\) по \(n\) включительно. Числа можно вставлять куда угодно (даже перед первым или после последнего элемента). Феникс не пытается минимизировать количество вставленных чисел.

Входные данные

Входные данные состоят из нескольких наборов. В первой строке задано целое число \(t\) (\(1 \le t \le 50\)) — количество наборов входных данных.

В первой строке каждого набора входных данных задано два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 100\)).

Во второй строке каждого набора задано \(n\) целых чисел через пробел (\(1 \le a_i \le n\)) — первоначальный массив Феникса. Массив уже может быть красивым, а может и не быть.

Выходные данные

Для каждого набора входных данных, если невозможно получить крассивый массив, выведите -1. Иначе, выведите две строки.

В первой строке выведите длину красивого массива \(m\) (\(n \le m \le 10^4\)). Вам не нужно минимизировать \(m\).

Во второй строке выведите \(m\) целых чисел через пробел (\(1 \le b_i \le n\)) — красивый массив, который Феникс сможет получить вставляя несколько (возможно, ноль) целых чисел в свой массив \(a\). Вы можете выводить числа, которых не было в массиве \(a\) первоначально.

Если существует несколько решений, выведите любое. Гарантируется, что если мы можем сделать массив \(a\) красивым, то мы всегда сможем добиться этого при итоговой длине не более \(10^4\).

Примечание

В первом наборе входных данных, мы можем сделать массив \(a\) красивым, если вставим число \(1\) в позицию \(3\) (между двумя числами \(2\)). Теперь все подмассивы длины \(k=2\) будут иметь одинаковую сумму \(3\). Существует много других возможных решений, например:

  • \(2, 1, 2, 1, 2, 1\)
  • \(1, 2, 1, 2, 1, 2\)

Во втором наборе, массив уже красивый: все подмассивы длины \(k=3\) имеют одинаковую сумму \(5\).

В третьем наборе, можно показать, что невозможно вставить числа так, чтобы сделать массив \(a\) красивым.

В четвертом наборе, предложенный массив \(b\) является красивым — все его подмассивы длины \(k=4\) имеют равную сумму \(10\). Также существуют и другие решения.

C. Феникс и распределение

жадные алгоритмы Конструктив сортировки Строки *1600

У Феникса есть строка \(s\), состоящая из строчных букв латинского алфавита. Он хочет распределить все буквы своей строки по \(k\) непустым строкам \(a_1, a_2, \dots, a_k\) так, что каждая буква из \(s\) попадет ровно в одну из строк \(a_i\). Строки \(a_i\) не обязаны быть подстроками \(s\). Феникс может распределить буквы \(s\) и переупорядочить их внутри каждой строки \(a_i\) так как захочет.

Например, если \(s = \) baba и \(k=2\), Феникс может распределить буквы своей строки множеством способов, в том числе:

  • ba и ba
  • a и abb
  • ab и ab
  • bb и aa

Однако получить такие варианты он не может:

  • baa и ba
  • b и ba
  • baba и пустая строка (\(a_i\) должны быть непустыми)

Феникс хочет разделить свою строку \(s\) на \(k\) строк \(a_1, a_2, \dots, a_k\) так, чтобы минимизировать лексикографически максимальную строку среди них, т. е. минимизировать \(max(a_1, a_2, \dots, a_k)\). Помогите ему найти оптимальное распределение и выведите минимально возможное значение \(max(a_1, a_2, \dots, a_k)\).

Строка \(x\) лексикографически меньше, чем строка \(y\), если либо \(x\) является префиксом \(y\)\(x \ne y\)), либо существует такой индекс \(i\) (\(1 \le i \le min(|x|, |y|))\), что \(x_i\) < \(y_i\) и для всех \(j\) \((1 \le j < i)\) \(x_j = y_j\). Здесь \(|x|\) обозначает длину строки \(x\).

Входные данные

Входные данные состоят из нескольких наборов. В первой строке задано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Каждый набор состоит из двух строк.

В первой строке каждого набора задано два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 10^5\))  — длина строки \(s\) и количество не пустых строк, в которые Феникс хочет распределить буквы \(s\), соответственно.

Во второй строке каждого набора задана строка \(s\) длины \(n\), состоящая из строчных латинских букв.

Гарантируется, что сумма \(n\) по всем наборам входных данных \(\le 10^5\).

Выходные данные

Выведите \(t\) ответов — по одному на набор входных данных; \(i\)-й ответ — минимально возможный \(max(a_1, a_2, \dots, a_k)\) в \(i\)-м наборе.

Примечание

В первом наборе входных данных, одно из оптимальных решений — разбить baba на ab и ab.

Во втором наборе входных данных, одно из оптимальных решений — разбить baacb на abbc и a.

В третьем наборе, одно из оптимальных решений — разбить baacb на ac, ab и b.

В четвертом наборе, одно из оптимальных решений — разбить aaaaa на aa, aa и a.

В пятом наборе, одно из оптимальных решений — разбить aaxxzz на az, az, x и x.

В шестом наборе, одно из оптимальных решений — разбить phoenix на ehinopx.

D. Феникс и наука

Бинарный поиск жадные алгоритмы Конструктив математика реализация *1900

Феникс решил стать ученым! Сейчас он изучает рост бактерий.

Изначально, в день \(1\), есть одна бактерия массой \(1\).

Каждый день некоторое количество бактерий делятся (возможно, все или ни одной). Когда бактерия массой \(m\) делится, она превращается в две бактерии массой \(\frac{m}{2}\) каждая. Например, бактерия массой \(3\) может разделиться на две бактерии массой \(1.5\).

Каждую ночь масса каждой бактерии увеличивается на один.

Феникса интересует вопрос: может ли общая масса бактерий стать в точности равна \(n\). Если может, то его интересует как добиться такой массы за минимальное количество ночей. Помогите ему стать самым лучшим ученым!

Входные данные

Входные данные состоят из нескольких наборов. В первой строке задано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В единственной строке каждого набора задано целое число \(n\) (\(2 \le n \le 10^9\)) — суммарная масса бактерий, которой хочет добиться Феникс.

Выходные данные

Для каждого набора входных данных, если не существует способа получить общую массу равную \(n\), выведите -1. В противном случае, выведите две строки.

В первой строке выведите целое число \(d\) — минимальное необходимое количество ночей.

В следующей строке выведите \(d\) целых чисел, где \(i\)-е число обозначает количество бактерий, которые поделятся в \(i\)-й день.

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе, можно получить общую массу бактерий ровно \(9\) следующим образом:

  • День \(1\): Бактерия с массой \(1\) делится. Получаем две бактерии с массой \(0.5\).
  • Ночь \(1\): Все бактерии увеличивают массу на один. Получаем две бактерии с массой \(1.5\).
  • День \(2\): Ни одна бактерия не делится.
  • Ночь \(2\): Получаем две бактерии с массой \(2.5\).
  • День \(3\): Обе бактерии делятся. Получаем четыре бактерии с массой \(1.25\).
  • Ночь \(3\): Получаем четыре бактерии с массой \(2.25\).
Суммарная масса равна \(2.25+2.25+2.25+2.25=9\). Можно доказать, что \(3\) — минимальное необходимое количество ночей. Есть и другие способы добиться суммарной массы 9 за 3 ночи.

\( \)

В втором наборе, можно получить общую массу бактерий ровно \(11\) следующим образом:

  • День \(1\): Бактерия с массой \(1\) делится. Получаем две бактерии с массой \(0.5\).
  • Ночь \(1\): Получаем две бактерии с массой \(1.5\).
  • День \(2\): Одна бактерия делится. Получаем три бактерии с массами \(0.75\), \(0.75\) и \(1.5\).
  • Ночь \(2\): Получаем три бактерии с массами \(1.75\), \(1.75\) и \(2.5\).
  • День \(3\): Бактерия с массой \(1.75\) и бактерия с массой \(2.5\) делятся. Получаем пять бактерий с массами \(0.875\), \(0.875\), \(1.25\), \(1.25\) и \(1.75\).
  • Ночь \(3\): Получаем пять бактерий с массами \(1.875\), \(1.875\), \(2.25\), \(2.25\) и \(2.75\).
Суммарная масса равна \(1.875+1.875+2.25+2.25+2.75=11\). Можно доказать, что \(3\) — минимальное необходимое количество ночей. Есть и другие способы добиться суммарной массы 11 за 3 ночи.

\( \)

Во третьем наборе, бактерия не делится в день \(1\), а потом увеличивает массу до \(2\) в ночь \(1\).

B. Орак и медианы

жадные алгоритмы Конструктив математика *2000

У Слайма есть последовательность натуральных чисел \(a_1, a_2, \ldots, a_n\).

За одну операцию Орак может выбрать произвольный отрезок \([l \ldots r]\) этой последовательности и заменить все числа \(a_l, a_{l + 1}, \ldots, a_r\) на значение медианы \(\{a_l, a_{l + 1}, \ldots, a_r\}\).

В этой задаче для мультимножества натуральных чисел \(s\), медиана \(s\) равна \(\lfloor \frac{|s|+1}{2}\rfloor\)-у числу в порядке возрастания в нем. Например, медиана \(\{1,4,4,6,5\}\) равна \(4\), а медиана \(\{1,7,5,8\}\) равна \(5\).

Слайм хочет, чтобы Орак добился \(a_1 = a_2 = \ldots = a_n = k\) с помощью этих операций.

Орак думает, что это невозможно, и он не хочет тратить свое время, поэтому он решил спросить вас, можно ли исполнить желание Слайма, и он может задавать вам запросы такого вида несколько раз.

Входные данные

В первой строке записано одно целое число \(t\): количество запросов.

В первой строке каждого запроса записано два целых числа \(n\ (1\le n\le 100\,000)\) и \(k\ (1\le k\le 10^9)\), во второй строке записаны \(n\) натуральных чисел \(a_1,a_2,\dots,a_n\ (1\le a_i\le 10^9)\)

Сумма \(n\) по всем запросам не превосходит \(100\,000\).

Выходные данные

Вы должны вывести \(t\) строк. В \(i\)-й из них должно быть записано 'yes', если возможно превратить все числа в \(k\) за какое-нибудь число операций или 'no', иначе. Каждая выведенная буква может быть как строчной, так и заглавной.

Примечание

В первом запросе Орак не может превратить все элементы в \(3\).

Во втором запросе \(a_1=6\) уже выполнено.

В третьем запросе Орак может для операции выбрать весь массив и превратить его в \(2\).

В четвертом запросе Орак не может превратить все элементы в \(3\).

В пятом запросе Орак может сначала выбрать \([1,6]\), а затем \([2,10]\).

E. Слайм и шляпы

дп жадные алгоритмы Конструктив *3500

Слайм и Орак проводят пошаговую игру. В большой комнате на стульях сидят \(n\) человек и смотрят в сторону колонны, у каждого игрока есть номер: игрок \(1\) сидит перед колонной, игрок \(2\) сидит прямо за ним; игрок \(3\) сидит прямо за игроком номер \(2\), и так далее; игрок \(n\) сидит прямо за игроком \(n-1\). Каждый игрок носит шляпу, которая может быть белой или черной. Так как все игроки смотрят вперед, игрок \(i\) знает цвет шляпы игрока \(j\) если и только если \(i\) больше чем \(j\).

В начале каждого хода, Орак скажет, есть ли хотя бы один игрок в комнате, на котором надета черная шляпа.

После речи Орака, если игрок может однозначно определить цвет его шляпы, он положит его шляпу на стул, встанет, и покинет комнату. Все игроки умные, так что если возможно понять цвет шляпы, используя полученную информацию в этом и предыдущих раундах, они поймут.

На каждом ходу все игроки, которые поняли свой цвет, выйдут одновременно. Это означает, что если игрок понял цвет своей шляпы после ухода игроков на этом ходу, он сможет покинуть комнату только на следующем ходу.

Обратите внимание, что когда игрок выходит из комнаты, он оставлят свою шляпу на стуле, так что игроки перед ним не смогут узнать цвет его шляпы.

Таким образом, \(i\)-й игрок узнает, кто покинул комнату среди игроков \(1,2,\ldots,i-1\), и сколько игроков среди \(i+1,i+2,\ldots,n\) покинули комнату.

Слайм стоит за дверью. Он наблюдает за игроками и записывает номера игроков и время, в которое они покинули комнату. К сожалению, Слайм такой неряха, что он записал это только про некоторых игроков и записал он это в формате «игрок \(x\) покинул игру в \(y\)-м раунде».

Слайм попросил вас найти цвет шляпы каждого игрока. Если есть несколько возможных решений, вы можете вывести любое.

Входные данные

В первой строке записано одно целое число \(n\ (1\le n\le 200\,000)\).

Во второй строке записаны \(n\) целых чисел \(t_1,t_2,\dots,t_n\ (0\le t_i\le 10^{15})\). Если \(t_i=0\), то неизвестна никакая информация про игрока с номером \(i\); иначе, игрок \(i\) покинул игру на \(t_i\)-м раунде.

Хотя бы одно решение существует для данного ввода.

Выходные данные

Выведите одну бинарную строку из \(n\) символов. \(i\)-й символ должен быть равен '1' если игрок \(i\) носит черную шляпу, и должен быть равен '0' иначе. Если есть несколько решений, вы можете вывести любое.

Примечание

В первом примере в предложенном решении, все игроки носят белую шляпу. На первом ходу Орак скажет, что нет игроков с черной шляпой, так что все игроки поймут, что они носят белые шляпы, и покинут игру на первом ходу.

Во втором примере игрок \(5\) носит черную шляпу, а остальные игроки носят белые шляпы. Орак скажет, что существует игрок в черной шляпе, и игрок \(5\) знает, что все остальные игроки носят белые шляпы, следовательно он может понять, что он носит черную шляпу, и покинет игру в первом раунде, а остальные игроки покинут игру во втором раунде. Обратите внимание, что все игроки поняли цвет шляпы после того, как игрок \(5\) ушел, но они должны ждать следующего хода, чтобы уйти.

В третьем примере нет никакой информации об игре, так что любой ответ корректен.

C. Ноль-один

жадные алгоритмы игры Конструктив *1900

Маленький Петя очень любит играть с маленькой Машей. Недавно мама подарила ему игру под названием «Ноль-один». Петя сразу же предложил Маше сыграть в эту игру.

Перед игрой на столе выкладывается несколько карточек в один ряд, слева направо. На каждой карточке написано число: 0 либо 1. Игроки ходят по очереди, первой ходит Маша. На каждом ходу игроку требуется взять одну карточку со стола, а все остальные карточки сдвинуть так, чтобы закрыть пустоту на месте вытянутой карточки. Например, если перед чьим-то ходом на столе карточки образовывали последовательность 01010101, то после вытягивания четвертой по счету карточки (нумерация с единицы), последовательность станет такой: 0100101.

Игра заканчивается, когда на столе остается ровно две карточки. Цифры на этих карточках задают число в двоичной системе счисления: старший бит находится слева. Цель Маши — минимизировать это число, а цель Пети — максимизировать его.

Перед самым началом игры случилась неприятность. Дети пролили сок на некоторые карточки и цифры на них расплылись. На каждой из испорченных карточек могло быть написано как число 0, так и число 1. Рассмотрим все возможные начальные расклады (до проливания сока). Для каждого из этих раскладов найдем, какие 2 карточки останутся на столе после игры, при условии, что и Петя, и Маша играют оптимально. Упорядоченная пара цифр, написанных на этих двух карточках, называется исходом игры. Ваша задача — найти множество исходов для всех возможных начальных раскладов.

Входные данные

Первая строка содержит последовательность символов, каждый из которых может быть либо «0», либо «1», либо «?». Эта последовательность задает начальный расклад карточек на столе слева направо. Символы «?» означают, что соответствующая карточка перед началом игры была испорчена. Длина последовательности лежит в диапазоне от 2 до 105, включительно.

Выходные данные

Выведите множество исходов для всех начальных раскладов игры. Каждый исход выводите в отдельной строке. Каждый исход представляет собой два символа — цифры, написанные на карточках, оставшихся после конца игры. Исходы должны быть отсортированы лексикографически (см. первый пример).

Примечание

В первом примере возможны 16 вариантов начального расклада карточек. Для варианта 0000 исходом будет 00. Для варианта 1111 исходом будет 11. Для варианта 0011 исходом будет 01. Для варианта 1100 исходом будет 10. Вне зависимости от исходов для всех остальных раскладов, искомое множество содержит все 4 возможных исхода.

В третьем примере возможны всего 2 варианта начального расклада: 111 и 101. Для варианта 111 исходом будет 11. Для варианта 101 исходом будет 01, поскольку Маша на первом ходу может забрать первую слева карточку, после чего игра закончится.

B. Сумма слагаемых одинаковой четности

Конструктив математика *1200

Заданы два целых положительных числа \(n\) (\(1 \le n \le 10^9\)) и \(k\) (\(1 \le k \le 100\)). Представьте число \(n\) в виде суммы \(k\) положительных целых чисел одинаковой четности (с одинаковыми остатками от деления на \(2\)).

Иными словами, найдите такие \(a_1, a_2, \ldots, a_k\), что все \(a_i>0\), \(n = a_1 + a_2 + \ldots + a_k\) и либо все \(a_i\) одновременно четные, либо все \(a_i\) одновременно нечетные. Если такого представления не существует, то сообщите об этом.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных в тесте. Далее записаны \(t\) наборов входных данных по одному в строке.

Каждый набор представляет собой два целых положительных числа \(n\) (\(1 \le n \le 10^9\)) и \(k\) (\(1 \le k \le 100\)).

Выходные данные

Для каждого набора входных данных выведите:

  • YES и искомые \(a_i\), если ответ существует (если ответов несколько, то выведите любой из них);
  • NO, если ответа не существует.

Буквы в словах YES и NO можно выводить в любом регистре.

F. Восстановление 01-строки

Конструктив математика поиск в глубину и подобное *1500

Для некоторой 01-строки \(s\) (то есть такой, что каждый символ \(s_i\) — это либо '0', либо '1') выписали все пары подряд идущих символов (все подстроки длины \(2\)). Для каждой пары (подстроки длины \(2\)) посчитали количество символов '1' (единиц) в ней.

Вам заданы три числа:

  • \(n_0\) — количество пар подряд идущих символов (подстрок), в которых \(0\) единиц;
  • \(n_1\) — количество пар подряд идущих символов (подстрок), в которых \(1\) единица;
  • \(n_2\) — количество пар подряд идущих символов (подстрок), в которых \(2\) единицы.

Например, для строки \(s=\)«1110011110» были бы выписаны следующие подстроки: «11», «11», «10», «00», «01», «11», «11», «11», «10». Таким образом, \(n_0=1\), \(n_1=3\), \(n_2=5\).

Ваша задача — по заданным \(n_0, n_1, n_2\) восстановить любую подходящую 01-строку (бинарную строку) \(s\). Гарантируется, что хотя бы одно из чисел \(n_0, n_1, n_2\) отлично от \(0\). Также гарантируется, что решение существует.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных в тесте. Далее во входных данных записаны сами наборы.

Каждый набор состоит из одной строки, которая содержит три целых числа \(n_0, n_1, n_2\) (\(0 \le n_0, n_1, n_2 \le 100\); \(n_0 + n_1 + n_2 > 0\)). Гарантируется, что ответ для заданных \(n_0, n_1, n_2\) существует.

Выходные данные

Выведите \(t\) строк. Каждая из строк должна содержать ответ в виде 01-строки (бинарной строки) на соответствующий набор входных данных. Если возможных ответов несколько, выведите любой из них.

A. Наиболее нестабильный массив

жадные алгоритмы Конструктив математика *800

Вам даны два целых числа \(n\) и \(m\). Вам нужно построить массив \(a\) длины \(n\) состоящий из неотрицательных целых чисел (т.е. целых чисел больших или равных нулю) такой, что сумма элементов этого массива в точности равна \(m\) и величина \(\sum\limits_{i=1}^{n-1} |a_i - a_{i+1}|\) максимально возможная. Напомним, что \(|x|\) — абсолютное значение \(x\).

Другими словами, вы хотите максимизировать сумму абсолютных разностей между соседними (последовательными) элементами. Например, если массив \(a=[1, 3, 2, 5, 5, 0]\), то величина, описанная выше, для этого массива равна \(|1-3| + |3-2| + |2-5| + |5-5| + |5-0| = 2 + 1 + 3 + 0 + 5 = 11\). Заметьте, что этот пример не показывает оптимальный ответ, но показывает, как считается необходимое значение для какого-то массива.

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Единственная строка набора тестовых данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 10^9\)) — длину массива и его сумму соответственно.

Выходные данные

Для каждого набора тестовых данных выведите ответ на него — максимально возможное значение \(\sum\limits_{i=1}^{n-1} |a_i - a_{i+1}|\) для массива \(a\), состоящего из \(n\) неотрицательных целых чисел, сумма которых равна \(m\).

Примечание

В первом наборе тестовых данных примера единственный возможный массив — \([100]\), и ответ очевидно равен \(0\).

Во втором наборе тестовых данных примера один из возможных массивов — \([2, 0]\), и ответ равен \(|2-0| = 2\).

В третьем наборе тестовых данных примера один из возможных массивов — \([0, 2, 0, 3, 0]\), и ответ равен \(|0-2| + |2-0| + |0-3| + |3-0| = 10\).

D. Построение массива

Конструктив сортировки Структуры данных *1600

Вам задана массив \(a\) длины \(n\), состоящий из нулей. Вы выполняете \(n\) действий с этим массивом: в течение \(i\)-го действия происходит следующая последовательность операций:

  1. Выбирается максимальный по длине подмассив (последовательный подотрезок), состоящий только из нулей, среди всех таких отрезков выбирается самый левый;
  2. Пусть этот отрезок равен \([l; r]\). Если \(r-l+1\) нечетно (не делится на \(2\)), то присваивается \(a[\frac{l+r}{2}] := i\) (где \(i\) — номер текущего действия), иначе (если \(r-l+1\) четно) присваивается \(a[\frac{l+r-1}{2}] := i\).

Рассмотрим массив \(a\) длины \(5\) (изачально \(a=[0, 0, 0, 0, 0]\)). Тогда он меняется следующим образом:

  1. Сначала мы выбираем отрезок \([1; 5]\) и присваиваем \(a[3] := 1\), таким образом \(a\) становится равен \([0, 0, 1, 0, 0]\);
  2. затем мы выбираем отрезок \([1; 2]\) и присваиваем \(a[1] := 2\), таким образом \(a\) становится равен \([2, 0, 1, 0, 0]\);
  3. затем мы выбираем отрезок \([4; 5]\) и присваиваем \(a[4] := 3\), таким образом \(a\) становится равен \([2, 0, 1, 3, 0]\);
  4. затем мы выбираем отрезок \([2; 2]\) и присваиваем \(a[2] := 4\), таким образом \(a\) становится равен \([2, 4, 1, 3, 0]\);
  5. и наконец мы выбираем отрезок \([5; 5]\) и присваиваем \(a[5] := 5\), таким образом \(a\) становится равен \([2, 4, 1, 3, 5]\).

Ваша задача — найти массив \(a\) длины \(n\) после выполнения всех \(n\) действий. Заметьте, что ответ существует и единственен.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Единственная строка набора тестовых данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину \(a\).

Гарантируется, что сумма \(n\) по всем наборам тестовых данных не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ — массив \(a\) длины \(n\) после выполнения \(n\) действий, описанных в условии задачи. Заметьте, что ответ существует и единственен.

F. Призыв существ

дп жадные алгоритмы Конструктив Паросочетания Потоки сортировки *2500

Поликарп играет в компьютерную игру. В этой игре игроки призывают армии магических существ и сражаются с армиями существ других игроков.

Поликарп может призвать \(n\) разных существ, \(i\)-е существо изначально имеет силу \(a_i\); кроме того, когда Поликарп призывает его, оно увеличивает на \(b_i\) силу всех ранее призванных существ (исключая себя). Поликарп может призывать существ в любом порядке.

Однако под контролем Поликарпа может находиться не более \(k\) существ одновременно. Поэтому, помимо призыва существ, он может уничтожать ранее призванных существ. Каждое существо может быть призвано (а, значит, и уничтожено) не более одного раза.

Цель Поликарпа — собрать максимально сильную армию существ. Он хочет, чтобы после всех его действий суммарная сила всех призванных (но не уничтоженных) им существ была максимально возможной.

Помогите Поликарпу составить оптимальную последовательность действий, чтобы собрать максимально сильную армию!

Входные данные

В первой строке задано одно целое число \(T\) (\(1 \le T \le 75\)) — количество наборов тестовых данных.

Каждый набор тестовых данных начинается строкой, содержащей два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 75\)) — количество существ, доступных для призыва, и максимальное количество существ, которые могут одновременно быть под контролем Поликарпа, соответственно.

Затем следуют \(n\) строк, \(i\)-я из которых содержит \(2\) целых числа \(a_i\) и \(b_i\) (\(1 \le a_i \le 10^5\), \(0 \le b_i \le 10^5\)) — параметры \(i\)-го существа.

Выходные данные

Для каждого набора тестовых данных выведите оптимальную последовательность действий в следующем формате:

Сначала выведите \(m\) — количество действий, которые должен совершить Поликарп (\(0 \le m \le 2n\)). После этого выведите \(m\) целых чисел \(o_1\), \(o_2\), ..., \(o_m\), где \(o_i\) описывает \(i\)-е действие следующим образом: если \(i\)-е действие — это «призвать существо \(x\)», то \(o_i = x\), а если \(i\)-е действие — это «уничтожить существо \(x\)», то \(o_i = -x\). Каждое существо может быть призвано не более одного раза и не может быть уничтожено, если оно еще не призвано (или уже уничтожено). После каждого действия под контролем Поликарпа должно быть не более \(k\) существ.

Если оптимальных последовательностей действий несколько, выведите любую из них.

Примечание

Рассмотрим пример из условия.

В первом наборе тестовых данных можно сначала вызвать существо \(2\) с силой \(7\), затем призвать существо \(1\), которое увеличит силу предыдущего существа на \(3\), после этого уничтожить существо \(1\) и поставить существо \(5\). В итоге у Поликарпа будут два существа с силой \(10\).

Во втором наборе тестовых данных у Поликарпа не может быть более одного существа под контролем, поэтому достаточно выбрать самое сильное существо и призвать его.

В третьем наборе тестовых данных Поликарп может призвать всех существ, никого не уничтожая.

D. Игра с массивом

Конструктив математика *1400

Петя и Вася, как всегда, заняты тем, что соревнуются между собой в новой интересной игре.

Сначала Петя должен придумать массив длины \(N\), состоящий из целых положительных чисел, сумма которых равна \(S\), а также целое число \(K\) такое, что \(0 \leq K \leq S\). Чтобы выиграть, Вася должен найти такой непустой подотрезок в массиве Пети, что сумма его элементов равна \(K\) или \(S - K\). В противном случае Васе придётся признать своё поражение.

Зная \(N\) и \(S\), определите, может ли Петя одержать победу при условии, что Вася будет играть наилучшим для себя способом. Если Петя может выиграть, подскажите, как ему следует сыграть.

Входные данные

В единственной строке содержатся два целых числа \(N\) и \(S\) (\(1 \leq N \leq S \leq 10^{6}\)) — необходимая длина массива и сумма его элементов.

Выходные данные

Если Петя может победить, то в первой строке следует вывести «YES» (без кавычек), во второй строке нужно вывести необходимый массив, состоящий из \(N\) натуральных чисел, сумма которых равна \(S\), а в третьей строке вывести одно целое число \(K\). Если подходящих ответов несколько, то можно вывести любой из них.

В противном случае в единственной строке выведите «NO» (без кавычек).

Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

F. Угадать количество делителей

интерактив Конструктив теория чисел *2600

Это интерактивная задача.

Загадано число \(1 \le X \le 10^{9}\). Вам не нужно угадывать это число. Вам нужно определить количество делителей этого числа, и даже это вам не нужно делать точно: ваш ответ будет считаться верным, если его абсолютная погрешность не превышает 7 или его относительная погрешность не превышает \(0.5\). Формально, пусть ваш ответ равен \(ans\), а количество делителей \(X\) равно \(d\), тогда ваш ответ будет считаться правильным, если выполнено хотя бы одно из следующих двух условий:

  • \(| ans - d | \le 7\);
  • \(\frac{1}{2} \le \frac{ans}{d} \le 2\).

Вы можете не более \(22\) раз сделать запрос. Запрос состоит из одного целого числа \(1 \le Q \le 10^{18}\). В ответ на запрос вы получите \(gcd(X, Q)\) — наибольший общий делитель \(X\) и \(Q\).

Число \(X\) зафиксировано до всех запросов. Иными словами, интерактор не является адаптивным.

Назовём процесс отгадывания количества делителей числа \(X\) игрой. В рамках одного теста вам нужно будет сыграть \(T\) независимых игр, то есть отгадать количество делителей \(T\) раз для \(T\) независимых чисел \(X\).

Входные данные

На первой строке записано одно целое число \(T\) (\(1 \le T \le 100\)) — количество игр.

Протокол взаимодействия

Чтобы сделать запрос, выведите строку вида «? Q» (\(1 \le Q \le 10^{18}\)). После запроса считайте одно число — \(gcd(X, Q)\). Вы можете сделать не более \(22\) таких запросов в рамках одной игры.

Если вы считаете, что знаете количество делителей \(X\) с достаточной точностью, выведите ваш ответ в формате «! ans». \(ans\) должно быть целым числом. Если это последняя игра, то вы должны завершить выполнение программы, иначе вы должны начать следующую игру. Обратите внимание, что интерактор не выводит ничего в ответ на вывод ответа.

После вывода запроса или ответа не забудьте вывести перевод строки и сбросить буфер вывода. Для сброса буфера вывода используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Для взломов используйте следующий формат:

Первая строка содержит одно целое число \(T\) (\(1 \le T \le 100\)) — количество игр.

Каждая из следующих \(T\) строк содержит одно целое число \(X\)(\(1 \le X \le 10^{9}\)) — загаданное число.

Так, пример из условия имеет вид


2
998244353
4194304
Примечание

Почему ограничение на запросы именно 22? Возможно, автор задачи — фанат Тейлор Свифт.

Рассмотрим пример из условия.

В первой игре загадано число \(X = 998\,244\,353\). Было бы сложно это угадать, правда? Это число является простым, то есть количество его делителей равно 2. Решение сделало запросы с несколькими случайными числами, и ответы на все запросы оказались равны 1 (удивительно, что ни один из трёх запросов не оказался кратным \(998\,244\,353\)). Логично предположить, что у загаданного числа не очень много делителей, поэтому решение ответило 5. Почему бы и не 5. Этот ответ будет засчитан, так как \(| 5 - 2 | = 3 \le 7\).

Во второй игре загадано число \(X = 4\,194\,304 = 2^{22}\), количество его делителей равно 23. Решение сделало запросы \(1024 = 2^{10}\), \(1\,048\,576 =2^{20}\), \(1\,073\,741\,824 = 2^{30}\) и получило ответы \(1024 = 2^{10}\), \(1\,048\,576 =2^{20}\), \(4\,194\,304 = 2^{22}\), соответственно. Затем решение окончательно запуталось и выдало ответ на Главный вопрос жизни, Вселенной и всего такого. Этот ответ будет засчитан, так как \(\frac{1}{2} \le \frac{42}{23} \le 2\).

E. Вы уволены?

жадные алгоритмы Конструктив реализация Структуры данных *2400

Левиан работает бухгалтером в большой компании. Он знает, сколько компания заработала в каждый из \(n\) подряд идущих месяцев — в \(i\)-й месяц у компании доход был равен \(a_i\) (положительный доход означает прибыль, отрицательный доход означает убыль, нулевой доход означает отсутствие изменений). Из-за всеобщей самоизоляции, первые \(\lceil \tfrac{n}{2} \rceil\) месяцев доход мог быть совершенно нестабилен, но потом всё стабилизировалось и последние \(\lfloor \tfrac{n}{2} \rfloor\) месяцев доход был одинаковый.

Левиан решил, что на совете директоров сообщит \(n-k+1\) число — суммарный доход компании за каждые \(k\) подряд идущих месяцев. Формально, для всех \(i\) от \(1\) до \(n-k+1\) он скажет число \(a_i + a_{i+1} + \ldots + a_{i + k - 1}\). Например, если \(a=[-1, 0, 1, 2, 2]\) и \(k=3\), то он сообщит числа \(0, 3, 5\).

К большому сожалению, если хоть один суммарный доход, сообщаемый Левианом, не является прибылью (то есть доход \(\le 0\)), то начальство разозлится и уволит не справившегося с работой бухгалтера.

Спасите карьеру Левиана: найдите такое число \(k\), что за любые \(k\) подряд идущих месяцев компания получила прибыль или скажите, что это невозможно.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 5\cdot 10^5\)) — количество месяцев, за которые Левиан должен отчитаться.

Вторая строка содержит \(\lceil{\frac{n}{2}}\rceil\) целых чисел \(a_1, a_2, \ldots, a_{\lceil{\frac{n}{2}}\rceil}\), где \(a_i\) (\(-10^9 \le a_i \le 10^9\)) — доход компании в \(i\)-м месяце.

Третья строка содержит одно целое число \(x\) (\(-10^9 \le x \le 10^9\))— доход в каждый месяц с \(\lceil{\frac{n}{2}}\rceil + 1\) до \(n\).

Выходные данные

В единственной строке выведите искомое число \(k\) или \(-1\), если его не существует. Если существует несколько возможных решений, выведите любое из них.

Примечание

В первом примере подходят \(k=2\) и \(k=3\): в первом случае Левиан сообщит числа \(1, 1\) а во втором — одно число \(3\).

Во втором примере ни одно \(k\) не подходит.

В третьем примере ответом является только \(k=4\): он сообщит числа \(1,2,3\).

F. Вкусная печенька

Бинарный поиск жадные алгоритмы Конструктив реализация *2700

О нет!

Вас поймал коронавирус, и теперь вы сидите в тёмном подвале, связанные по ногам (но не по рукам). У вас есть вкусная печенька, а также перед вами стоит ноутбук, и там открыта ваша любимая среда разработки. Коронавирус убеждает вас решить следующую задачу.

Вам дано два массива \(A\) и \(B\) размера \(n\). Вы можете делать операции двух типов с массивом \(A\):

  • Развернуть массив \(A\). То есть массив \([A_1,\ A_2,\ \ldots,\ A_n]\) переходит в \([A_n,\ A_{n-1},\ \ldots,\ A_1]\)
  • Заменить \(A\) на массив его префиксных сумм. То есть массив \([A_1,\ A_2,\ \ldots,\ A_n]\) переходит в \([A_1,\ (A_1+A_2),\ \ldots,\ (A_1+A_2+\ldots+A_n)]\)

Вам нужно понять, можно ли из массива \(A\) получить массив \(B\). Если это можно сделать, то вам придётся восстановить порядок этих операций, минимизировав количество операций второго типа. К счастью, коронавирус сегодня добрый, поэтому он разрешил вам не восстанавливать действия, если минимальное количество операций второго типа превышает \(2\cdot 10^5\). Но коронавирус обижен на вас, поэтому если вы восстанавливаете ответ, то суммарное количество операций не должно превышать \(5\cdot 10^5\).

Решите эту задачу, или коронавирус продлит карантин на пять лет и заставит всю экономику рухнуть!

Входные данные

В первой строке входных данных вводится число \(n\) (\(1\le n \le 2\cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(A_1, A_2, \ldots, A_n\) (\(1 \le A_i \le 10 ^ {12}\)).

Третья строка содержит \(n\) целых чисел \(B_1, B_2, \ldots, B_n\) (\(1 \le B_i \le 10 ^ {12}\)).

Выходные данные

Если из массива \(A\) нельзя получить массив \(B\), в единственной строке выведите «IMPOSSIBLE» (без кавычек).

Если минимальное количество операций второго типа превышает \(2\cdot 10^5\), то в первой строке выведите «BIG» (без кавычек). Во второй строке выведите минимальное количество операций второго типа, которые нужно применить, чтобы из массива \(A\) получить \(B\).

Иначе, в первой строке выведите «SMALL» (без кавычек). Во второй строке выведите суммарное количество операций первого и второго типа \(m \le 5\cdot 10^5\) (гарантируется, что в этом случае существует такая последовательность действий). В третьей строке выведите строку длины \(m\), состоящую из символов «R» и «P» (без кавычек):

\(i\)-й символ должен быть равен 'R', если \(i\)-е действие первого типа, и должен быть равен 'P', иначе.

Если таких последовательностей несколько, выведите любую из них.

Вы можете выводить все символы как в нижнем регистре, так и в верхнем.

Примечание

В первом примере массивы \(A\) и \(B\) уже совпадает, поэтому количество нужных операций \(=0\).

Во втором примере надо \(299999\) раз заменить \(A\) на префиксную сумму, а потом развернуть массив. Так как \(299999>2\cdot 10^5\), то восстанавливать ответ не нужно.

В четвёртом примере из массива \(A\) никак нельзя получить \(B\).

C. Похожие пары

жадные алгоритмы Конструктив Паросочетания сортировки *1100

Назовем два числа \(x\) и \(y\) похожими, если они имеют одинаковую четность (одинаковый остаток при делении на \(2\)), или если \(|x-y|=1\). Например, в каждой из пар \((2, 6)\), \((4, 3)\), \((11, 7)\) числа похожи между собой, а в парах \((1, 4)\), \((3, 12)\) — нет.

Вам дан массив \(a\) из \(n\) (число \(n\) четно) целых положительных чисел. Проверьте, существует ли такое разбиение массива на пары, что каждый элемент массива принадлежит ровно одной паре, и в каждой паре числа похожи между собой.

Например для массива \(a = [11, 14, 16, 12]\) существует разбиение на пары \((11, 12)\) и \((14, 16)\). Числа в первой паре похожи, потому что модуль их разности равен единице, а во второй паре — потому что они оба четные.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов тестовых данных в тесте. Далее следуют \(t\) наборов тестовых данных.

Каждый набор задается двумя строками. В первой строке записано четное целое число \(n\) (\(2 \le n \le 50\)) — длина массива \(a\).

Во второй строке записано \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 100\)).

Выходные данные

Для каждого набора тестовых данных выведите:

  • YES, если разбиение существует;
  • NO, если разбиения не существует.

Буквы в словах YES и NO можно выводить в любом регистре.

Примечание

Первый набор тестовых данных примера разобран в условии.

Во втором наборе два заданных числа не являются похожими.

В третьем наборе подходит любое разбиение.

F. Строка-шпион

битмаски дп Конструктив Перебор Строки хэши *1700

Вам даны \(n\) строк \(a_1, a_2, \ldots, a_n\), все они имеют одинаковую длину \(m\). Строки состоят из строчных букв латинского алфавита.

Найдите любую такую строку \(s\) длины \(m\), что каждая из заданных \(n\) строк отличается от \(s\) не более чем в одной позиции. Формально, для каждой заданной строки \(a_i\) должно существовать не более одной позиции \(j\), в которой \(a_i[j] \ne s[j]\).

Заметим, что искомая строка \(s\) может как совпадать с одной из заданных строк \(a_i\), так и отличаться от всех заданных строк.

Например, если вам даны строки abac и zbab, тогда ответом на задачу может быть строка abab, которая отличается от первой только последним символом, а от второй только первым.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 100\)) — количество наборов тестовых данных в тесте. Далее записаны \(t\) наборов тестовых данных.

Каждый набор начинается со строки, в которой записаны целые числа \(n\) (\(1 \le n \le 10\)) и \(m\) (\(1 \le m \le 10\)) — количество заданных строк и их длина.

Далее следуют \(n\) строк \(a_i\). Каждая имеет длину \(m\) и состоит из строчных латинских букв.

Выходные данные

Выведите \(t\) ответов на наборы тестовых данных. Каждый ответ (если он существует) — это строка длины \(m\), состоящая из строчных латинских букв. Если существует несколько ответов, то выведите любой из них. Если ответа не существует, выведите «-1» («минус один», без кавычек).

Примечание

Первый набор тестовых данных примера разобран в условии.

Во втором наборе ответа не существует.

G. A/B матрица

жадные алгоритмы Конструктив математика *1900

Вам даны четыре целых положительных числа \(n\), \(m\), \(a\), \(b\) (\(1 \le b \le n \le 50\); \(1 \le a \le m \le 50\)). Найдите любую такую прямоугольную матрицу размера \(n \times m\), что выполняются все следующие условия:

  • в каждой строке матрицы ровно \(a\) единиц;
  • в каждом столбце матрицы ровно \(b\) единиц;
  • все остальные элементы — нули.

Если искомой матрицы не существует, то укажите это.

Например, для \(n=3\), \(m=6\), \(a=2\), \(b=1\) существует такая матрица, удовлетворяющая условиям выше:

\(\) \begin{vmatrix} 0 & 1 & 0 & 0 & 0 & 1 \\ 1 & 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 & 1 & 0 \end{vmatrix} \(\)

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов тестовых данных в тесте. Далее следуют \(t\) наборов тестовых данных.

Каждый набор тестовых данных описывается четырьмя целыми положительными числами \(n\), \(m\), \(a\), \(b\) (\(1 \le b \le n \le 50\); \(1 \le a \le m \le 50\)), где \(n\) и \(m\) — размеры матрицы, а \(a\) и \(b\) — ограничения на количества единиц для строк и столбцов, соответственно.

Выходные данные

Для каждого набора тестовых данных выведите:

  • «YES» (без кавычек) и искомую матрицу (если существует несколько ответов, выведите любой), если она существует, или,
  • «NO» (без кавычек), если ее не существует.

Чтобы вывести матрицу \(n \times m\), выведите \(n\) строк, каждая из которых содержит \(m\) чисел \(0\) или \(1\), описывающих очередную строку матрицы. Числа нужно выводить без пробелов.

H. Двоичная медиана

Бинарный поиск битмаски Конструктив Перебор *2100

Рассмотрим все двоичные строки длины \(m\) (\(1 \le m \le 60\)), то есть строки, состоящие из символов 0 и 1. Например, 0110 является двоичной строкой, а 012aba — нет. Очевидно, что всего таких строк ровно \(2^m\).

Строка \(s\) лексикографически меньше строки \(t\) (обе имеют одинаковую длину \(m\)), если в первой слева позиции \(i\), в которой они отличаются, верно \(s[i] < t[i]\). Именно такой способ сравнения строк используется в словарях и в большинстве современных языков программирования при их сравнении стандартным способом. Например, строка 01011 лексикографически меньше строки 01100, потому что первые два символа совпадают, а третий символ в первой строке меньше, чем во второй.

Удалим из этого множества \(n\) (\(1 \le n \le \min(2^m-1, 100)\)) различных двоичных строк \(a_1, a_2, \ldots, a_n\), каждая длины \(m\). Таким образом, в множестве останется \(k=2^m-n\) строк. Отсортируем все строки полученного множества в порядке лексикографического возрастания (как в словаре).

Пронумеруем все строки после сортировки от \(0\) до \(k-1\). Выведите строку, номер которой равен \(\lfloor \frac{k-1}{2} \rfloor\) (такой элемент называется медианой), где \(\lfloor x \rfloor\) является округлением числа вниз к ближайшему целому.

Например, если \(n=3\), \(m=3\) и \(a=[\)010, 111, 001\(]\), то после удаления строк \(a_i\) и сортировки результат примет вид: \([\)000, 011, 100, 101, 110\(]\). Таким образом, искомая медиана равна 100.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов тестовых данных в тесте. Далее следуют \(t\) наборов тестовых данных.

В первой строке каждого набора записаны целые числа \(n\) (\(1 \le n \le \min(2^m-1, 100)\)) и \(m\) (\(1 \le m \le 60\)), где \(n\) — количество удаляемых строк, \(m\) — длина двоичных строк. Следующие \(n\) строк содержат \(a_1, a_2, \ldots, a_n\) — различные двоичные строки длины \(m\).

Суммарная длина всех заданных двоичных строк во всех наборах тестовых данных в одном тесте не превосходит \(10^5\).

Выходные данные

Выведите \(t\) ответов на наборы тестовых данных. Ответом является строка длины \(m\) — медиана оставшихся строк.

Примечание

Первый набор тестовых данных примера разобран в условии.

Во втором наборе результат после удаления строк и сортировки равен \([\)001, 010, 101, 110\(]\). Следовательно, искомая медиана равна 010.

A. Джонни и вклад

графы жадные алгоритмы Конструктив сортировки *1700

Сегодня Джонни хочет увеличить свой вклад. Его план подразумевает написание \(n\) блогов. Один блог покрывает одну тему, но одна тема может быть покрыта несколькими блогами. Также, некоторые блоги связаны друг с другом ссылками. Каждая пара блогов, связанных ссылкой, должна покрывать две разные темы. Потому что иначе читатели могут заметить, что блоги разделены только для того, чтобы набрать больше вклада. Множество блогов и двусторонние ссылки между некоторыми парами из них называются сетью блогов.

Всего есть \(n\) различных тем, пронумерованных от \(1\) до \(n\), упорядоченных по пониманию Джонни. Структура сети блогов уже приготовлена. Теперь Джонни должен написать все блоги в некотором порядке. Он ленивый, поэтому каждый раз перед написанием блога, он смотрит на все уже написанные соседние блоги (связанные ссылкой с текущим) и выбирает тему с минимальным номером, которая еще не покрыта соседними блогами. Можно заметить, что такая стратегия всегда позволит ему выбрать тему, потому что максимальное количество соседних блогов равно \(n - 1\).

Например, если уже написанные, соседние с текущим, блоги покрывают темы с номерами \(1\), \(3\), \(1\), \(5\) и \(2\), Джонни выберет тему номер \(4\) для текущего блога, потому что темы номер \(1\), \(2\) и \(3\) уже покрыты соседними блогами, а тема номер \(4\) — нет.

Как хороший друг, вы провели некоторые исследования и предсказали наилучшую темы для каждого блога. Не могли бы вы сказать Джонни, в каком порядке он должен писать блоги, чтобы в результате его стратегии каждый блог покрывал выбранную вами тему?

Входные данные

Первая строка содержит два целых числа \(n\) \((1 \leq n \leq 5 \cdot 10^5)\) и \(m\) \((0 \leq m \leq 5 \cdot 10^5)\) — количество блогов и ссылок, соответственно.

Каждая из следующих \(m\) строк содержит два целых числа \(a\) и \(b\) (\(a \neq b\); \(1 \leq a, b \leq n\)), которые означают, что в сети блогов есть ссылка между блогами с номерами \(a\) и \(b\). Гарантируется, что граф сети блогов не содержит кратных ребер.

Последняя строка содержит \(n\) целых чисел \(t_1, t_2, \ldots, t_n\), \(i\)-е из них обозначает желаемую тему для \(i\)-го блога (\(1 \le t_i \le n\)).

Выходные данные

Если решение не существует, выведите \(-1\). Иначе, выведите \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) \((1 \leq p_i \leq n)\), которые обозначают номера блогов в том порядке, в котором Джонни должен их написать. Если существует несколько решений, выведите любое.

Примечание

В первом примере, Джонни начинает с написания блога номер \(2\), у него пока еще нет написанных соседних блогов, поэтому Джонни выбирает тему номер один. Потом он пишет блог номер \(1\), у него есть ссылка на уже написанный второй блог, поэтому Джонни выбирает вторую тему. Наконец, он пишет блог номер \(3\), у него есть ссылки на блоги номер \(1\) и \(2\), поэтому Джонни выбирает третью тему.

Второй пример: Не существует ни одной перестановки, удовлетворяющей всем условиям.

Третий пример: Сначала Джонни пишет блог номер \(2\), который получает тему \(1\). Затем, он пишет блог \(5\), который тоже получает тему \(1\), потому из него нет ссылки на единственный уже написанный блог (номер \(2\)). Затем, он пишет блог \(1\), он получает тему \(2\), потому что из него есть ссылка на блог \(2\) с темой \(1\). Затем, он пишет блог \(3\), из него есть ссылка на блог \(2\), поэтому он получает тему \(2\). Наконец, он пишет блог \(4\), из него есть ссылка на блог \(5\), поэтому он получает тему \(2\).

C. Джонни и ожерелье Меган

Бинарный поиск битмаски графы Конструктив поиск в глубину и подобное снм *2500

У младшей сестры Джонни, Меган, недавно был день рождения. Её брат подарил ей коробочку, подписанную как: «Твое прекрасное ожерелье — сделай сама!». Коробочка содержит много частей ожерелья и магический клей.

Каждая часть ожерелья представляет собой цепочку, соединяющую две жемчужины. Цвет каждой из жемчужин может быть представлен целым неотрицательным числом. Магический клей позволяет Меган склеивать две жемчужины (возможно, из одной части ожерелья) в одну. Красота соединения двух жемчужин цветов \(u\) и \(v\) определяется следующим образом: пусть \(2^k\) — максимальная степень двух, делящая \(u \oplus v\) — исключающее или \(u\) и \(v\). Тогда красота соединения равна \(k\). Если \(u = v\), вы можете считать, что красота равна \(20\).

Каждая жемчужина может быть склеена с другой максимум один раз. Склеивание двух частей ожерелья объединяет их. Используя клей несколько раз, Меган может наконец получить свое ожерелье, которое является циклом, сделанным из соединенных последовательно частей ожерелья (так, что каждая жемчужина в ожерелье соединена с ровно одной другой жемчужиной). Красота такого ожерелья равна минимальной красоте соединений в нем. Девочка хочет использовать все доступные части ожерелья, чтобы получить ровно одно ожерелье, содержащее все части, с максимальной возможной красотой. Помогите ей!

Входные данные

Первая строка содержит целое число \(n\) \((1 \leq n \leq 5 \cdot 10^5)\) — количество частей ожерелья в коробочке.

Каждая из следующих \(n\) строк содержит два целых числа \(a\) и \(b\) \((0 \leq a, b < 2^{20})\), которые обозначают цвета жемчужин из этой части ожерелья. Жемчужины на \(i\)-й строке имеют индексы \(2i - 1\) и \(2i\), соответственно.

Выходные данные

Первая строка должна содержать одно целое число \(b\), обозначающее максимальную возможную красоту ожерелья, собранного из всех данных частей.

Следующая строка должна содержать \(2n\) различных целых чисел \(p_i\) \((1 \leq p_i \leq 2n)\) — индексы исходных жемчужин в порядке, в котором они должны быть расположены в ожерелье. Индексы жемчужин, принадлежащих одной части, должны быть расположены на соседних позициях в перестановке (поэтому \(1\,4\,3\,2\) не является корректным выводом, а \(2\,1\,4\,3\) и \(4\,3\,1\,2\) являются). Если существует несколько подходящих ответов, вы можете вывести любой.

Примечание

В первом примере следующие пары жемчужин объединяются: \((7, 9)\), \((10, 5)\), \((6, 1)\), \((2, 3)\) и \((4, 8)\). Красота соединений равна: \(3\), \(3\), \(3\), \(20\), \(20\), соответственно.

Иллюстрация показывает эту конструкцию:

C. Ехаб и префиксные MEXы

жадные алгоритмы Конструктив Перебор *1600

Для данного массива \(a\) длины \(n\) найдите другой массив \(b\) длины \(n\) такой, что:

  • для каждого \(i\) \((1 \le i \le n)\) \(MEX(\{b_1\), \(b_2\), \(\ldots\), \(b_i\})=a_i\).

\(MEX\) множества целых чисел равен наименьшему неотрицательному целому числу, которое не принадлежит этому множеству.

Если такого массива не существует, определите это.

Входные данные

В первой строке записано целое число \(n\) (\(1 \le n \le 10^5\)) — длина массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), \(\ldots\), \(a_n\) (\(0 \le a_i \le i\)) — элементы массива \(a\). Гарантируется, что \(a_i \le a_{i+1}\) для \(1\le i < n\).

Выходные данные

Если такого массива нет, выведите одну строку, содержащую \(-1\).

В противном случае выведите одну строку, содержащую \(n\) целых чисел \(b_1\), \(b_2\), \(\ldots\), \(b_n\) (\(0 \le b_i \le 10^6\)).

Если есть несколько ответов, выведите любой.

Примечание

Во втором примере допустимы другие ответы, например, \([1,1,1,0]\).

D. Последнее следствие Ехаба

графы Деревья жадные алгоритмы Конструктив поиск в глубину и подобное реализация *2100

Для связного неориентированного графа с \(n\) вершинами и целого числа \(k\), вы должны, на ваш выбор:

  • или найти независимое множество с ровно \(\lceil\frac{k}{2}\rceil\) вершинами.
  • или найти простой цикл длины не более \(k\).

Независимое множество  — это набор вершин такой, что никакие две из них не связаны ребром. Простой цикл  — это цикл, который не содержит ни одной вершины дважды.

У меня есть доказательство, что для любых входных данных вы всегда можете решить по крайней мере одну из этих задач, но оно слишком тривиально, чтобы поместиться здесь.

Входные данные

Первая строка содержит три целых числа \(n\), \(m\), and \(k\) (\(3 \le k \le n \le 10^5\), \(n-1 \le m \le 2 \cdot 10^5\)) — количество вершин и ребер в графе и параметр \(k\) из условия.

Каждая из следующих \(m\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u,v \le n\)), которые обозначают, что между вершинами \(u\) и \(v\) есть ребро. Гарантируется, что граф связен и не содержит петель или кратных ребер.

Выходные данные

Если вы решили решить первую задачу, то в первой строке выведите \(1\), а затем строку, содержащую \(\lceil\frac{k}{2}\rceil\) различных целых чисел, не превышающих \(n\)  — вершины в желаемом независимом наборе.

Если же вы решили решить вторую задачу, то в первой строке выведите \(2\), затем строку, содержащую одно целое число, \(c\), представляющее длину найденного цикла, а затем строку, содержащую \(c\) различных целых чисел, не превышающих \(n\) — вершины в нужном цикле, в порядке их появления в цикле.

Примечание

В первом примере:

Обратите внимание, что вывод независимого множества \(\{2,4\}\) тоже зачтется, но вывод цикла \(1-2-3-4\) — нет, потому что его длина должна быть не более \(3\).

Во втором примере:

Обратите внимание, что вывод независимого множества \(\{1,3\}\) или цикла \(2-1-4\) также зачтутся.

В третьем примере:

В четвертом примере:

E. X-OR

битмаски интерактив Конструктив разделяй и властвуй Теория вероятностей *2700

Это интерактивная задача!

У Ехаба есть загаданная перестановка \(p\) длины \(n\), состоящая из элементов от \(0\) до \(n-1\). По какой-то причине вы хотите выяснить перестановку. Для этого вы можете спросить у Ехаба \(2\) разных индекса \(i\) и \(j\), и он ответит \((p_i|p_j)\), где \(|\) обозначает операцию побитового ИЛИ.

У Ехаба есть достаточно свободного времени, чтобы ответить на \(4269\) вопросов, и, несмотря на то, что ему несложно отвечать на так много вопросов, ему лень играть в ваши глупые игры, поэтому он заранее зафиксирует перестановку и не изменит ее в зависимости от ваших запросов. Можете ли вы угадать перестановку?

Входные данные

В единственной строке записано целое число \(n\) \((3 \le n \le 2048)\) — длина перестановки.

Протокол взаимодействия

Чтобы задать вопрос, выведите "? \(i\) \(j\)" (без кавычек, \(i \neq j\)) Затем вы должны считать ответ, который будет равен \((p_i|p_j)\).

Если мы ответим \(-1\) вместо правильного ответа, это означает, что вы превысили количество запросов или сделали неверный запрос.

Завершите программу сразу после получения \(-1\), и вы увидите вердикт Неправильный ответ. В противном случае вы можете получить произвольный вердикт, потому что ваше решение будет продолжать читать из закрытого потока.

Чтобы дать ответ, выведите "! \(p_1\) \(p_2\) \(\ldots\) \(p_n\)" (без кавычек). Заметьте, что вывод ответа не считается одним из \(4269\) запросов.

После вывода запроса не забудьте вывести перевод строки, и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы:

Первая строка должна содержать целое число \(n\) (\(3 \le n \le 2^{11}\)) — длину перестановки \(p\).

Вторая строка должна содержать \(n\) целых чисел, разделенных пробелами \(p_1\), \(p_2\), \(\ldots\), \(p_n\) (\(0 \le p_i < n\)) — элементы перестановки \(p\).

Примечание

В первом примере перестановка равна \([1,0,2]\). Вы начинаете с вопроса \(p_1|p_2\), а Ехаб отвечает \(1\). Затем вы спрашиваете \(p_1|p_3\), а Ехаб отвечает \(3\). Наконец, вы спрашиваете о \(p_2|p_3\), а Ехаб отвечает \(2\). После этого вы угадываете перестановку.

B. Проблематичная сортировка

Конструктив реализация *1300

У Ashish есть \(n\) элементов, расположенных по порядку.

Каждый элемент задается двумя целыми числами \(a_i\) — значение элемента и \(b_i\) — тип элемента (есть только два возможных типа: \(0\) и \(1\)). Он хочет отсортировать элементы в порядке неубывания \(a_i\).

Он может совершать следующую операцию произвольное число раз:

  • Выбрать любые два таких элемента \(i\) и \(j\), что \(b_i \ne b_j\) и поменять их местами. Таким образом, он может за ход поменять местами два элемента разных типов.

Скажите ему, может ли он отсортировать массив в порядке неубывания \(a_i\), используя описанные операции.

Входные данные

В первой строке записано одно целое число \(t\) \((1 \le t \le 100)\) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) \((1 \le n \le 500)\) — размеры массивов.

Во второй строке записаны \(n\) целых чисел \(a_i\) \((1 \le a_i \le 10^5)\)  — значение \(i\)-го элемента.

В третьей строке записаны \(n\) целых чисел \(b_i\) \((b_i \in \{0, 1\})\)  — тип \(i\)-го элемента.

Выходные данные

Для каждого набора входных данных, выведите «Yes» или «No» (без кавычек) в зависимости от того, возможно ли отсортировать массив в порядке неубывания значений используя описанные операции.

Вы можете выводить каждый символ в любом регистре (верхнем или нижнем).

Примечание

В первом наборе входных данных: элементы уже находятся в отсортированном порядке.

Во втором наборе входных данных: Ashish сначала может поменять местами элементы на позициях \(1\) и \(2\), затем поменять местами элементы на позициях \(2\) и \(3\).

В четвертом наборе входных данных: Нельзя поменять местами никакие два элемента, так как нет пары \(i\) и \(j\), что \(b_i \ne b_j\). Таким образом, элементы не могут быть отсортированы.

В пятом наборе входных данных: Ashish может поменять местами элементы на позициях \(3\) и \(4\), а затем элементы на позициях \(1\) и \(2\).

C. Соответствия поворотом

жадные алгоритмы Конструктив реализация Структуры данных *1400

После мистического исчезнования Ashish, каждый из его любимых учеников Ishika и Hriday, получил одну половину секретного сообщения. Эти сообщения могут быть описаны перестановками размера \(n\). Назовем их \(a\) и \(b\).

Напомним, что перестановка из \(n\) элементов это последовательность чисел \(a_1, a_2, \ldots, a_n\), в которой каждое число от \(1\) до \(n\) встречается ровно один раз.

Сообщение может быть расшифровано из конфигурации перестановок \(a\) и \(b\), в котором количество совпадающих пар элементов максимально. Пара элементов \(a_i\) и \(b_j\) называется совпадающей, если:

  • \(i = j\), таким образом, у них один и тот же индекс.
  • \(a_i = b_j\)

Его ученикам разрешается совершать следующую операцию произвольное число раз:

  • выбрать число \(k\) и циклически сдвинуть одну из перестановок влево или вправо \(k\) раз.

Циклический сдвиг перестановки \(c\) влево это операция, которая присваивает \(c_1:=c_2, c_2:=c_3, \ldots, c_n:=c_1\) одновременно. Аналогично, циклический сдвиг перестановки \(c\) вправо это операция, которая присваивает \(c_1:=c_n, c_2:=c_1, \ldots, c_n:=c_{n-1}\) одновременно.

Помогите Ishika и Hriday найти наибольшее возможное число совпадающих пар в данных перестановках после применения описанных операций несколько (возможно, ноль) раз.

Входные данные

В первой строке записано одно целое число \(n\) \((1 \le n \le 2 \cdot 10^5)\) — размеры массивов.

Во второй строке записаны \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) \((1 \le a_i \le n)\) — элементы первой перестановки.

В третьей строке записаны \(n\) целых чисел \(b_1\), \(b_2\), ..., \(b_n\) \((1 \le b_i \le n)\) — элементы второй перестановки.

Выходные данные

Выведите наибольшее возможное число совпадающих пар в данных перестановках после применения описанных операций несколько (возможно, ноль) раз.

Примечание

В первом примере можно сдвинуть \(b\) направо на \(k = 1\). Получившиеся перестановки будут \(\{1, 2, 3, 4, 5\}\) и \(\{1, 2, 3, 4, 5\}\).

Во втором примере не требуется совершать никаких операций. По всем возможным сдвигам \(a\) и \(b\), число совпадающих пар не будет превышать \(1\).

В третьем примере можно сдвинуть \(b\) влево на \(k = 1\). Получившиеся перестановки будут \(\{1, 3, 2, 4\}\) и \(\{2, 3, 1, 4\}\). Позиции \(2\) и \(4\) будут являться совпадающей парой. По всем возможным циклическим сдвигам \(a\) и \(b\), количество совпадающих пар не будет превышать \(2\).

D. Решить лабиринт

графы жадные алгоритмы Конструктив кратчайшие пути поиск в глубину и подобное реализация снм *1700

Vivek столкнулся с интересной задачей. У него есть лабиринт, который можно описать таблицей \(n \times m\). Каждая клетка может быть одного из следующих типов:

  • Пустая — '.'
  • Стена — '#'
  • Хороший человек  — 'G'
  • Плохой человек — 'B'

Единственный выход из лабиринта находится в клетке \((n, m)\).

Человек может перейти в клетку если она не содержит стену и она имеет общую сторону с его текущей клеткой. Vivek хочет заблокировать (заменить на стены) некоторые пустые клетки, чтобы все хорошие люди могли дойти до выхода из лабиринта, но чтобы все плохие люди не могли. Клетку которая исходно содержит 'G' или 'B' нельзя блокировать, но через нее можно проходить.

Ваша задача  — определить, можно ли заменить несколько (ноль или более) пустых клеток на стены, чтобы удовлетворить описанным ограничениям.

Гарантируется, что клетка \((n,m)\) пустая. Vivek разрешается ее блокировать.

Входные данные

В первой строке записано одно целое число \(t\) \((1 \le t \le 100)\) — количество наборов входных данных. Далее следуют описания наборов входных данных.

В первой строке каждого набора входных данных записаны два целых числа \(n\), \(m\) \((1 \le n, m \le 50)\) — количество строк и столбцов в лабиринте.

В каждой из следующих \(n\) строк записаны \(m\) символов. Они описывают исходный лабиринт. Если символ в строке равен '.', тогда соответствующая клетка пустая, если символ равен '#', тогда клетка содержит стену, а 'G' и 'B' обозначают, что клетка содержит хорошего или плохого человека, соответственно.

Выходные данные

Для каждого набора входных данных, выведите «Yes» или «No», в зависимости от того, можно ли заменить некоторые пустые клетки на стены, чтобы удовлетворить описанным ограничениям.

Вы можете выводить каждую букву в любом регистре (верхнем или нижнем).

Примечание

В первом и во втором наборах входных данных все условия уже выполнены.

В третьем наборе входных данных есть только одна свободная клетка \((2,2)\), и если мы заменим ее на стену, то хороший человек в клетке \((1,2)\) не сможет выйти.

В четвертом наборе входных данных хороший человек в клетке \((1,1)\) не может сбежать с самого начала, поэтому ответ «No».

В пятом наборе входных данных можно заблокировать клетки \((2,3)\) и \((2,2)\).

В последнем наборе входных данных можно заблокировать выход \((2, 2)\).

E. Максимальное значение подпоследовательности

Конструктив Перебор *1900

У Ashish есть массив \(a\) длины \(n\) состоящий из положительных целых чисел.

Определим значение непустой подпоследовательности массива \(a\), состоящией из \(k\) чисел, как \(\sum 2^i\) по всем целым \(i \ge 0\) таким, что хотя бы \(\max(1, k - 2)\) чисел в этом подмножестве имеют \(i\)-й бит в своей двоичной записи (число \(x\) имеет \(i\)-й бит в двоичной записи если \(\lfloor \frac{x}{2^i} \rfloor \mod 2\) равно \(1\)).

Напомним, что \(b\) является подпоследовательностью \(a\), если \(b\) может быть получена удалением нескольких (возможно, нуля) элементов из \(a\).

Помогите ему найти наибольшее значение, которое он может получить, выбрав некоторую подпоследовательность \(a\).

Входные данные

В первой строке записано одно целое число \(n\) \((1 \le n \le 500)\) — размер массива \(a\).

Во второй строке записаны \(n\) целых чисел  — элементы массива \((1 \le a_i \le 10^{18})\).

Выходные данные

Выведите одно целое число  — наибольшее значение, которое Ashish может получить, выбрав некоторую подпоследовательность \(a\).

Примечание

В первом примере Ashish может выбрать подпоследовательность \(\{{2, 3}\}\) размера \(2\). Двоичная запись \(2\) это 10 а двоичная запись \(3\) это 11. Так как \(\max(k - 2, 1)\) равно \(1\), значение подпоследовательности равно \(2^0 + 2^1\) (и у \(2\) и у \(3\) есть \(1\)-й бит в двоичной записи, а у \(3\) также есть \(0\)-й бит в двоичной записи). Обратите внимание, что он также мог выбрать подпоследовательность \(\{{3\}}\) или \(\{{1, 2, 3\}}\).

Во втором примере Ashish может выбрать подпоследовательность \(\{{3, 4\}}\) со значением \(7\).

В третьем примере Ashish может выбрать подпоследовательность \(\{{1\}}\) со значением \(1\).

В четвертом примере Ashish может выбрать подпоследовательность \(\{{7, 7\}}\) со значением \(7\).

F. Снова обмены

Конструктив реализация сортировки *2100

Ayush, Ashish и Vivek заняты подготовкой задачи для следующего Codeforces раунда и им нужно помочь проверить тесты на корректность.

Каждый набор входных данных состоит из \(n\) и двух массивов \(a\) и \(b\), длины \(n\). Если после скольки-то (возможно, нуля) операций описанных ниже, массив \(a\) может стать равен массиву \(b\), тест считается корректным. Иначе, он некорректный.

Возможные операции на массиве \(a\) следующие:

  • выберите целое число \(k\) \((1 \le k \le \lfloor\frac{n}{2}\rfloor)\)
  • поменяйте местами префикс длины \(k\) с суффиксом длины \(k\)

Например, если массив \(a\) исходно равен \(\{1, 2, 3, 4, 5, 6\}\), после выполнения операции с \(k = 2\), он превратится в \(\{5, 6, 3, 4, 1, 2\}\).

Вам дано несколько наборов входных данных, помогите определить про каждый из них, корректный он или некорректный.

Входные данные

В первой строке записано одно целое число \(t\) \((1 \le t \le 500)\) — количество наборов входных данных. Далее следуют описания наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) \((1 \le n \le 500)\) — размеры массивов.

Во второй строке записаны \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) \((1 \le a_i \le 10^9)\) — элементы массива \(a\).

В третьей строке записаны \(n\) целых чисел \(b_1\), \(b_2\), ..., \(b_n\) \((1 \le b_i \le 10^9)\) — элементы массива \(b\).

Выходные данные

Для каждого набора входных данных, выведите «Yes», если данный ввод корректный. Иначе, выведите «No».

Вы можете выводить все символы в любом регистре.

Примечание

В первом наборе входных данных можно поменять местами префикс \(a[1:1]\) с суффиксом \(a[2:2]\), чтобы получить \(a=[2, 1]\).

Во втором наборе входных данных \(a\) уже равен \(b\).

В третьем наборе входных данных невозможно получить \(3\) в \(a\).

В четвертом наборе входных данных сначала можно поменять местами префикс \(a[1:1]\) с суффиксом \(a[4:4]\), чтобы получить \(a=[2, 2, 3, 1]\). После этого можно поменять местами префикс \(a[1:2]\) с суффиксом \(a[3:4]\), чтобы получить \(a=[3, 1, 2, 2]\).

В пятом наборе входных данных невозможно превратить \(a\) в \(b\).

G. Надежный пароль

битмаски интерактив Комбинаторика Конструктив математика *2800

Это интерактивная задача.

Ayush придумал еще один способ задать пароль для своего замка. В замке есть \(n\) слотов, в каждом слоте может находится любое неотрицательное целое число. Пароль \(P\) это последовательность из \(n\) целых чисел, \(i\)-й из которых соответствует \(i\)-му слоту замка.

Чтобы задать пароль, Ayush придумал последовательность \(A\) из \(n\) целых чисел из отрезка \([0, 2^{63}-1]\). Затем, он определил \(i\)-й элемент \(P\) как побитовое ИЛИ всех чисел в массиве кроме \(A_i\).

Вам нужно отгадать пароль. Чтобы задать запрос, вы можете выбрать непустое подмножество индексов массива и спросить побитовое ИЛИ всех элементов массива с индексами в этом подмножестве. Вы можете задать не более 13 запросов.

Входные данные

В первой строке записано одно целое число \(n\) \((2 \le n \le 1000)\) — количество слотов в замке.

Протокол взаимодействия

Чтобы задать вопрос, в отдельной строке:

  • Сначала выведите «? c» (без кавычек), где \(c\) \((1 \leq c \leq n)\) обозначает размер подмножества запроса, после чего выведите \(c\) различных целых чисел из отрезка \([1, n]\), разделенных пробелами.

В ответ на каждый запрос, вы получите число \(x\) — побитовое ИЛИ чисел с выбранными индексами. Если вы спросили некорректное множество индексом или вы превысили количество запросов, тогда вы получите \(x = -1\). В таком случае вы должны немедленно завершить выполнение программы.

Если вы угадали пароль, в отдельной строке выведите «!» (без кавычек), после чего выведите \(n\) целых чисел, разделенных пробелами  — последовательность-пароль.

Отгадывание пароля не считается в числе загаданных запросов.

Интерактор не адаптивный. Массив \(A\) не меняется с запросами.

После вывода запроса, не забывайте выводить конец строки и сбрасывать поток вывода. Иначе, вы получите верикт Превышен лимит бездействия. Чтобы сделать это, используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • читайте документацию для остальных языков.

Взломы

Чтобы взломать решение, используйте следующий формат:

В первой строке, выведите одно целое число \(n\) \((2 \le n \le 1000)\) — количество слотов в замке. Во второй строке выведите \(n\) целых чисел из отрезка \([0, 2^{63} - 1]\), разделенных пробелами  — массив \(A\).

Примечание

Массив \(A\) в примере это \(\{{1, 2, 4\}}\). Первый элемент пароля это побитовое ИЛИ элементов \(A_2\) и \(A_3\), второй элемент это побитовое ИЛИ элементов \(A_1\) и \(A_3\), а третий элемент это побитовое ИЛИ элементов \(A_1\) и \(A_2\). Таким образом, пароль равен \(\{{6, 5, 3\}}\).

D. Два делителя

Конструктив математика теория чисел *2000

Вам заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\).

Для каждого \(a_i\) найдите два его делителя \(d_1 > 1\) и \(d_2 > 1\) такие, что \(\gcd(d_1 + d_2, a_i) = 1\) (где \(\gcd(a, b)\) — наибольший общий делитель \(a\) и \(b\)) или скажите, что такой пары нет.

Входные данные

В первой строке задано единственное целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)) — размер массива \(a\).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(2 \le a_i \le 10^7\)) — массив \(a\).

Выходные данные

Ради ускорения вывода, выведите ответы в две строки по \(n\) чисел в каждой.

В первой и второй строках \(i\)-ми по счету числами выведите соответствующие делители \(d_1 > 1\) и \(d_2 > 1\) такие, что \(\gcd(d_1 + d_2, a_i) = 1\) или \(-1\) и \(-1\), если такой пары делителей нет. Если существует несколько подходящих ответов, выведите любой из них.

Примечание

Рассмотрим \(a_7 = 8\). У него есть \(3\) делителя больших, чем \(1\): \(2\), \(4\), \(8\). Не сложно заметить, что сумма любой пары делителей делится на \(2\), также как и \(a_7\).

Существуют и другие подходящие пары делителей \(d_1\) и \(d_2\) для \(a_{10}=24\), например, \((3, 4)\) или \((8, 3)\). Вы можете вывести любую из них.

E. Два массива

Бинарный поиск дп Комбинаторика Конструктив Перебор *2100

Вам даны два массива \(a_1, a_2, \dots , a_n\) и \(b_1, b_2, \dots , b_m\). Массив \(b\) отсортирован в порядке возрастания (\(b_i < b_{i + 1}\) верно для любого \(i\) от \(1\) до \(m - 1\)).

Вам нужно разбить массив \(a\) на \(m\) непрерывных подмассивов так, чтобы для всех \(i\) от \(1\) до \(m\) минимум в \(i\)-м подмассиве был равен \(b_i\). Обратите внимание, что каждый элемент должен принадлежать ровно одному подмассиву, и они формируются следующим образом: первые несколько элементов массива \(a\) принадлежат первому подмассиву, следующие несколько элементов массива \(a\) принадлежат второму подмассиву, и так далее.

Например, если \(a = [12, 10, 20, 20, 25, 30]\), а \(b = [10, 20, 30]\), то существует два подходящих разбиения массива \(a\):

  1. \([12, 10, 20], [20, 25], [30]\);
  2. \([12, 10], [20, 20, 25], [30]\).

Вам нужно посчитать количество хороших разбиений массива \(a\). Так как это значение может быть слишком велико — выведите его по модулю 998244353.

Входные данные

Первая строка содержит два числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — длины массивов \(a\) и \(b\) соответственно.

Вторая строка содержит \(n\) чисел \(a_1, a_2, \dots , a_n\) (\(1 \le a_i \le 10^9\)) — массив \(a\).

Третья строка содержит \(m\) чисел \(b_1, b_2, \dots , b_m\) (\(1 \le b_i \le 10^9; b_i < b_{i+1}\)) — массив \(b\).

Выходные данные

В единственной строке выведите число — количество хороших разбиений массива \(a\) по модулю 998244353.

C. Социальная дистанция

жадные алгоритмы Конструктив математика *1300

Поликарп с друзьями хочет сходить в новый ресторан. Ресторан представляет из себя \(n\) столиков, расставленных вдоль прямой. За некоторыми столиками уже сидят люди. Столики пронумерованы от \(1\) до \(n\) в порядке слева направо. Состояние ресторана описывается строкой длины \(n\), которая содержит символы '1' (столик занят) и '0' (столик свободен).

Правила ресторана запрещают людям садиться на расстоянии \(k\) или меньше друг от друга. То есть, если человек сидит за столиком номер \(i\), то все столики с номерами от \(i-k\) до \(i+k\) (кроме \(i\)-го) должны быть свободны. Иными словами, разница (то есть модуль разности) номеров между любыми двумя занятыми столиками должна быть строго больше \(k\).

Например, если \(n=8\) и \(k=2\), то:

  • строки «10010001», «10000010», «00000000», «00100000» соответствуют правилам ресторана;
  • строки «10100100», «10011001», «11111111» не соответствуют правилам ресторана, так как в каждой из них есть пара единиц на расстоянии меньшем или равном \(k=2\).

В частности, если состояние ресторана описывается строкой без единиц или строкой с одной единицей, то требование ресторана выполнено.

Вам задана бинарная строка \(s\), которая описывает текущее состояние ресторана. Гарантируется, что для строки \(s\) правила ресторана выполнены.

Найдите максимальное количество свободных столиков, которые можно занять, чтобы не нарушить правила ресторана. Формально, какое максимальное количество нулей можно заменить на единицы так, что требование все еще будет выполняться?

Например, если \(n=6\), \(k=1\), \(s=\) «100010», то ответ на задачу будет \(1\), так как есть только один свободный столик на позиции \(3\), который можно занять в соответствии с правилами ресторана.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов тестовых данных в тесте. Далее следуют \(t\) наборов тестовых данных.

Каждый набор начинается со строки, в которой записано два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2\cdot 10^5\)) — количество столиков в ресторане и минимальное разрешенное расстояние между двумя людьми.

Во второй строке каждого набора записана строка \(s\) длины \(n\), состоящая из нулей и единиц — описание свободных и занятых столиков в ресторане. Заданная строка соответствует правилам ресторана — разница индексов между любыми двумя единицами строго больше \(k\).

Сумма \(n\) по всем наборам тестовых данных в одном тесте не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого тестового набора выведите одно целое число — количество столиков, которые можно дополнительно занять, чтобы не нарушить правила ресторана. Если дополнительных столиков занять нельзя, то, очевидно, надо вывести \(0\).

Примечание

Первый набор тестовых данных разобран в условии.

Во втором наборе тестовых данных ответ \(2\), так как можно выбрать первый и шестой столики.

В третьем наборе тестовых данных нельзя занять никакой свободный столик, не нарушив правила ресторана.

D. Задача на доске

жадные алгоритмы Конструктив реализация сортировки *1800

Поликарп написал на доске некоторую строку \(s\) из строчных букв латинского алфавита ('a'-'z'). Эта строка вам известна и задана во входных данных.

После этого он стёр какие-то буквы из строки \(s\), а оставшиеся буквы он переписал в произвольном порядке. В результате он получил некоторую новую строку \(t\). Её вам и предстоит найти по некоторой дополнительной информации.

Предположим, что длина строки \(t\) равна \(m\), а символы пронумерованы слева направо от \(1\) до \(m\). В таком случае вам задана последовательность из \(m\) целых чисел: \(b_1, b_2, \ldots, b_m\), где \(b_i\) равно сумме расстояний \(|i-j|\) от индекса \(i\) до всех таких индексов \(j\), что \(t_j > t_i\) (считайте, что 'a'<'b'<...<'z'). Иными словами, для вычисления \(b_i\) Поликарп находит все такие индексы \(j\), что в индексе \(j\) находится буква, которая стоит позже в алфавите чем \(t_i\), и суммирует все значения \(|i-j|\).

Например, если \(t\)abzb», то:

  • так как \(t_1\)='a', то все остальные индексы содержат буквы, которые позже в алфавите, то есть: \(b_1=|1-2|+|1-3|+|1-4|=1+2+3=6\);
  • так как \(t_2\)='b', то только индекс \(j=3\) содержит букву, которая позже в алфавите, то есть: \(b_2=|2-3|=1\);
  • так как \(t_3\)='z', то индексов \(j\), что \(t_j>t_i\) не существует: \(b_3=0\);
  • так как \(t_4\)='b', то только индекс \(j=3\) содержит букву, которая позже в алфавите, то есть: \(b_4=|4-3|=1\).

Таким образом, если \(t\)abzb», то \(b=[6,1,0,1]\).

По заданной строке \(s\) и массиву \(b\) найдите любую возможную строку \(t\), для которой выполняются следующие два требования одновременно:

  • \(t\) получается из \(s\) путём стирания некоторых букв (возможно, нуля) и потом записи оставшихся в произвольном порядке;
  • по строке \(t\) получается заданный во входных данных массив \(b\), если его построить по правилам, которые описаны выше.
Входные данные

В первой строке записано целое число \(q\) (\(1 \le q \le 100\)) — количество наборов входных данных в тесте. Далее следуют \(q\) наборов входных данных.

Каждый набор входных данных состоит из трех строк:

  • строки \(s\), которая имеет длину от \(1\) до \(50\) и состоит из строчных букв латинского алфавита;
  • строки, которая содержит целое число \(m\) (\(1 \le m \le |s|\)), где \(|s|\) — длина строки \(s\), а \(m\) — длина массива \(b\);
  • строки, которая содержит целые числа \(b_1, b_2, \dots, b_m\) (\(0 \le b_i \le 1225\)).

Гарантируется, что в каждом наборе данных входные данные таковы, что ответ существует.

Выходные данные

Выведите \(q\) строк: \(k\)-я из них должна содержать ответ (строку \(t\)) на \(k\)-й набор входных данных. Гарантируется, что ответ на каждый набор входных данных существует. Если ответов несколько, то выведите любой.

Примечание

В первом наборе входных данных подходят такие строки \(t\): «aac», «aab».

Во втором наборе входных данных подходят такие строки \(t\): «a», «b», «c».

В третьем наборе входных данных подходит только строка \(t\) равная «aba», но символ 'b' может быть со второй или с третьей позиции.

B. Подпоследовательности Codeforces

жадные алгоритмы Конструктив математика Перебор Строки *1500

Карл любит Codeforces и подпоследовательности. Он хочет составить строку из маленьких английских букв, которая содержит как минимум \(k\) подпоследовательностей codeforces. Из всех таких строк Карл хочет выбрать самую короткую.

Формально, подпоследовательность codeforces строки \(s\) — это подмножество из десяти символов \(s\), которые образуют codeforces, если читать их в строке слева направо. Например, строка codeforces содержит одну подпоследовательность codeforces, а codeforcesisawesome содержит четыре подпоследовательности codeforces: codeforcesisawesome, codeforcesisawesome, codeforcesisawesome, codeforcesisawesome.

Помогите Карлу найти любую кратчайшую строку, которая содержит как минимум \(k\) подпоследовательностей codeforces.

Входные данные

В единственной строке записано одно целое число \(k\) (\(1 \leq k \leq 10^{16})\).

Выходные данные

Выведите кратчайшую строку из маленьких английских букв, которая содержит не менее \(k\) подпоследовательностей codeforces. Если таких строк несколько, выведите любую из них.

C. Чётный рисунок

Конструктив *1500

Лео-младший рисует в тетради в клеточку (каждая страница размечена квадратной сеткой). Можно считать, что страницы бесконечно большие в любом направлении.

Лео-младший закрашивает некоторые клетки на странице серым цветом. Он считает получившийся рисунок красивым, если выполнены следующие условия:

  • Рисунок связен, то есть, из любой серой клетки можно попасть в любую другую по цепочке из серых клеток, в которой каждые две последовательные клетки — соседи (то есть, имеют общую сторону).
  • Каждая серая клетка имеет чётное количество серых соседей.
  • В рисунке ровно \(n\) серых клеток, у которых все соседи серые. Количество остальных серых клеток может произвольным (но разумным, чтобы их можно было перечислить).

Лео-младший пытается нарисовать красивый рисунок для выбранного значения \(n\). Помогите ему, найдите любой пример красивого рисунка.

Чтобы вывести координаты клеток в ответе, предполагайте, что на странице введена декартова система координат, в которой одна из клеток является началом координат \((0, 0)\), оси \(0x\) и \(0y\) перпендикулярны и сонаправлены линиям сетки, и шаг единичной длины в любом направлении вдоль любой оси ведёт в соседнюю клетку.

Входные данные

В единственной строке записано одно целое число \(n\) (\(1 \leq n \leq 500\)) — количество серых клеток, у которых все соседи серые.

Выходные данные

В первой строке выведите одно целое число \(k\) — количество серых клеток в вашем рисунке. По техническим причинам \(k\) не должно превосходить \(5 \cdot 10^5\).

Каждая из следующих \(k\) строк должна содержать две целых числа — координаты очередной серой клетки в вашем рисунке. Все перечисленные клетки должны быть различны, и рисунок должен отвечать всем требованиям, перечисленным выше. Все координаты не должны превосходить \(10^9\) по абсолютной величине.

Можно показать, что существует ответ, который удовлеторяет всем требованиям и укладывается в ограничение на \(k\).

Примечание

Ответ для примера изображен ниже:

E. Происшествия на лыжах

графы жадные алгоритмы Конструктив *2500

Артур — владелец горнолыжного курорта. На горе расположено \(n\) площадок, пронумерованных от \(1\) до \(n\), начиная с вершины и заканчивая подножьем горы. Площадки соединены однонаправленными треками. Все треки направлены от вершины к подножью, поэтому они не могут образовывать направленных циклов. Из каждой площадки исходит не более, чем две трека, но в одну и ту же площадку может входить любое количество треков.

Лыжник может спуститься с одной из площадок до другой, если существует путь из треков, которая ведёт из стартовой площади в конечную. К сожалению, в последнее время участились несчастные случаи из-за того, что лыжники, спускающийся по опасному пути, набирают слишком большую скорость и ставят в опасность себя и окружающих. Путь считается опасным, если он состоит из двух или более треков.

Артур хочет обезопасить своих клиентов и закрыть несколько площадок таким образом, чтобы устранить опасные пути. Если площадка закрыта, все треки, входящие и исходящие из этой площадки, также закрываются.

Формально, после закрытия площадок в оставшейся части не должно существовать пути из двух или более треков.

Артур не хочет закрывать слишком много площадок. Он будет доволен, если удастся найти способ закрыть не более \(\frac{4}{7}n\) площадок, чтобы оставшаяся часть была безопасна. Помогите ему найти любой способ этого добиться.

Входные данные

В первой строке записано одно положительное целое число \(T\) — количество наборов входных данных. После этого следует \(T\) блоков с описанием наборов входных данных.

Первая строка каждого блока содержит два целых числа \(n\) и \(m\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество площадок и треков соответственно.

Следующие \(m\) строк описывают треки. Каждая из этих строк содержит два целых числа \(x\) и \(y\) (\(1 \leq x < y \leq n\)) — номера стартовой и финишной площадки очередного трека. Гарантируется, что из каждой площадки исходит не более двух треков. Могут существовать треки, у которых и начала, и концы совпадают.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число \(k\) (\(0 \leq k \leq \frac{4}{7}n\)) — количество площадок, которые нужно закрыть. В следующей строке выведите \(k\) различных целых чисел — номера площадок, которые нужно закрыть, в любом порядке.

Если существует несколько ответов, разрешается вывести любой из них. Обратите внимание, что минимизировать \(k\) не требуется. Можно показать, что подходящий ответ всегда существует.

Примечание

В первом наборе входных данных можно закрыть любые две площадки.

Во втором наборе входных данных закрыть только площадку \(1\) также является корректным.

B. Сжатие массива и НОД

Конструктив математика теория чисел *1100

У Ashish есть массив \(a\), состоящий из \(2n\) положительных целых чисел. Он хочет сжать массив \(a\) в массив \(b\) размера \(n-1\). Чтобы это сделать, он сначала выбирает ровно \(2\) (любые два) элемента массива \(a\) и удаляет их из массива. После этого он выполняет следующую операцию, пока массив \(a\) не пустой:

  • удалить любые два элемента из массива \(a\) и добавить их сумму в массив \(b\).

Получившийся массив \(b\) должен удовлетворять одному условию. Наибольший общий делитель (\(\mathrm{gcd}\)) всех элементов массива должен быть больше \(1\).

Напомним, что наибольший общий делитель (\(\mathrm{gcd}\)) массива положительных целых чисел равен наибольшему целому числу, которое является делителем всех элементов массива.

Можно доказать, что всегда можно таким образом сжать массив \(a\) в массив \(b\) размера \(n-1\), так что \(gcd(b_1, b_2..., b_{n-1}) > 1\).

Помогите Ashish найти способ это сделать.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 10\))  — количество наборов входных данных. Описание наборов входных данных следует.

В первой строке описания каждого набора входных данных находится единственное целое число \(n\) (\(2 \leq n \leq 1000\)).

Во второй строке описания каждого набора входных данных находится \(2n\) целых чисел \(a_1, a_2, \ldots, a_{2n}\) (\(1 \leq a_i \leq 1000\))  — элементы массива \(a\).

Выходные данные

Для каждого набора входных данных, выведите \(n-1\) строку  — выполненные операции, чтобы сжать массив \(a\) в массив \(b\). Изначальное удаление двух элементов не является операцией и про это действие не нужно ничего выводить.

В \(i\)-й из этих строк должно находиться два целых числа, индексы (нумерация с \(1\)) двух элементов массива \(a\), которые используются в \(i\)-й операции. Все \(2n-2\) выведенных индекса должны быть различными целыми числами от \(1\) до \(2n\).

Вам не нужно выводить индексы двух изначально удаленных элементов из массива \(a\).

Если есть несколько возможных ответов, вы можете найти любой.

Примечание

В первом наборе входных данных \(b = \{3+6, 4+5\} = \{9, 9\}\) и \(\mathrm{gcd}(9, 9) = 9\).

Во втором наборе входных данных \(b = \{9+10\} = \{19\}\) и \(\mathrm{gcd}(19) = 19\).

В третьем наборе входных данных \(b = \{1+2, 3+3, 4+5, 90+3\} = \{3, 6, 9, 93\}\) и \(\mathrm{gcd}(3, 6, 9, 93) = 3\).

E. Сдвиги подпоследовательностей

Бинарный поиск жадные алгоритмы Конструктив Структуры данных *2100

У Naman есть две бинарные строки \(s\) и \(t\) длины \(n\) (бинарной строкой называется строка, состоящая из символов «0» и «1»). Он хочет сделать из строки \(s\) строку \(t\) используя следующую операцию как можно меньшее количество раз.

За одну операцию, он может выбрать некоторую подпоследовательность \(s\) и сдвинуть символы на позициях этой подпоследовательности по часовой стрелке один раз.

Например, если \(s = 1\textbf{1}101\textbf{00}\), он может выбрать подпоследовательность, соответствущую позициям (нумерация с \(1\)) \(\{2, 6, 7 \}\) и сдвинуть символы на этих позициях один раз по часовой стрелке. В результате строка, которая получится, будет \(s = 1\textbf{0}101\textbf{10}\).

Строка \(a\) называется подпоследовательностью строки \(b\), если \(a\) может быть получена из \(b\) с помощью удаления некоторых символов без изменения порядка оставшихся символов.

Для того, чтобы сделать сдвиг последовательности \(c\) размера \(k\) по часовой стрелке один раз, нужно сделать следующие замены символов \(c_1:=c_k, c_2:=c_1, c_3:=c_2, \ldots, c_k:=c_{k-1}\) одновременно.

Определите минимальное число операций, которое необходимо сделать Naman, чтобы получить из строки \(s\) строку \(t\) или определите, что это сделать невозможно.

Входные данные

В первой строке находится единственное целое число \(n\) \((1 \le n \le 10^6)\) — длина строк.

Во второй строке находится бинарная строка \(s\) длины \(n\).

В третьей строке находится бинарная строка \(t\) длины \(n\).

Выходные данные

Если невозможно получить из строки \(s\) строку \(t\) после применения любого числа операций, выведите \(-1\).

Иначе выведите минимальное количество операций, которое для этого требуется.

Примечание

В первом тесте, Naman может выбрать подпоследовательность, соответствующую позициям \(\{2, 6\}\) и сдвинуть символы строки, на этих позициях один раз по часовой стрелке. В результате, он сможет получить из строки \(s\) строку \(t\) за одну операцию.

Во втором тесте, он может сделать операцию на подпоследовательности из всех индексов \(5\) раз подряд. Можно доказать, что это минимальное необходимое количество операций.

В последнем тесте, невозможно получить из строки \(s\) строку \(t\).

D. Таблица-00100

жадные алгоритмы Конструктив реализация *1600

Безумный ученый Dr.Jubal придумал задачу по программированию. Попробуйте решить ее!

Вам даны целые числа \(n,k\). Постройте таблицу \(A\), имеющую размер \(n \times n\) и состоящую из целых чисел \(0\) или \(1\). Должно быть выполнено очень важное условие: сумма всех элементов в таблице равна \(k\). Другими словами, количество чисел \(1\) в таблице равно \(k\).

Давайте определим:

  • \(A_{i,j}\) как число, стоящее в \(i\)-й строке и \(j\)-м столбце.
  • \(R_i = A_{i,1}+A_{i,2}+...+A_{i,n}\) (для всех \(1 \le i \le n\)).
  • \(C_j = A_{1,j}+A_{2,j}+...+A_{n,j}\) (для всех \(1 \le j \le n\)).
  • Другими словами, \(R_i\) это суммы чисел в строках и \(C_j\) это суммы чисел в столбцах таблицы \(A\).
  • Для таблицы \(A\) определим значение \(f(A) = (\max(R)-\min(R))^2 + (\max(C)-\min(C))^2\) (здесь для последовательности целых чисел \(X\) мы определяем \(\max(X)\) как максимальное число в \(X\) и \(\min(X)\) как минимальное число в \(X\)).

Найдите любую таблицу \(A\), удовлетворяющую описанному условию. Среди всех таких таблиц найдите такую, для которой значение \(f(A)\) минимально возможное. Среди всех таких таблиц найдите любую.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Следующие \(t\) строк содержат описания набов входных данных.

Для каждого набора входных данных в единственной строке находится два целых числа \(n\), \(k\) \((1 \le n \le 300, 0 \le k \le n^2)\).

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных сначала выведите минимальное возможное значение \(f(A)\) среди всех таблиц, для которых условие выполнено.

После этого, выведите \(n\) строк, каждая содержит по \(n\) символов. \(j\)-й символ в \(i\)-й строке должен быть равен \(A_{i,j}\).

Если есть несколько возможных решений, вы можете вывести любое.

Примечание

В первом наборе входных данных сумма всех чисел таблицы равна \(2\), поэтому условие выполнено. \(R_1 = 1, R_2 = 1\) и \(C_1 = 1, C_2 = 1\). Тогда \(f(A) = (1-1)^2 + (1-1)^2 = 0\), что является минимальным возможным значением \(f(A)\).

Во втором наборе входных данных сумма всех чисел таблицы равна \(8\), значит условие выполнено. \(R_1 = 3, R_2 = 3, R_3 = 2\) и \(C_1 = 3, C_2 = 2, C_3 = 3\). Тогда \(f(A) = (3-2)^2 + (3-2)^2 = 2\). Можно доказать, что это минимальное возможное значение \(f(A)\).

A. Омкар и полнота

Конструктив реализация *800

Вы были благословлены как дитя Омкара. Чтобы выразить свою благодарность, пожалуйста, решите для Омкара эту задачу!

Массив \(a\) длины \(n\) называется полным, если все его элементы положительны, не превышают \(1000\), и для любых трех индексов \(x\), \(y\), \(z\) (\(1 \leq x,y,z \leq n\)), \(a_{x}+a_{y} \neq a_{z}\) (не обязательно различных).

Вам дано одно целое число \(n\). Найдите полный массив длины \(n\). Гарантируется, что при данных ограничениях решение существует.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит \(t\) (\(1 \le t \le 1000\))  — количество наборов входных данных. Описание наборов входных данных приведено ниже.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 1000\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(1000\).

Выходные данные

Для каждого набора входных данных выведите полный массив в отдельной строке. Все элементы должны быть целыми числами между \(1\) и \(1000\) и для любых трех индексов \(x\), \(y\), \(z\) (\(1 \leq x,y,z \leq n\)) (не обязательно различных), должно выполняться \(a_{x}+a_{y} \neq a_{z}\).

Если существует несколько решений, вы можете вывести любое.

Примечание

Можно показать, что массивы с примера являются полными массивами. Например, \(44+44 \neq 384\).

Ниже приведены некоторые примеры массивов, которые НЕ полные для 1-го теста:

\([1,2,3,4,5]\)

Обратите внимание, что \(a_{1}+a_{2} = a_{3}\).

\([1,3000,1,300,1]\)

Обратите внимание, что \(a_{2} = 3000 > 1000\).

C. Омкар и бейсбол

Конструктив математика *1500

Патрик любит играть в бейсбол, но иногда он тратит так много часов на пробежки, что его разум начинает затуманиваться! Патрик уверен, что его набранные очки за \(n\) игр соответствуют тождественной перестановке (т.е. в первой игре он набирает \(1\), во второй игре он набирает \(2\) и так далее). Однако, когда он посмотрел на свои записи, он увидел, что все значения перепутаны!

Определим специальный обмен следующим образом: выберите любой подмассив очков и переставьте местами его элементы так, чтобы ни один элемент не оказался в той же позиции, где он был до обмена. Например, выполнение специального обмена на \([1,2,3]\) может дать \([3,1,2]\), но не может дать \([3,2,1]\), так как \(2\) находится в той же позиции.

Вам дана перестановка из \(n\) целых чисел. Пожалуйста, помогите Патрику найти минимальное количество специальных обменов, необходимых для того, чтобы сделать ее отсортированной! Можно доказать, что при данных ограничениях это число не превышает \(10^{18}\).

Массив \(a\) является подмассивом массива \(b\), если \(a\) можно получить из \(b\), удалив несколько (возможно, ноль или все) элементов из начала и несколько (возможно, ноль или все) элементов с конца.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 100\)). Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\))  — длину данной перестановки.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_{1},a_{2},...,a_{n}\) (\(1 \leq a_{i} \leq n\))  — начальную перестановку.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: минимальное количество специальных обменов, необходимых для сортировки перестановки.

Примечание

Первая перестановка она уже отсортирована, поэтому обмены не нужны.

Можно показать, что для сортировки второй перестановки нужно как минимум \(2\) обмена.

\([3, 2, 4, 5, 1, 6, 7]\)

Сделаем специальный обмен для диапазона (\(1, 5\))

\([4, 1, 2, 3, 5, 6, 7]\)

Сделаем специальный обмен для диапазона (\(1, 4\))

\([1, 2, 3, 4, 5, 6, 7]\)

E. Сумма цифр

дп жадные алгоритмы Конструктив Перебор *2200

Пусть \(f(x)\) — сумма цифр числа \(x\).

Найдите минимальное неотрицательное целое \(x\), для которого \(f(x) + f(x + 1) + \dots + f(x + k) = n\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 150\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух чисел \(n\) и \(k\) (\(1 \le n \le 150\), \(0 \le k \le 9\)).

Выходные данные

Для каждого набора тестовых данных выведите одно число без ведущих нулей. Если такого \(x\), что \(f(x) + f(x + 1) + \dots + f(x + k) = n\), не существует, выведите \(-1\); иначе выведите минимальное \(x\), соответствующее этому условию.

F. Покрытие Интернетом

Бинарный поиск жадные алгоритмы Конструктив Структуры данных *2400

Правительство Берляндии наконец-то решило улучшить покрытие сетью Интернет в своей стране. Берляндия имеет уникальную структуру: в самом центре находится столица, а \(n\) городов расположены вокруг нее по кругу. В столице нет проблем с Интернетом (поэтому правительство игнорирует ее), но в \(i\)-м городе необходимо провести соединение в \(a_i\) домов.

Правительство разработало план постройки \(n\) базовых станций между каждой парой соседних городов, которые будут обслуживать только эти города. Другими словами, \(i\)-я базовая станция будет обслуживать только \(i\)-й и \((i + 1)\)-й город (\(n\)-я станция будет обслуживать \(n\)-й и \(1\)-й город).

Все базовые станции имеют ограниченную мощность: к \(i\)-й станции может быть подключено не более \(b_i\) домов.

Сейчас же правительство просит вас проверить: могут ли спроектированные станции удовлетворить потребности всех городов или нет; то есть можно ли каждый дом подключить к базовой станции так, что к каждой станции \(i\) подключено не более \(b_i\) домов.

Входные данные

В первой строке задано единственное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора задано единственное целое число \(n\) (\(2 \le n \le 10^6\)) — количество городов и станций.

Во второй строке каждого набора заданы \(n\) целых чисел (\(1 \le a_i \le 10^9\)) — количество необходимых соединений для \(i\)-го города.

В третьей строке каждого набора заданы \(n\) целых чисел (\(1 \le b_i \le 10^9\)) — мощности планируемых базовых станций.

Гарантируется, что сумма \(n\) по наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных, выведите YES, если спроектированные станции смогут удовлетворить потребности всех городов, или NO в противном случае (регистр букв не важен).

Примечание

В первом наборе входных данных:

  • первая базовая станция может предоставить \(2\) соединения первому городу и \(1\) соединение второму городу;
  • вторая станция может предоставить \(2\) соединения второму городу и \(1\) соединение третьему городу;
  • третья станция может предоставить \(3\) соединения третьему городу.

Во втором наборе:

  • \(1\)-я станция может предоставить \(2\) соединения \(1\)-му городу;
  • \(2\)-я станция может предоставить \(3\) соединения \(2\)-му городу;
  • \(3\)-я станция может предоставить \(3\) соединения \(3\)-му городу и \(1\) соединение \(1\)-му городу.

В третьем примере, четвертому городу необходимо \(5\) соединений, но третья и четвертая станции могут предоставить только \(4\) соединения суммарно.

F. Сортировка циклическими сдвигами

Конструктив Перебор реализация сортировки *2400

Вам задан массив \(a\), состоящий из \(n\) целых чисел.

За один ход вы можете выбрать некоторый индекс \(i\) (\(1 \le i \le n - 2\)) и сдвинуть отрезок \([a_i, a_{i + 1}, a_{i + 2}]\) циклически вправо (т.е. заменить отрезок \([a_i, a_{i + 1}, a_{i + 2}]\) на \([a_{i + 2}, a_i, a_{i + 1}]\)).

Ваша задача — отсортировать заданный массив за не более чем \(n^2\) таких операций или сказать, что это невозможно.

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(3 \le n \le 500\)) — длину массива \(a\). Вторая строка набора тестовых данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 500\)), где \(a_i\)\(i\)-й элемент \(a\).

Гарантируется, что сумма всех \(n\) не превосходит \(500\).

Выходные данные

Для каждого набора тестовых данных выведите ответ: -1 единственной строкой, если невозможно отсортировать заданный массив, используя операции, описанные в условии задачи, или количество операций \(ans\) первой строкой и \(ans\) целых чисел \(idx_1, idx_2, \dots, idx_{ans}\) (\(1 \le idx_i \le n - 2\)), где \(idx_i\) — индекс левой границы отрезка для \(i\)-й операции. Вы должны вывести индексы в порядке применения операций.

A. Изменение знаков

Конструктив математика *1100

Вам даны \(n\) целых чисел \(a_1, a_2, \dots, a_n\), где \(n\) нечетно. Вы можете поменять знаки некоторых (возможно, всех или ни одного) из них. Вы хотите поменять знаки таким образом, чтобы выполнялись следующие условия:

  • Не менее \(\frac{n - 1}{2}\) среди разностей соседних \(a_{i + 1} - a_i\) для \(i = 1, 2, \dots, n - 1\) больше либо равны \(0\).
  • Не менее \(\frac{n - 1}{2}\) среди разностей соседних \(a_{i + 1} - a_i\) для \(i = 1, 2, \dots, n - 1\) меньше либо равны \(0\).

Найдите любой подходящий способ поменять знаки. Можно показать, что при данных ограничениях всегда существует хотя бы один выбор знаков, который удовлетворяет требуемому условию. Если существует несколько решений, выведите любое из них.

Входные данные

Ввод состоит из нескольких наборов входных данных. В первой строке записано целое число \(t\) (\(1 \le t \le 500\))  — количество наборов входных данных. Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(3 \le n \le 99\), \(n\) нечетно)  — количество целых чисел, данных вам.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\))   — сами числа.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10000\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(b_1, b_2, \dots, b_n\), соответствующих целым числам после изменения знаков. \(b_i\) должно быть равно либо \(a_i\), либо \(-a_i\), а также среди разностей соседних \(b_{i + 1} - b_i\) для \(i = 1, \dots, n - 1\), по крайней мере \(\frac{n - 1}{2}\) должна быть неотрицательными, и хотя бы \(\frac{n - 1}{2}\) должна быть неположительными.

Можно показать, что при данных ограничениях всегда существует хотя бы один выбор знаков, который удовлетворяет требуемому условию. Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных разница \((-4) - (-2) = -2\) неположительна, а разница \(3 - (-4) = 7\) неотрицательна.

Во втором наборе входных данных нам не нужно менять знаки. Все \(4\) разности равны \(0\), и являются как неположительными, так и неотрицательными.

В третьем наборе входных данных \(7 - (-4)\) и \(4 - (-6)\) неотрицательны, а \((-4) - (-2)\) и \((-6) - 7\) неположительны.

B. Таблица соседей

жадные алгоритмы Конструктив *1200

Вам дана таблица с \(n\) строками и \(m\) столбцами, где в каждой ячейке написано неотрицательное целое число. Мы говорим, что таблица является хорошей, если для каждой ячейки выполняется следующее условие: если в ней написано число \(k > 0\), то ровно в \(k\) соседних с ней ячейках написано число, большее \(0\). Заметьте, что если число в ячейке равно \(0\), то нет никаких условий на соседние ячейки.

Вы можете взять любое число в таблице и увеличить его на \(1\). Вы можете применять эту операцию столько раз, сколько хотите, к любым числам в таблице. Выполните несколько операций (возможно, ноль), чтобы сделать сетку хорошей, или скажите, что это невозможно. Если существует несколько возможных ответов, вы можете вывести любой из них.

Две ячейки считаются соседними, если они имеют общее ребро.

Входные данные

Ввод состоит из нескольких наборов входных данных. В первой строке записано целое число \(t\) (\(1 \le t \le 5000\))  — количество наборов входных данных. Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \le n, m \le 300\))  — количество строк и столбцов соответственно.

Каждая из следующих \(n\) строк содержит по \(m\) целых чисел, \(j\)-й элемент \(i\)-й строки равен \(a_{i, j}\)  — это число, записанное в \(j\)-й ячейке \(i\)-й строки (\(0 \le a_{i, j} \le 10^9\)).

Гарантируется, что сумма \(n \cdot m\) по всем тестовым случаям не превышает \(10^5\).

Выходные данные

Если получить хорошую таблицу невозможно, выведите одну строку, содержащую "NO".

В противном случае выведите одну строку, содержащую "YES", за которой следуют \(n\) строк, каждая из которых содержит \(m\) целых чисел, которые описывают конечное состояние сетки. Эта конечная таблица должна быть доступна из начальной с помощью применения нескольких операций (возможно, ни одной).

Если существует несколько возможных ответов, вы можете вывести любой из них.

Примечание

В первом наборе входных данных мы можем получить хорошую таблицу, увеличив число в строке \(2\), столбце \(3\) один раз. Обе ячейки, содержащие \(1\), имеют ровно одного соседа, который больше нуля, поэтому таблица хорошая. Существует много других решений, таких как таблица

\(\)0\;1\;0\;0\(\) \(\)0\;2\;1\;0\(\) \(\)0\;0\;0\;0\(\)

Все они принимаются как действительные ответы.

Во втором наборе входных данных невозможно сделать таблицу хорошей.

В третьем наборе входных данных обратите внимание, что ни в одной ячейке нет числа больше нуля, поэтому таблица изначально хорошая.

C. Уничтожение элементов

жадные алгоритмы Конструктив Структуры данных *1400

Вам дан массив \(a\) длины \(n\), который изначально является перестановкой чисел от \(1\) до \(n\). За одну операцию, вы можете выбрать индекс \(i\) (\(1 \leq i < n\)), такой что \(a_i < a_{i + 1}\), и удалить либо \(a_i\) или \(a_{i + 1}\) из массива (после удаления оставшиеся части воссоединяются).

Например, если у вас есть массив \([1, 3, 2]\), вы можете выбрать \(i = 1\) (так как \(a_1 = 1 < a_2 = 3\)), и либо удалить \(a_1\), что даст новый массив \([3, 2]\), или удалить \(a_2\), что даст новый массив \([1, 2]\).

Можно ли сделать длину этого массива равной \(1\) с помощью этих операций?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^4\))  — количество наборов входных данных. Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 3 \cdot 10^5\)) — длину массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \leq a_i \leq n\), \(a_i\) попарно различны) — элементы массива.

Гарантируется, что сумма \(n\) по всем тестовым случаям не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке слово "YES", если возможно свести массив к одному элементу с помощью вышеупомянутой операции, или "NO", если это невозможно сделать.

Примечание

Для первых двух и четвертого наборов входных данных мы можем действовать следующим образом (выделенные жирным шрифтом элементы  — это пара, выбранная для этой операции):

\([\text{1}, \textbf{2}, \textbf{3}] \rightarrow [\textbf{1}, \textbf{2}] \rightarrow [\text{1}]\)

\([\text{3}, \textbf{1}, \textbf{2}, \text{4}] \rightarrow [\text{3}, \textbf{1}, \textbf{4}] \rightarrow [\textbf{3}, \textbf{4}] \rightarrow [\text{4}]\)

\([\textbf{2}, \textbf{4}, \text{6}, \text{1}, \text{3}, \text{5}] \rightarrow [\textbf{4}, \textbf{6}, \text{1}, \text{3}, \text{5}] \rightarrow [\text{4}, \text{1}, \textbf{3}, \textbf{5}] \rightarrow [\text{4}, \textbf{1}, \textbf{5}] \rightarrow [\textbf{4}, \textbf{5}] \rightarrow [\text{4}]\)

D. Заменить на MEX

Конструктив Перебор сортировки *1900

Вам дан массив из \(n\) целых чисел от \(0\) до \(n\) включительно.

За одну операцию вы можете выбрать любой элемент массива и заменить его на MEX всех элементов массива (этот MEX может измениться после операции).

Например, если текущий массив равен \([0, 2, 2, 1, 4]\), то вы можете выбрать второй элемент и заменить его на MEX существующих элементов  — \(3\). Массив станет равным \([0, 3, 2, 1, 4]\).

Вы должны сделать массив неубывающим, используя не более \(2n\) операций.

Можно показать, что это всегда возможно. Обратите внимание, что вы не должны минимизировать количество операций. Если есть много решений, вы можете найти любое из них.

 –

Напомним, что массив \(b[1 \ldots n]\) является неубывающим тогда и только тогда, когда \(b_1 \le b_2 \le \ldots \le b_n\).

Напомним, что MEX массива равен наименьшему неотрицательному целому числу, которое не принадлежит массиву. Например:

  • MEX для \([2, 2, 1]\) равен \(0\), поскольку \(0\) не принадлежит массиву.
  • MEX для \([3, 1, 0, 1]\) равен \(2\), поскольку \(0\) и \(1\) принадлежат массиву, а \(2\)  — нет.
  • MEX для \([0, 3, 1, 2]\) равен \(4\), поскольку \(0\), \(1\), \(2\) и \(3\) принадлежат массиву, а \(4\) — нет.

Стоит отметить, что MEX массива длины \(n\) всегда находится между \(0\) и \(n\) включительно.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 200\)) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 1000\)) — длину массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, \ldots, a_n\) (\(0 \le a_i \le n\))  — элементы массива. Заметим, что они не обязательно различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(1000\).

Выходные данные

Для каждого набора входных данных вы должны вывести две строки:

Первая строка должна содержать одно целое число \(k\) (\(0 \le k \le 2n\))  — количество операций, которые вы выполняете.

Вторая строка должна содержать \(k\) целых чисел \(x_1, \ldots, x_k\) (\(1 \le x_i \le n\)), где \(x_i\)  — индекс элемента, с котором вы выполняете операцию \(i\).

Если есть много решений, вы можете найти любое из них. Пожалуйста, помните, что минимизировать \(k\) не требуется.

Примечание

В первом наборе входных данных массив уже не убывает (\(2 \le 2 \le 3\)).

Объяснение второго набора входных данных (элемент, изменяемый каждой операцией, окрашен красным):

  • \(a = [2, 1, 0]\) ; начальный MEX равен \(3\).
  • \(a = [2, 1, \color{red}{3}]\) ; новый MEX равен \(0\).
  • \(a = [\color{red}{0}, 1, 3]\) ; новый MEX равен \(2\).
  • Итоговый массив неубывающий: \(0 \le 1 \le 3\).

Объяснение третьего набора входных данных:

  • \(a = [0, 7, 3, 1, 3, 7, 7]\) ; начальный MEX равен \(2\).
  • \(a = [0, \color{red}{2}, 3, 1, 3, 7, 7]\) ; новый MEX равен \(4\).
  • \(a = [0, 2, 3, 1, \color{red}{4}, 7, 7]\) ; новый MEX равен \(5\).
  • \(a = [0, 2, 3, 1, \color{red}{5}, 7, 7]\) ; новый MEX равен \(4\).
  • \(a = [0, 2, 3, \color{red}{4}, 5, 7, 7]\) ; новый MEX равен \(1\).
  • Итоговый массив неубывающий: \(0 \le 2 \le 3 \le 4 \le 5 \le 7 \le 7\).

E. Сортировка инверсиями

жадные алгоритмы Конструктив сортировки *2500

У Madeline есть массив \(a\) состоящий из \(n\) целых чисел. Пара \((u, v)\) образует инверсию в массиве \(a\) если

  • \(1 \le u < v \le n\).
  • \(a_u > a_v\).

Madeline только что обнаружила магический листочек, который позволяет ей написать два индекса \(u\) и \(v\) и поменять местами значения \(a_u\) и \(a_v\). Будучи скучающим, она решила написать список пар \((u_i, v_i)\) со следующими условиями:

  • Все пары в списке различны и каждая из них является инверсией в массиве \(a\).
  • Все пары которые образуют инверсию в массиве \(a\) присутствуют в списке.
  • Начиная с данного массива, если поменять местами числа стоящие в позициях \(u_1\) и \(v_1\), потом числа стоящие в позициях \(u_2\) и \(v_2\), и так далее, то после всех этих операций массив \(a\) будет отсортирован в порядке неубывания.
Создайте такой список или скажите что сделать это невозможно. Если есть несколько решений, вы можете найти любое из них.
Входные данные

Первая строка ввода содержит одно целое число \(n\) (\(1 \le n \le 1000\)) — длину массива.

Следующая строка содержит \(n\) целых чисел \(a_1,a_2,...,a_n\) \((1 \le a_i \le 10^9)\)  — элементы массива.

Выходные данные

Выведите -1 если нет подходящего списка. В противном случае выведите \(m\) (\(0 \le m \le \dfrac{n(n-1)}{2}\)) — количество пар в списке.

\(i\)-я из следующих \(m\) строк должна состоять из двух целых чисел \(u_i, v_i\) (\(1 \le u_i < v_i\le n\)).

Если есть несколько решений, вы можете найти любое из них.

Примечание

В первом примере массив будет изменен следующим образом \([3,1,2] \rightarrow [2,1,3] \rightarrow [1,2,3]\).

Во втором примере \([1,8,1,6] \rightarrow [1,6,1,8] \rightarrow [1,1,6,8]\).

В третем примере массив уже отсортирован.

F. Игра с числами

игры интерактив Конструктив математика *2600

Это интерактивная задача.

Антон и Харрис играют в игру, чтобы решить, кто из них является королем проблемсеттинга.

Есть три кучи камней, изначально содержащих \(a\), \(b\), \(c\) камней соответственно, где \(a\), \(b\) и \(c\) являются попарно различными целыми положительными числами. На каждом ходу игры происходит следующая последовательность событий:

  • Первый игрок выбирает положительное целое число \(y\) и передает его второму игроку.
  • Второй игрок добавляет \(y\) камней к одной из куч, с условием, что он не может выбрать одну и ту же кучу в два последовательных хода.

Второй игрок проигрывает, если в какой-то момент две кучи содержат одинаковое количество камней. Первый игрок проигрывает, если прошло \(1000\) ходов без проигрыша второго игрока.

Чувствуя себя уверенно в своем мастерстве, Антон решил позволить Харрису выбрать, хочет он ходить первым или вторым. Помогите Харрису победить Антона и стать королем проблемсеттинга!

Входные данные

Первая строка содержит три различных положительных целых числа \(a\), \(b\), and \(c\) (\(1 \le a, b, c \le 10^9\))  — начальные количества камней в кучах \(1\), \(2\) и \(3\) соответственно.

Протокол взаимодействия

Взаимодействие начинается с чтения целых чисел \(a\), \(b\) и \(c\).

После прочтения выведите одну строку, содержащую "First" или "Second", обозначающую, кем вы хотите играть (за первого или за второго, соответственно).

На каждом ходу первый игрок (вы или интерактор) должен вывести положительное целое число \(y\) (\(1 \le y \le 10^{12}\)).

Затем второй игрок должен вывести \(1\), \(2\) или \(3\), указав, к какой куче должны быть добавлены \(y\) камней. Начиная со второго хода, куча, которую выбирает второй игрок, должна отличаться от кучи, выбранной на предыдущем ходу.

Если вы играете за Second и продержались \(1000\) ходов без проигрыша, или если вы играете за First, и интерактор определил, что он не может сделать ход без проигрыша, интерактор выведет \(0\) и закончит взаимодействие. Это означает, что ваша программа прошла данный тест, и вы должны немедленно завершить программу.

Если вы играете как First и не побеждаете за \(1000\) ходов, или если вы играете как Second и выводите ход, в котором два кучи имеют одинаковое количество камней, или вы выводите невозможный ход как любой из игроков, интерактор выведет \(-1\) и завершит взаимодействие. Вы получите вердикт Wrong Answer. Завершите программу немедленно, чтобы избежать других вердиктов.

После вывода запроса не забудьте вывести перевод строки, и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

В этой задачи взломы отключены.

Примечание

В примере в кучах изначально \(5\), \(2\) и \(6\) камней соответственно. Харрис решает пойти первым и предоставляет Антону число \(2\). Антон добавляет \(2\) камня в третью кучу, что дает \(5\), \(2\) и \(8\).

На следующем ходу Харрис выбирает число \(3\). Обратите внимание, что Антон не может добавить камни в третью кучу, так как он выбрал третью кучу в предыдущем ходу. Антон понимает, что у него не осталось действительных ходов, и неохотно признает Харриса королем.

G. Изменение дерева

графы Деревья Конструктив Паросочетания Перебор поиск в глубину и подобное *2800

Вам дано дерево с \(n\) вершинами. Вы можете изменить строение дерева с помощью следующей многошаговой операции:

  1. Выберите три вершины \(a\), \(b\) и \(c\) такие, чтобы \(b\) соединена ребром и с \(a\) и с \(c\).
  2. Для каждой вершины \(d\) кроме \(b\), которая соединена ребром с \(a\), удалите ребро, соединяющее \(d\) и \(a\), и добавьте ребро, соединяющее \(d\) и \(c\).
  3. Удалите ребро, соединяющее \(a\) и \(b\), и добавьте ребро, соединяющее \(a\) и \(c\).

В качестве примера рассмотрим следующее дерево:

Следующая диаграмма иллюстрирует последовательность шагов, которые происходят, когда мы применяем операцию к вершинам \(2\), \(4\) и \(5\):

Можно доказать, что после каждой операции полученный граф все еще является деревом.

Найдите минимальное количество операций, которые необходимо выполнить, чтобы превратить дерево в звезду. Звезда  — это дерево с одной вершиной степени \(n - 1\), называемой его центром, и \(n - 1\) вершинами степени \(1\).

Входные данные

Первая строка содержит целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\))  — количество вершин в дереве.

\(i\)-я из следующих \(n - 1\) строк содержит два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\), \(u_i \neq v_i\)), обозначающих существование ребра, соединяющего вершины \(u_i\) и \(v_i\). Гарантируется, что данные ребра образуют дерево.

Выходные данные

Выведите единственное целое число  — минимальное количество операций, необходимое для преобразования дерева в звезду.

Можно доказать, что при данных ограничениях всегда можно превратить дерево в звезду, используя не более \(10^{18}\) операций.

Примечание

Первый пример соответствует дереву из условия. Как мы уже видели, мы можем превратить дерево в звезду с центром в вершине \(5\), применив одну операцию к вершинам \(2\), \(4\) и \(5\).

Во втором тестовом примере данное дерево уже является звездой с центром в вершине \(4\), поэтому никаких операций выполнять не нужно.

H. Обьединение множеств

Конструктив разделяй и властвуй *3300

Вам дана перестановка \(a_1, a_2, \dots, a_n\) чисел от \(1\) до \(n\). Также у вас есть \(n\) множеств \(S_1,S_2,\dots, S_n\), где \(S_i=\{a_i\}\). Наконец, у вас есть переменная \(cnt\), представляющая текущее количество наборов. Первоначально \(cnt = n\).

Мы определяем два вида функций на множествах:

\(f(S)=\min\limits_{u\in S} u\);

\(g(S)=\max\limits_{u\in S} u\).

Вы можете получить новое множество, объединив два множества \(A\) и \(B\), если они удовлетворяют \(g(A)<f(B)\) (обратите внимание, что старые множества не исчезают).

Формально, вы можете выполнить следующую последовательность операций:

  • \(cnt\gets cnt+1\);

  • \(S_{cnt}=S_u\cup S_v\), вы можете выбрать любые \(u\) и \(v\) для которых \(1\le u, v < cnt\) и для которых выполняется \(g(S_u)<f(S_v)\).

Вам необходимо получить некоторые конкретные множества.

Существуют \(q\) требований, каждое из которых задается двумя целыми числами \(l_i\), \(r_i\), что означает, что должно существовать множество \(S_{k_i}\) (\(k_i\)  — это индекс набора, его нужно будет задать) равное \(\{a_u\mid l_i\leq u\leq r_i\}\), то есть множество, состоящее из всех \(a_i\) с индексами между \(l_i\) и \(r_i\).

В конце должно выполняться \(cnt\leq 2.2\times 10^6\). Заметьте, что вы не должны минимизировать \(cnt\). Гарантируется, что решение при данных ограничениях существует.

Входные данные

Первая строка содержит два целых числа \(n,q\) \((1\leq n \leq 2^{12},1 \leq q \leq 2^{16})\)  — длину перестановки и количество необходимых множеств соответственно.

Следующая строка состоит из \(n\) целых чисел \(a_1,a_2,\cdots, a_n\) (\(1\leq a_i\leq n\), \(a_i\) попарно различны)  — данная перестановка.

\(i\)-я из следующих \(q\) строк содержит два целых числа \(l_i,r_i\) \((1\leq l_i\leq r_i\leq n)\), описывающих требование к \(i\)-у множеству.

Выходные данные

Гарантируется, что решение при данных ограничениях существует.

Первая строка должна содержать одно целое число \(cnt_E\) \((n\leq cnt_E\leq 2.2\times 10^6)\), равное количеству множеств после всех операций.

Должны следовать \(cnt_E-n\) строк, каждая строка должна содержать два целых числа \(u\), \(v\) (\(1\leq u, v\leq cnt'\), где \(cnt'\)  — это значение \(cnt\) до этой операции) Это означает, что вы выбираете \(S_u\), \(S_v\) и выполняете операцию слияния. В операции должно быть выполнено \(g(S_u)<f(S_v)\).

Последняя строка должна содержать \(q\) целых чисел \(k_1,k_2,\cdots,k_q\) \((1\leq k_i\leq cnt_E)\), представляющих, что набор \(S_{k_i}\) является \(i\)-м необходимым набором.

Пожалуйста, обратите внимание на большое количество вывода.

Примечание

В первом примере:

Изначально у нас есть \(S_1=\{1\},S_2=\{3\},S_3=\{2\}\).

В первой операции, поскольку \(g(S_3)=2<f(S_2)=3\), мы можем объединить \(S_3,S_2\) в \(S_4=\{2,3\}\).

Во второй операции, поскольку \(g(S_1)=1<f(S_3)=2\), мы можем объединить \(S_1,S_3\) в \(S_5=\{1,2\}\).

В третьей операции, поскольку \(g(S_5)=2<f(S_2)=3\), мы можем объединить \(S_5,S_2\) в \(S_6=\{1,2,3\}\).

Для первого требования \(S_4=\{2,3\}=\{a_2,a_3\}\) удовлетворяет ему, поэтому \(k_1=4\).

Для второго требования \(S_6=\{1,2,3\}=\{a_1,a_2,a_3\}\) удовлетворяет этому, таким образом, \(k_2=6\)

Обратите внимание, что неиспользуемые наборы, идентичные наборы, многократный вывод одного и того же набора и использование наборов, которые присутствуют изначально, разрешены.

E. Перевернутые родословные

Деревья дп Конструктив математика разделяй и властвуй *2800

Учёный Иван Иванович изучает перевёрнутые родословные. Перевёрнутая родословная представляет собой набор людей, про каждого из которых известны либо оба его родителя, либо не известен ни один родитель. Кроме того, известно, что у всех людей из родословной есть ровно один ребёнок, кроме одного человека, у которого детей вовсе нет. Поэтому, если пронумеровать людей целыми числами от \(1\) до \(n\), то можно обозначить за \(s_i\) номер ребёнка человека с номером \(i\) и сказать, что \(s_i = 0\) в случае, если у человека с номером \(i\) детей нет.

Назовём человека \(a\) предком человека \(b\), если либо \(a = b\), либо если у \(a\) есть ребёнок, который является предком человека \(b\). Это значит, что человек \(a\) является предком для \(a\), \(s_a\), \(s_{s_a}\) и так далее.

Будем считать, что произошёл перекос родословной с участием некоторого человека, если известны оба его родителя и количество известных предков одного из его родителей хотя бы вдвое больше, чем количество известных предков второго родителя.

Иван Иванович посчитал количество перекосов родословной и получил число \(k\), но, конечно же, он делал это вручную и мог ошибиться. Помогите проверить Ивану Ивановичу его вычисления: скажите, существует ли родословная из \(n\) людей с \(k\) перекосами, и если существует, то приведите пример подобной родословной.

Входные данные

В единственной строке задано два целых числа \(n\) и \(k\) (\(1 \leq n \leq 100\,000\), \(0 \leq k \leq n\)) — количество людей в родословной и количество перекосов в ней.

Выходные данные

В первой строке выведите «YES» (без кавычек), если существует родословная с \(n\) людьми и \(k\) перекосами, и «NO» (без кавычек) в противном случае.

Если требуемая родословная существует, то во второй строке выведите \(n\) целых чисел \(s_1, s_2, \ldots, s_n\) (\(0 \leq s_i \leq n\)), задающих номера детей людей в родословной. Если искомых родословных несколько, выведите любую.

Примечание

В первом примере подойдет единственная родословная, которую можно составить из трёх человек (человек и два его родителя).

Во втором примере подойдет следующая родословная:

В человеке номер один происходит перекос, так как у одного его родителя один предок, а у второго — три.

D. Берсерк и Огненный Шар

жадные алгоритмы Конструктив математика реализация *2000

В ряд стоят \(n\) воинов. Сила \(i\)-го воина равна \(a_i\). Все силы различны.

Вы можете использовать заклинания двух типов:

  1. Огненный Шар: вы тратите \(x\) маны и уничтожаете ровно \(k\) последовательных воинов;
  2. Берсерк: вы тратите \(y\) маны, выбираете двух соседних воинов, и воин с большей силой убивает воина с меньшей силой.

Например, пусть силы воинов равны \([2, 3, 7, 8, 11, 5, 4]\), и \(k = 3\). Если использовать Берсерк на воинах с силой \(8\) и \(11\), последовательность станет \([2, 3, 7, 11, 5, 4]\). Если после этого использовать Огненный Шар на воинах с силами \([7, 11, 5]\), последовательность станет \([2, 3, 4]\).

Вам необходимо превратить последовательность сил воинов \(a_1, a_2, \dots, a_n\) в \(b_1, b_2, \dots, b_m\). Посчитайте минимальное количество маны, которое вы должны затратить.

Входные данные

Первая строка содержит два числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — длина последовательности \(a\) и длина последовательности \(b\) соответственно.

Вторая строка содержит три числа \(x, k, y\) (\(1 \le x, y, \le 10^9; 1 \le k \le n\)) — стоимость Огненного Шара, длина действия Огненного Шара и стоимость Берсерка соответсвенно.

Третья строка содержит \(n\) чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)). Гарантируется что числа \(a_i\) попарно различны.

Четвертая строка содержит \(m\) чисел \(b_1, b_2, \dots, b_m\) (\(1 \le b_i \le n\)). Гарантируется что числа \(b_i\) попарно различны.

Выходные данные

Выведите минимальное количество маны для превращения последовательности \(a_1, a_2, \dots, a_n\) в \(b_1, b_2, \dots, b_m\) (или \(-1\), если это невозможно).

A1. Префиксные перевороты (простая версия)

Конструктив Строки Структуры данных *1300

Это простая версия задачи. Различия между версиями заключаются в ограничениях на \(n\) и необходимое количество операций. Вы можете делать взломы только если обе версии задачи сданы.

Есть две бинарные строки \(a\) и \(b\) длины \(n\) (бинарная строка это строка, состоящая из символов \(0\) и \(1\)). За одну операцию вы выбираете префикс строки \(a\), меняете все биты этого префикса на другие (\(0\) меняется на \(1\), \(1\) меняется на \(0\)) и переворачиваете этот префикс. За одну операцию вы выполняете оба этих действия.

Например, если \(a=001011\) и вы выбираете префикс длины \(3\), строка становится равной \(011011\). Затем, если вы вы выберете всю строку как префикс для операции, она станет равной \(001001\).

Ваша задача превратить строку \(a\) в строку \(b\) за не больше, чем \(3n\) операций. Можно доказать, что это всегда возможно.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1\le t\le 1000\))  — количество наборов входных данных. Следующие \(3t\) строк содержат описания наборов входных данных.

В первой строке каждого набора входных данных находится единственное целое число \(n\) (\(1\le n\le 1000\))  — длина бинарных строк.

Следующие две строки содержат две бинарные строки \(a\) и \(b\) длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных выведите целое число \(k\) (\(0\le k\le 3n\)), затем \(k\) целых чисел \(p_1,\ldots,p_k\) (\(1\le p_i\le n\)). Здесь \(k\) равно количеству операций, которое вы использовали и \(p_i\) равно длине префикса в \(i\)-й операции.

Примечание

В первом наборе входных данных процесс превращения выглядит так: \(01\to 11\to 00\to 10\).

Во втором наборе входных данных процесс превращения выглядит так: \(01011\to 00101\to 11101\to 01000\to 10100\to 00100\to 11100\).

В третьем наборе входных данных данные строки уже совпадают. Другим решением будет, например, сделать операцию с префиксом длины \(2\), от чего строка \(a\) не поменяется.

A2. Префиксные перевороты (сложная версия)

Конструктив реализация Строки Структуры данных *1700

Это сложная версия задачи. Различия между версиями заключаются в ограничениях на \(n\) и необходимое количество операций. Вы можете делать взломы только если обе версии задачи сданы.

Есть две бинарные строки \(a\) и \(b\) длины \(n\) (бинарная строка это строка, состоящая из символов \(0\) и \(1\)). За одну операцию вы выбираете префикс строки \(a\), меняете все биты этого префикса на другие (\(0\) меняется на \(1\), \(1\) меняется на \(0\)) и переворачиваете этот префикс. За одну операцию вы выполняете оба этих действия.

Например, если \(a=001011\) и вы выбираете префикс длины \(3\), строка становится равной \(011011\). Затем, если вы вы выберете всю строку как префикс для операции, она станет равной \(001001\).

Ваша задача превратить строку \(a\) в строку \(b\) за не больше, чем \(2n\) операций. Можно доказать, что это всегда возможно.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1\le t\le 1000\))  — количество наборов входных данных. Следующие \(3t\) строк содержат описания наборов входных данных.

В первой строке каждого набора входных данных находится единственное целое число \(n\) (\(1\le n\le 10^5\))  — длина бинарных строк.

Следующие две строки содержат две бинарные строки \(a\) и \(b\) длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите целое число \(k\) (\(0\le k\le 2n\)), затем \(k\) целых чисел \(p_1,\ldots,p_k\) (\(1\le p_i\le n\)). Здесь \(k\) равно количеству операций, которое вы использовали и \(p_i\) равно длине префикса в \(i\)-й операции.

Примечание

В первом наборе входных данных процесс превращения выглядит так: \(01\to 11\to 00\to 10\).

Во втором наборе входных данных процесс превращения выглядит так: \(01011\to 00101\to 11101\to 01000\to 10100\to 00100\to 11100\).

В третьем наборе входных данных данные строки уже совпадают. Другим решением будет, например, сделать операцию с префиксом длины \(2\), от чего строка \(a\) не поменяется.

C. Гениальный шифр

жадные алгоритмы Конструктив Паросочетания реализация сортировки *2500

В игре «Гениальный шифр» есть два игрока  — Алиса и Боб. У Алисы есть секретный код, который Боб хочет отгадать. Код определяется последовательностью из \(n\) цветов. Всего существует \(n+1\) цвет, они пронумерованы целыми числами от \(1\) до \(n+1\).

После того как Боб сделал свою догадку, Алиса говорит ему некоторую информацию о том, насколько его код правильный, в виде двух целых чисел \(x\) и \(y\).

Первое число \(x\) равно количеству индексов, в которых цвет кода Боба совпал с правильным цветом в коде Алисы. Второе число \(y\) равно размеру пересечения двух кодов, как мультимножеств. Другими словами, если Боб может поменять порядок цветов в его догадке, \(y\) равно максимальному количеству правильных индексов, которое он сможет получить.

Например, допустим \(n=5\), код Алисы будет \([3,1,6,1,2]\) и догадка Боба будет \([3,1,1,2,5]\). В позициях \(1\) и \(2\) цвета совпали, тогда как в других позициях нет. Поэтому \(x=2\). И два кода имеют четыре общих цвета \(1,1,2,3\), поэтому \(y=4\).

Обычные линии обозначают совпадающие цвета на одинаковых позициях. Пунктирные линии обозначают одинаковые цвета на разных позициях. Тогда \(x\) равно количеству обычных линий и \(y\) равно количеству всех линий.

Вам дан код-догадка Боба и два значения \(x\) и \(y\). Можете ли вы найти какой-то возможный загаданный код Алисы, такой что числа \(x\) и \(y\) будут правильными?

Входные данные

В первой строке находится единственное целое число \(t\) (\(1\le t\le 1000\))  — количество наборов входных данных. Следующие \(2t\) строк содержат описания наборов входных данных.

В первой строке каждого набора входных данных находится три целых числа \(n,x,y\) (\(1\le n\le 10^5, 0\le x\le y\le n\))  — длины кодов и два числа, которые сказала Алиса.

Во второй строке каждого набора входных данных находится \(n\) целых чисел \(b_1,\ldots,b_n\) (\(1\le b_i\le n+1\))  — догадка Боба, где \(b_i\) равно \(i\)-у цвету в его коде.

Гарантируется что сумма всех \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных в первой строке выведите «YES», если существует решение или «NO», если не существует ни одного секретного кода Алисы, соответствующего данной ситуации. Вы можете вывести каждый символ в любом регистре (верхнем или нижнем).

Если ответ «YES», на следующей строке выведите \(n\) целых чисел \(a_1,\ldots,a_n\) (\(1\le a_i\le n+1\))  — секретный код Алисы, где \(a_i\) равно \(i\)-у цвету этого кода.

Если существует несколько возможных решений, выведите любое.

Примечание

Первый набор входных данных описан в условии.

Во втором наборе в входных данных \(x=3\), потому что цвета совпадают на позициях \(2,4,5\). И \(y=4\), потому что цвета \(1,1,1,2\) общие у двух кодов.

В третьем наборе входных данных \(x=0\), потому что цвета не совпадают ни в одной из позиций. Но \(y=4\), потому что цвета \(3,3,5,5\) общие у двух кодов.

В четвертом наборе входных данных можно показать что ни одного подходящего секретного кода Алисы не существует.

B. GameGame

битмаски дп жадные алгоритмы игры Конструктив математика *1900

Коала Коа и ее лучшая подруга хотят поиграть в игру.

Игра начинается с массива \(a\) длины \(n\), состоящего из неотрицательных целых чисел. Коа и ее лучшая подруга ходят по очереди, и у каждой из них есть счет, изначально равный \(0\). Коа начинает.

Ход в игре происходит следующим образом:

  • Во время своего хода игрок выбирает любой элемент массива и удаляет его из этого массива, ксоря его с текущим счетом игрока.

    Более формально: если текущий счет игрока равен \(x\), а выбранный элемент равен \(y\), его новый счет будет равен \(x \oplus y\). Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ..

    Обратите внимание, что после хода элемент \(y\) удаляется из \(a\).

  • Игра заканчивается, когда массив пуст.

В конце игры победителем становится игрок с максимальным счетом. Если оба игрока имеют одинаковый счет, то это ничья.

Если оба игрока играют оптимально, выясните, выиграет ли Коа, проиграет или сыграет вничью.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 10^5\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — элементы \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите:

  • WIN, если Коа выиграет.
  • LOSE, если Коа проиграет.
  • DRAW, если игра закончится вничью.
Примечание

В \(1\)-м наборе входных данных первого примера:

\(a = [1, 2, 2]\). Здесь Коа выбирает \(1\), другой игрок должен выбрать \(2\), Коа выбирает оставшуюся \(2\). Счет для Коа составляет \(1 \oplus 2 = 3\), а для другого игрока  — \(2\), поэтому Коа выигрывает.

D. Переставьте

графы жадные алгоритмы Конструктив Перебор сортировки *2800

Коала Коа имеет матрицу \(A\) из \(n\) строк и \(m\) столбцов. Элементы этой матрицы — различные целые числа от \(1\) до \(n \cdot m\) (каждое число от \(1\) до \(n \cdot m\) встречается в матрице ровно один раз).

Для любой матрицы \(M\) из \(n\) строк и \(m\) столбцов определим следующее:

  • \(i\)-я строка \(M\) определяется как \(R_i(M) = [ M_{i1}, M_{i2}, \ldots, M_{im} ]\) для всех \(i\) (\(1 \le i \le n\)).
  • \(j\)-й столбец \(M\) определяется как \(C_j(M) = [ M_{1j}, M_{2j}, \ldots, M_{nj} ]\) для всех \(j\) (\(1 \le j \le m\)).

Коа определяет \(S(A) = (X, Y)\) как спектр \(A\), где \(X\)  — множество максимумов в строках \(A\), а \(Y\) — множество максимумов в столбцах \(A\) соответственно.

Более формально:

  • \(X = \{ \max(R_1(A)), \max(R_2(A)), \ldots, \max(R_n(A)) \}\)
  • \(Y = \{ \max(C_1(A)), \max(C_2(A)), \ldots, \max(C_m(A)) \}\)

Коа просит вас найти некоторую матрицу \(A'\) из \(n\) строк и \(m\) столбцов такую, чтобы каждое число от \(1\) до \(n \cdot m\) встречалось в матрице ровно один раз, и выполнялись следующие условия:

  • \(S(A') = S(A)\)
  • \(R_i(A')\) является битоническим для всех \(i\) (\(1 \le i \le n\))
  • \(C_j(A')\) является битоническим для всех \(j\) (\(1 \le j \le m\)).
Массив \(t\) (\(t_1, t_2, \ldots, t_k\)) называется битоническим, если он сначала возрастает, а затем спадает.

Более формально: \(t\) является битоническим, если существует некоторая позиция \(p\) (\(1 \le p \le k\)) такая, что: \(t_1 < t_2 < \ldots < t_p > t_{p+1} > \ldots > t_k\).

Помогите Коа найти такую матрицу, или определить, что ее не существует.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 250\))  — количества строк и столбцов в \(A\).

Каждая из следующих \(n\) строк содержит \(m\) целых чисел. \(j\)-е целое число в \(i\)-й строке обозначает элемент \(A_{ij}\) (\(1 \le A_{ij} \le n \cdot m\)) матрицы \(A\). Гарантируется, что каждое число от \(1\) до \(n \cdot m\) встречается ровно один раз среди элементов матрицы.

Выходные данные

Если такой матрицы не существует, в отдельной строке выведите \(-1\).

В противном случае вы должны вывести \(n\) строк, каждая из которых должная состоять из \(m\) целых чисел, разделенных пробелом  — описание \(A'\).

\(j\)-е число в \(i\)-й строке обозначает элемент \(A'_{ij}\).

Каждое число от \(1\) до \(n \cdot m\) должно встречаться в \(A'\) ровно один раз, каждая строка и столбец в \(A'\) должны быть битоническими и должно выполняться \(S(A) = S(A')\).

Если ответов несколько, выведите любой.

Примечание

Проанализируем первый пример:

Для матрицы \(A\):

    • Строки:
      • \(R_1(A) = [3, 5, 6]; \max(R_1(A)) = 6\)
      • \(R_2(A) = [1, 7, 9]; \max(R_2(A)) = 9\)
      • \(R_3(A) = [4, 8, 2]; \max(R_3(A)) = 8\)

    • Столбцы:
      • \(C_1(A) = [3, 1, 4]; \max(C_1(A)) = 4\)
      • \(C_2(A) = [5, 7, 8]; \max(C_2(A)) = 8\)
      • \(C_3(A) = [6, 9, 2]; \max(C_3(A)) = 9\)

  • \(X = \{ \max(R_1(A)), \max(R_2(A)), \max(R_3(A)) \} = \{ 6, 9, 8 \}\)
  • \(Y = \{ \max(C_1(A)), \max(C_2(A)), \max(C_3(A)) \} = \{ 4, 8, 9 \}\)
  • Поэтому \(S(A) = (X, Y) = (\{ 6, 9, 8 \}, \{ 4, 8, 9 \})\)

Для матрицы \(A'\):

    • Строки:
      • \(R_1(A') = [9, 5, 1]; \max(R_1(A')) = 9\)
      • \(R_2(A') = [7, 8, 2]; \max(R_2(A')) = 8\)
      • \(R_3(A') = [3, 6, 4]; \max(R_3(A')) = 6\)

    • Столбцы:
      • \(C_1(A') = [9, 7, 3]; \max(C_1(A')) = 9\)
      • \(C_2(A') = [5, 8, 6]; \max(C_2(A')) = 8\)
      • \(C_3(A') = [1, 2, 4]; \max(C_3(A')) = 4\)

  • Заметим, что каждый из этих массивов является битоническим.
  • \(X = \{ \max(R_1(A')), \max(R_2(A')), \max(R_3(A')) \} = \{ 9, 8, 6 \}\)
  • \(Y = \{ \max(C_1(A')), \max(C_2(A')), \max(C_3(A')) \} = \{ 9, 8, 4 \}\)
  • Поэтому \(S(A') = (X, Y) = (\{ 9, 8, 6 \}, \{ 9, 8, 4 \})\)

A. Общие префиксы

жадные алгоритмы Конструктив Строки *1200

Длина самого длинного общего префикса двух строк \(s = s_1 s_2 \ldots s_n\) и \(t = t_1 t_2 \ldots t_m\) определяется как наибольшее целое число \(k\) (\(0 \le k \le min(n,m)\)) такое, что \(s_1 s_2 \ldots s_k\) равняется \(t_1 t_2 \ldots t_k\).

У Коалы Коа изначально есть \(n+1\) строка \(s_1, s_2, \dots, s_{n+1}\).

Для каждого \(i\) (\(1 \le i \le n\)) она вычислила \(a_i\) — длину самого длинного общего префикса \(s_i\) и \(s_{i+1}\).

Несколько дней спустя Коа нашла эти числа, но не могла вспомнить строки.

Поэтому Коа хотела бы найти какие-нибудь строки \(s_1, s_2, \dots, s_{n+1}\), которые дали бы числа \(a_1, a_2, \dots, a_n\). Можете ли вы ей помочь?

Если ответов несколько, выведите любой. Можно показать, что для данных ограничений ответ всегда существует.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — количество элементов в списке \(a\).

Вторая строка каждого тестового примера содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 50\)) — элементы \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(100\).

Выходные данные

Для каждого набора входных данных:

Выведите \(n+1\) строку. В \(i\)-й строке выведите строку \(s_i\) (\(1 \le |s_i| \le 200\)), , состоящую из строчных латинских букв. Длина самого длинного общего префикса строк \(s_i\) и \(s_{i+1}\) должна быть равна \(a_i\).

Если ответов несколько, выведите любой. Можно показать, что для данных ограничений ответ всегда существует.

Примечание

В \(1\)-м наборе входных данных один из возможных ответов это \(s = [aeren, ari, arousal, around, ari]\).

Длины самых длинных общих префиксов равны:

  • Между \(\color{red}{a}eren\) и \(\color{red}{a}ri\) \(\rightarrow 1\)
  • Между \(\color{red}{ar}i\) и \(\color{red}{ar}ousal\) \(\rightarrow 2\)
  • Между \(\color{red}{arou}sal\) и \(\color{red}{arou}nd\) \(\rightarrow 4\)
  • Между \(\color{red}{ar}ound\) и \(\color{red}{ar}i\) \(\rightarrow 2\)

B2. Коа и пляж (сложная версия)

дп жадные алгоритмы Конструктив реализация *2200

Единственная разница между простой и сложной версиями заключается в ограничениях. В этой версии ограничения выше. Вы можете делать взломы только если обе версии задачи сданы.

Коала Коа на пляже!

Пляж состоит из (слева направо) берега, \(n+1\) метров моря, и острова в \(n+1\) метрах от берега.

Она измерила глубину моря на расстоянии \(1, 2, \dots, n\) метров от берега и сохранила эту информацию в массиве \(d\). \(d_i\) обозначает глубину моря в \(i\) метрах от берега для \(1 \le i \le n\).

Как и на любом пляже, на этом есть прилив, интенсивность прилива измеряется параметром \(k\) и влияет на все глубины с начала в момент времени \(t=0\) следующим образом:

  • На протяжении \(k\) секунд каждую секунду прилив увеличивает все глубины на \(1\).

  • На протяжении следующих \(k\) секунд каждую секунду прилив уменьшает все глубины на \(1\).

  • Этот процесс повторяется снова и снова (т.е. глубина увеличивается на протяжении \(k\) секунд, затем уменьшается на протяжении \(k\) секунд и так далее ...).

    Формально, давайте определим \(0\)-индексированный массив \(p = [0, 1, 2, \ldots, k - 2, k - 1, k, k - 1, k - 2, \ldots, 2, 1]\) длины \(2k\). В момент времени \(t\) (\(0 \le t\)) глубина на расстоянии \(i\) метров от берега равна \(d_i + p[t \bmod 2k]\) (\(t \bmod 2k\) обозначает остаток от деления \(t\) на \(2k\)). Обратите внимание, что изменения происходят мгновенно каждую секунду, см. примеры для лучшего понимания.

В момент времени \(t=0\) Коа стоит на берегу, и хочет добраться до острова. Пусть во время \(t\) (\(0 \le t\)) она находится в \(x\) (\(0 \le x \le n\)) метрах от берега:

  • За одну секунду Коа может проплыть на \(1\) метр дальше от берега (\(x\) меняется на \(x+1\)) или вообще не плыть (\(x\) остается неизменным), в обоих случаях \(t\) меняется на \(t+1\).

  • Поскольку Коа  — плохой пловец, глубина моря в точке, где она находится, не может превышать \(l\) во все целые точки времени (или она утонет). Более формально, если Коа находится в \(x\) (\(1 \le x \le n\)) метрах от берега в момент \(t\) (для некоторого целого \(t\ge 0\)), то глубина моря в этой точке  — \(d_x + p[t \bmod 2k]\) — не может превышать \(l\). Другими словами, \(d_x + p[t \bmod 2k] \le l\) должно выполняться всегда.

  • Когда Коа достигает острова в \(n+1\) метров от берега, она останавливается и может отдохнуть.

    Обратите внимание, что пока Коа плывет, прилив не влияет на нее (то есть она не может утонуть во время плавания). Обратите внимание, что Коа может оставаться на берегу, сколько ей нужно, и ни берег, ни остров не подвержены влиянию прилива (это твердая земля, и она там не утонет).

Коа хочет знать, сможет ли она добраться с берега на остров. Помогите ей!

Входные данные

В первой строке входных данных содержится одно целое число \(t\) (\(1 \le t \le 10^4\))  — количество наборов входных данных. Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит три целых числа: \(n\), \(k\) and \(l\) (\(1 \le n \le 3 \cdot 10^5; 1 \le k \le 10^9; 1 \le l \le 10^9\)) — количество метров моря и параметры \(k\) и \(l\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(d_1, d_2, \ldots, d_n\) (\(0 \le d_i \le 10^9\)) — глубины каждого метра моря.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных:

Выведите Yes, если Коа сможет добраться от берега до острова, и No в обратном случае.

Вы можете выводить каждую букву в любом регистре (верхнем или нижнем).

Примечание

Ниже \(s\) обозначает берег, \(i\) обозначает остров, \(x\) обозначает расстояние от Коа до берега, нижнее подчеркивание обозначает позицию Коа, а значения в массиве ниже обозначают текущие глубины, измененные под влиянием прилива, на расстояниях \(1, 2, \dots, n\) от берега.

В наборе входных данных \(1\) мы имеем \(n = 2, k = 1, l = 1, p = [ 0, 1 ]\).

Коа хочет добраться с берега (c \(x = 0\)) на остров (c \(x = 3\)). Опишем возможное решение:

  • Первоначально в \(t = 0\) пляж выглядит так: \([\underline{s}, 1, 0, i]\).
  • В \(t = 0\), если бы Коа решила доплыть до \(x = 1\), пляж выглядел бы так: \([s, \underline{2}, 1, i]\) в \(t = 1\), и так как \(2 > 1\) она бы утонула. Таким образом, Коа вместо этого ждет \(1\) секунду, а пляж выглядит как \([\underline{s}, 2, 1, i]\) в \(t = 1\).
  • В \(t = 1\) Коа плывет до \(x = 1\), пляж выглядит как \([s, \underline{1}, 0, i]\) в \(t = 2\). Коа не тонет, потому что \(1 \le 1\).
  • В \(t = 2\) Коа плывет до \(x = 2\), пляж выглядит как \([s, 2, \underline{1}, i]\) в \(t = 3\). Коа не тонет, потому что \(1 \le 1\).
  • В \(t = 3\) Коа плывет до \(x = 3\), пляж выглядит как \([s, 1, 0, \underline{i}]\) в \(t = 4\).
  • В \(t = 4\) Коа находится в \(x = 3\), и она сделала это!

Можно показать, что наборе входных данных \(2\) Коа не сможет доплыть до острова.

E. Ориентация ребер

графы Конструктив поиск в глубину и подобное *2000

Вам задан граф, состоящий из \(n\) вершин и \(m\) ребер. Не гарантируется, что заданный граф связен. Некоторые ребра уже ориентированы и вы не можете менять их направление. Остальные ребра являются неориентированными и вам необходимо выбрать какое-то направление для всех этих ребер.

Вам необходимо ориентировать неориентированные ребра таким образом, что получившийся граф будет ориентированным и ацикличным (то есть графом, каждое ребро которого имеет ориентацию, а сам граф не имеет циклов). Заметьте, что вам необходимо ориентировать все неориентированные ребра.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \le m \le min(2 \cdot 10^5, \frac{n(n-1)}{2})\)) — количество вершин и количество ребер в графе, соответственно.

Следующие \(m\) строк описывают ребра графа. \(i\)-е ребро представлено тройкой целых чисел \(t_i\), \(x_i\) и \(y_i\) (\(t_i \in [0; 1]\), \(1 \le x_i, y_i \le n\)) — типом ребра (\(t_i = 0\), если ребро является неориентированным, и \(t_i = 1\), если ребро является ориентированным) и вершинами, которые соединяет это ребро (неориентированное ребро соединяет вершины \(x_i\) и \(y_i\), а ориентированное ребро идет из вершины \(x_i\) в вершину \(y_i\)). Гарантируется, что граф не содержит петель (ребер, идущих из вершину в саму себя) и кратных ребер (то есть для каждой пары (\(x_i, y_i\)) не существует других пар (\(x_i, y_i\)) или (\(y_i, x_i\))).

Гарантируется, что сумма \(n\) и сумма \(m\) не превосходят \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\); \(\sum m \le 2 \cdot 10^5\)).

Выходные данные

Выведите ответ на каждый набор тестовых данных — «NO», если невозможно ориентировать неориентированные ребра таким образом, чтобы получившийся граф был ориентированным и ацикличным, иначе выведите «YES» в первой строке, а затем \(m\) строк, описывающие ребра получившегося ориентированного ацикличного графа (в любом порядке). Заметьте, что вы не можете менять направление уже ориентированных ребер. Если существует несколько ответов, выведите любой.

Примечание

Объяснение второго набора тестовых данных примера:

Объяснение третьего набора тестовых данных примера:

A. Цвета

*особая задача Бинарный поиск интерактив Конструктив *2700

Линде нравится красить волосы в разные цвета время от времени, и ей приятно, когда её парень Арчи замечает разницу между предыдущим и новым цветом. Арчи высказывает своё мнение тогда и только тогда, если он замечает разницу — поэтому Линда всегда знает, заметил ли Арчи разницу или нет.

Недавно в продаже появился новый бренд краски для волос, где все доступные цвета пронумерованы числами от \(1\) до \(N\), причём меньшая разница между номерами означает менее заметную разницу в цветах.

Линда знает, что существует определённая критическая разница \(C\) (\(1 \le C \le N\)), такая, что Арчи замечает различие между цветами между текущим цветом \(\mathrm{color}_{\mathrm{new}}\) и предыдущим цветом \(\mathrm{color}_{\mathrm{prev}}\), если \(\left|\mathrm{color}_{\mathrm{new}} - \mathrm{color}_{\mathrm{prev}}\right| \ge C\) и не замечает, если \(\left|\mathrm{color}_{\mathrm{new}} - \mathrm{color}_{\mathrm{prev}}\right| < C\).

Теперь Линда купила \(N\) упаковок краски для волос нового бренда, по одной каждого цвета от \(1\) до \(N\), и готова организовать эксперимент. Линда собралась регулярно перекрашивать цвет своих волос и наблюдать за реакцией Арчи, заметит ли он разницу в цвете, или нет. Так как для хорошей покраски каждую упаковку нужно израсходовать полностью, каждый из цветов можно использовать ровно один раз.

Перед началом эксперимента, Линда использовала краску другого бренда, который не совместим с новым, поэтому для корректности эксперимента нужно принять, что реакция Арчи на первый использованный новый цвет ничего не означает.

Цель Линды — узнать точное значение \(C\), используя ограниченное количество перекрасок. Напишите программу, которая находит значение \(C\), экспериментируя с данными \(N\) цветами и наблюдая за реакциями Арчи на изменения цвета.

Протокол взаимодействия

Это интерактивная задача. В начале дано одно целое число \(T\) (\(1 \leq T \leq 100\)), количество примеров в одном тесте.

Для каждого тестого примера, ввод содержит одно целое число, значение \(N\) (\(1 < N \le 10^{18}\)). Значение \(C\) держится в секрете тестирующей системой.

Ваша программа должна задавать запросы в следующем формате: «? \(P\)», где \(P\) целое число (\(1 \le P \le N\)), которое обозначает следующий используемый цвет. Тестирующая система даст ответ в следующей строке ввода. Ответ равен \(1\), если Арчи заметил разницу между последними двумя цветами, и \(0\) иначе. Никакие два запроса не должны использовать одно и то же значение \(P\).

Когда ваша программа определит \(C\), она должна вывести её значение в следующем формате: «= \(C\)». Тестирующая система не будет отвечать на такой вывод и перейдёт к выполнению следующего примера.

Ваша программа может использовать не более 64 запросов «?» для каждого тестового примера, чтобы определить значение \(C\).

Чтобы установить правильное выполнение протокола между вашей программой и тестирующей системой, вы должны сбросить буфер вывода после каждого запроса.

\(\)\begin{array}{ll} \text{Language} & \text{Command} \\ \hline \text{C++} & \texttt{std::cout }\texttt{<}\texttt{<}\texttt{ std::endl;} \\ \text{Java} & \texttt{System.out.flush();} \\ \text{Python} & \texttt{sys.stdout.flush()} \end{array}\(\) Команды сбрасывания буфера

Команда std::endl записывает новую строку и сбрасывает буфер вывода.

Примите во внимание, что возможно получить вердикт «Output isn't correct» даже после вывода правильного ответа, в случае, если ограничения задачи были нарушены во время выполнения программы. Нарушения протокола могут закончится вердиктом «Execution killed».

Для запуска решения на личном тесте вначале запишите «\(T\)» в первой строке, и затем используйте формат «\(N\) \(C\)» на одной строке для каждого из \(T\) примеров.

Система оценки

Подзадачи:

  1. (9 баллов) \(N \le 64\)
  2. (13 баллов) \(N \le 125\)
  3. (21 баллов) \(N \le 1000\)
  4. (24 баллов) \(N \le 10^9\)
  5. (33 баллов) Без дополнительных ограничений.
Примечание

Примечания к данному тесту по каждой строчке ввода:

  1. \(N = 7\).
  2. Ответ на первый запрос ничего не означает (значение \(0\) ничего бы не изменило)
  3. \(C \leq 5\).
  4. \(3 < C \leq 5\). Имеет смысл проверить разницу \(4\). Однако, это нельзя сделать в следующем запросе, так как \(4 + 4 = 8\) и \(4 - 4 = 0\) оба лежат вне интервала \(1 \le P \le 7\).
  5. \(3 < C \leq 5\).
  6. \(3 < C \leq 4\). Следовательно, \(C = 4\).

A. Задача про LCM

жадные алгоритмы Конструктив математика теория чисел *800

Пусть \(LCM(x, y)\) — наименьшее положительное целое число, которое делится и на \(x\), и на \(y\). Например, \(LCM(13, 37) = 481\), \(LCM(9, 6) = 18\).

Вам даны два числа \(l\) и \(r\). Найдите два целых числа \(x\) и \(y\), для которых выполняются условия: \(l \le x < y \le r\) и \(l \le LCM(x, y) \le r\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10000\)) — количество наборов входных данных.

Каждый набор входных данных задается одной строкой, содержащей два целых числа \(l\) и \(r\) (\(1 \le l < r \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите два целых числа:

  • если невозможно найти удовлетворяющие условиям числа \(x\) и \(y\), два раза выведите \(-1\);
  • иначе выведите значения \(x\) и \(y\) (если существует несколько возможных решений, выведите любое из них).

A. Орные подмассивы

Конструктив математика *800

Перестановка длины \(n\)  — это массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\)  — это перестановка, но \([1,2,2]\)  — это не перестановка (\(2\) встречается дважды в массиве), а \([1,3,4]\) также не является перестановкой (\(n=3\), но в массиве встречается \(4\)).

Для положительного целого числа \(n\) назовем перестановку \(p\) длины \(n\) хорошей, если следующее условие выполняется для каждой пары \(i\) и \(j\) (\(1 \le i \le j \le n\)) —

  • \((p_i \text{ OR } p_{i+1} \text{ OR } \ldots \text{ OR } p_{j-1} \text{ OR } p_{j}) \ge j-i+1\), где \(\text{OR}\) обозначает операцию побитового ИЛИ

Другими словами, перестановка \(p\) является хорошей, если для каждого ее подмассива \(p\), \(\text{OR}\) всех элементов в нем не меньше, чем количество элементов в этом подмассиве.

Для данного положительного целого числа \(n\), выведите любую хорошую перестановку длины \(n\). Мы можем показать, что для данных ограничений такая перестановка всегда существует.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 100\)). Описание наборов входных данных приведено ниже.

Первая и единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)).

Выходные данные

Для каждого теста выведите любую хорошую перестановку длины \(n\) в отдельной строке.

Примечание

Для \(n = 3\), \([3,1,2]\)  — хорошая перестановка. Некоторые из подмассивов перечислены ниже.

  • \(3\text{ OR }1 = 3 \geq 2\) \((i = 1,j = 2)\)
  • \(3\text{ OR }1\text{ OR }2 = 3 \geq 3\) \((i = 1,j = 3)\)
  • \(1\text{ OR }2 = 3 \geq 2\) \((i = 2,j = 3)\)
  • \(1 \geq 1\) \((i = 2,j = 2)\)

Точно так же вы можете проверить, что \([4,3,5,2,7,1,6]\) тоже хорошая.

D. 505

битмаски дп жадные алгоритмы Конструктив Перебор реализация *2000

Бинарная матрица называется хорошей, если каждая квадратная подматрица c четной длиной стороны содержит нечетное число единиц.

Для данной бинарной матрицы \(a\), состоящей из \(n\) строк и \(m\) столбцов, определите минимальное количество ячеек, которые нужно изменить, чтобы сделать ее хорошей, или сообщите, что ее вообще нельзя сделать хорошей.

Все вышеприведенные термины имеют свои обычные значения  — обратитесь к разделу Примечания для их формальных определений.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \leq n \leq m \leq 10^6\) и \(n\cdot m \leq 10^6\)) — число строк и столбцов в \(a\) соответственно.

Каждая из следующих \(n\) строк содержит \(m\) символов, каждый из которых равен 0 или 1. Если \(j\)-й символ в \(i\)-й строке равен 1, то \(a_{i,j} = 1\). Аналогично, если \(j\)-й символ в \(i\)-й строке равен 0, то \(a_{i,j} = 0\)

Выходные данные

Выведите минимальное количество ячеек, которое нужно изменить, чтобы сделать \(a\) хорошей, или выведите \(-1\), если это вообще невозможно.

Примечание

В первом случае достаточно заменить \(a_{1,1}\) на \(0\) и \(a_{2,2}\) на \(1\).

Вы можете проверить, что нет никакой возможности сделать матрицу во втором случае хорошей.

Некоторые определения  —

  • Бинарная матрица  — это матрица, в которой каждый элемент равен \(1\) или \(0\).
  • Подматрица описывается \(4\) параметрами  — \(r_1\), \(r_2\), \(c_1\) и \(c_2\); здесь \(1 \leq r_1 \leq r_2 \leq n\) и \(1 \leq c_1 \leq c_2 \leq m\).
  • Эта подматрица содержит все элементы \(a_{i,j}\), которые удовлетворяют как \(r_1 \leq i \leq r_2\) так и \(c_1 \leq j \leq c_2\).
  • Подматрица называется квадратом четной длины, если\(r_2-r_1 = c_2-c_1\) и \(r_2-r_1+1\) делится на \(2\).

E. Пары пар

графы Деревья жадные алгоритмы Конструктив поиск в глубину и подобное *2600

У вас есть простой связный неориентированный граф, состоящий из \(n\) вершин и \(m\) ребер.

Рассмотрим все способы разбить на пары некоторое подмножество из этих \(n\) вершин, чтобы ни одна вершина не присутствовала более чем в одной паре.

Такое паросочетание считается хорошим, если для каждой пары выбранных пар индуцированный подграф, содержащий все \(4\) вершины, по два из каждой пары, имеет не более \(2\) ребер (из \(6\) возможных ребер). Более формально, для любых двух выбранных пар \((a,b)\) и \((c,d)\) индуцированный подграф с вершинами \(\{a,b,c,d\}\) должен иметь не более \(2\) ребер.

Обратите внимание, что подграф, индуцированный набором вершин, содержит вершины только из этого набора и ребра, оба конца которых находятся в этом наборе.

Теперь сделайте одно из двух

  • Найдите простой путь, состоящий как минимум из \(\lceil \frac{n}{2} \rceil\) вершин. Здесь путь называется простым, если он не посещает какую-либо вершину несколько раз.
  • Найдите хорошее паросочетание, в котором по крайней мере у \(\lceil \frac{n}{2} \rceil\) вершин есть пара.

Можно показать, что в каждом графе, удовлетворяющим ограничениям из условия, можно найти или первое, или второе (или оба).

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке записано количество наборов входных данных \(t\) (\(1 \le t \le 10^5\)). Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит \(2\) целых числа \(n, m\) (\(2 \le n \le 5\cdot 10^5\), \(1 \le m \le 10^6\)), обозначающих количество вершин и ребер графа соответственно.

Каждая из следующих \(m\) строк содержит \(2\) целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)), что обозначает наличие неориентированного ребра между вершинами \(u\) и \(v\) в данном графе.

Гарантируется, что данный граф является связным и простым  — он не содержит кратных ребер и петель.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(5\cdot 10^5\).

Гарантируется, что сумма \(m\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных придерживайтесь следующего формата вывода:

Если вы нашли хорошее паросочетание, в первой строке выведите «PAIRING» (без кавычек).

  • Затем выведите \(k\) (\(\lceil \frac{n}{2} \rceil \le 2\cdot k \le n\)), количество пар в вашем паросочетании.
  • Затем в каждой из следующих \(k\) строк выведите по \(2\) целых числа \(a\) и \(b\)  —, обозначающих, что \(a\) и \(b\) находятся в одной паре. Заметьте, что в графе не обязано быть ребро между вершинами \(a\) и \(b\)!
  • Это паросочетание должно быть хорошим, и каждая вершина должен входить не более в \(1\) пару.

В противном случае в первой строке выведите «PATH» (без кавычек).

  • Затем выведите \(k\) (\(\lceil \frac{n}{2} \rceil \le k \le n\)), количество узлов на вашем пути.
  • Затем во второй строке выведите \(k\) целых чисел, \(v_1, v_2, \ldots, v_k\), в том порядке, в котором они встречаются на пути. Формально, \(v_i\) и \(v_{i+1}\) должны иметь ребро между ними для каждого \(i\) (\(1 \le i < k\)).
  • Этот путь должен быть простым, то есть ни одна вершина не должна встречаться на нем более одного раза.
Примечание

Путь, полученный в первом наборе входных данных, следующий.

Вот хорошее паросочетание для первого набора входных данных.

Вот нехорошее паросочетание для первого набора входных данных  — подграф \(\{1,3,4,5\}\) имеет \(3\) ребра.

Вот паросочетание, полученное во втором наборе входных данных.

Оно хорошее потому, что  —

  • Подграф \(\{1,8,2,5\}\) содержит ребра (\(1\),\(2\)) и (\(1\),\(5\)).
  • Подграф \(\{1,8,4,10\}\) содержит ребра (\(1\),\(4\)) и (\(4\),\(10\)).
  • Подграф \(\{4,10,2,5\}\) содержит ребра (\(2\),\(4\)) и (\(4\),\(10\)).

Вот еще одно хорошее паросочетание для второго набора входных данных.

E. Омкар и утка

битмаски интерактив Конструктив математика *2100

Это интерактивная задача

Омкар только что наткнулся на утку! Утка ходит по сетке с \(n\) строками и \(n\) столбцами (\(2 \leq n \leq 25\)), так что сетка содержит в общей сложности \(n^2\) ячеек. Обозначим как \((x, y)\) ячейку в \(x\)-й строке сверху и \(y\)-м столбце слева. Прямо сейчас утка находится в ячейке \((1, 1)\) (ячейка в левом верхнем углу) и хочет дойти до ячейки \((n, n)\) (ячейка в правом нижнем углу), перемещаясь каждую секунду либо вниз на \(1\) ячейку, либо вправо на \(1\) ячейку.

Так как Омкар считает, что утки это весело, он хочет поиграть с вами в игру, основанную на движении утки. Сначала для каждой ячейки \((x, y)\) в сетке вы скажете Омкару целое неотрицательное \(a_{x,y}\), не превышающее \(10^{16}\), а затем Омкар положит \(a_{x,y}\) неинтересных задач в ячейку \((x, y)\). После этого утка начнет свое путешествие с \((1, 1)\) до \((n, n)\). Для каждой ячейки \((x, y)\), которую утка посещает во время своего путешествия (включая ячейки \((1, 1)\) и \((n, n)\)), утка съест \(a_{x,y}\) неинтересных задач в этой ячейке. После того как утка завершит свое путешествие, Омкар измерит ее массу, чтобы определить общее количество \(k\) неинтересных задач, которые утка съела во время своего путешествия, а затем скажет вам \(k\).

Ваша задача, зная \(k\), состоит в том, чтобы точно воспроизвести утиный путь, т.е. точно сказать Омкару, какие клетки утка посетила во время своего путешествия. Чтобы быть уверенным в вашем мастерстве в этой игре, Омкар заставит утку выполнить \(q\) различных путешествий (\(1 \leq q \leq 10^3\)). Обратите внимание, что все путешествия независимы: в начале каждого путешествия ячейка \((x, y)\) все так же будет содержать \(a_{x,y}\) неинтересных задач.

Протокол взаимодействия

Взаимодействие начнется со строки, содержащей одно целое \(n\) (\(2 \leq n \leq 25\)) — количество строк и столбцов в сетке. Считайте его.

Затем ваша программа должна вывести \(n\) строк. \(x\)-я строка должна содержать \(n\) целых чисел \(a_{x,1}, a_{x,2}, \dotsc, a_{x,n}\), удовлетворяющих \(0 \leq a_{x,y} \leq 10^{16}\), где \(a_{x,y}\)  — это количество неинтересных задач, которые Омкар должен поместить в ячейку \((x, y)\).

После этого вы получите одно целое \(q\), количество путешествий, которые совершит утка. Затем последуют \(q\) запросов; каждый запрос будет состоять из одной строки, содержащей целое число \(k\)  — количество неинтересных задач, которые утка съела в этой поездке. После каждого запроса, когда вы определили, что утка посетила ячейки \((x_1, y_1), (x_2, y_2), \dotsc, (x_{2n - 1}, y_{2n - 1})\) в таком порядке (всегда должно выполняться \((x_1, y_1) = (1, 1)\) и \((x_{2n - 1}, y_{2n - 1}) = (n, n)\)), нужно вывести \(2n - 1\) строк, в \(j\)-й из которых должно быть два целых числа \(x_j, y_j\).

Обратите внимание, что если сумма на вашем пути равна \(k\), но ваш путь отличается от загаданного, то ваше решение все еще неверное!

После вывода очередной строки не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Формат взломов

Для взлома сначала выведите строку, содержащую \(n\), а затем другую строку, содержащую \(q\). Должно выполняться \(2 \leq n \leq 25\) и \(1 \leq q \leq 1000\). Затем выведите \(q\) путешествий, сделанных уткой в том же формате, как описано выше: для каждого путешествия, если утка посещала ячейки \((x_1, y_1), (x_2, y_2), \dotsc, (x_{2n - 1}, y_{2n - 1})\) в таком порядке, нужно вывести \(2n - 1\) строк, в \(j\)-й строке должны быть два целых числа \(x_j, y_j\). Должно выполняться \((x_1, y_1) = (1, 1)\) и \((x_{2n - 1}, y_{2n - 1}) = (n, n)\). Кроме того, для каждого \(j\) такого, что \(2 \leq j \leq 2n - 1\), должно быть верно, что \(1 \leq x_j, y_j \leq n\) и либо \((x_j, y_j) = (x_{j - 1} + 1, y_{j - 1})\) либо \((x_j, y_j) = (x_{j - 1}, y_{j - 1} + 1)\).

Примечание

Ниже проиллюстрированы три путешествия утки.

\(1 + 2 + 3 + 2 + 10 + 3 + 2 = 23\)

\(1 + 4 + 9 + 0 + 7 + 3 + 2 = 26\)

\(1 + 2 + 3 + 6 + 10 + 3 + 2 = 27\)

F. Омкар и оползень

Бинарный поиск жадные алгоритмы Конструктив математика Структуры данных *2400

Омкар стоит у подножия горы Селеста. Вершина находится в \(n\) метрах от него, и он может видеть всю гору до вершины, поэтому для каждого \(1 \leq j \leq n\) он знает, что высота горы в точке в \(j\) метрах от него равна \(h_j\). Известно, что для всех \(j\) удовлетворяющих \(1 \leq j \leq n - 1\), \(h_j < h_{j + 1}\) (то есть высоты строго возрастают).

Внезапно происходит оползень! Пока происходит оползень, происходит следующее: каждую минуту, если \(h_j + 2 \leq h_{j + 1}\), то один квадратный метр грязи будет скользить с позиции \(j + 1\) в позицию \(j\), так что \(h_{j + 1}\) уменьшается на \(1\), а \(h_j\) увеличивается на \(1\). Эти изменения происходят одновременно, так, например, если \(h_j + 2 \leq h_{j + 1}\) и \(h_{j + 1} + 2 \leq h_{j + 2}\) для какого-то \(j\), то \(h_j\) будет увеличено на \(1\), \(h_{j + 2}\) будет уменьшено на \(1\), а \(h_{j + 1}\) будет увеличено и уменьшено на \(1\), что означает, что на самом деле \(h_{j + 1}\) в течение этой минуты не изменится.

Оползень заканчивается, когда не будет такого \(j\), что \(h_j + 2 \leq h_{j + 1}\). Помогите Омкару выяснить, каковы будут значения \(h_1, \dots, h_n\) после окончания оползня. Можно доказать, что при заданных ограничениях оползень всегда заканчивается через некоторое число минут.

Обратите внимание, что из-за большого количества входных данных, рекомендуется, чтобы ваш код использовал быстрый ввод.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^6\)).

Вторая строка содержит \(n\) целых чисел \(h_1, h_2, \dots, h_n\) удовлетворяющих \(0 \leq h_1 < h_2 < \dots < h_n \leq 10^{12}\) — высоты.

Выходные данные

Выведите \(n\) целых чисел, где \(j\)-е число  — это значение \(h_j\) после остановки оползня.

Примечание

Первоначально гора имеет высоты \(2, 6, 7, 8\).

В первую минуту у нас есть \(2 + 2 \leq 6\), таким образом \(2\) увеличивается до \(3\), а \(6\) уменьшается до \(5\), оставляя \(3, 5, 7, 8\).

Во вторую минуту у нас есть \(3 + 2 \leq 5\) и \(5 + 2 \leq 7\), таким образом \(3\) увеличивается до \(4\), \(5\) остается без изменений, а \(7\) уменьшается до \(6\), оставляя \(4, 5, 6, 8\).

На третьей минуте у нас есть \(6 + 2 \leq 8\), так что \(6\) увеличивается до \(7\), а \(8\) уменьшается до \(7\), оставляя \(4, 5, 7, 7\).

На четвертой минуте у нас есть \(5 + 2 \leq 7\), таким образом \(5\) увеличивается до \(6\), а \(7\) уменьшается до \(6\), оставляя \(4, 6, 6, 7\).

На пятой минуте у нас есть \(4 + 2 \leq 6\), поэтому \(4\) увеличивается до \(5\), а \(6\) уменьшается до \(5\), оставляя \(5, 5, 6, 7\).

На шестой минуте ничего больше не может измениться, поэтому оползень останавливается, и наш ответ  — \(5, 5, 6, 7\).

B. Эпплджек и хранилища

жадные алгоритмы Конструктив реализация Структуры данных *1400

Этот год в Эквестрии выдался урожайным, и Эпплджек захотела построить новые хранилища для яблок. По советам проектировщиков фермы она решила построить два хранилища ненулевой площади: одно в форме квадрата, другое в форме прямоугольника (который, возможно, тоже является квадратом).

Хранилища Эпплджек будет строить из досок, на каждую сторону хранилища она собирается потратить ровно одну доску. Доски она может заказать в одной фирме у своего приятеля. Изначально на складе фирмы есть \(n\) досок, длины которых Эпплджек известны. Работа фирмы не стоит на месте, она периодически получает заказы и сама заказывает новые доски. Приятель Эпплджек может предоставить ей информацию о всех операциях. Для удобства он будет сообщать информацию в следующем формате:

  • \(+\) \(x\) — на склад поступила доска с длиной \(x\)
  • \(-\) \(x\) — со склада отгрузили доску с длиной \(x\) (при этом гарантируется, что на складе были какие-то доски длины \(x\))

Эпплджек пока не определилась, когда она будет заказывать доски, поэтому она хочет после каждого события на складе знать, может ли она заказать доски, чтобы построить прямоугольное и квадратное хранилища. Эпплджек занята сбором яблок, поэтому у нее нет времени на подсчеты, и она попросила вас помочь ей!

Напоминаем, что у квадрата все четыре стороны равны, а у прямоугольника две пары равных сторон.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — изначальное количество досок на складе фирмы, вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^5\)) — длины досок.

Третья строка содержит одно целое число \(q\) (\(1 \le q \le 10^5\)) — количество событий в фирме. Каждая из следующих \(q\) строк содержит описание событий в данном формате: сначала идет тип события (символ \(+\) или \(-\)), а затем число \(x\) (\(1 \le x \le 10^5\)).

Выходные данные

После каждого события на фирме выведите «YES», если из досок на складе фирмы можно собрать два хранилища нужной формы, и «NO» иначе (без кавычек). Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

После второго события Эпплджек может построить прямоугольное хранилище из досок с длинами \(1\), \(2\), \(1\), \(2\) и квадратное хранилище из досок с длинами \(1\), \(1\), \(1\), \(1\).

После шестого события Эпплджек может построить прямоугольное хранилище из досок с длинами \(1\), \(1\), \(1\), \(1\) и квадратное хранилище из досок с длинами \(2\), \(2\), \(2\), \(2\).

C. Пинки Пай поедает пирожные

жадные алгоритмы Конструктив математика сортировки *1700

Пинки Пай купила пакет пирожных с разными начинками! Но оказалось, что не все пирожные различаются начинкой между собой, то есть в пакете есть какие-то пирожные с одинаковой начинкой.

Пинки Пай ест пирожные по одному подряд. Она любит веселиться, поэтому решила не просто поедать пирожные, а стараться не есть пирожные с одной начинкой слишком часто. Для этого она хочет, чтобы минимальное расстояние между съеденными пирожными с одинаковой начинкой было как можно больше. При этом расстоянием между двумя пирожными Пинки Пай решила назвать количество съеденных пирожных между ними.

Пинки Пай может поедать пирожные в любом порядке. Ей не терпится скорее съесть все пирожные, поэтому она просит вас помочь посчитать наибольшее минимальное расстояние между съеденными пирожными с одинаковой начинкой среди всех возможных порядков поедания!

Пинки Пай собирается покупать еще пакеты с пирожными, поэтому просит вас решить задачу для нескольких пакетов!

Входные данные

Первая строка содержит одно целое число \(T\) (\(1 \le T \le 100\)) — количество пакетов, для которых нужно решить задачу.

Первая строка описания пакета содержит одно целое число \(n\) (\(2 \le n \le 10^5\)) — количество пирожных в нем. Вторая строка описания пакета содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — информация о начинках пирожных: одинаковые начинки обозначены одинаковым числом, разные начинки — разным. Гарантируется, что в каждом пакете есть как минимум два пирожных с одинаковой начинкой.

Гарантируется, что сумма значений \(n\) по всем пакетам не превосходит \(10^5\).

Выходные данные

Для каждого пакета в отдельной выведите одно целое число — наибольшее минимальное расстояние между съеденными пирожными с одинаковой начинкой среди всех возможных порядков поедания пирожных из этого пакета.

Примечание

Для первого пакета Пинки Пай может есть пирожные в следующем порядке (по начинкам): \(1\), \(6\), \(4\), \(7\), \(1\), \(6\), \(4\) (таким образом, минимальное расстояние будет равно \(3\)).

Для второго пакета Пинки Пай может есть пирожные в следующем порядке (по начинкам): \(1\), \(4\), \(6\), \(7\), \(4\), \(1\), \(6\), \(4\) (таким образом, минимальное расстояние будет равно \(2\)).

B. Boboniu играет в шахматы

Конструктив *1100

Boboniu любит играть в шахматы со своими подчиненными. Как мы знаем, никакой подчиненный не может победить босса в шахматах, поэтому Boboniu никогда не проигрывает.

Вы проходите собеседование в его компанию. Boboniu решил озадачить вас следующей шахматной задачей:

Рассмотрим поле \(n\times m\) (строки пронумерованы от \(1\) до \(n\), столцбы пронумерованы от \(1\) до \(m\)). У вас есть шахматная фигура которая стоит в клетке \((S_x,S_y)\), которая исходно находится не на границе поля (т.е. \(2 \le S_x \le n-1\) и \(2 \le S_y \le m-1\)).

Из клетки \((x,y)\), вы можете подвинуть вашу шахматную фигуру на клетку \((x,y')\) (\(1\le y'\le m, y' \neq y\)) или \((x',y)\) (\(1\le x'\le n, x'\neq x\)). Другими словами, фигура ходит как ладья. Из клетки вы можете перейти в любую клетку на той же строке или столбце.

Ваша задача — посетить каждую клетку ровно один раз. Можете ли вы найти решение?

Обратите внимание, что клетки на пути между двумя соседними клетками в маршруте не считаются посещенными, и что вам не требуется возвращаться в исходную клетку.

Входные данные

В первой строке записаны четыре целых числа \(n\), \(m\), \(S_x\) и \(S_y\) (\(3\le n,m\le 100\), \(2 \le S_x \le n-1\), \(2 \le S_y \le m-1\)) — количество строк, столбцов, и исходная позиция фигуры, соответственно.

Выходные данные

Вы должны вывести \(n\cdot m\) строк.

В \(i\)-й строке должны быть записаны два целых числа \(x_i\) и \(y_i\) (\(1 \leq x_i \leq n\), \(1 \leq y_i \leq m\)), обозначающие \(i\)-ю посещенную вами клетку. Вы должны вывести ровно \(nm\) пар \((x_i, y_i)\), это должны быть все возможные пары \((x_i, y_i)\), что \(1 \leq x_i \leq n\), \(1 \leq y_i \leq m\).

Можно показать, что в данных ограничениях всегда существует решение. Если есть несколько возможных решений, вы можете вывести любое.

Примечание

Возможные маршруты для двух примеров:

A. Кратные длине

жадные алгоритмы Конструктив теория чисел *1600

Вам дан массив \(a\) из \(n\) целых чисел.

Вы хотите сделать все элементы \(a\) равными нулю, применив следующую операцию ровно три раза:

  • Выберите отрезок, к каждому числу на этом отрезке добавьте число кратное \(len\), где \(len\) это длина этого отрезка (добавленные числа могут быть разными).

Можно доказать, что таким образом всегда можно превратить все элементы \(a\) в нули.

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \le n \le 100\,000\)): количество элементов массиве.

Во второй строке записаны \(n\) элементов массива \(a\), разделенные пробелами: \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\)).

Выходные данные

Выведите шесть строк, описывающих три операции.

Для каждой операции, выведите две строки:

  • В первой строке выведите два числа \(l\), \(r\) (\(1 \le l \le r \le n\)): границы выбранного отрезка.

  • Во второй строке выведите \(r-l+1\) целых чисел \(b_l, b_{l+1}, \dots, b_r\) (\(-10^{18} \le b_i \le 10^{18}\)): числа, которые нужно прибавить к \(a_l, a_{l+1}, \ldots, a_r\), соответственно; \(b_i\) должно делиться на \(r - l + 1\).

B. Каменная игра

жадные алгоритмы игры Конструктив Перебор *1800

T играет в игру со своим другом HL.

Есть \(n\) кучек с камнями, в \(i\)-й из них исходно содержится \(a_i\) камней.

T и HL будут ходить чередуясь, и T ходит первым. В каждом ходу, игрок выбирает непустую кучу и удаляет из нее один камень. Однако, нельзя выбирать кучку, которая была выбрана на прошлом ходу (кучку которая была выбрана другим игроком, или если текущий ход это первый ход первого игрока, то можно выбрать любую кучу). Игрок, который не может выбрать кучу на своем ходу, проигрывает.

Считая, что оба игрока играют оптимально, для заданных стартовых конфигураций \(t\) игр, определите победителя.

Входные данные

В первой строке записано одно целое число \(t\) \((1 \le t \le 100)\) — количество игр. Далее следуют описания игр, описание каждой игры состоит из двух строк:

В первой строке записано одно целое число \(n\) \((1 \le n \le 100)\) — количество куч.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) \((1 \le a_i \le 100)\).

Выходные данные

Для каждой игры, выведите в отдельной строке имя победителя, «T» или «HL» (без кавычек).

Примечание

В первой игре, T убирает один камень из единственной кучи. После этого, несмотря на то, что в куче еще остался \(1\) камень, HL не можем сходить, из-за того что T использовал эту кучу на прошлом ходу. Таким образом, T побеждает.

E. Паросочетание с расстояниями

Деревья Конструктив поиск в глубину и подобное *3200

Вам дано целое число \(k\) и дерево \(T\) с \(n\) вершинами (\(n\) четно).

Обозначим за \(dist(u, v)\) количество ребер на кратчайшем пути между вершинами \(u\) и \(v\) в \(T\).

Определим неориентированный взвешенный полный граф \(G = (V, E)\) следующим образом:

  • \(V = \{x \mid 1 \le x \le n \}\) т.е. множество целых чисел от \(1\) до \(n\)
  • \(E = \{(u, v, w) \mid 1 \le u, v \le n, u \neq v, w = dist(u, v) \}\) т.е. существует ребро между каждой парой разных вершин, вес ребра равен расстоянию между соотвествующими вершинами в \(T\)

Ваша задача — найти совершенное паросочетание в \(G\) с суммой весов ребер \(k\) \((1 \le k \le n^2)\).

Входные данные

В первой строке записано два целых числа \(n\), \(k\) (\(2 \le n \le 100\,000\), \(n\) четное, \(1 \le k \le n^2\)): количество вершин и необходимый вес паросочетания.

В \(i\)-й из следующих \(n - 1\) строк записаны два целых числа \(v_i\), \(u_i\) (\(1 \le v_i, u_i \le n\)), описывающих ребро между вершинами \(v_i\) и \(u_i\) в \(T\). Гарантируется, что данный граф является деревом.

Выходные данные

Если не существует необходимого паросочетания, выведите «NO» (без кавычек) в единственной строке.

Иначе, выведите «YES» (без кавычек) в первой строке вывода.

Затем, выведите \(\frac{n}{2}\) строк, в \(i\)-й из них выведите \(p_i, q_i\) (\(1 \le p_i, q_i \le n\)): \(i\)-ю пару в паросочетании.

Примечание

Дерево это связный неориентированный граф без циклов.

Паросочетание это множество попарно несмежных ребер, без петель; таким образом, никакие два ребра не имеют общих концов.

Совершенное паросочетание это паросочетание, которое покрывает все вершины графа; таким образом, каждая вершина инцидентна ровно одному ребру паросочетания.

D. Из бинарной строки в подпоследовательности

жадные алгоритмы Конструктив реализация Структуры данных *1500

Вам задана бинарная строка \(s\), состоящая из \(n\) нулей или единиц.

Ваша задача – разделить заданную строку на минимальное число подпоследовательностей таким образом, что каждый символ строки принадлежит ровно одной подпоследовательности и каждая подпоследовательность выглядит подобно «010101 ...» или «101010 ...» (т.е. подпоследовательность не должна содержать два соседних нуля или единицы).

Напомним, что подпоследовательность — это последовательность, которая может быть получена путем удаления из заданной последовательности с помощью удаления нуля или более элементов без изменения порядка остальных элементов. Например, подпоследовательностями «1011101» являются «0», «1», «11111», «0111», «101», «1001», но не «000», «101010» и «11100».

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину \(s\). Вторая строка набора тестовых данных содержит \(n\) символов '0' и '1' — строку \(s\).

Гарантируется, что сумма всех \(n\) не превосходит \(2 \cdot 10^5\) (\(\sum n \le 2 \cdot 10^5\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ на него: первой строкой выведите одно целое число \(k\) (\(1 \le k \le n\)) — минимальное количество подпоследовательностей, на которые вы можете разделить строку \(s\). Второй строкой выведите \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le k\)), где \(a_i\) — номер подпоследовательности, к которой принадлежит \(i\)-й символ строки \(s\).

Если существует несколько ответов, вы можете вывести любой.

C. Четыре отрезка

геометрия Конструктив математика Перебор реализация *1700

Несколько месяцев спустя Лёня всё-таки получил творение брата Вани по почте. И теперь Лёня решил сам похвастаться чем-нибудь перед братом. Немного подумав он понял, что у него нет готовых творений и решил написать программу распознавания прямоугольников. По его замыслу программа по четырём заданным отрезкам определяет образуют ли эти отрезки прямоугольник положительной площади со сторонами параллельными осям координат. Так как Лёня плохо учится в школе и сам не может написать такую программу, он попросил вас помочь ему в этом.

Входные данные

Входные данные состоят из четырёх строк. Каждая строка состоит из четырёх целых чисел x1, y1, x2, y2 ( - 109 ≤ x1, y1, x2, y2 ≤ 109) координаты начала и конца отрезка. Заданные отрезки могут вырождаться в точки.

Выходные данные

Выведите слово «YES» если данные четыре отрезка образуют искомый прямоугольник и «NO» в противном случае.

A. Похожие строки

Конструктив Строки *800

Двоичная строка — это такая строка, каждый символ которой — либо 0, либо 1. Назовем две двоичные строки \(a\) и \(b\) одинаковой длины похожими, если хотя бы в одной позиции их символы совпадают (существует такое число \(i\), что \(a_i = b_i\)). Например:

  • 10010 и 01111 похожи (у них один и тот же символ в позиции \(4\));
  • 10010 и 11111 похожи;
  • 111 и 111 похожи;
  • 0110 и 1001 не являются похожими.

Вам дано целое число \(n\) и двоичная строка \(s\), состоящая из \(2n-1\) символов. Обозначим за \(s[l..r]\) непрерывную подстроку \(s\), начиная с \(l\)-го символа и заканчивая \(r\)-м символом (иными словами, \(s[l..r] = s_l s_{l + 1} s_{l + 2} \dots s_r\)).

Постройте двоичную строку \(w\) длины \(n\), похожую на все строки из этого списка: \(s[1..n]\), \(s[2..n+1]\), \(s[3..n+2]\), ..., \(s[n..2n-1]\).

Входные данные

В первой строке задано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Первая строка набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 50\)).

Вторая строка содержит двоичную строку \(s\) длины \(2n - 1\). Каждый символ \(s_i\) — либо 0, либо 1.

Выходные данные

Для каждого набора входных данных выведите удовлетворяющую условию двоичную строку \(w\) длины \(n\). Если существует несколько таких строк — выведите любую из них. Можно показать, что хотя бы одна такая строка \(w\) всегда существует.

Примечание

Объяснение примера из условия (совпадающие символы в одинаковых позициях выделены жирным):

Первый набор входных данных:

  • \(\mathbf{1}\) похожа на \(s[1..1] = \mathbf{1}\).

Второй набор входных данных:

  • \(\mathbf{000}\) похожа на \(s[1..3] = \mathbf{000}\);
  • \(\mathbf{000}\) похожа на \(s[2..4] = \mathbf{000}\);
  • \(\mathbf{000}\) похожа на \(s[3..5] = \mathbf{000}\).

Третий набор входных данных:

  • \(\mathbf{1}0\mathbf{10}\) похожа на \(s[1..4] = \mathbf{1}1\mathbf{10}\);
  • \(\mathbf{1}01\mathbf{0}\) похожа на \(s[2..5] = \mathbf{1}10\mathbf{0}\);
  • \(\mathbf{10}1\mathbf{0}\) похожа на \(s[3..6] = \mathbf{10}0\mathbf{0}\);
  • \(1\mathbf{0}1\mathbf{0}\) похожа на \(s[4..7] = 0\mathbf{0}0\mathbf{0}\).

Четвертый набор входных данных:

  • \(0\mathbf{0}\) похожа на \(s[1..2] = 1\mathbf{0}\);
  • \(\mathbf{0}0\) похожа на \(s[2..3] = \mathbf{0}1\).

C. Восстановление бинарной строки

2-sat жадные алгоритмы Конструктив Перебор *1500

Рассмотрим следующий процесс. У вас есть бинарная строка (строка, состоящая только из символов 0 и 1) \(w\) длины \(n\) и число \(x\). Вы создаете новую бинарную строку \(s\) длины \(n\); \(i\)-й символ новой строки \(s\) выбирается следующим образом:

  • если символ \(w_{i-x}\) существует и равен 1, то \(s_i\) равно 1 (более формально, если \(i > x\) и \(w_{i-x} = \) 1, то \(s_i = \) 1);
  • если символ \(w_{i+x}\) существует и равен 1, то \(s_i\) равно 1 (более формально, если \(i + x \le n\) и \(w_{i+x} = \) 1, то \(s_i = \) 1);
  • если оба описанных выше условия неверны, то \(s_i\) равно 0.

Вам заданы число \(x\) и строка \(s\). Восстановите изначальную строку \(w\).

Входные данные

Первая строка содержит число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор входных данных содержит две строки. Первая строка содержит строку \(s\) (\(2 \le |s| \le 10^5\), каждый символ строки \(s\) равен либо 0, либо 1). Вторая строка содержит целое число \(x\) (\(1 \le x \le |s| - 1\)).

Суммарная длина всех длин строк \(s\) во входных данных не превосходит \(10^5\).

Выходные данные

На каждый набор входных данных выведите ответ:

  • если не существует строки \(w\), которая может породить строку \(s\), то выведите \(-1\);
  • иначе, выведите бинарную строку \(w\) состоящую из \(|s|\) символов. Если возможных ответов несколько — вы можете вывести любой из них.

A. Дистанция и ось

Конструктив математика *900

Вам задана точка \(A\) с координатой \(x = n\) на оси \(OX\). Вам хотелось бы найти такую целочисленную точку \(B\) (также на оси \(OX\)), что модуль разности между расстоянием от \(O\) до \(B\) и расстоянием от \(A\) до \(B\) равен \(k\).

Описание первого набора входных данных.

Так как иногда невозможно найти такую точку \(B\), вы можете за один шаг увеличить или уменьшить координату \(A\) на \(1\). Какое минимальное количество шагов необходимо сделать, чтобы такая точка \(B\) существовала?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 6000\)) — количество наборов входных данных.

В единственной строке каждого набора заданы два целых числа \(n\) и \(k\) (\(0 \le n, k \le 10^6\)) — первоначальная позиция точки \(A\) и желаемый модуль разности.

Выходные данные

Для каждого набора входных данных, выведите минимальное количество шагов, необходимых для существования точки \(B\).

Примечание

В первом наборе входных данных (изображение выше), если мы выберем координату \(B\) как \(2\), то модуль разности будет равен \(|(2 - 0) - (4 - 2)| = 0\) и нам не нужно передвигать \(A\). Поэтому ответ равен \(0\).

Во втором наборе входных данных, мы можем увеличить координату \(A\) на \(3\) и выбрать координату \(B\) как \(0\) или \(8\). Модуль разности в таком случае будет равен \(|8 - 0| = 8\), то есть ответ равен \(3\).

B. Троичная последовательность

жадные алгоритмы Конструктив математика *1100

Вам заданы две последовательности \(a_1, a_2, \dots, a_n\) и \(b_1, b_2, \dots, b_n\). Каждый элемент обеих последовательностей — это \(0\), \(1\) или \(2\). Количество чисел \(0\), \(1\), \(2\) в последовательности \(a\) равно \(x_1\), \(y_1\), \(z_1\) соответственно, а количество чисел \(0\), \(1\), \(2\) в последовательности \(b\) равно \(x_2\), \(y_2\), \(z_2\) соответственно.

Вы можете переставить элементы в обеих последовательностях \(a\) и \(b\) как захотите. После этого, определим последовательность \(c\) следующим образом:

\(c_i = \begin{cases} a_i b_i & \mbox{если }a_i > b_i \\ 0 & \mbox{если }a_i = b_i \\ -a_i b_i & \mbox{если }a_i < b_i \end{cases}\)

Вам нужно сделать \(\sum_{i=1}^n c_i\) (сумму всех элементов последовательности \(c\)) как можно больше. Какую максимально возможную сумму можно получить?

Входные данные

В первой строке задано единственное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор состоит из двух строк. В первой строке каждого набора заданы три целых числа \(x_1\), \(y_1\), \(z_1\) (\(0 \le x_1, y_1, z_1 \le 10^8\)) — количество \(0\)-й, \(1\)-ц и \(2\)-к в последовательности \(a\).

Во второй строке каждого набора заданы три целых числа \(x_2\), \(y_2\), \(z_2\) (\(0 \le x_2, y_2, z_2 \le 10^8\); \(x_1 + y_1 + z_1 = x_2 + y_2 + z_2 > 0\)) — количество \(0\)-й, \(1\)-ц и \(2\)-к в последовательности \(b\).

Выходные данные

Для каждого набора входных данных, выведите максимально возможную сумму последовательности \(c\).

Примечание

В первом наборе входных данных, одно из оптимальнных решений следующее:

\(a = \{2, 0, 1, 1, 0, 2, 1\}\)

\(b = \{1, 0, 1, 0, 2, 1, 0\}\)

\(c = \{2, 0, 0, 0, 0, 2, 0\}\)

Во втором наборе, одно из оптимальных решений следующее:

\(a = \{0, 2, 0, 0, 0\}\)

\(b = \{1, 1, 0, 1, 0\}\)

\(c = \{0, 2, 0, 0, 0\}\)

В третьем наборе, единственное решение следующее:

\(a = \{2\}\)

\(b = \{2\}\)

\(c = \{0\}\)

C. Просто массив

Конструктив математика сортировки теория чисел *1300

Вам задан массив \(a_1, a_2, \dots, a_n\), в котором все \(a_i\) — целые и больше \(0\).

За одну операцию вы можете выбрать две различные позиции \(i\) и \(j\) (\(1 \le i, j \le n\)). Если \(gcd(a_i, a_j)\) равен минимуму всего массива \(a\), то вы можете поменять местами \(a_i\) и \(a_j\). \(gcd(x, y)\) означает наибольших общий делитель (НОД) чисел \(x\) и \(y\).

Вам нужно сделать массив \(a\) неубывающим, используя заданную операцию произвольное количество раз (возможно, ни разу). Определите, возможно ли это.

Массив \(a\) — неубывающий, тогда и только тогда, когда \(a_1 \le a_2 \le \ldots \le a_n\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 10^5\)) — длина массива \(a\).

Во второй строке каждого набора заданы \(n\) положительных целых чисел \(a_1, a_2, \ldots a_n\) (\(1 \le a_i \le 10^9\)) — сам массив.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора, выведите «YES», если возможно сделать массив \(a\) неубывающим, используя описанную выше операцию, или «NO» в противном случае.

Примечание

В первом и третьем наборах, массив уже неубывающий.

Во втором наборе, мы можем сначала свапнуть \(a_1\) и \(a_3\), а потом \(a_1\) и \(a_5\), и получим неубывающий массив.

В четвертом наборе, невозможно сделать массив неубывающим, используя заданную операцию.

C. Уничтожение фиксированных точек

Бинарный поиск жадные алгоритмы Конструктив Структуры данных *2300

Дан массив \(a_1, \ldots, a_n\) из \(n\) положительных целых чисел. За одну операцию можно выбрать индекс \(i\), удовлетворяющий \(a_i = i\), и удалить \(a_i\) из массива (после удаления остальные части массива соединяются).

Вес \(a\) определяется как максимальное количество элементов, которые можно удалить.

Вы должны ответить на \(q\) независимых запросов \((x, y)\): после замены первых \(x\) элементов \(a\) и последних \(y\) элементов \(a\) на \(n+1\) (делая их удаление невозможным), чему будет равен вес \(a\)?

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 3 \cdot 10^5\))  — длину массива и количество запросов.

Вторая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \leq a_i \leq n\)) — элементы массива.

\(i\)-я из следующих \(q\) строк содержит два целых числа \(x\) и \(y\) (\(x, y \ge 0\) и \(x+y < n\)).

Выходные данные

Выведите \(q\) строк, \(i\)-я строка должна содержать единственное целое число  — ответ на \(i\)-й запрос.

Примечание

Объяснение первого запроса:

После того, как первые \(x = 3\) и последние \(y = 1\) элементов стало невозможно удалить, \(a\) становится равным \([\times, \times, \times, 9, 5, 4, 6, 5, 7, 8, 3, 11, \times]\) (для наглядности мы представляем \(14\) как \(\times\)).

Вот стратегия, которая удаляет \(5\) элементов (удаленный элемент окрашен в красный цвет):

  • \([\times, \times, \times, 9, \color{red}{5}, 4, 6, 5, 7, 8, 3, 11, \times]\)
  • \([\times, \times, \times, 9, 4, 6, 5, 7, 8, 3, \color{red}{11}, \times]\)
  • \([\times, \times, \times, 9, 4, \color{red}{6}, 5, 7, 8, 3, \times]\)
  • \([\times, \times, \times, 9, 4, 5, 7, \color{red}{8}, 3, \times]\)
  • \([\times, \times, \times, 9, 4, 5, \color{red}{7}, 3, \times]\)
  • \([\times, \times, \times, 9, 4, 5, 3, \times]\) (конечное состояние)

Невозможно удалить более \(5\) элементов, поэтому вес составляет \(5\).

D. Игра Пар

интерактив Конструктив математика поиск в глубину и подобное теория чисел *2800

Это интерактивная задача.

Дано целое число \(n\). Два игрока, First и Second играют в следующую игру:

  1. First берет \(2n\) целых чисел \(1, 2, \dots, 2n\), и разбивает их на \(n\) попарно непересекающихся пар по своему усмотрению.
  2. Затем, Second выбирает ровно одно число из каждой пары (тоже по своему усмотрению).

Чтобы определить победителя игры, мы вычисляем сумму чисел, выбранных Second. Если сумма всех этих чисел кратна \(2n\), то выигрывает Second. Иначе выигрывает First.

Вам дано \(n\). Выберите каким игроком вы будете играть и выиграйте игру.

Протокол взаимодействия

Начните взаимодействие с чтения целого числа \(n\) (\(1 \le n \le 5 \cdot 10^5\)).

После прочтения выведите единственную строку, содержащую либо First, либо Second, обозначающую, за кого вы хотите играть. Взаимодействие затем варьируется в зависимости от того, за кого вы решили играть.

Если вы выбрали First, выведите единственную строку, содержащую \(2n\) целых чисел \(p_1, p_2, \dots, p_{2n}\), обозначающих, что число \(i\) принадлежит к \(p_i\)-й паре для \(1\le i \le 2n\). Таким образом, должно выполняться \(1 \le p_i \le n\), а каждое число от \(1\) до \(n\) включительно должно встречаться ровно дважды.

Если вы выбрали игру Second, то интерактор выведет \(2n\) целых чисел \(p_1, p_2, \dots, p_{2n}\), что означает, что число \(i\) принадлежит к \(p_i\)-й паре. В ответ в единственной строке выведите \(n\) целых чисел \(a_1, a_2, \dots, a_n\). Они должны содержать ровно по одному числу из каждой пары.

Независимо от того, какого игрока вы выбрали, интерактор прекратит работу, выведя единственное целое число: \(0\), если ваш ответ на тестовый случай правильный (то есть вы играете за First и он не может выбрать подходящие числа из ваших пар, или если вы играете за Second и сумма выбранных вами чисел кратна \(2n\)), или \(-1\), если он неправильный. Ваша программа должна завершиться сразу после прочтения этого числа.

Если в какой-то момент вы сделаете некорректное взаимодействие, то интерактор выведет \(-1\) и завершит взаимодействие. Вы получите вердикт Неверный ответ. Убедитесь в том, что вы немедленно прекращаете работу, чтобы избежать получения других вердиктов.

После вывода очередной строки не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Формат взломов

Для взлома используйте следующий формат:

Первая строка содержит целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)).

Вторая строка содержит \(2n\) целых чисел \(p_1, p_2, \dots, p_{2n}\), обозначающих, что число \(i\) принадлежит к паре \(p_i\)-th, если взламываемое решение решает играть как Second. Если взламываемое решение выбирает играть как First, то эти пары не имеют значения, но \(p_1, p_2, \dots, p_{2n}\) все равно должны формировать разбиение \(1, 2, \dots, 2n\) на \(n\) непересекающихся пар.

Примечание

В первом примере \(n = 2\), и вы решили играть как Second. Интерактор выбирает пары \((1, 2)\) и \((3, 4)\), а вы отвечаете числами \(1\) и \(3\). Это правильный выбор, так как он содержит ровно одно число из каждой пары, а сумма \(1 + 3 = 4\) делится на \(4\).

Во втором примере снова \(n = 2\), и вы играете как Первый. Вы выбираете пары \((2, 4)\) и \((1, 3)\). Интерактор не может выбрать число из каждой пары так, чтобы их сумма делилась на \(4\), поэтому ответ верен.

Обратите внимание, что примеры предназначены только для иллюстрации протокола взаимодействия и необязательно соответствуют поведению реального интерактора.

A. Подделка перестановки

Конструктив *800

Перестановка длины \(n\) — это массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — это перестановка, но \([1,2,2]\) — это не перестановка (\(2\) встречается дважды в массиве), а \([1,3,4]\) также не является перестановкой (\(n=3\), но в массиве встречается \(4\)).

Пусть \(p\) — перестановка длины \(n\). Определим подпись \(F(p)\) перестановки \(p\) как отсортированный массив сумм соседних элементов \(p\). Более формально,

\(\)F(p)=\mathrm{sort}([p_1+p_2,p_2+p_3,\ldots,p_{n-1}+p_n]).\(\)

Например, если \(n=4\) и \(p=[1,4,2,3],\) тогда подпись будет вычисляться следующим образом: \(F(p)=\mathrm{sort}([1+4,4+2,2+3])=\mathrm{sort}([5,6,5])=[5,5,6]\).

Вам дана перестановка \(p\) длины \(n\). Ваша задача найти какую-то другую перестановку \(p'\) с такой же подписью. Обратите внимание, что перестановки \(p\) и \(p'\) обязаны различаться хотя бы в одной позиции, то есть должна существовать такая позиция \(i\), что \(p_i \ne p'_i\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 668\)). Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2\le n\le 100\)) — длину перестановки.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(p_1,\ldots,p_n\) (\(1\le p_i\le n\)). Гарантируется, что \(p\) является перестановкой.

Выходные данные

Для каждого набора входных данных, выведите \(n\) целых чисел \(p'_1,\ldots, p'_n\) — перестановку, удовлетворяющую следующим условиям: \(p'\ne p\) и \(F(p')=F(p)\).

Можно доказать, что для любой перестановки, удовлетворяющей ограничениям из условия, существует ответ.

Если правильных ответов несколько, можно вывести любой.

Примечание

В первом примере \(F(p)=\mathrm{sort}([1+2])=[3]\).

И \(F(p')=\mathrm{sort}([2+1])=[3]\).

Во втором примере \(F(p)=\mathrm{sort}([2+1,1+6,6+5,5+4,4+3])=\mathrm{sort}([3,7,11,9,7])=[3,7,7,9,11]\).

И \(F(p')=\mathrm{sort}([1+2,2+5,5+6,6+3,3+4])=\mathrm{sort}([3,7,11,9,7])=[3,7,7,9,11]\).

В третьем примере \(F(p)=\mathrm{sort}([2+4,4+3,3+1,1+5])=\mathrm{sort}([6,7,4,6])=[4,6,6,7]\).

И \(F(p')=\mathrm{sort}([3+1,1+5,5+2,2+4])=\mathrm{sort}([4,6,7,6])=[4,6,6,7]\).

B. Уничтожение массива

Конструктив реализация *1000

Вам дан массив \(a\) из \(n\) целых чисел, таких, что \(a_1 + a_2 + \cdots + a_n = 0\).

За одну операцию можно выбрать два различных индекса \(i\) и \(j\) (\(1 \le i, j \le n\)), уменьшить \(a_i\) на единицу и увеличить \(a_j\) на единицу. Если \(i < j\), то эта операция бесплатная, в противном случае она стоит одну монету.

Какое минимальное количество монет нужно потратить, чтобы все элементы стали равны \(0\)?

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указано количество наборов входных данных \(t\) (\(1 \le t \le 5000\)). Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 10^5\))  — количество элементов.

Следующая строка содержит \(n\) целых чисел \(a_1, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)). При этом \(\sum_{i=1}^n a_i = 0\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество монет, которое мы должны потратить, чтобы все элементы равнялись \(0\).

Примечание

Возможная стратегия для первого набора входных данных:

  • Сделаем операцию \((i=2, j=3)\) три раза (бесплатно), \(a = [-3, 2, 0, 1]\).
  • Сделаем операцию \((i=2, j=1)\) два раза (за две монеты), \(a = [-1, 0, 0, 1]\).
  • Сделаем операцию \((i=4, j=1)\) один раз (за одну монету), \(a = [0, 0, 0, 0]\).

C. Link Cut центроиды

графы Деревья Конструктив поиск в глубину и подобное *1700

Fishing Prince любит деревья и особенно он любит деревья с ровно одним центроидом. Деревом называется связный граф без циклов.

Вершина называется центроидом дерева тогда и только тогда, когда при удалении этой вершины (удалении вершины и всех выходящих из нее ребер) размер наибольшей компоненты связности оставшегося графа будет наименьший возможный.

Например, вершина \(2\) является центроидом дерева на следующей картинке, потому что после того, как вы удалите ее, размер наибольшей компоненты связности оставшегося графа будет равен \(2\). Невозможно удалить другую вершину, чтобы этот размер был меньше.

Однако, в некоторых деревьях может быть больше одного центроида, например:

Обе вершины \(1\) и \(2\) являются центроидами, потому что размер наибольшей компоненты связности будет равен \(3\) после удаления любой из них.

Сейчас у Fishing Prince есть дерево. Он должен удалить одно ребро дерева. После этого он должен добавить одно ребро. Получившийся после этих двух операций граф снова должен стать деревом. Можно добавить только что удаленное ребро.

Он хочет, чтобы у получившегося дерева был единственный центроид. Помогите ему и найдите любую возможную пару операций, которые можно сделать. Можно доказать, что хотя бы один способ сделать такую пару операций существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1\leq t\leq 10^4\)) — количество наборов входных данных. Описание наборов входных данных следует.

В первой строке описания каждого набора входных данных находится целое число \(n\) (\(3\leq n\leq 10^5\)) — количество вершин.

Каждая из следующей \(n-1\) строки содержит два целых числа \(x, y\) (\(1\leq x,y\leq n\)). Они означают, что существует ребро, соединяющее вершины \(x\) и \(y\).

Гарантируется, что данный граф является деревом.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите две строки.

В первой строке выведите два целых числа \(x_1, y_1\) (\(1 \leq x_1, y_1 \leq n\)), которые означают, что вы удаляете ребро между вершинами \(x_1\) и \(y_1\). Должно существовать ребро, соединяющее вершины \(x_1\) и \(y_1\).

Во второй строке выведите два целых числа \(x_2, y_2\) (\(1 \leq x_2, y_2 \leq n\)), которые означают, что вы добавляете ребро между вершинами \(x_2\) и \(y_2\).

Граф, получающийся после применения этих двух операций, должен снова являться деревом.

Если существует несколько возможных решений, выведите любое.

Примечание

Обратите внимание, что вы можете добавлять то же самое ребро, которое вы удалили.

В первом наборе входных данных после удаления и добавления одного и того же ребра вершина \(2\) по-прежнему останется единственным центроидом.

Во втором наборе входных данных вершина \(2\) станет единственным центроидом после удаления ребра между вершинами \(1\) и \(3\) и добавления ребра между вершинами \(2\) и \(3\).

D. Три последовательности

жадные алгоритмы Конструктив математика Структуры данных *2200

Вам дана последовательность из \(n\) целых чисел \(a_1, a_2, \ldots, a_n\).

Вы должны построить две последовательности целых чисел \(b\) и \(c\) длины \(n\), которые удовлетворяют условиям:

  • для всех \(i\) (\(1\leq i\leq n\)) \(b_i+c_i=a_i\);
  • \(b\) неубывающая, что означает, что для всех \(1<i\leq n\), выполнено \(b_i\geq b_{i-1}\);
  • \(c\) невозрастающая, что означает, что для всех \(1<i\leq n\), выполнено \(c_i\leq c_{i-1}\).

Вы хотите минимизировать \(\max(b_i,c_i)\). Другими словами, вы хотите минимизировать максимум чисел в последовательностях \(b\) и \(c\).

Также будет сделано \(q\) изменений, \(i\)-е изменение описывается тройкой чисел \(l,r,x\). Вы должны добавить \(x\) к \(a_l,a_{l+1}, \ldots, a_r\).

Вы должны найти минимальное значение \(\max(b_i,c_i)\) для изначальной последовательности и для последовательности после каждого изменения.

Входные данные

В первой строке находится единственное целое число \(n\) (\(1\leq n\leq 10^5\)).

Во второй строке находится \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1\leq i\leq n\), \(-10^9\leq a_i\leq 10^9\)).

В третьей строке находится единственное целое число \(q\) (\(1\leq q\leq 10^5\)).

Каждая из следующих \(q\) строк содержит три целых числа \(l,r,x\) (\(1\leq l\leq r\leq n,-10^9\leq x\leq 10^9\)), описывающих очередное изменение.

Выходные данные

Выведите \(q+1\) строку.

В \(i\)-й (\(1 \leq i \leq q+1\)) строке выведите ответ на задачу для последовательности после \(i-1\) изменения.

Примечание

В первом тесте:

  • Изначальная последовательность \(a = (2, -1, 7, 3)\). Пара последовательностей \(b=(-3,-3,5,5),c=(5,2,2,-2)\) является возможным выбором.
  • После первого изменения \(a = (2, -4, 4, 0)\). Пара последовательностей \(b=(-3,-3,5,5),c=(5,-1,-1,-5)\) является возможным выбором.
  • После второго изменения \(a = (2, -4, 6, 2)\). Пара последовательностей \(b=(-4,-4,6,6),c=(6,0,0,-4)\) является возможным выбором.

A. Ахахахахахахахаха

Конструктив математика *1100

У Александры есть массив \(a\) четной длины, состоящий из чисел \(0\) и \(1\). Элементы массива пронумерованы от \(1\) до \(n\). Она хочет удалить из него не более \(\frac{n}{2}\) элементов (где \(n\) — его длина) таким образом, чтобы знакопеременная сумма массива была равна \(0\) (т.е. \(a_1 - a_2 + a_3 - a_4 + \dotsc = 0\)). Иными словами, Александра хочет, чтобы сумма всех элементов на нечетных позициях была равна сумме всех элементов на четных позициях. Элементы, которые вы удаляете, не обязаны быть последовательными.

К примеру, если у нее был массив \(a = [1, 0, 1, 0, 0, 0]\), и она удалила \(2\)-й и \(4\)-й элементы, то \(a\) станет равным \([1, 1, 0, 0]\) и его знакопеременная сумма будет равна \(1 - 1 + 0 - 0 = 0\).

Помогите ей!

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^3\)). Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 10^3\), \(n\) четное)  — длину массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 1\))  — элементы массива.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^3\).

Выходные данные

Для каждого набора входных данных сначала выведите число \(k\) (\(\frac{n}{2} \leq k \leq n\)) — число элементов, которые останутся после удаления. В следующей строке выведите \(k\) чисел, которые не будут удалены, в том порядке, в котором они идут в массиве \(a\). Обратите внимание, вам надо вывести сами числа, а не их индексы.

Можно показать, что ответ всегда существует. Если существует несколько ответов, выведите любой из них.

Примечание

В первом и втором наборах входных данных знакопеременная сумма массива, очевидно, равна \(0\).

В третьем наборе входных данных знакопеременная сумма массива равна \(1 - 1 = 0\).

В четвертом наборе входных данных знакопеременная сумма уже равна \(1 - 1 + 0 - 0 = 0\), мы можем ничего не удалять.

C. Шоколадный заяц

интерактив Конструктив математика *1600

Это интерактивная задача.

Мы загадали перестановку \(p\) длины \(n\) из элементов от \(1\) до \(n\). Вам надо ее отгадать. Чтобы это сделать, вы можете сказать нам 2 различных индекса \(i\) и \(j\), и мы вам скажем, чему равняется \(p_{i} \bmod p_{j}\) (остаток от деления \(p_{i}\) на \(p_{j}\)).

У нас хватит терпения на то, чтобы ответить на \(2 \cdot n\) запросов; вам нужно уложиться в это ограничение. Сможете ли вы это сделать?

Напомним, что перестановка длины \(n\) — это массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — это перестановка, но \([1,2,2]\) — это не перестановка (\(2\) встречается дважды в массиве), а \([1,3,4]\) также не является перестановкой (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Единственная строка содержит целое число \(n\) (\(1 \le n \le 10^4\)) — длину перестановки.

Протокол взаимодействия

Взаимодействие начинается с чтения числа \(n\).

Далее вы можете задать максимум \(2 \cdot n\) запросов следующего вида:

  • «? x y» (\(1 \le x, y \le n, x \ne y\)).

После каждого запроса вам необходимо считать целое число \(k\), равное \(p_x \bmod p_y\).

Когда вы отгадаете перестановку, выведите в одной строку «! » (без кавычек) и массив \(p\), после чего завершите работу.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Ваша программа должна немедленно завершиться после прочтения ответа «-1», вы получите вердикт Неправильный ответ. В противном случае вы можете получить любой вердикт, так как программа продолжит чтение из закрытого потока.

Формат взломов

В первой строке выведите \(n\) (\(1 \le n \le 10^4\)). Во второй строке выведите перестановку из \(n\) чисел \(p_1, p_2, \ldots, p_n\).

E. Егор в республике Дагестан

графы дп жадные алгоритмы Конструктив кратчайшие пути поиск в глубину и подобное *2500

Егор — известный российский певец, рэпер, актёр и блогер, и наконец-то он решил дать концерт в солнечной республике Дагестан.

В республике есть \(n\) городов, некоторые пары которых соединены \(m\) односторонними дорогами без дополнительных условий. Иными словами, дорожная сеть Дагестана представляет собой произвольный ориентированный граф. Егор собирается прилететь в город \(1\), проехать из него по дорогам вдоль некоторого пути до города \(n\), дать в нём концерт и улететь.

Как и у любого артиста, у Егора есть множество недоброжелателей и слишком назойливых фанатов, поэтому ездить Егор и его команда будут только по безопасным дорогам. В Дагестане есть два типа дорог, чёрные и белые: по чёрным можно безопасно проехать только ночью, а по белым — только утром. Перед началом поездки менеджер Егора составляет расписание: он выбирает для каждого города его тип, чёрный или белый, и если команда посещает какой-то город, то уехать из него она сможет только по одной из дорог соответствующего типа. После определения расписания Егор выбирает любой маршрут из города \(1\) в город \(n\), причём из соображений безопасности этот путь должен быть кратчайшим. Менеджер Егора очень любит Дагестан и хочет задержаться здесь подольше, поэтому он попросил Вас составить такое расписание, чтобы из города \(1\) в город \(n\) не существовало пути вообще, или кратчайший путь был максимально возможной длины.

Путём является один город или последовательность дорог такая что начало каждой дороги в последовательности (кроме первой) является концом предыдущей. Егор может перемещаться вдоль пути, только если все его дороги безопасны.

Длиной пути называется количество дорог в нём. Кратчайшим путём называется путь минимальной длины.

Входные данные

Первая строка содержит числа \(n\), \(m\) (\(1 \leq n \leq 500000\), \(0 \leq m \leq 500000\)) — количество городов и дорог, соответственно.

В \(i\)-й из следующих \(m\) строк даны три целых числа — \(u_i\), \(v_i\) и \(t_i\) (\(1 \leq u_i, v_i \leq n\), \(t_i \in \{0, 1\}\)) — номера городов, соединяемых дорогой, и тип дороги (\(0\) — ночная, \(1\) — утренняя).

Выходные данные

В первой строке выведите длину искомого пути (или \(-1\), если можно подобрать расписание так, чтобы пути из \(1\) в \(n\) не существовало).

Во второй строке выведите искомое расписание — строку из \(n\) целых чисел, где \(i\)-е число равно \(0\), если из \(i\)-го города можно уехать только по ночным дорогам, и \(1\), если только по утренним.

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере, если покрасить город \(1\) в белый цвет, кратчайший путь будет состоять из одной дороги, \(1 \rightarrow 3\). Иначе, независимо от цветов остальных городов кратчайший путь будет \(1 \rightarrow 2 \rightarrow 3\).

Во втором примере город \(3\) следует покрасить в чёрный цвет, а из города \(2\) существуют дороги обоих цветов в город \(4\). Обратите внимание: может существовать дорога, соединяющая город с самим собой.

A. Покраска круга

Конструктив *800

Вам даны три последовательности: \(a_1, a_2, \ldots, a_n\); \(b_1, b_2, \ldots, b_n\); \(c_1, c_2, \ldots, c_n\).

Для всех \(i\) выполняется \(a_i \neq b_i\), \(a_i \neq c_i\), \(b_i \neq c_i\).

Найдите последовательность \(p_1, p_2, \ldots, p_n\), которая удовлетворяет следующим условиям:

  • \(p_i \in \{a_i, b_i, c_i\}\);
  • \(p_i \neq p_{(i \mod n) + 1}\).

Другими словами, для всех позиций вы должны выбрать одно из трех возможных значений так, что никакие две соседние позиции не имеют одинаковое значение (мы рассматриваем позиции \(i,i+1\) как соседние для всех \(i<n\), и также позиции \(1\) и \(n\) являются соседними).

Можно доказать, что в данных ограничениях решение всегда существует. Вам не нужно ничего минимизировать/максимизировать, вам нужно просто найти любую подходящую последовательность.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 100\)): количество наборов входных данных.

В первой строке описания каждого набора входных данных находится единственное целое число \(n\) (\(3 \leq n \leq 100\)): количество элементов в данных последовательностях.

Во второй строке находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 100\)).

В третьей строке находится \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \leq b_i \leq 100\)).

В четвертой строке находится \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(1 \leq c_i \leq 100\)).

Гарантируется, что \(a_i \neq b_i\), \(a_i \neq c_i\), \(b_i \neq c_i\) для всех \(i\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(p_i \in \{a_i, b_i, c_i\}\), \(p_i \neq p_{i \mod n + 1}\)).

Если есть несколько возможных решений, выведите любое.

Примечание

В первом наборе входных данных \(p = [1, 2, 3]\).

Это правильный ответ, потому что:

  • \(p_1 = 1 = a_1\), \(p_2 = 2 = b_2\), \(p_3 = 3 = c_3\);
  • \(p_1 \neq p_2 \), \(p_2 \neq p_3 \), \(p_3 \neq p_1\).

Все возможные правильные ответы на этот набор входных данных: \([1, 2, 3]\), \([1, 3, 2]\), \([2, 1, 3]\), \([2, 3, 1]\), \([3, 1, 2]\), \([3, 2, 1]\).

Во втором наборе входных данных \(p = [1, 2, 1, 2]\).

В этой последовательности \(p_1 = a_1\), \(p_2 = a_2\), \(p_3 = a_3\), \(p_4 = a_4\). Также можно заметить, что никакие два соседние элемента этой последовательности не равны.

В третьем наборе входных данных \(p = [1, 3, 4, 3, 2, 4, 2]\).

В этой последовательности \(p_1 = a_1\), \(p_2 = a_2\), \(p_3 = b_3\), \(p_4 = b_4\), \(p_5 = b_5\), \(p_6 = c_6\), \(p_7 = c_7\). Также можно заметить, что никакие два соседние элемента этой последовательности не равны.

B. Суммы массивов

жадные алгоритмы Конструктив математика *1400

Вам дан неубывающий массив, состоящий из неотрицательных целых чисел \(a_1, a_2, \ldots, a_n\). Также вам дано положительное целое число \(k\).

Вы хотите найти \(m\) неубывающих массивов, состоящих из неотрицательных целых чисел \(b_1, b_2, \ldots, b_m\), таких что:

  • размер \(b_i\) равен \(n\) для всех \(1 \leq i \leq m\);
  • для всех \(1 \leq j \leq n\), \(a_j = b_{1, j} + b_{2, j} + \ldots + b_{m, j}\). Другими словами, массив \(a\) равен поэлементной сумме массивов \(b_i\);
  • количество различных элементов массива \(b_i\) не превосходит \(k\) для всех \(1 \leq i \leq m\).

Найдите минимальное возможное значение \(m\) или сообщите, что ни одного возможного значения \(m\) не существует.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 100\)): количество наборов входных данных.

В первой строке описания каждого набора входных данных находятся два целых числа \(n\), \(k\) (\(1 \leq n \leq 100\), \(1 \leq k \leq n\)).

Во второй строке находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_1 \leq a_2 \leq \ldots \leq a_n \leq 100\), \(a_n > 0\)).

Выходные данные

Для каждого набора входных данных выведите единственное целое число: минимальное возможное значение \(m\). Если таких \(m\) не существует, выведите \(-1\).

Примечание

В первом наборе входных данных не существует ни одного возможного значения \(m\), потому что все элементы всех массивов должны будут быть равными \(0\). Но в этом случае невозможно получить \(a_4 = 1\) как сумму нескольких нулей.

Во втором наборе входных данных мы можем взять \(b_1 = [3, 3, 3]\). \(1\) — это минимальное возможное значение \(m\).

В третьем наборе входных данных мы можем взять \(b_1 = [0, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2]\) и \(b_2 = [0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2]\). Легко заметить, что \(a_i = b_{1, i} + b_{2, i}\) для всех \(i\) и количество различных элементов в каждом из массивов \(b_1\) и \(b_2\) равно \(3\) (что не превосходит \(3\)). Можно доказать, что \(2\) — это минимальное возможное значение \(m\).

F. Два различных

Конструктив разделяй и властвуй *2300

Вам дано целое число \(n\).

Вы должны найти список пар \((x_1, y_1)\), \((x_2, y_2)\), ..., \((x_q, y_q)\) (\(1 \leq x_i, y_i \leq n\)) который удовлетворяет следующему условию.

Рассмотрим некоторую функцию \(f: \mathbb{N} \times \mathbb{N} \to \mathbb{N}\) (мы определяем \(\mathbb{N}\) как множество положительных целых чисел). Другими словами, \(f\) это функция, возвращающая положительное целое число по паре положительных целых чисел.

Давайте рассмотрим массив \(a_1, a_2, \ldots, a_n\), где изначально \(a_i = i\).

Вы сделаете \(q\) операций, в \(i\)-й из них вы сделаете:

  1. присвоите \(t = f(a_{x_i}, a_{y_i})\) (\(t\) это временная переменная, она используется только для следующих двух присвоений);
  2. присвоите \(a_{x_i} = t\);
  3. присвоите \(a_{y_i} = t\).

Другими словами, вам нужно одновременно заменить \(a_{x_i}\) и \(a_{y_i}\) на \(f(a_{x_i}, a_{y_i})\). Обратите внимание, что в течение процесса значение \(f(p, q)\) всегда одинаково для заданных положительных целых чисел \(p\) и \(q\).

В конце должно быть не больше двух различных чисел в массиве \(a\).

Это должно быть выполнено для любой функции \(f\).

Найдите любой возможный список пар. Количество пар должно не превосходить \(5 \cdot 10^5\).

Входные данные

В единственной строке находится единственное целое число \(n\) (\(1 \leq n \leq 15\,000\)).

Выходные данные

В первой строке выведите \(q\) (\(0 \leq q \leq 5 \cdot 10^5\)) — количество пар.

В каждой из следующих \(q\) строк выведите по два целых числа. В \(i\)-й строке выведите \(x_i\), \(y_i\) (\(1 \leq x_i, y_i \leq n\)).

Условие, описанное в тексте условия задачи, должно быть удовлетворено.

Если есть несколько возможных ответов, выведите любой.

Примечание

В первом тесте после применения единственной операции массив \(a\) будет \([f(a_1, a_2), f(a_1, a_2), a_3]\). В нем всегда не больше двух различных чисел.

Во втором тесте после применения двух операций массив \(a\) будет \([f(a_1, a_2), f(a_1, a_2), f(a_3, a_4), f(a_3, a_4)]\). В нем всегда не больше двух различных чисел.

C. Очередь

жадные алгоритмы Конструктив сортировки *1800

В Главном Банке Берляндии в очереди в кассу стоят n человек, каждый знает свой рост hi, а также росты остальных людей в очереди. Каждый из них мысленно запомнил число ai — сколько людей, которые выше ростом и стоят в очереди раньше.

Проходит некоторое время, и кассир уходит на обеденный перерыв, а люди из очереди рассаживаются на стулья в зале ожидания в произвольном порядке.

Когда обеденный перерыв закончился, то выясняется, что никто из них не помнит точного порядка людей в очереди, но каждый помнит свое число ai.

Ваша задача — если это возможно, восстановить порядок людей в очереди. Может быть, что допустимых порядков несколько, но вам требуется найти любой из них. Также требуется вывести возможный набор чисел hi — росты людей в очереди, так чтобы числа ai были корректны.

Входные данные

Первая строка входных данных содержит целое число n — количество людей в очереди (1 ≤ n ≤ 3000). Далее в n строках по одному на строке даны описания людей в формате «namei ai», где namei — непустая строка из строчных латинских букв длиной не более 10 символов (имя i-ого человека), ai — целое число (0 ≤ ai ≤ n - 1), обозначающее количество людей, которые выше ростом и стоят в очереди раньше i-ого человека. Гарантируется, что все имена различны.

Выходные данные

Если не существует ни одного допустимого порядка людей в очереди, то выведите единственную строку, содержащую «-1» (без кавычек). В противном случае в n строках выведите людей в формате «namei hi», где hi — целое число от 1 до 109 (включительно), предполагаемый рост человека с именем namei. Людей выводите в порядке очереди от начала к концу. Числа hi не обязаны быть уникальными.

E. Большая чистка

графы дп Конструктив снм *2300

Дед Мороз со Снегурочкой после того, как раздали все подарки и исполнили все желания, вернулись в свою резиденцию и обнаружили, что она вся занесена снегом. Герои очень устали, и решили расчистить лишь дорожки между домиками. В резиденции n домиков, соединенных m дорожками. По дорожкам можно ходить в обоих направлениях.

Снегурочка предложила разделить работу: Дед Мороз будет чистить широкие дорожки, а она будет протаптывать узенькие. Для каждой дорожки герои определили, кто ее может чистить: либо Дед Мороз, либо Снегурочка. Для экономии усилий было решено расчистить дорожки так, чтобы выполнялись оба условия:

  • между любыми двумя домиками должен существовать ровно один простой путь по расчищенным дорожкам;
  • Дед Мороз должен расчистить столько же дорожек, сколько и Снегурочка.

И тут герои задумались: какие же дорожки им надо расчистить?

Входные данные

В первой строке входных данных записаны два целых положительных числа n и m (1 ≤ n ≤ 103, 1 ≤ m ≤ 105) — количество домиков и количество дорожек. Далее следует m строк, в каждой из которых задано описание одной дорожки: номера домиков, которые она соединяет, — x и y (1 ≤ x, y ≤ n), и кто ее собирается чистить («S» — Снегурочка, или «M» — Дед Мороз). По каждой дорожке можно ходить в обоих направлениях. Обратите внимание, что между двумя домиками может быть больше одной дорожки, и дорожка может вести из домика в него же.

Выходные данные

Выведите «-1» без кавычек, если невозможно выбрать дорожки, которые будут расчищены по заданным правилам. В противном случае выведите в первую строку количество расчищенных дорожек, а во вторую — номера этих дорожек (дорожки нумеруются с 1 в том порядке, в котором они заданы во входных данных). Номера дорожек разрешается выводить в любом порядке. Каждый номер следует вывести ровно один раз. Числа при выводе разделяйте пробелами.

Примечание

Путь называется простым, если все домики на пути попарно различны.

A. В поисках Саске

Конструктив математика *800

Наруто пробрался в логово Орочимару и пытается найти Саске. В логове Орочимару есть \(T\) комнат. Каждая дверь в комнату характеризуется количеством печатей \(n\) на ней и целочисленными силами печатей \(a_1\), \(a_2\), ... \(a_n\). Силы печатей \(a_i\) не равны нулю и не превосходят \(100\) по модулю, а \(n\) всегда четно.

Для того чтобы открыть комнату, Наруто необходимо подобрать такие \(n\) печатей с целочисленными силами \(b_1\), \(b_2\), ..., \(b_n\), чтобы \(a_{1} \cdot b_{1} + a_{2} \cdot b_{2} + ... + a_{n} \cdot b_{n} = 0\). Силы печатей Наруто \(b_i\) также должны быть ненулевыми (как и данные \(a_i\)) и не превосходить \(100\) по модулю. Необходимо подобрать печати для всех комнат в логове.

Входные данные

В первой строке задано число \(T\) (\(1 \leq T \leq 1000\)) — количество комнат в логове Орочимару. В следующих строках содержатся описания дверей.

В первой строке описания каждой двери содержится четное число \(n\) (\(2 \leq n \leq 100\)) — количество печатей на двери.

В следующей строке содержится последовательность целых ненулевых чисел \(a_1\), \(a_2\), ..., \(a_n\) через пробел (\(|a_{i}| \leq 100\), \(a_{i} \neq 0\)) — силы печатей.

Выходные данные

Для каждой двери на отдельной строке необходимо вывести последовательность ненулевых целых чисел \(b_1\), \(b_2\), ..., \(b_n\) (\(|b_{i}| \leq 100\), \(b_{i} \neq 0\)) через пробел — силы печатей, необходимые для открытия этой двери. Если есть несколько искомых последовательностей, выведите любую из них. Можно доказать, что ответ всегда существует.

Примечание

Для первой двери Наруто может использовать силы печатей \([-100, 1]\). Необходимое условие будет выполняться: \(1 \cdot (-100) + 100 \cdot 1 = 0\).

Для второй двери Наруто может использовать силы печатей \([1, 1, 1, -1]\). Необходимое условие будет выполняться: \(1 \cdot 1 + 2 \cdot 1 + 3 \cdot 1 + 6 \cdot (-1) = 0\).

D. XOR-пушка

битмаски Конструктив Перебор *2000

У Аркадия есть неубывающий массив натуральных чисел \(a_1, a_2, \ldots, a_n\). Вы завидуете ему и хотите уничтожить это свойство. У вас есть так называемая XOR-пушка, которую вы можете использовать один или несколько раз.

За один шаг вы можете выбрать два последовательных элемента в массиве, обозначим их за \(x\) и \(y\), удалить их из массива и на их место вставить число \(x \oplus y\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ. Обратите внимание, что длина массива уменьшается на один в результате этой операции. Вы не можете выполнить эту операцию, если длина массива стала единицей.

Например, если массив равен \([2, 5, 6, 8]\), то вы можете выбрать \(5\) и \(6\) и заменить их на \(5 \oplus 6 = 3\). Массив становится равен \([2, 3, 8]\).

Вы хотите, чтобы массив перестал быть неубывающим. Какое минимальное количество шагов вам для этого потребуется? Если массив остается неубывающим независимо от того, какие операции вы делаете, выведите \(-1\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 10^5\)) — начальную длину массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива. Гарантируется, что \(a_i \le a_{i + 1}\) для всех \(1 \le i < n\).

Выходные данные

Выведите одно целое число — минимальное необходимое число шагов. Если решения не существует, выведите \(-1\).

Примечание

В первом примере можно выбрать \(2\) и \(5\), и массив станет равным \([7, 6, 8]\).

Во втором примере можно получить только массивы \([1, 1]\), \([3, 3]\) и \([0]\), которые все являются неубывающими.

В третьем примере можно выбрать \(1\) и \(2\) и массив станет равным \([3, 4, 6, 20]\). Затем вы можете, например, выбрать \(3\) и \(4\) и массив станет равным \([7, 6, 20]\). Этот массив не является неубывающим.

E. Новая игра плюс!

жадные алгоритмы Конструктив математика *2200

Кролик играет в игру, в которой есть \(n\) боссов, пронумерованных от \(1\) до \(n\). Боссов можно побеждать в любом порядке. Каждого босса нужно победить ровно один раз. Также в игре присутствует параметр, называемый комбо-бонусом, изначально равный \(0\).

Когда игрок побеждает \(i\)-го босса, ко счету игрока добавляется текущее значение комбо-бонуса, а затем значение комбо-бонуса изменяется на величину \(c_i\). Обратите внимание, что величина \(c_i\) может быть отрицательной, что означает, что дальнейшие боссы будут давать меньше очков.

Кролик нашел в игре лазейку. В любой момент времени он может сбросить прохождение игры и начать новое. Это сбросит текущее значение комбо-бонуса в \(0\), но все побежденные боссы останутся побежденными. Кроме того, текущий счет тоже сохраняется и не сбрасывается в ноль после этой операции. Эта лазейка может быть использована не более \(k\) раз. Можно сбрасывать игру после победы над любым количеством боссов, в том числе перед или после всех, также можно сбрасывать игру несколько раз подряд, не побеждая ни одного босса между сбросами.

Помогите кролику определить максимально возможный счет, который он может получить, победив всех \(n\) боссов.

Входные данные

В первой строке содержатся два целых числа \(n\) и \(k\) (\(1 \leq n \leq 5 \cdot 10^5\), \(0 \leq k \leq 5 \cdot 10^5\)) — количество боссов и максимальное количество сбросов соответственно.

Вторая строка содержит \(n\) целых чисел \(c_1,c_2,\ldots,c_n\) (\(-10^6 \leq c_i \leq 10^6\)) — влияние на комбо-бонус каждого из \(n\) боссов.

Выходные данные

Выведите одно целое число — максимальный счет, который кролик может получить, победив всех \(n\) боссов (обратите внимание, это число может быть отрицательным).

Примечание

В первом тесте запрещено делать сбросы. Оптимальное решение будет таким.

  • Победить первого босса \((+0)\). Комбо-бонус становится равным \(1\).
  • Победить второго босса \((+1)\). Комбо-бонус становится равным \(2\).
  • Победить третьего босса \((+2)\). Комбо-бонус становится равным \(3\).

Поэтому ответ в первом примере равен \(0+1+2=3\).

Во втором примере можно показать, что оптимальное решение будет таким:

  • Победить пятого босса \((+0)\). Комбо-бонус становится равным \(5\).
  • Победить первого босса \((+5)\). Комбо-бонус становится равным \(4\).
  • Победить второго босса \((+4)\). Комбо-бонус становится равным \(2\).
  • Победить третьего босса \((+2)\). Комбо-бонус становится равным \(-1\).
  • Сбросить. Комбо-бонус становится равным \(0\).
  • Победить четвертого босса \((+0)\). Комбо-бонус становится равным \(-4\).

Поэтому ответ будет равен \(0+5+4+2+0=11\).

B. Приравнять их всех

жадные алгоритмы Конструктив математика *2000

Дан массив \(a\), состоящий из \(n\) положительных целых чисел, пронумерованных от \(1\) до \(n\). Вы можете выполнять с этим массивом следующую операцию не более \(3n\) раз:

  1. выбрать три целых числа \(i\), \(j\) и \(x\) (\(1 \le i, j \le n\); \(0 \le x \le 10^9\));
  2. присвоить \(a_i := a_i - x \cdot i\), \(a_j := a_j + x \cdot i\).

После каждой операции все элементы должны быть неотрицательными.

Можете ли вы задать такую последовательность из не более чем \(3n\) операций, после которой все элементы массива будут равны?

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Затем следует \(t\) наборов входных данных.

Первая строка набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^4\)) — длина массива. Вторая строка набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^5\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите ответ следующим образом:

  • если описанной в условии последовательности операций не существует, выведите \(-1\);
  • иначе выведите целое число \(k\) (\(0 \le k \le 3n\)) — количество операций, которые вы совершаете. Затем выведите \(k\) строк, \(m\)-я из которых должна содержать три целых числа \(i\), \(j\) и \(x\) (\(1 \le i, j \le n\); \(0 \le x \le 10^9\)) для \(m\)-й операции.

Если возможных последовательностей операций несколько, выведите любую из них. Обратите внимание, что минимизировать \(k\) не обязательно.

B. Лесенки

жадные алгоритмы Конструктив математика Перебор реализация *1200

Джет устала после уничтожения города и хочет отдохнуть. Она любит высоты, поэтому для отдыха ей надо забраться повыше, и для этого она решила делать лесенки.

Лесенка является клетчатой фигурой, состоящей из одинаковых квадратных клеточек. Если лесенка состоит из \(n\) ступенек, то это означает, что такая лесенка состоит из \(n\) столбиков, первый имеет высоту \(1\) клетку, второй имеет высоту \(2\) клетки, \(\ldots\), \(n\)-й имеет высоту \(n\) клеток. Нижние клетки всех столбиков должны находятся в одной строке.

Лесенка, имеющая \(n\) ступенек, называется красивой, если ее можно покрыть \(n\) непересекающимися квадратами. Все квадраты должны состоять целиком из клеточек лесенки.

Покрытая квадратами красивая лесенка с \(7\) ступеньками:

Скажите Джет, какое максимальное количество различных красивых лесенок она может построить, используя суммарно не больше \(x\) клеточек. Ни одна клеточка не может быть использована больше одного раза.

Входные данные

В первой строке входных данных содержится одно целое число \(t\) \((1 \le t \le 1000)\)  — количество наборов входных данных.

Единственная строка описания каждого набора входных данных содержит единственное целое число \(x\) \((1 \le x \le 10^{18})\)  — количество клеточек для постройки лесенок.

Выходные данные

Для каждого набора входных данных выведите единственное число  — максимальное количество различных красивых лесенок, которые можно построить, используя суммарно не больше \(x\) клеточек.

Примечание

В первом наборе входных данных можно построить только одну лесенку, состоящую из \(1\) ступеньки. Она является красивой. Поэтому ответ равен \(1\).

Во втором наборе входных данных можно построить две различные красивые лесенки: из \(1\) ступеньки и из \(3\) ступенек. На это уйдёт \(7\) клеточек. В таком случае останется еще одна клеточка, но из нее уже нельзя сделать ни одной красивой лесенки такого размера, которого еще нет. Поэтому ответ равен \(2\).

В третьем наборе входных данных можно построить только одну из двух красивых лесенок: с \(1\) ступенькой или с \(3\) ступеньками. В первом случае останется \(5\) клеточек, из которых можно сделать только лесенку из \(2\) ступенек. Она не является красивой, а Джет строит только красивые лесенки. Поэтому в данном случае ответ \(1\). Если же Джет построит лесенку с \(3\) ступеньками, то у неё не останется ни одной клеточки. В этом случае ответ тоже \(1\).

D1. День рождения Сажи (простая версия)

Бинарный поиск жадные алгоритмы Конструктив сортировки *1000

Это простая версия задачи. Различие между версиями заключается в том, что в простой версии все \(a_i\) различны. Вы можете делать взломы, только если обе версии задачи сданы.

Сегодня у Сажи день рождения, и она пойдёт в магазин покупать ледяные сферы. Все \(n\) ледяных сфер стоят в магазине в ряд на одной полке и пронумерованы целыми числами от \(1\) до \(n\) слева направо. У каждой ледяной сферы есть цена — положительное целое число. В этой версии задачи цены всех сфер различны.

Ледяная сфера считается дешёвой, если она стоит строго меньше, чем две соседние: ближайшая справа и ближайшая слева. Крайняя слева и крайняя справа ледяные сферы не считаются дешёвыми. Сажа сначала выберет все дешёвые ледяные сферы, а потом купит только их.

Вы можете прийти в магазин до Сажи и переставить ледяные сферы так, как хотите. Узнайте, какое максимальное количество ледяных сфер Сажа может купить, и покажите, как для этого нужно переставить сферы.

Входные данные

В первой строке находится единственное целое число \(n\) \((1 \le n \le 10^5)\) — количество ледяных сфер в магазине.

Во второй строке находится \(n\) различных целых чисел \(a_1, a_2, \dots, a_n\) \((1 \le a_i \le 10^9)\) — цены ледяных сфер.

Выходные данные

В первой строке выведите максимальное количество ледяных сфер, которое может купить Сажа.

Во второй строке выведите цены ледяных сфер в том порядке, в котором их нужно поставить на полку. Если возможных ответов несколько, выведите любой из них.

Примечание

Если расставить сферы, как \((3, 1, 4, 2, 5)\), то Сажа купит сферы за \(1\) и за \(2\), так как они будут дешёвыми. При этом расставить ледяные сферы так, чтобы Сажа купила \(3\) сферы, невозможно.

D2. День рождения Сажи (сложная версия)

Бинарный поиск жадные алгоритмы Конструктив Перебор сортировки *1500

Это сложная версия задачи. Различие между версиями заключается в том, что в простой версии все \(a_i\) различны. Вы можете делать взломы, только если обе версии задачи сданы.

Сегодня у Сажи день рождения, и она пойдёт в магазин покупать ледяные сферы. Все \(n\) ледяных сфер стоят в магазине в ряд на одной полке и пронумерованы целыми числами от \(1\) до \(n\) слева направо. У каждой ледяной сферы есть цена — положительное целое число. Некоторые сферы могут иметь одинаковую цену.

Ледяная сфера считается дешёвой, если она стоит строго меньше, чем две соседние: ближайшая справа и ближайшая слева. Крайняя слева и крайняя справа ледяные сферы не считаются дешёвыми. Сажа сначала выберет все дешёвые ледяные сферы, а потом купит только их.

Вы можете прийти в магазин до Сажи и переставить ледяные сферы так, как хотите. Узнайте, какое максимальное количество ледяных сфер Сажа может купить, и покажите, как для этого переставить сферы.

Входные данные

В первой строке находится единственное целое число \(n\) \((1 \le n \le 10^5)\) — количество ледяных сфер в магазине.

Во второй строке находится \(n\) целых чисел \(a_1, a_2, \dots, a_n\) \((1 \le a_i \le 10^9)\) — цены ледяных сфер.

Выходные данные

В первой строке выведите максимальное количество ледяных сфер, которое может купить Сажа.

Во второй строке выведите цены ледяных сфер в том порядке, в котором их нужно поставить на полку. Если возможных ответов несколько, выведите любой из них.

Примечание

В тесте из условия невозможно расставить ледяные сферы так, чтобы Сажа купила \(4\) из них. Если расставить сферы в порядке \((3, 1, 4, 2, 4, 2, 5)\), то Сажа купит одну сферу за \(1\) и две сферы по \(2\).

E. Расшифровка

Конструктив математика реализация теория чисел *2100

Агент по имени Кефир расшифровывает послание, которое содержит только одно составное число \(n\).

Сначала Кефир выписывает по кругу все делители числа \(n\), большие \(1\). Он может задать любой изначальный порядок чисел в кругу.

После этого за одно действие Кефир может выбрать любые два соседние числа в кругу и вставить между ними их наименьшее общее кратное. Он может выполнять такое действие сколько угодно раз.

Послание расшифровано, если любые два соседние числа в кругу не взаимно просты. Заметим, что при заданных ограничениях послание всегда можно расшифровать.

Найдите, за какое минимальное количество действий послание можно расшифровать и как для этого нужно изначально расставить по кругу делители.

Входные данные

В первой строке находится единственное целое число \(t\) \((1 \le t \le 100)\) — количество наборов входных данных. Следующие \(t\) строк содержат описания наборов входных данных.

В единственной строке каждого набора входных данных находится единственное целое составное число \(n\) \((4 \le n \le 10^9)\)  — число из послания.

Гарантируется, что суммарное количество делителей \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в первой строке выведите изначальный порядок делителей, больших \(1\), в кругу. Во второй строке выведите минимальное количество действий, необходимых для того, чтобы расшифровать послание.

Если существует несколько возможных порядков с минимальным количеством действий, выведите любой.

Примечание

В первом наборе входных данных у числа \(6\) три делителя, больших \(1\): \(2, 3, 6\). В любом случае числа \(2\) и \(3\) будут стоять рядом в кругу, и поэтому между ними необходимо вставить их наименьшее общее кратное. После этого в кругу будут числа \(2, 6, 3, 6\), и каждые два соседних числа будут не взаимно просты.

Во втором наборе входных данных у числа \(4\) два делителя, больших \(1\): \(2, 4\), и они не взаимно просты, поэтому вставлять наименьшее общее кратное не нужно.

В третьем наборе входных данных все делители \(30\), большие \(1\), можно расставить в кругу так, чтобы любые два соседние числа не были взаимно просты.

B. Помогите воеводе

жадные алгоритмы Конструктив реализация *1800

Жил да был в Тридевятом царстве Никита Добрынич — главный царский воевода. Он всегда гордился своими воинами и любил приглашать Царя на строевые учения, на которых демонстрировались боевые приемы и тактики возглавляемого им отряда дружины. Долго ли — коротко ли, но однажды поссорился Никита Добрынич с Бабой Ягой (ходили слухи, что ссора произошла после того, как воевода невысоко отозвался о боевых навыках избушки на курьих ножках, чем очень расстроил Бабу Ягу).

Результатом ссоры стало довольно странное проклятье, наложенное Бабой Ягой на воеводу. Звучало оно очень умно и довольно безобидно: «Да будут все солдаты, квадрат расстояния между которыми на учениях окажется равным 5, враждовать друг с другом!»

Строевые учения проходят на прямоугольной площадке n × m, разбитой на nm квадратных участков размерами 1 × 1 для каждого солдата. Таким образом, квадрат расстояния между солдатами на участках (x1, y1) и (x2, y2) в точности равен (x1 - x2)2 + (y1 - y2)2, и теперь в учениях не всегда могут принимать участие сразу nm солдат, как это было до проклятия Бабы Яги. Если, конечно, воевода не хочет, чтобы солдаты побили друг друга, или того хуже... Например, если поставить дружинника в квадрат (2, 2), то дружинников в квадраты (1, 4), (3, 4), (4, 1) и (4, 3) поставить уже нельзя — между любым из них и дружинником в квадрате (2, 2) начнет действовать проклятье Бабы Яги.

Ваша задача — помочь воеводе, и по заданным размерам площадки для строевых учений сообщить, какое максимальное количество воинов можно одновременно собрать на этой площадке, чтобы ни на каких двух из них не начало действовать проклятье Бабы Яги.

Входные данные

В единственной строке через пробел записаны целые числа n и m (1 ≤ n, m ≤ 1000) — размеры площадки для строевых учений.

Выходные данные

Выведите искомое максимальное количество дружинников.

Примечание

В первом тесте из примера расположить 4-х дружинников на площадке размером 2 × 4 можно следующим образом (места расположения дружинников на схеме обозначены серыми кругами):

Во втором тесте из примера расположить 6-х дружинников на площадке размером 3 × 4 можно следующим образом:

C1. Армия покемонов (простая версия)

дп жадные алгоритмы Конструктив *1300

Это простая версия задачи. Различия между версиями заключаются в том, что в простой версии нет запросов обмена. Вы можете делать взломы, только если обе версии задачи сданы.

Пикачу — милый и дружелюбный покемон, живущий в стае диких пикачу.

Однако недавно стало известно, что команда R хочет украсть всех этих покемонов! Тренер покемонов Андрей решил помочь Пикачу собрать армию для борьбы с командой R.

В первую очередь Андрей посчитал всех покемонов: их оказалось ровно \(n\) штук. Затем он установил силу каждого покемона, и так получилось, что \(i\)-й покемон имеет силу, равную \(a_i\), и силы всех покемонов различны.

В качестве армии Андрей может выбрать любую непустую подпоследовательность покемонов. Иными словами, Андрей выбирает какой-то массив \(b\) из \(k\) индексов таких, что \(1 \le b_1 < b_2 < \dots < b_k \le n\), и его армия будет состоять из покемонов с силами \(a_{b_1}, a_{b_2}, \dots, a_{b_k}\).

Сила армии вычисляется как знакопеременная сумма элементов подпоследовательности, то есть \(a_{b_1} - a_{b_2} + a_{b_3} - a_{b_4} + \dots\).

Андрей экспериментирует с построением покемонов. Он \(q\) раз меняет двух покемонов местами, а именно, в \(i\)-й раз он менял местами покемонов с номерами \(l_i\) и \(r_i\).

Обратите внимание, в этой версии задачи \(q=0\).

Андрею надо знать: какую максимальную силу армии он мог получить при начальной расстановке покемонов, а также после каждого изменения строя?

Помогите Андрею и покемонам, иначе команде R удастся воплотить в жизнь свой коварный план!

Входные данные

Каждый тест содержит несколько наборов входных данных.

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

В первой строке каждого набора входных данных находятся два целых числа \(n\) и \(q\) (\(1 \le n \le 3 \cdot 10^5, q = 0\)) — количество покемонов и количество обменов соответственно.

Во второй строке находятся \(n\) различных целых положительных чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — силы покемонов.

\(i\)-я из следующих \(q\) строк содержит два целых положительных числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — номера обмениваемых покемонов в \(i\)-й операции.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\), а также сумма \(q\) по всем тестовым случаям не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q+1\) число — максимально возможную силу армии до изменений и после каждого изменения.

Примечание

В третьем наборе входных данных мы можем выбрать армию следующим образом: [1 2 5 4 3 6 7], при этом ее итоговая сила будет \(5−3+7=9\).

B. Кирпичи в стене

Конструктив реализация *1100

Пинк Флойд устраивают розыгрыш Роджера Уотерса. Они знают, что ему не нравятся стены, он хочет иметь возможность свободно ходить, поэтому они запрещают ему выходить из своей комнаты, которую можно рассматривать как таблицу.

У Роджера Уотерса есть квадратная таблица размером \(n\times n\) и он хочет добраться из левого верхнего угла (\(1,1\)) своей таблицы в правый нижний угол (\(n,n\)). Уотерс может перемещаться от клетки к любой другой клетке, смежной с ней по стороне, и не может выходить за пределы таблицы. Также за исключением клеток (\(1,1\)) и (\(n,n\)) в каждой клетке записано значение \(0\) или \(1\).

Перед началом своего обхода он выберет либо \(0\), либо \(1\) и сможет переходить только по клеткам, значения в которых равны выбранной им цифре. Начальная и конечная клетки (\(1,1\)) и (\(n,n\))  — исключения из этого правила, он может проходить через них независимо от выбранной цифры. В клетке (\(1, 1\)) записана буква 'S', а в клетке (\(n, n\))  — буква 'F'.

Например, в первом примере теста он может перейти от (\(1,1\)) к (\(n,n\)), используя нули на этом пути: (\(1, 1\)), (\(2, 1\)), (\(2, 2\)), (\(2, 3\)), (\(3, 3\)), (\(3, 4\)), (\(4, 4\))

Остальная часть группы (Пинк Флойд) хочет, чтобы Уотерс не смог совершить свой обход, поэтому пока он не видит, они инвертируют максимум две клетки в таблице (из \(0\) на \(1\) или наоборот). Они боятся, что могут не успеть и просят вашей помощи в выборе клеток. Заметьте, что вы не можете инвертировать клетки \((1, 1)\) и \((n, n)\).

Можно показать, что для данных ограничений решение всегда существует.

Также обратите внимание, что Уотерс выберет свою цифру обхода после того, как группа изменит свою таблицу, поэтому он не должен быть в состоянии достичь (\(n,n\)) независимо от того, какую цифру он выберет.

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указано количество наборов входных данных \(t\) (\(1 \le t \le 50\)). Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 200\)).

Следующие \(n\) строк каждого набора входных данных содержат двоичную таблицу, в клетке (\(1, 1\)) написано «S», а в (\(n, n\)) — «F».

Сумма значений \(n\) по всем наборам входных данных не превышает \(200\).

Выходные данные

Для каждого набора входных данных выведите в первой строке целое \(c\) (\(0 \le c \le 2\))  — количество клеток, которые вы переворачиваете.

В \(i\)-й из следующих \(c\) строк выведите координаты \(i\)-й инвертированной ячейки. Нельзя перевернуть одну и ту же ячейку дважды. Заметьте, что вы не можете инвертировать клетки \((1, 1)\) и \((n, n)\).

Примечание

Для первого набора входных данных, после инвертирования клетки, мы получаем следующую таблицу:


S010
0001
1001
111F

C. Палиндромайзер

Конструктив Строки *1400

Ринго нашел строку \(s\) длиной \(n\) в своей желтой субмарине. Строка содержит только строчные буквы английского алфавита. Поскольку Ринго и его друзья любят палиндромы, он хотел бы превратить строку \(s\) в палиндром, применяя к ней два типа операций.

Первая операция позволяет ему выбрать \(i\) (\(2 \le i \le n-1\)) и приписать перевернутую подстроку \(s_2s_3 \ldots s_i\) (всего \(i - 1\) символ) в начало строки \(s\).

Вторая операция позволяет выбрать \(i\) (\(2 \le i \le n-1\)) и приписать перевернутую подстроку \(s_i s_{i + 1}\ldots s_{n - 1}\) (всего \(n - i\) символов) в конец \(s\).

Обратите внимание, что символы строки в этой нумеруются с \(1\).

Например, предположим, что \(s=\)abcdef. Если он выполнит первую операцию с \(i=3\), то добавит cb в начало \(s\), и результат будет cbabcdef. Выполнение второй операции над полученной строкой с \(i=5\) даст cbabcdefedc.

Ваша задача — помочь Ринго сделать строку палиндромом, применяя любые из двух операций (в сумме) не более \(30\) раз. Также, длина полученного палиндрома должна не превышать \(10^6\).

Гарантируется, что для данных ограничений решение существует. Также обратите внимание, что не нужно минимизировать ни количество применяемых операций, ни длину результирующей строки, но они должны вписываться в ограничения.

Входные данные

Единственная строка содержит строку \(S\) (\(3 \le |s| \le 10^5\)) из строчных букв английского алфавита.

Выходные данные

Первая строка должна содержать \(k\) (\(0\le k \le 30\)) — количество выполненных операций.

Каждая из следующих \(k\) строк должна описывать операцию в виде L i или R i. \(L\) обозначает первую операцию, \(R\) — вторую, \(i\) — выбранный индекс.

Длина полученного палиндрома должна не превышать \(10^6\).

Примечание

Для первого примера выполняются следующие операции:

abac \(\to\) abacab \(\to\) abacaba

Для второго примера выполняются следующие операции: acccc \(\to\) cccacccc \(\to\) ccccacccc.

Третий пример уже является палиндромом, поэтому никаких операций не требуется.

D. Шестиугольники

жадные алгоритмы Конструктив кратчайшие пути математика Перебор реализация *1900

Линдси Букингем сказала Стиви Никс «идти своим путем». Никс сейчас грустит и хочет уйти как можно быстрее, но она живет в двухмерном шестиугольном мире.

Рассмотрим шестиугольное покрытие плоскости, как на картинке ниже.

Ники хочет добраться от ячейки с координатами \((0, 0)\) к определенной ячейке, заданной координатами. Она может перейти от шестиугольника к любому из шести своих соседей, но у каждого из переходов есть своя стоимость. Стоимость зависит от направления, в котором вы путешествуете. Таким образом, переход от \((0, 0)\) до \((1, 1)\) будет стоить ровно столько же, как и переход от \((-2, -1)\) до \((-1, 0)\). Стоимости приведены во входных данных в порядке \(c_1\), \(c_2\), \(c_3\), \(c_4\), \(c_5\), \(c_6\), как на рисунке ниже.

Выведите наименьшую стоимость пути от начала координат, который имеет координаты \((0, 0)\), к данной ячейке.

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указано количество наборов входных данных \(t\) (\(1 \le t \le 10^{4}\)). Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит два целых числа \(x\) и \(y\) (\(-10^{9} \le x, y \le 10^{9}\)) — координаты конечного шестиугольника.

Вторая строка каждого набора входных данных содержит шесть целых чисел \(c_1\), \(c_2\), \(c_3\), \(c_4\), \(c_5\), \(c_6\) (\(1 \le c_1, c_2, c_3, c_4, c_5, c_6 \le 10^{9}\)) — стоимости совершения одного шага в определенном направлении (см. рисунок выше).

Выходные данные

Для каждого набора входных данных выведите наименьшую стоимость пути от начала координат до данной клетки.

Примечание

На рисунке ниже показано решение для первого примера. Стоимость \(18\) достигается путем трехкратного взятия \(c_3\) и \(c_2\) один раз, что составляет \(5+5+5+3=18\).

J. Bubble Cup hypothesis

битмаски дп Конструктив математика *2400

The Bubble Cup hypothesis stood unsolved for \(130\) years. Who ever proves the hypothesis will be regarded as one of the greatest mathematicians of our time! A famous mathematician Jerry Mao managed to reduce the hypothesis to this problem:

Given a number \(m\), how many polynomials \(P\) with coefficients in set \({\{0,1,2,3,4,5,6,7\}}\) have: \(P(2)=m\)?

Help Jerry Mao solve the long standing problem!

Input

The first line contains a single integer \(t\) \((1 \leq t \leq 5\cdot 10^5)\) - number of test cases.

On next line there are \(t\) numbers, \(m_i\) \((1 \leq m_i \leq 10^{18})\) - meaning that in case \(i\) you should solve for number \(m_i\).

Output

For each test case \(i\), print the answer on separate lines: number of polynomials \(P\) as described in statement such that \(P(2)=m_i\), modulo \(10^9 + 7\).

Note

In first case, for \(m=2\), polynomials that satisfy the constraint are \(x\) and \(2\).

In second case, for \(m=4\), polynomials that satisfy the constraint are \(x^2\), \(x + 2\), \(2x\) and \(4\).

H. Huge Boxes of Animal Toys

Конструктив *1300

Chaneka has a hobby of playing with animal toys. Every toy has a different fun value, a real number. Chaneka has four boxes to store the toys with specification:

  • The first box stores toys with fun values in range of \((-\infty,-1]\).
  • The second box stores toys with fun values in range of \((-1, 0)\).
  • The third box stores toys with fun values in range of \((0, 1)\).
  • The fourth box stores toys with fun value in range of \([1, \infty)\).

Chaneka has \(A\), \(B\), \(C\), \(D\) toys in the first, second, third, and fourth box, respectively. One day she decides that she only wants one toy, a super toy. So she begins to create this super toy by sewing all the toys she has.

While the number of toys Chaneka has is more than 1, she takes two different toys randomly and then sews them together, creating a new toy. The fun value of this new toy is equal to the multiplication of fun values of the sewn toys. She then puts this new toy in the appropriate box. She repeats this process until she only has one toy. This last toy is the super toy, and the box that stores this toy is the special box.

As an observer, you only know the number of toys in each box initially but do not know their fun values. You also don't see the sequence of Chaneka's sewing. Determine which boxes can be the special box after Chaneka found her super toy.

Input

The first line has an integer \(T\) \((1 \le T \le 5 \cdot 10^4)\), the number of test cases.

Every case contains a line with four space-separated integers \(A\) \(B\) \(C\) \(D\) \((0 \le A, B, C, D \le 10^6, A + B + C + D > 0)\), which denotes the number of toys in the first, second, third, and fourth box, respectively.

Output

For each case, print four space-separated strings. Each string represents the possibility that the first, second, third, and fourth box can be the special box from left to right.

For each box, print "Ya" (Without quotes, Indonesian for yes) if that box can be the special box. Print "Tidak" (Without quotes, Indonesian for No) otherwise.

Note

For the first case, here is a scenario where the first box is the special box:

  • The first box had toys with fun values \(\{-3\}\).
  • The second box had toys with fun values \(\{ -0.5, -0.5 \}\)
  • The fourth box had toys with fun values \(\{ 3 \}\)

The sewing sequence:

  1. Chaneka sews the toy with fun \(-0.5\) and \(-0.5\) to a toy with fun \(0.25\) and then put it in the third box.
  2. Chaneka sews the toy with fun \(-3\) and \(0.25\) to a toy with fun \(-0.75\) and then put it in the second box.
  3. Chaneka sews the toy with fun \(-0.75\) and \(3\) to a toy with fun \(-1.25\) and then put it in the first box, which then became the special box.

Here is a scenario where the second box ends up being the special box:

  • The first box had toys with fun values \(\{-3\}\)
  • The second box had toys with fun values \(\{ -0.33, -0.25 \}\).
  • The fourth box had toys with fun values \(\{ 3 \}\).

The sewing sequence:

  1. Chaneka sews the toy with fun \(-3\) and \(-0.33\) to a toy with fun \(0.99\) and then put it in the third box.
  2. Chaneka sews the toy with fun \(0.99\) and \(3\) to a toy with fun \(2.97\) and then put in it the fourth box.
  3. Chaneka sews the toy with fun \(2.97\) and \(-0.25\) to a toy with fun \(-0.7425\) and then put it in the second box, which then became the special box.
There is only one toy for the second case, so Chaneka does not have to sew anything because that toy, by definition, is the super toy.

C. Увеличение и копирование

Бинарный поиск Конструктив математика *1100

Изначально вам дан массив \(a\), состоящий из одного элемента \(1\) (\(a = [1]\)).

За один ход вы можете совершить одно из следующих действий:

  • Увеличить какой-то (единственный) элемент \(a\) на \(1\) (выбрать какое-то \(i\) от \(1\) до текущей длины \(a\) и увеличить \(a_i\) на единицу);
  • Дописать копию какого-то (единственного) элемента \(a\) в конец массива (выбрать какое-то \(i\) от \(1\) до текущей длины \(a\) и добавить \(a_i\) в конец массива).

Например, рассмотрим последовательность из пяти ходов:

  1. Вы берете первый элемент \(a_1\), дописываете его копию в конец массива и получаете \(a = [1, 1]\).
  2. Вы берете первый элемент \(a_1\), увеличиваете его на \(1\) и получаете \(a = [2, 1]\).
  3. Вы берете второй элемент \(a_2\), дописываете его копию в конец массива и получаете \(a = [2, 1, 1]\).
  4. Вы берете первый элемент \(a_1\), дописываете его копию в конец массива и получаете \(a = [2, 1, 1, 2]\).
  5. Вы берете четвертый элемент \(a_4\), увеличиваете его на \(1\) и получаете \(a = [2, 1, 1, 3]\).

Ваша задача — найти минимальное количество ходов, необходимое для того, чтобы получить массив с суммой хотя бы \(n\).

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Единственная строка набора тестовых данных содержит одно целое число \(n\) (\(1 \le n \le 10^9\)) — нижняя граница на сумму массива.

Выходные данные

Выведите ответ на каждый набор тестовых данных: минимальное количество ходов, необходимое для того, чтобы получить массив с суммой хотя бы \(n\).

D. Ненулевые отрезки

жадные алгоритмы Конструктив сортировки Структуры данных *1500

У Коли есть массив целых чисел \(a_1, a_2, \dots, a_n\). Числа в массиве могут быть и положительными, и отрицательными, но так как Коля не любит число \(0\), то таких чисел в его массиве нет.

Коле не нравится, что сумма элементов на некоторых подотрезках его массива может быть равна \(0\). Под подотрезком массива следует понимать некоторую непустую последовательность подряд идущих элементов массива.

Вы должны помочь Коле и сделать так, чтобы в его массиве не было подотрезков с суммой элементов равной \(0\). Для этого вы можете вставлять в его массив произвольные целые числа между любыми соседними элементами массива (числа могут быть любые: положительные, отрицательные, \(0\), любые по абсолютной величине, даже не представимые в стандартных типах данных во многих языках программирования).

Определите минимальное количество произвольных целых чисел, которые нужно добавить в массив Коли таким образом, чтобы после этого в массиве не было подотрезков с суммой элементов равной \(0\).

Входные данные

В первой строке следует целое число \(n\) (\(2 \le n \le 200\,000\)) — количество элементов в массиве Коли.

Во второй строке следует \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^{9} \le a_i \le 10^{9}, a_i \neq 0\)) — описание массива Коли.

Выходные данные

Выведите минимальное количество произвольных целых чисел, которые нужно добавить в массив Коли таким образом, чтобы после этого в массиве не было подотрезков с суммой элементов равной \(0\).

Примечание

В первом примере есть один подотрезок, сумма элементов которого равна \(0\). Он начинается со второго элемента и заканчивается в четвертом элементе. Достаточно добавить один элемент, чтобы в массиве не было подотрезков с суммой элементов равной нулю. Например, можно добавить число \(1\) между вторым и третьим элементами массива.

Во втором примере изначально нет подотрезков с суммой элементов равной \(0\), поэтому никаких чисел в массив добавлять не нужно.

E. Камень, ножницы, бумага

жадные алгоритмы Конструктив математика Перебор Потоки *1800

Аня и Боря решили сыграть в игру «Камень, ножницы, бумага».

Игра состоит из раундов, каждый из раундов проводится независимо от остальных. В каждом раунде оба игрока одновременно показывают один из трех предметов: камень, ножницы или бумагу. При этом, если оба игрока показали одинаковые предметы, то в раунде объявляется ничья. В противном случае, действуют следующие правила:

  • если один игрок показал камень, а другой ножницы, то игрок, показавший камень, объявляется победителем раунда, а другой игрок — проигравшим;
  • если один игрок показал ножницы, а другой бумагу, то игрок, показавший ножницы, объявляется победителем раунда, а другой игрок — проигравшим;
  • если один игрок показал бумагу, а другой камень, то игрок, показавший бумагу, объявляется победителем раунда, а другой игрок — проигравшим.

Аня и Боря решили, что они сыграют ровно \(n\) раундов описанной игры. Аня решила, что она \(a_1\) раз покажет камень, \(a_2\) раз покажет ножницы и \(a_3\) раз покажет бумагу. Боря решил, что он \(b_1\) раз покажет камень, \(b_2\) раз покажет ножницы и \(b_3\) раз покажет бумагу. При этом ни Аня, ни Боря еще не выбрали последовательность, в которой будут показывать предметы. Гарантируется, что \(a_1 + a_2 + a_3 = n\) и \(b_1 + b_2 + b_3 = n\).

Перед вами стоит задача определить два числа:

  1. минимальное количество раундов, которое может выиграть Аня;
  2. максимальное количество раундов, которое может выиграть Аня.
Входные данные

В первой строке следует целое число \(n\) (\(1 \le n \le 10^{9}\)) — количество раундов.

Во второй строке следуют три целых числа \(a_1, a_2, a_3\) (\(0 \le a_i \le n\)) — количество раз, которое Аня покажет камень, ножницы и бумагу, соответственно. Гарантируется, что \(a_1 + a_2 + a_3 = n\).

В третьей строке следуют три целых числа \(b_1, b_2, b_3\) (\(0 \le b_j \le n\)) — количество раз, которое Боря покажет камень, ножницы и бумагу, соответственно. Гарантируется, что \(b_1 + b_2 + b_3 = n\).

Выходные данные

Выведите два целых числа — минимальное и максимальное количество раундов, которое может выиграть Аня.

Примечание

В первом примере Аня может не выиграть ни одного раунда, если покажет, например, сначала ножницы, а потом бумагу, а Боря покажет камень, а потом ножницы. В лучшем случае Аня выиграет один раунд, если, например, сначала покажет бумагу, а потом ножницы, а Боря покажет камень, а потом ножницы.

Во втором примере Аня может не выиграть ни одного раунда, если, например, Боря в каждом раунде будет показывать те же предметы, что и Аня.

В третьем примере Аня всегда показывает бумагу, а Боря всегда показывает камень, поэтому Аня в любом случае выиграет все три раунда.

D. Перетасовка колоды

Конструктив реализация *2000

Вам дается колода из \(n\) карт, пронумерованных от \(1\) до \(n\) (в колоде они лежат не обязательно в таком порядке). Вы должны отсортировать колоду, повторив следующую операцию несколько раз.

  • Выберите \(2 \le k \le n\) и разделите колоду на \(k\) непустых последовательных частей \(D_1, D_2,\dots, D_k\) (\(D_1\) содержит первые \(|D_1|\) карт колоды, \(D_2\) содержит следующие \(|D_2|\) карт и т.д.). Затем поставьте эти части в обратном порядке, превратив колоду в \(D_k, D_{k-1}, \dots, D_2, D_1\) (так что первые \(|D_k|\) новой колоды  — \(D_k\), следующие \(|D_{k-1}|\)  — \(D_{k-1}\) и т.д.). Внутренний порядок каждой части \(D_i\) не меняется при операции.

Вы должны получить отсортированную колоду (т.е. колоду, где первая карта имеет номер \(1\), вторая  — \(2\) и т.д.), выполнив не более \(n\) операций. Можно доказать, что всегда можно отсортировать колоду, выполнив не более \(n\) операций.

Примеры операций: Ниже приведены три примера корректных операций (на трех колодах разного размера).

  • Если колода имеет вид [3 6 2 1 4 5 7] (\(3\)  — первая карта, \(7\)  — последняя), мы можем применить операцию с \(k=4\) и \(D_1=\)[3 6], \(D_2=\)[2 1 4], \(D_3=\)[5], \(D_4=\)[7]. Таким образом, колода становится [7 5 2 1 4 3 6].
  • Если колода имеет вид [3 1 2], то мы можем применить операцию с \(k=3\) и \(D_1=\)[3], \(D_2=\)[1], \(D_3=\)[2]. При этом колода становится [2 1 3].
  • Если колода имеет вид [5 1 2 4 3 6], то мы можем применить операцию с \(k=2\) и \(D_1=\)[5 1], \(D_2=\)[2 4 3 6]. При этом колода становится [2 4 3 6 5 1].
Входные данные

Первая строка ввода содержит одно целое число \(n\) (\(1\le n\le 52\))  — количество карт в колоде.

Вторая строка содержит \(n\) целых чисел \(c_1, c_2, \dots, c_n\) – карты в колоде. Первая карта  — \(c_1\), вторая  — \(c_2\), и так далее.

Гарантируется, что для всех \(i=1,\dots,n\) существует ровно одно \(j\in\{1,\dots,n\}\) такое, что \(c_j = i\).

Выходные данные

В первой строке выведите \(q\)  — число операций, которые вы выполните (должно выполняться \(0\le q\le n\)).

Затем выведите \(q\) строк, каждая из которых описывает одну операцию.

Чтобы описать операцию, выведите в одной строке \(k\)  — число частей, на которые вы собираетесь разделить колоду, а затем \(k\) чисел \(|D_1|, |D_2|, \dots , |D_k|\)  — размеры частей.

Должно выполняться \(2\le k\le n\), \(|D_i|\ge 1\) для всех \(i=1,\dots,k\), и \(|D_1|+|D_2|+\cdots + |D_k| = n\).

Можно доказать, что всегда можно отсортировать колоду, выполнив не более \(n\) операций. Если существует несколько способом отсортировать колоду, вы можете вывести любой из них.

Примечание

Пояснение первого примера: Изначальная колода: [3 1 2 4].

  • Первая операция разделяет колоду как [(3)(1 2)(4)], а затем преобразует ее в [4 1 2 3].
  • Вторая операция разделяет колоду как [(4) (1 2 3)], а затем преобразует ее в [1 2 3 4].
Пояснение второго примера: Изначально колода: [6 5 4 3 2 1].
  • Первая (и единственная) операция разделяет колоду как [(6)(5)(4)(3)(2)(1)], а затем преобразует ее в [1 2 3 4 5 6].

E. Ксумма

битмаски Конструктив математика матрицы теория чисел *2500

У вас есть доска и изначально на ней написано только одно нечетное число \(x\). Ваша цель  — написать на доске число \(1\).

Вы можете писать новые числа на доску, используя две следующие операции.

  • Вы можете взять два числа (не обязательно разные), которые уже написаны на доске, и написать их сумму на доске. Два выбранных вами числа остаются на доске.
  • Вы можете взять два числа (не обязательно разные), которые уже написаны на доске, и записать их побитовое исключающее ИЛИ (XOR) на доске. Два выбранных вами числа остаются на доске.
Выполните последовательность операций так, чтобы в конце число \(1\) находилось на доске.
Входные данные

В единственной строке входа содержится нечетное целое число \(x\) (\(3 \le x \le 999,999\)).

Выходные данные

В первой строке выведите \(q\)  — число выполняемых операций. Затем должны следовать \(q\) строк, каждая из которых описывает одну операцию.

  • Операция "сумма" описывается строкой "\(a\) + \(b\)", где \(a, b\) должны быть целыми числами, уже присутствующими на доске.
  • Операция "'xor" описывается строкой "\(a\) ^\(b\)", где \(a, b\) должны быть целыми числами, уже присутствующими на доске.
Символ операции (+ или ^) должен быть отделен от \(a, b\) пробелами.

Вы можете выполнить не более \(100,000\) операций (т.е. \(q\le 100,000\)), а все числа, записанные на доске, должны быть в диапазоне \([0, 5\cdot10^{18}]\). Можно доказать, что при таких ограничениях требуемая последовательность операций существует. Вы можете вывести любую подходящую последовательность операций.

D. Бросание бумерангов

жадные алгоритмы Конструктив реализация *1900

Для улучшения умения животных кидать бумеранги, смотритель зоопарка сделал таблицу размером \(n \times n\), поставив мишени в некоторые ее клетки. В каждой строке и в каждом столбце находится не больше \(2\) мишеней. Строки таблицы пронумерованы от \(1\) до \(n\) сверху вниз, столбцы таблицы пронумерованы от \(1\) до \(n\) слева направо.

Для каждого столбца, смотритель зоопарка бросит бумеранг снизу вверх (из под низа таблицы) вдоль этого столбца. Когда бумеранг попадет в любую мишень он оскочит, сделает поворот на \(90\) градусов вправо и продолжит полет вдоль прямой в новом направлении. Бумеранг может попасть в несколько мишеней и не остановится, пока не покинет таблицу.

В этом примере, \(n=6\) и черные крестики обозначают мишени. Бумеранг в столбце \(1\) (синие стрелки) попадет в мишени \(2\) раза, а бумеранг в столбце \(3\) (красные стрелки) попадет в мишени \(3\) раза.

Бумеранг в столбце \(i\) попал в ровно \(a_i\) мишеней перед тем, как улетел за границы таблицы. Известно, что \(a_i \leq 3\).

К сожалению, смотритель зоопарка потерял изначальные позиции мишеней. Поэтому он просит вас найти любое возможное расположение мишеней, которое удовлетворяет условиям на количества попаданий бумерангов для каждого столбца. Если такого расположения не существует, сообщите об этом.

Если существует несколько возможных расположений мишеней, вы можете найти любое.

Входные данные

В первой строке находится единственное целое число \(n\) \((1 \leq n \leq 10^5)\).

В следующей строке находится \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) \((0 \leq a_i \leq 3)\).

Выходные данные

Если ни одного возможного расположения мишеней не существует, выведите \(-1\).

Иначе в первой строке выведите единственное целое число \(t\) \((0 \leq t \leq 2n)\): количество мишеней в вашем расположении.

Затем выведите \(t\) строк. Каждая строка должна содержать два целых числа \(r\) и \(c\) \((1 \leq r,c \leq n)\), где \(r\) это строка, в которой находится мишень, а \(c\) это столбец, в котором находится мишень. Все мишени должны иметь различные позиции.

В каждой строке и в каждом столбце должно находиться не более двух мишеней.

Примечание

В первом тесте можно использовать такое же расположение мишеней, как на картинке из условия.

Во втором тесте бумеранг не должен попасть ни в одну мишень, поэтому мы можем расположить \(0\) мишеней.

В третьем тесте следующая конфигурация мишеней удовлетворяет условиям на количества попаданий бумерангов, но не разрешена, потому что строка \(3\) содержит \(4\) мишени.

Можно показать, что для этого теста ни одна из конфигураций не будет удовлетворять условиям на количества попаданий бумерангов.

A. Количество квартир

Конструктив математика Перебор *900

Недавно в городе, где живет Монокарп, построили дом с новой планировкой. Согласно данной планировке в доме есть три типа квартир: трехкомнатные, пятикомнатные и семикомнатные. Известно, что в каждой комнате есть ровно по одному окну. Таким образом, в трехкомнатной квартире три окна, в пятикомнатной — пять, в семикомнатной — семь.

Монокарп обошел дом со всех сторон и насчитал в нем \(n\) окон. Монокарпу стало интересно, сколько квартир каждого типа может быть в этом доме.

К сожалению, Монокарп только научился считать, поэтому попросил вас помочь ему найти возможное количество трехкомнатных, пятикомнатных и семикомнатных квартир в доме, если известно, что во всех квартирах этого дома ровно \(n\) окон. Так как ответов может быть несколько, разрешается вывести любой подходящий.

Например:

  • если Монокарп насчитал \(30\) окон, в доме могло быть \(2\) трехкомнатных, \(2\) пятикомнатных и \(2\) семикомнатных квартиры, так как \(2 \cdot 3 + 2 \cdot 5 + 2 \cdot 7 = 30\);
  • если Монокарп насчитал \(67\) окон, в доме могло быть \(7\) трехкомнатных, \(5\) пятикомнатных и \(3\) семикомнатных квартиры, так как \(7 \cdot 3 + 5 \cdot 5 + 3 \cdot 7 = 67\);
  • если Монокарп насчитал \(4\) окна, он, скорее всего, ошибся, так как ни один дом с такой планировкой не может иметь \(4\) окна.
Входные данные

В первой строке задано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В единственной строке каждого набора задано целое число \(n\) (\(1 \le n \le 1000\)) — количество окон в доме.

Выходные данные

Для каждого набора входных данных, если дома с новой планировкой и заданным количеством окном просто не может быть, выведите \(-1\).

В противном случае, выведите три целых неотрицательных числа — количество трехкомнатных, пятикомнатных и семикомнатных квартир в доме. Если подходящих ответов несколько, выведите любой из них.

C. Числа на доске

жадные алгоритмы Конструктив математика реализация Структуры данных *1000

На доске записаны целые числа \(1, 2, 3, \dots n\) (то есть все целые числа от \(1\) до \(n\) по одному разу). Вы можете за одну операцию стереть с доски два любых числа \(a\) и \(b\) и вместо них записать новое число, равное \(\frac{a + b}{2}\) округленному вверх.

Вы должны выполнить ровно \(n - 1\) описанную операцию, при этом число, которое будет записано на доске в ходе последней операции, должно быть минимально возможным.

Например, если \(n = 4\), то следующая последовательность действий является оптимальной:

  1. выбрать \(a = 4\) и \(b = 2\), тогда вы запишете \(3\), и на доске останутся числа \([1, 3, 3]\);
  2. выбрать \(a = 3\) и \(b = 3\), тогда вы запишете \(3\), и на доске останутся числа \([1, 3]\);
  3. выбрать \(a = 1\) и \(b = 3\), тогда вы запишете \(2\), и на доске останется \([2]\).

Легко показать, что после \(n - 1\) операции на доске будет записано всего одно число, его и нужно минимизировать.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора задано целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество целых чисел, изначально записанных на доске.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

В первую строку каждого набора входных данных выведите минимальное число, которое может остаться на доске после \(n - 1\) операции. В каждой из следующих \(n - 1\) строк выведите по два целых числа — числа \(a\) и \(b\), которые должны быть стерты с доски во время очередной операции.

C. Доминирующая пиранья

жадные алгоритмы Конструктив *900

В аквариуме есть \(n\) пираний с размерами \(a_1, a_2, \ldots, a_n\). Пираньи пронумерованы слева направо в том порядке, в котором они живут в аквариуме.

Ученые из Берляндского государственного университета хотят узнать, есть ли в аквариуме доминирующая пиранья. Пиранья называется доминирующей, если она может съесть всех пираний в аквариуме (за исключением самой себя, конечно же). Другие пираньи не будут делать ничего, пока доминирующая пиранья будет есть их.

Поскольку аквариум довольно узкий и длинный, пиранья может есть только одну из соседних пираний за один ход. Пиранья может делать сколько угодно ходов (конечно же, до тех пор, пока она может). Более детально:

  • Пиранья \(i\) может съесть пиранью \(i-1\), если пиранья \(i-1\) существует и \(a_{i - 1} < a_i\).
  • Пиранья \(i\) может съесть пиранью \(i+1\), если пиранья \(i+1\) существует и \(a_{i + 1} < a_i\).

Когда пиранья \(i\) съедает какую-либо пиранью, ее размер увеличивается на единицу (\(a_i\) становится равным \(a_i + 1\)).

Ваша задача — найти любую доминирующую пиранью в аквариуме или определить, что таких пираний нет.

Обратите внимание, что вам нужно найти любую (ровно одну) доминирующую пиранью, вам не нужно находить всех подходящих пираний.

Например, если \(a = [5, 3, 4, 4, 5]\), то третья пиранья может быть доминирующей. Рассмотрим последовательность ее передвижений:

  • Пиранья съедает вторую пиранью, и \(a\) становится равным \([5, \underline{5}, 4, 5]\) (подчеркнутая пиранья — наш кандидат).
  • Пиранья съедает третью пиранью, и \(a\) становится равным \([5, \underline{6}, 5]\).
  • Пиранья съедает первую пиранью, и \(a\) становится равным \([\underline{7}, 5]\).
  • Пиранья съедает вторую пиранью, и \(a\) становится равным \([\underline{8}]\).

Вам нужно ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(2 \le n \le 3 \cdot 10^5\)) — количество пираний в аквариуме. Вторая строка набора тестовых данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) — размер \(i\)-й пираньи.

Гарантируется, что сумма всех \(n\) не превосходит \(3 \cdot 10^5\) (\(\sum n \le 3 \cdot 10^5\)).

Выходные данные

Для каждого набора тестовых данных выведите ответ на него: -1, если в аквариуме нет доминирующих пираний, или индекс любой доминирующей пираньи иначе. Если существует несколько корректных ответов, вы можете вывести любой.

Примечание

Первый тестовый набор примера описан в условии задачи.

Во втором тестовом наборе примера нет доминирующей пираньи.

В третьем тестовом наборе примера четвертая пиранья может сначала съесть пиранью слева, и аквариум будет выглядеть как \([4, 4, 5, 4]\), после этого она сможет съесть любую другую пиранью в аквариуме.

D. Соединение районов

Конструктив поиск в глубину и подобное *1200

В городе есть \(n\) районов, \(i\)-й район принадлежит \(a_i\)-й бандитской группировке. Изначально никакая пара районов не соединена друг с другом.

Вы — мэр города, и вам хочется построить \(n-1\) двустороннюю дорогу, чтобы соединить все районы (два района могут быть соединены напрямую или через другие соединенные районы).

Если два района, принадлежащие одной и той же банде, связаны дорогой напрямую, то эта банда поднимет восстание.

Вы не хотите такого поворота, поэтому ваша задача — построить \(n-1\) двустороннюю дорогу таким образом, что все районы достижимы друг из друга (быть может, с использованием промежуточных районов) и каждая пара районов, связанных напрямую, принадлежит разным бандам, или определить, что невозможно построить \(n-1\) дорогу, удовлетворив все условия.

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Первая строка набора тестовых данных содержит одно целое число \(n\) (\(2 \le n \le 5000\)) — количество районов. Вторая строка набора тестовых данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)), где \(a_i\) — номер банды, которой принадлежит \(i\)-й район.

Гарантируется, что сумма всех \(n\) не превосходит \(5000\) (\(\sum n \le 5000\)).

Выходные данные

Для каждого набора тестовых данных выведите:

  • NO единственной строкой, если невозможно соединить все районы, удовлетворяя всем требованиям, заданным в условии задачи.
  • YES первой строкой и \(n-1\) дорогу на следующей \(n-1\) строке. Каждая дорога должна быть представлена как пара целых чисел \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n; x_i \ne y_i\)), где \(x_i\) и \(y_i\) — два района, которые соединяет \(i\)-я дорога.

Для каждой дороги \(i\), условие \(a[x_i] \ne a[y_i]\) должно выполняться. Кроме того, все районы должны быть достижимы друг из друга (быть может, с использованием промежуточных районов).

B. Простой квадрат

Конструктив математика *900

Саше очень нравится изучать всякие интересные математические вещи, например, магические квадраты. Но Саша понимает, что магические квадраты уже были рассмотрены и изучены сотнями разных людей, поэтому он не видит смысла в продолжении работы над ними. Вместо этого он придумал свой тип квадратов — простой квадрат.

Квадрат размером \(n \times n\) называется простым, если одновременно выполняются три условия:

  • все числа в этом квадрате являются неотрицательными целыми числами, не превосходящими \(10^5\);
  • в квадрате отсутствуют простые числа;
  • суммы чисел в каждых строках и столбцах являются простыми числами.

У Саши есть число \(n\). Теперь он просит вас построить любой простой квадрат размером \(n \times n\). Саша уверен, что такое построение всегда возможно, поэтому помогите ему!

Входные данные

Первая строка ввода содержит единственное число \(t\) (\(1 \le t \le 10\)) — количество тестовых случаев.

Следующие \(t\) строк содержат единственное целое число \(n\) (\(2 \le n \le 100\)) — требуемый размер квадрата в текущем тестовом случае.

Выходные данные

Для каждого тестового случая выведите \(n\) строк по \(n\) чисел в каждой — построенный простой квадрат. Если существует несколько возможных ответов, выведите любой из них.

A. Маркетинговая схема

жадные алгоритмы Конструктив математика Перебор *800

Вы устроились на работу в качестве маркетолога в зоомагазин и ваша текущая задача — увеличить продажи кошачьего корма. Одна из стратегий — это продавать банки с кормом упаковками со скидкой.

Предположим, вы решили продавать упаковки с \(a\) банками со скидкой и, предположим, покупатель хочет купить \(x\) банок корма. Тогда он воспользуется следующей жадной стратегией:

  • он купит \(\left\lfloor \frac{x}{a} \right\rfloor\) упаковок со скидкой;
  • а также докупит оставшиеся \((x \bmod a)\) банок поштучно.

\(\left\lfloor \frac{x}{a} \right\rfloor\) — это \(x\), деленное на \(a\) и округленное вниз, \(x \bmod a\) — это остаток от деления \(x\) на \(a\).

Однако покупатели в общем случае жадные, а потому, если покупатель хочет купить \((x \bmod a)\) банок поштучно и так случилось, что \((x \bmod a) \ge \frac{a}{2}\), то он решит купить всю упаковку из \(a\) банок (вместо того, чтобы купить \((x \bmod a)\) банок). Своими действиями он обрадует вас как маркетолога, потому что в итоге купит больше, чем хотел изначально.

Вы знаете, что каждый покупатель, который приходит к вам в магазин, может купить любое количество банок от \(l\) по \(r\) включительно. Можете ли вы выбрать такой размер упаковки \(a\), что любой покупатель купит больше банок, чем он планировал изначально?

Входные данные

В первой строке задано единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой и единственной строке каждого набора заданы два целых числа \(l\) и \(r\) (\(1 \le l \le r \le 10^9\)) — отрезок возможного количества банок, которое захочет приобрести покупатель.

Выходные данные

Для каждого набора входных данных, выведите YES, если вы можете выбрать такой размер упаковки \(a\), что любой покупатель приобретет больше банок корма, что он расcчитывал. В противном случае выведите NO.

Вы можете выводить каждую букву в любом регистре.

Примечание

В первом наборе входных данных вы можете взять, например, \(a = 5\) как размер упаковки. Тогда, если покупатель хочет купить \(3\) банки, то он купит вместо этого \(5\) банок (\(3 \bmod 5 = 3\), \(\frac{5}{2} = 2.5\)). Тот, кто захочет купить \(4\) банки, также купит \(5\).

Во втором наборе невозможно выбрать такое \(a\).

В третьем наборе вы можете, например, выбрать \(a = 80\).

B. Развороты бинарных строк

жадные алгоритмы Конструктив *1200

Вам задана строка \(s\) четной длины \(n\). Строка \(s\) — бинарная, другими словами, состоит только из 0 (нулей) и 1 (единиц).

Строка \(s\) состоит ровно из \(\frac{n}{2}\) нулей и \(\frac{n}{2}\) единиц (\(n\) — четное).

За одну операцию вы можете развернуть любую подстроку \(s\). Подстрока строки — это непрерывная подпоследовательность символов данной строки.

Какое минимальное количество операций вам понадобится, чтобы сделать \(s\) чередующейся? Строка чередующаяся, если \(s_i \neq s_{i + 1}\) для всех \(i\). В общем, существует два типа чередующихся строк: 01010101... или 10101010...

Входные данные

В первой строке задано единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора входных данных задано одно целое число \(n\) (\(2 \le n \le 10^5\); \(n\) — четное) — длина строки \(s\).

Во второй строке каждого набора задана бинарная строка \(s\) длины \(n\) (\(s_i \in\) {0, 1}). В строке \(s\) ровно \(\frac{n}{2}\) нулей и \(\frac{n}{2}\) единиц.

Гарантируется, что сумма \(n\) по наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных, выведите минимальное количество операций, чтобы сделать \(s\) чередующейся.

Примечание

В первом наборе входных данных, строка 10 уже чередующаяся.

Во втором наборе, мы можем, например, развернуть два последних символа \(s\) и получить: 0110 \(\rightarrow\) 0101.

В третьем наборе, мы можем, например, сделать следующие две операции:

  1. 11101000 \(\rightarrow\) 10101100;
  2. 10101100 \(\rightarrow\) 10101010.

E. Сделай возрастающим

Бинарный поиск дп Конструктив реализация Структуры данных *2200

Задан массив из \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) и набор \(b\) из \(k\) различных целых чисел от \(1\) до \(n\).

За одну операцию вы можете выбрать два целых числа \(i\) и \(x\) (\(1 \le i \le n\), \(x\) может быть любым целым числом) и присвоить \(a_i := x\). Эта операция может быть выполнена только в том случае, если \(i\) не принадлежит множеству \(b\).

Найдите минимальное количество операций, которые необходимо выполнить, чтобы массив \(a\) строго возрастал (то есть \(a_1 < a_2 < a_3 < \dots < a_n\)), или сообщите, что это невозможно.

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 5 \cdot 10^5\), \(0 \le k \le n\)) — размер массива \(a\) и множества \(b\) соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i \le 10^9\)).

Затем, если \(k \ne 0\), следует третья строка, содержащая \(k\) целых чисел \(b_1\), \(b_2\), ..., \(b_k\) (\(1 \le b_1 < b_2 < \dots < b_k \le n\)). Если \(k = 0\), то эта строка отсутствует.

Выходные данные

Если невозможно сделать массив \(a\) строго возрастающим с помощью заданных операций, выведите \(-1\).

В противном случае выведите одно целое число — минимальное количество операций, которые необходимо выполнить.

A. Специфичные вкусы Андре

Конструктив реализация *800

У Андре очень специфические вкусы. Недавно он начал влюбляться в массивы.

Андре называет непустой массив \(b\) хорошим, если сумма его элементов делится на длину этого массива. Например, массив \([2, 3, 1]\) хороший, так как сумма его элементов —- \(6\) — делится на \(3\), но массив \([1, 1, 2, 3]\) не хороший, так как \(7\) не делится на \(4\).

Андре вызывает массив \(a\) длиной \(n\) прекрасным, если выполняются следующие условия:

  • Каждый непустой подмассив этого массива является хорошим.
  • Для каждого \(i\) (\(1 \le i \le n\)), \(1 \leq a_i \leq 100\).

Для данного положительное целого числа \(n\) выведите любой прекрасный массив длины \(n\). Можно показать, что при заданных ограничениях такой массив всегда существует.

Массив \(c\) является подмассивом массива \(d\), если \(c\) может быть получен из \(d\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца.

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указано количество наборов входных данных \(t\) (\(1 \le t \le 100\)). Описание наборов входных данных приведено ниже.

Первая и единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)).

Выходные данные

Для каждого набора входных данных выводите в отдельной строке любой прекрасный массив длиной \(n\).

Примечание

Массив \([19, 33]\) прекрасный, так как все \(3\) его подмассивы — \([19]\), \([33]\), \([19, 33]\) — имеют суммы, кратные их длине, и, следовательно, хорошие.

B. Валерий против всех

жадные алгоритмы Конструктив сортировки Структуры данных *1000

Вам дан массив \(b\) длиной \(n\). Определим другой массив \(a\), также длиной \(n\), в котором \(a_i = 2^{b_i}\) (\(1 \leq i \leq n\)).

Валерий утверждает, что любые два непересекающихся подмассива \(a\) имеют разную сумму элементов. Вы хотите определить, ошибается ли он. Более формально, необходимо определить, существуют ли четыре целых числа \(l_1,r_1,l_2,r_2\), которые удовлетворяют следующим условиям:

  • \(1 \leq l_1 \leq r_1 \lt l_2 \leq r_2 \leq n\);
  • \(a_{l_1}+a_{l_1+1}+\ldots+a_{r_1-1}+a_{r_1} = a_{l_2}+a_{l_2+1}+\ldots+a_{r_2-1}+a_{r_2}\).

Если такие четыре целых числа существуют, вы докажете, что Валерий ошибается. Существуют ли они?

Массив \(c\) является подмассивом массива \(d\), если \(c\) может быть получен из \(d\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца.

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указано количество наборов входных данных \(t\) (\(1 \le t \le 100\)). Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит одно целое \(n\) (\(2 \le n \le 1000\)).

Вторая строка набора входных данных содержит \(n\) целых чисел \(b_1,b_2,\ldots,b_n\) (\(0 \le b_i \le 10^9\)).

Выходные данные

Для каждого набора входных данных, если в \(a\) есть два непересекающихся подмассива, которые имеют одинаковую сумму, выведите YES в отдельной строке. В противном случае выведите NO в отдельной строке.

Также обратите внимание, что каждая буква может быть в любом регистре.

Примечание

В первом случае \(a = [16,8,1,2,4,1]\). Значения \(l_1 = 1\), \(r_1 = 1\), \(l_2 = 2\) и \(r_2 = 6\) подходят, потому что \(16 = (8+1+2+4+1)\).

Во втором случае можно проверить, что такие подмассивы выбрать невозможно.

C. Инженер Артем

2-sat бпф китайская теорема об остатках Конструктив Потоки *2000

Артем строит нового робота. У него есть таблица \(a\), состоящая из \(n\) строк и \(m\) столбцов. Ячейка, расположенная на \(i\)-й сверху строке и \(j\)-м слева столбце, содержит значение \(a_{i,j}\).

Если две соседние ячейки таблицы содержат одинаковое значение, то робот ломается. Таблица называется хорошей, если никакие две соседние клетки не содержат одинаковое значение. Две клетки называются соседними, если они имеют общую сторону.

Артем хочет увеличить значения в некоторых ячейках на один, чтобы сделать \(a\) хорошей.

Более формально, найдите хорошую таблицу \(b\), которая удовлетворяет следующему условию:

  • Для всех подходящих (\(i,j\)) выполняется или \(b_{i,j} = a_{i,j}\), или \(b_{i,j} = a_{i,j}+1\).

Для данных ограничений можно показать, что такая таблица \(b\) всегда существует. Если таких таблиц несколько, вы можете вывести любую из них. Пожалуйста, обратите внимание, что нет необходимости минимизировать количество ячеек, значения в которых вы увеличите.

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указано количество наборов входных данных \(t\) (\(1 \le t \le 10\)). Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит два целых числа \(n, m\) (\(1 \le n \le 100\), \(1 \le m \le 100\))  — количество строк и столбцов соответственно.

Каждая из следующих \(n\) строк содержит \(m\) целых чисел. \(j\)-е число в \(i\)-й строке  — \(a_{i,j}\) (\(1 \leq a_{i,j} \leq 10^9\)).

Выходные данные

Для каждого набора входных данных выводите \(n\) строк, каждая из которых содержит \(m\) целых чисел. \(j\)-м числом в \(i\)-й строке выведите \(b_{i,j}\).

Примечание

Для каждого набора входных данных из примера можно проверить, что никакие две соседние ячейки не имеют одинакового значения, и что \(b\) равен \(a\) с некоторыми значениями, увеличенными на единицу.

D. Влиятельная Ксения

битмаски Конструктив математика *2200

У Ксении есть массив \(a\), состоящий из \(n\) положительных целых чисел \(a_1, a_2, \ldots, a_n\).

За одну операцию она может сделать следующее:

  • выбрать три различных индекса \(i\), \(j\), \(k\), а затем
  • одновременно изменить каждое из \(a_i, a_j, a_k\) на \(a_i \oplus a_j \oplus a_k\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Ксения хочет сделать все \(a_i\) равными за не более чем \(n\) операций или определить, что это невозможно. Она не стала бы просить вас о помощи, но, пожалуйста, помогите ей!

Входные данные

Первая строка содержит одно целое число \(n\) (\(3 \leq n \leq 10^5\)) — длину \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — элементы \(a\).

Выходные данные

В первой строке выведите YES или NO в зависимости от того, можно ли сделать все элементы равными за не более чем \(n\) операций.

Если это возможно, выведите целое число \(m\) (\(0 \leq m \leq n\)), которое обозначает количество выполняемых операций.

В каждой из следующих \(m\) строк выведите три различных целых числа \(i, j, k\), представляющих собой одну операцию.

Если таких последовательностей операций много, то выведите любую. Обратите внимание, что вы не должны минимизировать количество операций.

Примечание

В первом примере массив становится равным \([4 \oplus 1 \oplus 7, 2, 4 \oplus 1 \oplus 7, 4 \oplus 1 \oplus 7, 2] = [2, 2, 2, 2, 2]\).

E. Юра может все

Бинарный поиск битмаски Конструктив Перебор разделяй и властвуй *2500

Юра уверен, что он может все. Но сможет ли он решить эту задачу?

У него есть массив \(a\), состоящий из \(n\) положительных целых чисел. Назовем подмассив \(a[l...r]\) хорошим, если одновременно соблюдены следующие условия:

  • \(l+1 \leq r-1\), т. е. подмассив имеет длину не менее \(3\);
  • \((a_l \oplus a_r) = (a_{l+1}+a_{l+2}+\ldots+a_{r-2}+a_{r-1})\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Другими словами, подмассив хороший, если побитовое исключающее ИЛИ (XOR) элементов в его концах равен сумме остальных элементов.

Юрий хочет посчитать общее количество хороших подмассивов. Чему оно равно?

Массив \(c\) является подмассивом массива \(d\), если \(c\) может быть получен из \(d\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца.

Входные данные

Первая строка содержит одно целое \(n\) (\(3 \leq n \leq 2\cdot 10^5\)) — длину \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \leq a_i \lt 2^{30}\)) — элементы \(a\).

Выходные данные

Выведите единственное целое число — количество хороших подмассивов.

Примечание

В примере есть \(6\) хороших подмассивов:

  • \([3,1,2]\) (дважды), потому что \((3 \oplus 2) = 1\);
  • \([1,2,3]\) (дважды) потому что \((1 \oplus 3) = 2\);
  • \([2,3,1]\), потому что \((2 \oplus 1) = 3\);
  • \([3,1,2,3,1,2,3,15]\), потому что \((3 \oplus 15) = (1+2+3+1+2+3)\).

A1. Бинарная таблица (простая версия)

Конструктив реализация *1500

Это простая версия задачи. Различие между версиями заключается ограничениях на количество операций. Вы можете делать взломы, если обе версии задачи сданы.

Вам дана бинарная таблица размера \(n \times m\). Эта таблица состоит из символов \(0\) и \(1\).

Вы можете делать следующую операцию: выбрать \(3\) различные клетки, которые принадлежат одному квадрату \(2 \times 2\), и изменить символы в этих клетках (поменять \(0\) на \(1\) и \(1\) на \(0\)).

Ваша задача сделать все символы таблицы равными \(0\) за не больше чем \(3nm\) операций. Вам не нужно минимизировать количество операций.

Можно доказать, что это всегда возможно.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 5000\)) — количество наборов входных данных. В следующих строках находится описание наборов входных данных.

В первой строке описания каждого набора входных данных находится два целых числа \(n\), \(m\) (\(2 \leq n, m \leq 100\)).

Каждая из следующих \(n\) строк содержит бинарную строку длины \(m\), равную очередной строке таблицы.

Гарантируется, что сумма \(nm\) по всем наборам входных данных не превосходит \(20000\).

Выходные данные

Для каждого набора входных данных выведите целое число \(k\) (\(0 \leq k \leq 3nm\)) — количество операций.

В каждой из следующих \(k\) строк выведите \(6\) целых чисел \(x_1, y_1, x_2, y_2, x_3, y_3\) (\(1 \leq x_1, x_2, x_3 \leq n, 1 \leq y_1, y_2, y_3 \leq m\)), описывающих следующую операцию. Эта операция будет сделана с тремя клетками \((x_1, y_1)\), \((x_2, y_2)\), \((x_3, y_3)\). Все три клетки должны быть различны. Эти три клетки должны лежать в каком-то квадрате \(2 \times 2\).

Примечание

В первом наборе входных данных можно сделать одну операцию с клетками \((1, 1)\), \((2, 1)\), \((2, 2)\). После этого, все символы будут равны \(0\).

Во втором наборе входных данных:

  • операция с клетками \((2, 1)\), \((3, 1)\), \((3, 2)\). После этой операции таблица будет:

    011
    001
    000
  • операция с клетками \((1, 2)\), \((1, 3)\), \((2, 3)\). После этой операции таблица будет:

    000
    000
    000

В пятом наборе входных данных:

  • операция с клетками \((1, 3)\), \((2, 2)\), \((2, 3)\). После этой операции таблица будет:

    010
    110
  • операция с клетками \((1, 2)\), \((2, 1)\), \((2, 2)\). После этой операции таблица будет:

    000
    000

A2. Бинарная таблица (сложная версия)

графы жадные алгоритмы Конструктив реализация *1900

Это сложная версия задачи. Различие между версиями заключается ограничениях на количество операций. Вы можете делать взломы, если обе версии задачи сданы.

Вам дана бинарная таблица размера \(n \times m\). Эта таблица состоит из символов \(0\) и \(1\).

Вы можете делать следующую операцию: выбрать \(3\) различные клетки, которые принадлежат одному квадрату \(2 \times 2\), и изменить символы в этих клетках (поменять \(0\) на \(1\) и \(1\) на \(0\)).

Ваша задача сделать все символы таблицы равными \(0\) за не больше чем \(nm\) операций. Вам не нужно минимизировать количество операций.

Можно доказать, что это всегда возможно.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 5000\)) — количество наборов входных данных. В следующих строках находится описание наборов входных данных.

В первой строке описания каждого набора входных данных находится два целых числа \(n\), \(m\) (\(2 \leq n, m \leq 100\)).

Каждая из следующих \(n\) строк содержит бинарную строку длины \(m\), равную очередной строке таблицы.

Гарантируется, что сумма \(nm\) по всем наборам входных данных не превосходит \(20000\).

Выходные данные

Для каждого набора входных данных выведите целое число \(k\) (\(0 \leq k \leq nm\)) — количество операций.

В каждой из следующих \(k\) строк выведите \(6\) целых чисел \(x_1, y_1, x_2, y_2, x_3, y_3\) (\(1 \leq x_1, x_2, x_3 \leq n, 1 \leq y_1, y_2, y_3 \leq m\)), описывающих следующую операцию. Эта операция будет сделана с тремя клетками \((x_1, y_1)\), \((x_2, y_2)\), \((x_3, y_3)\). Все три клетки должны быть различны. Эти три клетки должны лежать в каком-то квадрате \(2 \times 2\).

Примечание

В первом наборе входных данных можно сделать одну операцию с клетками \((1, 1)\), \((2, 1)\), \((2, 2)\). После этого, все символы будут равны \(0\).

Во втором наборе входных данных:

  • операция с клетками \((2, 1)\), \((3, 1)\), \((3, 2)\). После этой операции таблица будет:

    011
    001
    000
  • операция с клетками \((1, 2)\), \((1, 3)\), \((2, 3)\). После этой операции таблица будет:

    000
    000
    000

В пятом наборе входных данных:

  • операция с клетками \((1, 3)\), \((2, 2)\), \((2, 3)\). После этой операции таблица будет:

    010
    110
  • операция с клетками \((1, 2)\), \((2, 1)\), \((2, 2)\). После этой операции таблица будет:

    000
    000

B. Задача о подмножестве графа

графы Конструктив Структуры данных *2600

Вам дан неориентированный граф с \(n\) вершинами и \(m\) ребрами. Также вам дано целое число \(k\).

Найдите либо клику размера \(k\), либо непустое подмножество вершин такое, что каждая вершина этого подмножества имеет хотя бы \(k\) соседей в этом подмножестве. Если ни одной такой клики или такого подмножества не существует, сообщите об этом.

Подмножество вершин называется кликой размера \(k\), если его размер равен \(k\) и существуют ребра между всеми парами вершин этого подмножества. Вершина называется соседом другой вершины, если существует ребро между ними.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. В следующей строке находится описание наборов входных данных.

В первой строке описания каждого набора входных данных находится три целых числа \(n\), \(m\), \(k\) (\(1 \leq n, m, k \leq 10^5\), \(k \leq n\)).

Каждая из следующих \(m\) строк содержит два целых числа \(u, v\) \((1 \leq u, v \leq n, u \neq v)\), обозначающих ребро между вершинами \(u\) и \(v\).

Гарантируется, что в графе нет петель и кратных ребер. Гарантируется, что сумма \(n\) по всем наборам входных данных и сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных:

Если вы нашли подмножество вершин, в котором каждая вершина имеет хотя бы \(k\) соседей из этого подмножества, в первой строке выведите \(1\) и размер этого подмножества. Во второй строке выведите все вершины этого подмножества в любом порядке.

Если вы нашли клику размера \(k\), выведите в первой строке \(2\) и во второй строке все вершины клики в любом порядке.

Если не существует ни одной необходимой клики или подмножества выведите \(-1\).

Если существует несколько возможных ответов выведите любой.

Примечание

В первом наборе входных данных: подмножество \(\{1, 2, 3, 4\}\) является кликой размера \(4\).

Во втором наборе входных данных: степень каждой вершины изначального графа хотя бы \(3\). Поэтому множество всех вершин является правильным ответом.

В третьем наборе входных данных: не существует клик размера \(4\) и необходимых подмножеств, поэтому ответ \(-1\).

A. Экстремальное вычитание

дп жадные алгоритмы Конструктив *1800

Вам дан массив \(a\) из \(n\) положительных чисел.

Вы можете применять следующую операцию, сколько угодно раз: выбрать любое целое число \(1 \le k \le n\) и выполнить одно из двух действий:

  • отнять от \(k\) первых элементов массива единицу.
  • отнять от \(k\) последних элементов массива единицу.

Например, если \(n=5\) и \(a=[3,2,2,1,4]\), то вы можете применить к нему одну из следующих операций (ниже перечислены не все возможные варианты):

  • отнять от первых двух элементов массива единицу. После этой операции \(a=[2, 1, 2, 1, 4]\);
  • отнять от трех последних элементов массива единицу. После этой операции \(a=[3, 2, 1, 0, 3]\);
  • отнять от пяти первых элементов массива единицу. После этой операции \(a=[2, 1, 1, 0, 3]\);

Определите, возможно ли сделать все элементы массива равными нулю применив некоторое количество операций.

Входные данные

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 30000\)) — количество наборов тестовых данных. Далее следуют \(t\) наборов тестовых данных.

Каждый набор начинается со строки в которой записано одно целое число \(n\) (\(1 \le n \le 30000\)) — количество элементов в массиве.

Во второй строке каждого набора тестовых данных записаны \(n\) целых чисел \(a_1 \ldots a_n\) (\(1 \le a_i \le 10^6\)).

Сумма \(n\) по всем наборам тестовых данных не превосходит \(30000\).

Выходные данные

Для каждого набора тестовых данных в отдельной строке выведите:

  • YES, если возможно сделать все элементы массива равными нулю применив некоторое количество операций.
  • NO, иначе.

Буквы в словах YES и NO можно выводить в любом регистре.

A. Экстремальное вычитание

дп жадные алгоритмы Конструктив *1800

Вам дан массив \(a\) из \(n\) положительных чисел.

Вы можете применять следующую операцию, сколько угодно раз: выбрать любое целое число \(1 \le k \le n\) и выполнить одно из двух действий:

  • отнять от \(k\) первых элементов массива единицу.
  • отнять от \(k\) последних элементов массива единицу.

Например, если \(n=5\) и \(a=[3,2,2,1,4]\), то вы можете применить к нему одну из следующих операций (ниже перечислены не все возможные варианты):

  • отнять от первых двух элементов массива единицу. После этой операции \(a=[2, 1, 2, 1, 4]\);
  • отнять от трех последних элементов массива единицу. После этой операции \(a=[3, 2, 1, 0, 3]\);
  • отнять от пяти первых элементов массива единицу. После этой операции \(a=[2, 1, 1, 0, 3]\);

Определите, возможно ли сделать все элементы массива равными нулю применив некоторое количество операций.

Входные данные

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 30000\)) — количество наборов тестовых данных. Далее следуют \(t\) наборов тестовых данных.

Каждый набор начинается со строки в которой записано одно целое число \(n\) (\(1 \le n \le 30000\)) — количество элементов в массиве.

Во второй строке каждого набора тестовых данных записаны \(n\) целых чисел \(a_1 \ldots a_n\) (\(1 \le a_i \le 10^6\)).

Сумма \(n\) по всем наборам тестовых данных не превосходит \(30000\).

Выходные данные

Для каждого набора тестовых данных в отдельной строке выведите:

  • YES, если возможно сделать все элементы массива равными нулю применив некоторое количество операций.
  • NO, иначе.

Буквы в словах YES и NO можно выводить в любом регистре.

A. Экстремальное вычитание

дп жадные алгоритмы Конструктив *1800

Вам дан массив \(a\) из \(n\) положительных чисел.

Вы можете применять следующую операцию, сколько угодно раз: выбрать любое целое число \(1 \le k \le n\) и выполнить одно из двух действий:

  • отнять от \(k\) первых элементов массива единицу.
  • отнять от \(k\) последних элементов массива единицу.

Например, если \(n=5\) и \(a=[3,2,2,1,4]\), то вы можете применить к нему одну из следующих операций (ниже перечислены не все возможные варианты):

  • отнять от первых двух элементов массива единицу. После этой операции \(a=[2, 1, 2, 1, 4]\);
  • отнять от трех последних элементов массива единицу. После этой операции \(a=[3, 2, 1, 0, 3]\);
  • отнять от пяти первых элементов массива единицу. После этой операции \(a=[2, 1, 1, 0, 3]\);

Определите, возможно ли сделать все элементы массива равными нулю применив некоторое количество операций.

Входные данные

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 30000\)) — количество наборов тестовых данных. Далее следуют \(t\) наборов тестовых данных.

Каждый набор начинается со строки в которой записано одно целое число \(n\) (\(1 \le n \le 30000\)) — количество элементов в массиве.

Во второй строке каждого набора тестовых данных записаны \(n\) целых чисел \(a_1 \ldots a_n\) (\(1 \le a_i \le 10^6\)).

Сумма \(n\) по всем наборам тестовых данных не превосходит \(30000\).

Выходные данные

Для каждого набора тестовых данных в отдельной строке выведите:

  • YES, если возможно сделать все элементы массива равными нулю применив некоторое количество операций.
  • NO, иначе.

Буквы в словах YES и NO можно выводить в любом регистре.

A. Экстремальное вычитание

дп жадные алгоритмы Конструктив *1800

Вам дан массив \(a\) из \(n\) положительных чисел.

Вы можете применять следующую операцию, сколько угодно раз: выбрать любое целое число \(1 \le k \le n\) и выполнить одно из двух действий:

  • отнять от \(k\) первых элементов массива единицу.
  • отнять от \(k\) последних элементов массива единицу.

Например, если \(n=5\) и \(a=[3,2,2,1,4]\), то вы можете применить к нему одну из следующих операций (ниже перечислены не все возможные варианты):

  • отнять от первых двух элементов массива единицу. После этой операции \(a=[2, 1, 2, 1, 4]\);
  • отнять от трех последних элементов массива единицу. После этой операции \(a=[3, 2, 1, 0, 3]\);
  • отнять от пяти первых элементов массива единицу. После этой операции \(a=[2, 1, 1, 0, 3]\);

Определите, возможно ли сделать все элементы массива равными нулю применив некоторое количество операций.

Входные данные

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 30000\)) — количество наборов тестовых данных. Далее следуют \(t\) наборов тестовых данных.

Каждый набор начинается со строки в которой записано одно целое число \(n\) (\(1 \le n \le 30000\)) — количество элементов в массиве.

Во второй строке каждого набора тестовых данных записаны \(n\) целых чисел \(a_1 \ldots a_n\) (\(1 \le a_i \le 10^6\)).

Сумма \(n\) по всем наборам тестовых данных не превосходит \(30000\).

Выходные данные

Для каждого набора тестовых данных в отдельной строке выведите:

  • YES, если возможно сделать все элементы массива равными нулю применив некоторое количество операций.
  • NO, иначе.

Буквы в словах YES и NO можно выводить в любом регистре.

A. Экстремальное вычитание

дп жадные алгоритмы Конструктив *1800

Вам дан массив \(a\) из \(n\) положительных чисел.

Вы можете применять следующую операцию, сколько угодно раз: выбрать любое целое число \(1 \le k \le n\) и выполнить одно из двух действий:

  • отнять от \(k\) первых элементов массива единицу.
  • отнять от \(k\) последних элементов массива единицу.

Например, если \(n=5\) и \(a=[3,2,2,1,4]\), то вы можете применить к нему одну из следующих операций (ниже перечислены не все возможные варианты):

  • отнять от первых двух элементов массива единицу. После этой операции \(a=[2, 1, 2, 1, 4]\);
  • отнять от трех последних элементов массива единицу. После этой операции \(a=[3, 2, 1, 0, 3]\);
  • отнять от пяти первых элементов массива единицу. После этой операции \(a=[2, 1, 1, 0, 3]\);

Определите, возможно ли сделать все элементы массива равными нулю применив некоторое количество операций.

Входные данные

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 30000\)) — количество наборов тестовых данных. Далее следуют \(t\) наборов тестовых данных.

Каждый набор начинается со строки в которой записано одно целое число \(n\) (\(1 \le n \le 30000\)) — количество элементов в массиве.

Во второй строке каждого набора тестовых данных записаны \(n\) целых чисел \(a_1 \ldots a_n\) (\(1 \le a_i \le 10^6\)).

Сумма \(n\) по всем наборам тестовых данных не превосходит \(30000\).

Выходные данные

Для каждого набора тестовых данных в отдельной строке выведите:

  • YES, если возможно сделать все элементы массива равными нулю применив некоторое количество операций.
  • NO, иначе.

Буквы в словах YES и NO можно выводить в любом регистре.

A. Экстремальное вычитание

дп жадные алгоритмы Конструктив *1800

Вам дан массив \(a\) из \(n\) положительных чисел.

Вы можете применять следующую операцию, сколько угодно раз: выбрать любое целое число \(1 \le k \le n\) и выполнить одно из двух действий:

  • отнять от \(k\) первых элементов массива единицу.
  • отнять от \(k\) последних элементов массива единицу.

Например, если \(n=5\) и \(a=[3,2,2,1,4]\), то вы можете применить к нему одну из следующих операций (ниже перечислены не все возможные варианты):

  • отнять от первых двух элементов массива единицу. После этой операции \(a=[2, 1, 2, 1, 4]\);
  • отнять от трех последних элементов массива единицу. После этой операции \(a=[3, 2, 1, 0, 3]\);
  • отнять от пяти первых элементов массива единицу. После этой операции \(a=[2, 1, 1, 0, 3]\);

Определите, возможно ли сделать все элементы массива равными нулю применив некоторое количество операций.

Входные данные

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 30000\)) — количество наборов тестовых данных. Далее следуют \(t\) наборов тестовых данных.

Каждый набор начинается со строки в которой записано одно целое число \(n\) (\(1 \le n \le 30000\)) — количество элементов в массиве.

Во второй строке каждого набора тестовых данных записаны \(n\) целых чисел \(a_1 \ldots a_n\) (\(1 \le a_i \le 10^6\)).

Сумма \(n\) по всем наборам тестовых данных не превосходит \(30000\).

Выходные данные

Для каждого набора тестовых данных в отдельной строке выведите:

  • YES, если возможно сделать все элементы массива равными нулю применив некоторое количество операций.
  • NO, иначе.

Буквы в словах YES и NO можно выводить в любом регистре.

A. Экстремальное вычитание

дп жадные алгоритмы Конструктив *1800

Вам дан массив \(a\) из \(n\) положительных чисел.

Вы можете применять следующую операцию, сколько угодно раз: выбрать любое целое число \(1 \le k \le n\) и выполнить одно из двух действий:

  • отнять от \(k\) первых элементов массива единицу.
  • отнять от \(k\) последних элементов массива единицу.

Например, если \(n=5\) и \(a=[3,2,2,1,4]\), то вы можете применить к нему одну из следующих операций (ниже перечислены не все возможные варианты):

  • отнять от первых двух элементов массива единицу. После этой операции \(a=[2, 1, 2, 1, 4]\);
  • отнять от трех последних элементов массива единицу. После этой операции \(a=[3, 2, 1, 0, 3]\);
  • отнять от пяти первых элементов массива единицу. После этой операции \(a=[2, 1, 1, 0, 3]\);

Определите, возможно ли сделать все элементы массива равными нулю применив некоторое количество операций.

Входные данные

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 30000\)) — количество наборов тестовых данных. Далее следуют \(t\) наборов тестовых данных.

Каждый набор начинается со строки в которой записано одно целое число \(n\) (\(1 \le n \le 30000\)) — количество элементов в массиве.

Во второй строке каждого набора тестовых данных записаны \(n\) целых чисел \(a_1 \ldots a_n\) (\(1 \le a_i \le 10^6\)).

Сумма \(n\) по всем наборам тестовых данных не превосходит \(30000\).

Выходные данные

Для каждого набора тестовых данных в отдельной строке выведите:

  • YES, если возможно сделать все элементы массива равными нулю применив некоторое количество операций.
  • NO, иначе.

Буквы в словах YES и NO можно выводить в любом регистре.

A. Рассадка детей

Конструктив математика *800

Сегодня в детском саду появилась новая группа из \(n\) детей, которых нужно рассадить за обеденным столом. Стулья за столом пронумерованы числами от \(1\) до \(4n\). Два ребёнка не могут сидеть на одном и том же стуле. Известно, что дети, которые сели на стулья с номерами \(a\) и \(b\) (\(a \neq b\)) будут баловаться, если:

  1. \(gcd(a, b) = 1\) или,
  2. \(a\) делит \(b\) или \(b\) делит \(a\).

\(gcd(a, b)\) — максимальное число \(x\) такое, что \(a\) делится на \(x\) и \(b\) делится на \(x\).

Например, если \(n=3\) и дети сядут на стулья с номерами \(2\), \(3\), \(4\), то они будут баловаться, так как \(4\) делится на \(2\) и \(gcd(2, 3) = 1\). Если же дети сядут на стулья с номерами \(4\), \(6\), \(10\), то они не будут баловаться.

Воспитательнице очень не хочется, чтобы порядок за столом нарушился, поэтому она хочет рассадить детей так, чтобы никакие \(2\) ребёнка не баловались. Более формально, она хочет, чтобы ни для каких пар стульев \(a\) и \(b\), которые заняли дети, не было выполнено условие выше.

Так как воспитательница сильно занята развлечением детей она попросила вас решить эту задачу.

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

В следующих \(t\) строках находится по одному целому числу \(n\) (\(1 \leq n \leq 100\)) — количество детей.

Выходные данные

Выведите \(t\) строк, в которых написаны \(n\) различных целых чисел от \(1\) до \(4n\) — номера стульев, которые должны занять дети в соответствующем наборе входных данных. Если ответов несколько, выведите любой из них. \(n\) чисел можно выводить в любом порядке.

D. Прямоугольная ломаная

геометрия дп Конструктив *2900

На координатной плоскости была нарисована замкнутая ломаная, состоящая из вертикальных и горизонтальных отрезков (параллельных осям координат). Горизонтальные и вертикальные отрезки этой ломаной чередовались (за горизонтальным отрезком шёл вертикальный, и наоборот). В этой ломаной не было пересечений отрезков по внутренним точкам, то есть если какие-то два отрезка пересекались, то точка их пересечения являлась одним из концом каждого из них (обратите внимание на примеры в пояснении к условию).

К сожалению, ломаную стёрли, а про неё осталось совсем немного информации: известны лишь длины всех вертикальных и всех горизонтальных отрезков. Вам требуется восстановить любую ломаную, удовлетворяющую условию, или определить, что такой ломаной не существует.

Входные данные

В первой строке задано целое число \(t\) (\(1 \leq t \leq 200\)) — количество наборов входных данных.

В первой строке каждого набора входных данных задано одно целое число \(h\) (\(1 \leq h \leq 1000\)) — количество горизонтальных отрезков.

Во второй строке каждого набора заданы \(h\) целых чисел \(l_1, l_2, \dots, l_h\) (\(1 \leq l_i \leq 1000\)) — длины горизонтальных отрезков ломаной, в произвольном порядке.

В третьей строке задано одно целое число \(v\) (\(1 \leq v \leq 1000\)) — количество вертикальных отрезков.

В четвёртой строке заданы \(v\) целых чисел \(p_1, p_2, \dots, p_v\) (\(1 \leq p_i \leq 1000\)) — длины вертикальных отрезков ломаной, в произвольном порядке.

Все наборы входных данных разделяются пустой строкой.

Сумма \(h + v\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных выведите слово Yes, если требуемая ломаная существует или No в противном случае. Если ломаная существует, в следующих \(n\) строках выведите последовательно вершины этой ломаной. В \(i\)-й строке выведите два целых числа \(x_i\), \(y_i\) — координаты \(i\)-й вершины.

Обратите внимание, что все отрезки этой ломаной должны быть параллельны осям координат, при этом после горизонтального отрезка должен идти вертикальный, и наоборот. Все координаты не должны превосходить \(10^9\) по абсолютной величине.

Примечание

В первом наборе первого примера ответ Yes — в качестве примера можно привести квадрат:

В первом наборе второго примера искомая ломаная существует. Обратите внимание, что ломаная пересекается по вершинам-концам отрезков:

Во втором наборе второго примера искомая ломаная может выглядеть, как на рисунке ниже:

Обратите внимание, что пример ниже не будет корректным для этого набора входных данных, так как содержит самопересечения:

A. Рюкзак

жадные алгоритмы Конструктив сортировки *1300

У вас есть рюкзак вместимостью \(W\). У вас также есть \(n\) предметов, вес \(i\)-го из них равен \(w_i\).

Вы хотите поместить некоторые из этих предметов в рюкзак таким образом, чтобы их общий вес \(C\) составлял как минимум половину его вместимости, но (очевидно) не превышал ее. Формально, \(C\) должно удовлетворять: \(\lceil \frac{W}{2}\rceil \le C \le W\).

Выведите список предметов, которые вы поместите в рюкзак, или определите, что удовлетворить условиям невозможно.

Если есть несколько возможных списков предметов, удовлетворяющих условиям, то можно вывести любой. Обратите внимание, что вы не должны максимизировать сумму весов элементов в рюкзаке.

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указано количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Описание наборов входных данных приведено ниже.

Первая строка каждого набора входных данных содержит целые числа \(n\) и \(W\) (\(1 \le n \le 200\,000\), \(1\le W \le 10^{18}\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(w_1, w_2, \dots, w_n\) (\(1 \le w_i \le 10^9\)) — веса элементов.

Сумма \(n\) по всем наборам входных данных не превышает \(200\,000\).

Выходные данные

Для каждого набора входных данных, если нет решения, выведите одно целое число \(-1\).

Если есть решение, состоящее из \(m\) предметов, выведите \(m\) в первой строке и \(m\) целых чисел \(j_1\), \(j_2\), ..., \(j_m\) (\(1 \le j_i \le n\), где все \(j_i\) попарно различны) во второй строке  — индексы предметов, которые вы хотели бы упаковать в рюкзак.

Если есть несколько возможных списков предметов, удовлетворяющих условиям, то можно вывести любой. Обратите внимание, что вы не должны максимизировать сумму весов элементов в рюкзаке.

Примечание

В первом наборе входных данных, вы можете взять предмет весом \(3\) и полностью заполнить рюкзак.

Во втором наборе входных данных, все предметы больше, чем рюкзак. Следовательно, ответ \(-1\).

В третьем наборе входных данных вы заполните рюкзак ровно наполовину.

E. Долгое выздоровление

Конструктив поиск в глубину и подобное *3500

Пациент был заражен неизвестной болезнью. Его тело представляет собой бесконечную сетку из треугольных ячеек, которая выглядит следующим образом:

Две клетки являются соседними, если у них есть общая сторона. Поэтому у каждой ячейки (\(x\), \(y\)) есть ровно три соседа:

  • (\(x+1\), \(y\))
  • (\(x-1\), \(y\))
  • (\(x+1\), \(y-1\)), если \(x\) четно и (\(x-1\), \(y+1\)) в противном случае.

Изначально некоторые ячейки заражены, все остальные здоровы. Начинается процесс выздоровления. Каждую секунду для ровно одной ячейки (хотя может быть несколько ячеек, которые могут изменить свое состояние) происходит одно из следующих событий:

  • Здоровая клетка с по крайней мере \(2\) зараженными соседями становится зараженной.
  • Зараженная клетка с по крайней мере \(2\) здоровыми соседями становится здоровой.

Если такой клетки нет, то процесс выздоровления останавливается. Пациент считается выздоровевшим, если процесс выздоровления остановлен и все клетки здоровы.

Нас интересует худший сценарий: возможно ли, что пациент никогда не выздоровеет, или, если это невозможно, какова максимально возможная продолжительность процесса выздоровления?

Входные данные

В первой строке содержится одно целое число \(n\) \((1 \leq n \leq 250000)\)  — количество зараженных ячеек.

В \(i\)-й из следующих \(n\) строк содержится два разделенных пробелами целых числа \(x_i\) и \(y_i\) \((0 \leq x_i, y_i < 500)\), что означает, что ячейка \((x_i, y_i)\) заражена. Все ячейки \((x_i, y_i)\) попарно различны, а все остальные клетки считаются здоровыми.

Выходные данные

Если может случиться так, что организм никогда полностью не выздоровеет после болезни, выведите SICK. В противном случае выведите RECOVERED и в следующей строке целое число \(k\) — максимально возможную продолжительность процесса выздоровления, по модулю \(998244353\).

Примечание

Для первого примера следующие рисунки описывают самый длительный возможный процесс восстановления. Можно доказать, что нет периодов восстановления длиной \(5\) и более, и что организм всегда восстанавливается.

\(\hspace{40pt} \downarrow\) \(\hspace{40pt} \downarrow\) \(\hspace{40pt} \downarrow\) \(\hspace{40pt} \downarrow\)

\(\hspace{15pt}\) RECOVERED

Для второго теста можно заразить клетки \((2, 0)\), \((2, 1)\), \((0, 1)\). После этого ни одна клетка не может изменить свое состояние, поэтому ответ SICK, так как не все клетки здоровы.

A. Добавьте конфет

Конструктив математика *800

Есть \(n\) пакетов с конфетами, изначально \(i\)-й пакет содержит \(i\) конфет. Вы хотите, чтобы в конце все пакеты содержали одинаковое количество конфет.

Чтобы добиться этого, вы:

  • Выберете \(m\), удовлетворяющее \(1 \le m \le 1000\).

  • Выполните \(m\) операций. В \(j\)-ю операцию вы выберете один из пакетов и добавите по \(j\) конфет во все пакеты, кроме выбранного.

Ваша цель — найти подходящую последовательность операций, после которой все пакеты будут содержать равное количество конфет.

  • Можно доказать, что при заданных ограничениях такая последовательность всегда существует.

  • Вы не должны минимизировать \(m\).

  • Если есть несколько подходящих последовательностей, вы можете вывести любую.

Входные данные

Каждый тест содержит несколько наборов входных данных.

В первой строке указано количество наборов входных данных \(t\) (\(1 \le t \le 100\)). Описание наборов входных данных приведено ниже.

Первая и единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n\le 100\)).

Выходные данные

Для каждого набора входных данных выведите две строки с вашим ответом.

В первой строке выведите \(m\) (\(1\le m \le 1000\)) — количество операций, которые вы хотите выполнить.

Во второй строке выведите \(m\) положительных целых чисел \(a_1, a_2, \dots, a_m\) (\(1 \le a_i \le n\)), где \(a_j\) — это номер пакета, который вы выбрали в \(j\)-ю операцию.

Примечание

В первом наборе входных данных, добавив \(1\) конфету во все мешки кроме второго, получаем конфигурацию с \([2, 2]\) конфетами.

Во втором наборе входных данных сначала вы используете первые три операции, чтобы добавить \(1+2+3=6\) конфет в сумме к каждому мешку кроме третьего, что дает вам \([7, 8, 3]\). После этого вы добавляете \(4\) конфеты во второй и третий мешки, таким образом получая \([7, 12, 7]\), а потом по \(5\) конфет в первый и третий мешки — в результате получая \([12, 12, 12]\).

B. Счастливое число 2

Конструктив *1800

Петя любит счастливые числа. Всем известно, что счастливыми являются положительные целые числа, в десятичной записи которых содержатся только счастливые цифры 4 и 7. Например, числа 47, 744, 4 являются счастливыми, а 5, 17, 467 — не являются.

Петя очень любит длинные счастливые числа. Петю интересует минимальное счастливое число d, которое удовлетворяет некоторым условиям. Пусть cnt(x) — количество вхождений числа x в число d как подстроки. Например, если d = 747747, то cnt(4) = 2, cnt(7) = 4, cnt(47) = 2, cnt(74) = 2. Петя хочет, чтобы одновременно выполнялись условия: cnt(4) = a1, cnt(7) = a2, cnt(47) = a3, cnt(74) = a4. Вхождения других чисел Петю не интересуют. Помогите ему с этой задачей.

Входные данные

В единственной строке задано четыре целых числа a1, a2, a3 и a4 (1 ≤ a1, a2, a3, a4 ≤ 106).

Выходные данные

В единственной строке выведите ответ на задачу без ведущих нулей — минимальное счастливое число d такое, что cnt(4) = a1, cnt(7) = a2, cnt(47) = a3, cnt(74) = a4. Если такого числа не существует, выведите единственное число «-1» (без кавычек).

A. Избежать Trygub

Конструктив сортировки *800

Строка \(b\) является подпоследовательностью строки \(a\), если \(b\) может быть получена из \(a\) удалением нескольких (возможно нуля или всех) символов. Например, «xy» подпоследовательность «xzyw» и «xy», но не «yx».

Вам дана строка \(a\). Ваша задача переставить символы \(a\), так что «trygub» не будет подпоследовательностью получившейся строки.

Другими словами, вы должны найти строку \(b\), которая является перестановкой символов строки \(a\) и «trygub» не является подпоследовательностью \(b\).

У нас есть замечательное, верное доказательство того, что любая строка может быть переупорядочена так, чтобы не содержать «trygub» в качестве подпоследовательности, но условие этой задачи слишком короткое для его изложения.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1\le t\le 100\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится единственное целое число \(n\) (\(1\le n\le 200\)) — длина \(a\).

В следующей строке находится строка \(a\) длины \(n\), состоящая из строчных символов латинского алфавита.

Выходные данные

Для каждого набора входных данных выведите строку \(b\) длины \(n\), которая является перестановкой символов строки \(a\) и «trygub» не является ее подпоследовательностью.

Если существует несколько возможных строк \(b\), вы можете вывести любую.

Примечание

В первом наборе входных данных «bugyrtnotna» не содержит «trygub» как подпоследовательность. Она содержит все символы «trygub», но не в правильном порядке, поэтому это не подпоследовательность.

Во втором наборе входных данных мы можем не менять порядок символов, потому что это не требуется.

В третьем наборе входных данных «bruhtrywatchinggura» содержит «trygu» как подпоследовательность, но не содержит «trygub».

C1. Крестики Нолики Errichto (простая версия)

Конструктив математика *2100

Единственное различие между простой и сложной версиями задачи состоит в том, что символ O не встречается во входных данных простой версии.

Errichto бросил Monogon-у следующий вызов, чтобы запугать его и не дать занять первое место по вкладу на Codeforces.

В таблице для игры в крестики нолики есть \(n\) строк и \(n\) столбцов. Каждая клетка таблицы либо пустая, либо содержит фишку. Всего есть два типа фишек: X и O. Если есть три фишки одного типа, последовательные в какой-то строке или в каком-то столбце, то это выигрышная конфигурация. Иначе это ничейная конфигурация.

Примеры в первой строке это выигрышные конфигурации. Примеры во второй строке это ничейные конфигурации.

За одну операцию вы можете поменять фишку X на O или фишку O на X. Обозначим за \(k\) общее количество фишек в таблице. Ваша задача сделать таблицу ничейной за не более \(\lfloor \frac{k}{3}\rfloor\) (округление вниз) операций.

Вы не обязаны минимизировать количество операций.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1\le t\le 100\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится единственное целое число \(n\) (\(1\le n\le 300\)) — размер таблицы.

В следующих \(n\) строках находятся строки, состоящие из \(n\) символов, задающие изначальную таблицу. Символ в \(i\)-й строке и \(j\)-м столбце это '.', если клетка пустая, иначе он совпадает с типом фишки, содержащейся в этой клетке таблицы: 'X' или 'O'.

Гарантируется, что не все клетки пустые.

В простой версии, символ 'O' не встречается во входных данных.

Сумма \(n\) по всем наборам входных данных не превосходит \(300\).

Выходные данные

Для каждого набора входных данных выведите состояние таблицы после выполнения операций.

У нас есть доказательство, что решение всегда существует. Если есть несколько возможных решений, выведите любое.

Примечание

В первом наборе входных данных есть изначально три 'X' последовательных во второй строке и во втором столбце. Изменив фишку посередине на 'O' мы получим ничейную конфигурацию. При этом мы поменяли \(1\le \lfloor 5/3\rfloor\) фишку.

Во втором наборе входных данных мы изменяем \(9\le \lfloor 32/3\rfloor\) фишек и после этого не существует трех 'X' или 'O', последовательных в одной строке или одном столбце, поэтому это ничейная конфигурация.

В третьем наборе входных данных мы изменяем \(3\le \lfloor 12/3\rfloor\) фишки и получившаяся конфигурация будет ничейной.

C2. Крестики Нолики Errichto (сложная версия)

Конструктив математика *2300

Единственное различие между простой и сложной версиями задачи состоит в том, что символ O не встречается во входных данных простой версии.

Errichto бросил Monogon-у следующий вызов, чтобы запугать его и не дать занять первое место по вкладу на Codeforces.

В таблице для игры в крестики нолики есть \(n\) строк и \(n\) столбцов. Каждая клетка таблицы либо пустая, либо содержит фишку. Всего есть два типа фишек: X и O. Если есть три фишки одного типа, последовательные в какой-то строке или в каком-то столбце, то это выигрышная конфигурация. Иначе это ничейная конфигурация.

Примеры в первой строке это выигрышные конфигурации. Примеры во второй строке это ничейные конфигурации.

За одну операцию вы можете поменять фишку X на O или фишку O на X. Обозначим за \(k\) общее количество фишек в таблице. Ваша задача сделать таблицу ничейной за не более \(\lfloor \frac{k}{3}\rfloor\) (округление вниз) операций.

Вы не обязаны минимизировать количество операций.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1\le t\le 100\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится единственное целое число \(n\) (\(1\le n\le 300\)) — размер таблицы.

В следующих \(n\) строках находятся строки, состоящие из \(n\) символов, задающие изначальную таблицу. Символ в \(i\)-й строке и \(j\)-м столбце это '.', если клетка пустая, иначе он совпадает с типом фишки, содержащейся в этой клетке таблицы: 'X' или 'O'.

Гарантируется, что не все клетки пустые.

Сумма \(n\) по всем наборам входных данных не превосходит \(300\).

Выходные данные

Для каждого набора входных данных выведите состояние таблицы после выполнения операций.

У нас есть доказательство, что решение всегда существует. Если есть несколько возможных решений, выведите любое.

Примечание

В первом наборе входных данных есть изначально три 'O' последовательных во второй строке и во втором столбце. Изменив фишку посередине на 'X' мы получим ничейную конфигурацию. При этом мы поменяли \(1\le \lfloor 5/3\rfloor\) фишку.

Во втором наборе входных данных итоговая конфигурация ничейная. Мы поменяли \(8\le \lfloor 32/3\rfloor\) фишек.

В третьем наборе входных данных итоговая конфигурация ничейная. Мы поменяли \(7\le \lfloor 21/3\rfloor\) фишек.

E. Капитализм

графы Конструктив кратчайшие пути поиск в глубину и подобное *2700

Общество может быть представлено как связный, неориентированный граф с \(n\) вершинами и \(m\) ребрами. Вершины соответствуют людям, а ребро \((i,j)\) обозначает дружбу между людьми \(i\) и \(j\).

В этом обществе доход \(i\)-о человека равен \(a_i\). Человек \(i\) завидует человеку \(j\), если \(a_j=a_i+1\). То есть человек \(j\) имеет ровно на \(1\) больше дохода, чем человек \(i\).

Общество называется капиталистическим, если для всех пар друзей один из друзей завидует другому. Для некоторых пар друзей вы знаете, какой из друзей завидует другому. Для остальных пар, вы не знаете кто кому завидует.

Неравенство доходов общества определяется как \(\max\limits_{1 \leq i \leq n} a_i - \min\limits_{1 \leq i \leq n} a_i\).

Вы знаете про все существующие пары друзей, но не знаете доходы людей. Если это общество не может быть капиталистическим ни при каких доходах людей, сообщите об этом. Иначе, вы должны найти возможные доходы для всех людей такие, чтобы общество было капиталистическим и неравенство доходов было максимальным.

Входные данные

В первой строке находится два целых числа \(n\), \(m\) (\(1\le n\le 200\), \(n-1\le m\le 2000\)) — количество людей и пар друзей, соответственно.

Следующие \(m\) строк описывают пары друзей. Каждая пара друзей описывается тремя целыми числами \(i\), \(j\), \(b\) (\(1\le i, j\le n, i\ne j, 0\le b\le 1\)). Это описание означает, что люди \(i\) и \(j\) друзья. Если \(b=1\), то человек \(i\) завидует человеку \(j\). Если \(b=0\), то один из двух друзей должен завидовать другому, но неизвестно кто именно кому.

Существует не более одной дружбы между любой парой людей. Гарантируется, что если рассмотреть все пары друзей как неориентированные ребра, получившийся граф будет связным.

Выходные данные

Выведите «YES», если заданное общество может быть капиталистическим и «NO», иначе. Вы можете выводить символы в любом регистре (верхнем или нижнем).

Если ответ «YES» вы должны вывести еще две строки. В первой строке выведите максимальное возможное неравенство доходов. В следующей строке вы должны вывести \(n\) целых чисел \(a_1,\ldots, a_n\) (\(0\le a_i\le 10^6\)), где \(a_i\) это доход \(i\)-о человека.

Можно доказать, что если решение существует, то существует решение, в котором \(0\le a_i\le 10^6\) для всех \(i\).

Если существует несколько возможных решений, выведите любое.

Примечание

В первом тесте можно показать, что для заданного общества не может быть неравенство доходов, большее чем \(3\). В приведенном ответе с неравенством доходов, равным \(3\):

  • Человек \(2\) завидует человеку \(1\).
  • Человек \(3\) завидует человеку \(2\).
  • Человек \(5\) завидует человеку \(2\).
  • Человек \(6\) завидует человеку \(5\) (удовлетворено условие на то, кто из друзей завидует другому).
  • Человек \(6\) завидует человеку \(3\).
  • Человек \(2\) завидует человеку \(4\) (удовлетворено условие на то, кто из друзей завидует другому).

Во втором тесте можно показать, что не существует способа выбрать доходы, чтобы удовлетворить все условия.

F. Борющийся участник

жадные алгоритмы Конструктив *2400

Чтобы помочь тем участникам, которые испытывают трудности в большинстве контестов, основатели Codeforces решили ввести Дивизион 5. В этом новом дивизионе теги всех задач будут анонсированы перед началом раунда, чтобы помочь его участникам.

Контест состоит из \(n\) задач, где тег \(i\)-й задачи определяется целым числом \(a_i\).

Вы хотите совершить AK (All Kill, решить все задачи). Чтобы это сделать, вы должны решить все задачи в некотором порядке. Чтобы было веселее писать контест, вы задали себе дополнительные ограничения. Вы не хотите подряд решать две задачи с одинаковым тегом, потому что это скучно. Также, вы боитесь больших прыжков в сложности во время решения задач, поэтому вы хотите минимизировать количество раз, когда вы подряд решаете две задачи, не соседние в порядке задач контеста.

Более формально, ваш порядок решения задач может быть задан перестановкой \(p\) длины \(n\). Цена перестановки определяется как количество индексов \(i\) (\(1\le i<n\)), таких что \(|p_{i+1}-p_i|>1\). У вас есть требование, что \(a_{p_i}\ne a_{p_{i+1}}\) для всех \(1\le i< n\).

Вы хотите найти минимальную возможную цену перестановки, которая удовлетворяет этому требованию. Если не существует перестановок, которые ему удовлетворяют, сообщите об этом.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1\leq t\leq 10^4\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится единственное целое число \(n\) (\(1 \le n \le 10^5\)) — количество задач в контесте.

В следующей строке находится \(n\) целых чисел \(a_1,a_2,\ldots a_n\) (\(1 \le a_i \le n\)) — теги задач.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных, если не существует перестановок, удовлетворяющих необходимому требованию, выведите \(-1\). Иначе выведите минимальную возможную цену переставновки, удовлетворяющей требованию.

Примечание

В первом наборе входных данных рассмотрим \(p=[5, 4, 3, 2, 1, 6]\). Цена этой перестановки будет \(1\), потому что мы прыгаем с \(p_5=1\) на \(p_6=6\) и \(|6-1|>1\). Эта перестановка удовлетворяет требованию, потому что мы не решаем подряд две задачи с одинаковым тегом. Невозможно получить цену, меньшую чем \(1\).

Во втором наборе входных данных рассмотрим \(p=[1,5,2,4,3]\). Цена этой перестановки будет \(3\), потому что \(|p_2-p_1|>1\), \(|p_3-p_2|>1\) и \(|p_4-p_3|>1\). Эта перестановка удовлетворяет требованию, потому что мы не решаем подряд две задачи с одинаковым тегом. Невозможно получить цену, меньшую чем \(3\).

В третьем наборе входных данных для любого порядка решения задач мы будем подряд решать хотя бы одну пару задач с одинаковым тегом, поэтому ответ \(-1\).

E1. Битовые запросы (упрощенная версия)

битмаски интерактив Конструктив математика *2000

Это упрощенная версия задачи. Две версии отличаются ограничением на число запросов. Вы можете взламывать по этой задаче только если обе версии решены. Это интерактивная задача.

У Ridbit есть массив \(a\) из \(n\) целых хочет, и он хочет, чтобы Ashish его отгадал. \(n\) является степенью двойки. Ashish может спрашивать запросы трех видов. Они могут быть вида

  • AND \(i\) \(j\)  — узнать побитовое И элементов \(a_i\) и \(a_j\) \((1 \leq i, j \le n\), \(i \neq j)\)
  • OR \(i\) \(j\)  — узнать побитовое ИЛИ элементов \(a_i\) и \(a_j\) \((1 \leq i, j \le n\), \(i \neq j)\)
  • XOR \(i\) \(j\)  — узнать побитовое исключающее ИЛИ элементов \(a_i\) и \(a_j\) \((1 \leq i, j \le n\), \(i \neq j)\)

Можете ли вы помочь Ashish определить элементы массива?

В этой версии, каждый элемент имеет значение из отрезка \([0, n-1]\) (включительно) и Ashish может спросить не более \(n+2\) запросов.

Входные данные

В первой строке записано одно целое число \(n\) \((4 \le n \le 2^{16})\) — длина массива. Гарантируется, что \(n\) — степень двойки.

Протокол взаимодействия

Чтобы сделать запрос, выведите одну из следующих строк (без кавычек):

  • «AND i j»;
  • «OR i j»;
  • «XOR i j»;
где \(i\) и \(j\) \((1 \leq i, j \le n\), \(i \neq j)\) обозначают индексы запроса.

На каждый запрос вы получите в ответ одно целое число \(x\), которое означает значение ответа на ваш вопрос. Если ваш запрос некорректный, вы получите в ответ \(x = -1\). В таком случае вам требуется закончить выполнение программы.

Когда вы угадали элементы массива, вам требуется вывести одну строку, содержащую «!» (без кавычек), после чего должны идти \(n\) разделенных пробелами целых чисел — элементы массива.

Отгадывание массива не считается в числе сделанных запросов.

Интерактор не является адаптивным. Массив \(a\) не меняется с запросами.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Чтобы взломать решение, используйте следующий формат.

В первой строке выведите одно целое число \(n\) \((4 \le n \le 2^{16})\) — длину массива. Она должна быть степенью двойки. В следующий строке должны быть записаны \(n\) разделенных пробелами целых чисел из отрезка \([0, n-1]\) — массив \(a\).

Примечание

Массив \(a\) в первом примере это \([0, 0, 2, 3]\).

E2. Битовые запросы (усложенная версия)

битмаски интерактив Конструктив математика *2300

Это усложненная версия задачи. Две версии отличаются ограничением на число запросов. Вы можете взламывать по этой задаче только если обе версии решены.

Это интерактивная задача.

У Ridbit есть массив \(a\) из \(n\) целых хочет, и он хочет, чтобы Ashish его отгадал. \(n\) является степенью двойки. Ashish может спрашивать запросы трех видов. Они могут быть вида

  • AND \(i\) \(j\)  — узнать побитовое И элементов \(a_i\) и \(a_j\) \((1 \leq i, j \le n\), \(i \neq j)\)
  • OR \(i\) \(j\)  — узнать побитовое ИЛИ элементов \(a_i\) и \(a_j\) \((1 \leq i, j \le n\), \(i \neq j)\)
  • XOR \(i\) \(j\)  — узнать побитовое исключающее ИЛИ элементов \(a_i\) и \(a_j\) \((1 \leq i, j \le n\), \(i \neq j)\)

Можете ли вы помочь Ashish определить элементы массива?

В этой версии, каждый элемент имеет значение из отрезка \([0, n-1]\) (включительно) и Ashish может спросить не более \(n+1\) запросов.

Входные данные

В первой строке записано одно целое число \(n\) \((4 \le n \le 2^{16})\) — длина массива. Гарантируется, что \(n\) — степень двойки.

Протокол взаимодействия

Чтобы сделать запрос, выведите одну из следующих строк (без кавычек):

  • «AND i j»;
  • «OR i j»;
  • «XOR i j»;
где \(i\) и \(j\) \((1 \leq i, j \le n\), \(i \neq j)\) обозначают индексы запроса.

На каждый запрос вы получите в ответ одно целое число \(x\), которое означает значение ответа на ваш вопрос. Если ваш запрос некорректный, вы получите в ответ \(x = -1\). В таком случае вам требуется закончить выполнение программы.

Когда вы угадали элементы массива, вам требуется вывести одну строку, содержащую «!» (без кавычек), после чего должны идти \(n\) разделенных пробелами целых чисел — элементы массива.

Отгадывание массива не считается в числе сделанных запросов.

Интерактор не является адаптивным. Массив \(a\) не меняется с запросами.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Чтобы взломать решение, используйте следующий формат.

В первой строке выведите одно целое число \(n\) \((4 \le n \le 2^{16})\) — длину массива. Она должна быть степенью двойки. В следующий строке должны быть записаны \(n\) разделенных пробелами целых чисел из отрезка \([0, n-1]\) — массив \(a\).

Примечание

Массив \(a\) в первом примере это \([0, 0, 2, 3]\).

F. Обнулить матрицу

игры Конструктив *2700

Jeel и Ashish играют в игру на матрице \(n \times m\). Строки пронумерованы от \(1\) до \(n\) сверху вниз, а столбцы пронумерованы от \(1\) до \(m\) слева направо. Они ходят по очереди. Ashish ходит первым.

Исходно каждая клетка матрицы содержит неотрицательное целое число. На каждом ходу игрок должен выполнить все следующие операции по порядку.

  • Выбрать стартовую клетку \((r_1, c_1)\) с ненулевым значением.
  • Выбрать финишную клетку \((r_2, c_2)\) так, что \(r_1 \leq r_2\) и \(c_1 \leq c_2\).
  • Уменьшить значение в стартовой клетке на положительное целое число.
  • Выбрать любой кратчайший путь между двумя клетками и уменьшить/увеличить/не изменить все клетки на этом пути. Обратите внимание, что:
    • кратчайший путь это путь, который проходит по наименьшему числу клеток;
    • все клетки на этом пути не включают стартовую клетку, но финишная клетка может быть изменена;
    • итоговое значение каждой клетки должно быть неотрицательным целым числом;
    • клетки изменяются независимо, не обязательно на одно и то же число.

Если стартовая и финишная клетки совпадают, то, следуя правилам, значение этой клетки уменьшается. Никаких других операций не выполняется.

Игра заканчивается, когда значения всех клеток равны нулю. Игрок, который не может сделать ход, проигрывает. Можно показать, что при оптимальной игре обоих игроков игра закончится за конечное количество ходов.

Для данной матрицы, если оба игрока играют оптимально, можете ли вы узнать, кто выиграет?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \leq t \leq 10\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

В первой строке каждого набора входных данных записаны два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 100\)) — размерности матрицы.

В каждой из следующих \(n\) строк записаны \(m\) разделенных пробелами целых чисел \(a_{i,j}\) (\(0 \leq a_{i,j} \leq 10^6\)) — значения клеток матрицы.

Выходные данные

Для каждого набора входных данных, если первый игрок выиграет, выведите «Ashish». Иначе выведите «Jeel» (без кавычек).

Примечание

В первом наборе входных данных единственная клетка матрицы это 0, первый игрок не может сделать хода. Jeel побеждает.

Во втором наборе входных данных Ashish может выбрать \((r_1, c_1) = (r_2, c_2) = (1,3)\) и уменьшить значение клетки до \(0\), оставляя \([0, 0, 0]\). Jeel не может сделать хода. Ashish побеждает.

F. Разделяем степени

жадные алгоритмы Конструктив *2900

Вам задано мультимножество степеней двоек. Точнее, для каждого \(i\) от \(0\) до \(n\) невключительно у вас есть \(cnt_i\) элементов равных \(2^i\).

За одну операцию, вы можете выбрать один любой элемент \(2^l > 1\) и разделить его на два элемента \(2^{l - 1}\).

Вам нужно обработать \(q\) запросов. Каждый запрос имеет один из двух типов:

  • «\(1\) \(pos\) \(val\)» — присвоить \(cnt_{pos} := val\);
  • «\(2\) \(x\) \(k\)» — посчитать минимальное количество операций необходимых для того, чтобы сделать не менее \(k\) элементов со значениями не более \(2^x\).

Заметим, что запросы второго типа не влияют на мультимножество; таким образом, вы только считаете количество операций, но не применяете их.

Входные данные

В первой строке заданы два целых числа \(n\) и \(q\) (\(1 \le n \le 30\); \(1 \le q \le 2 \cdot 10^5\)) — размер массива \(cnt\) и количество операций.

Во второй строке заданы \(n\) целых чисел \(cnt_0, cnt_1, \dots, cnt_{n - 1}\) (\(0 \le cnt_i \le 10^6\)).

В следующих \(q\) строках заданы запросы: по одному в строке. Каждый запрос имеет один из двух типов:

  • «\(1\) \(pos\) \(val\)» (\(0 \le pos < n\); \(0 \le val \le 10^6\));
  • «\(2\) \(x\) \(k\)» (\(0 \le x < n\); \(1 \le k \le 10^{15}\)).

Гарантируется, что есть хотя бы один запрос второго типа.

Выходные данные

Для каждого запроса второго типа, выведите минимальное количество операций, необходимых для того, чтобы получить хотя бы \(k\) элементов со значением не более \(2^x\), либо \(-1\), если невозможно так сделать.

B. Суффиксные операции

Конструктив реализация *1400

У Gildong есть интересная машина, которая оперирует над массивом \(a\) из \(n\) целых чисел. Машина умеет выполнять операции двух типов:

  1. Увеличить все элементы на суффиксе массива на \(1\).
  2. Уменьшить все элементы на суффиксе массива на \(1\).

Суффикс это подотрезок (последовательных элементов) массива, содержащий \(a_n\). Иначе говоря, для всех \(i\), что \(a_i\) включен в отрезок, все \(a_j\), что \(i \lt j \le n\) тоже должны быть включены в отрезок.

Gildong хочет сделать все элементы в \(a\) равными — он всегда будет это делать минимальным возможным числом операций. Чтобы облегчить ему жизнь, перед тем, как Gildong начнет использовать машину, у вас есть возможность заменить любой один элемент массива на любое целое число. Вам разрешается оставить массив нетронутым. Вы хотите минимизировать число операций, которое совершит Gildong. С вашей помощью, какое минимальное число операций совершит Gildong?

Обратите внимание, что даже если вы измените одно число в массиве, вы не должны считать это как одну из операций, потому что Gildong ее не совершал.

Входные данные

Каждый тест состоит из одного или нескольких наборов входных данных. В первой строке записано количество наборов входных данных \(t\) (\(1 \le t \le 1000\)).

Каждый набор входных данных состоит из двух строк. В первой строке каждого набора входных записано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество элементов в массиве \(a\).

Во второй строке каждого набора входных данных записаны \(n\) целых чисел. \(i\)-е из них это \(a_i\) (\(-5 \cdot 10^8 \le a_i \le 5 \cdot 10^8\)).

Гарантируется, что сумма \(n\) по всем наборах входных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, которое должен совершить Gildong, чтобы сделать все элементы массива равными.

Примечание

В первом наборе входных данных все элементы массива уже одинаковы. Таким образом, вам не требуется совершать никаких операций, и Gildong совершит ноль операций.

Во втором наборе входных данных мы можем сделать \(a_3\) равным \(0\), и массив превратится в \([-1,0,0]\). После этого Gildong может совершить \(2\)-ю операцию один раз на суффиксе, начинающимся с \(a_2\), что уменьшит \(a_2\) и \(a_3\) на \(1\), превратив все элементы массива в \(-1\).

В третьем наборе входных данных можно сделать \(a_1\) равным \(96\), так что массив превратится в \([96,96,97,95]\). После этого Gildong должен:

  • Использовать \(2\)-ю операцию на суффиксе, который начинается с \(a_3\), один раз, превратив массив в \([96,96,96,94]\).
  • Использовать \(1\)-ю операцию на суффиксе, который начинается с \(a_4\), \(2\) раза, превратив массив в \([96,96,96,96]\).

В четвертом примере можно заменить массив на \([-3,-3,-2,1]\). Затем Gildong должен:

  • Использовать \(2\)-ю операцию на суффиксе, который начинается с \(a_4\), \(3\) раза, превратив массив в \([-3,-3,-2,-2]\).
  • Испоьзовать \(2\)-ю операцию на суффиксе, который начинается с \(a_3\), один раз, превратив массив в \([-3,-3,-3,-3]\).

D. Контрольные точки

жадные алгоритмы Конструктив математика Перебор Теория вероятностей *1900

Gildong разрабатывает игру, состоящую из \(n\) уровней, пронумерованных от \(1\) до \(n\). Игрок начинает игру на \(1\)-м уровне и должен проходить их в порядке возрастания номера. Игрок выигрывает, когда он проходит \(n\)-й уровень.

На каждом уровне есть не более одной контрольной точки, но она всегда есть на \(1\)-м уровне. В начале игры, только контрольная точка на \(1\)-м уровне активирована, а все остальные деактивированы. Когда игрок доходит до \(i\)-го уровня, на котором есть контрольная точка, эта контрольная точка активируется.

Для каждой попытки прохождения уровня, игрок может либо пройти уровень, либо проиграть. Если он проходит \(i\)-й уровень, игрок следует на \(i+1\)-й уровень. Если он проигрывает на \(i\)-м уровне, игрок отправляется на самую последнюю активированную контрольную точку, и ему требуется снова проходить уровни начиная с этой контрольной точки.

Например, если \(n = 4\) и контрольные точки расположены на \(1\)-м и \(3\)-м уровнях. Игрок начинает на \(1\)-м уровне. Если он проигрывает на \(1\)-м уровне, ему требуется снова проходить \(1\)-й уровень, потому что контрольная точка на \(1\)-м уровне это последняя активированная контрольная точка. Если игрок проходит \(1\)-й уровень, он двигается на \(2\)-й уровень. Если он проигрывает на нем, он отправляется обратно на \(1\)-й уровень. Если он проходит \(1\)-й уровень и \(2\)-й уровень, он отправляется на \(3\)-й уровень и активирует контрольную точку на \(3\)-м уровне. Теперь если он проиграет на \(3\)-м уровне, или на \(4\)-м уровне после прохождения \(3\)-го, он отправится обратно на \(3\)-й уровень. Если он пройдет и \(3\)-й уровень, и \(4\)-й, он выиграет игру.

Gildong хочет, чтобы сложности уровней были одинаковы. Он просит вас найти любую систему уровней и контрольных точек используя не больше чем \(2000\) уровней, чтобы математическое ожидание количества попыток на всех уровней (до прохождения игры) было равно \(k\), для игрока, который проходит каждой уровень с вероятностью \(\cfrac{1}{2}\).

Входные данные

Каждый тест состоит из одного или нескольких наборов входных данных. В первой строке записано количество наборов входных данных \(t\) (\(1 \le t \le 50\)).

Каждый набор входных данных состоит из ровно одной строки. В строке записано одно целое число \(k\) (\(1 \le k \le 10^{18}\)) — математическое ожидание суммарного числа попыток по всем уровням, которое Gildong хочет получить для игрока, который проходит каждый уровень с вероятностью \(\cfrac{1}{2}\).

Выходные данные

Для каждого набора входных данных, выведите \(-1\), если невозможно построить такую систему уровней и контрольных точек с не более чем \(2000\) уровней.

Иначе, выведите две строки. В первой строке должно быть записано одно целое число \(n\) (\(1 \le n \le 2000\)) — количество уровней. Во второй строке должны быть записаны \(n\) целых чисел, \(i\)-е из них описывает, установлена ли контрольная точка в \(i\)-м уровне. \(i\)-е число должно быть \(0\), если \(i\)-й уровень не содержит контрольную точку, и \(1\), если содержит. Обратите внимание, что первое число должно быть равно \(1\), согласно условию.

Примечание

В первом и втором наборе входных данных, можно видеть, что самая простая конструкция имеет только \(1\) уровень с контрольной точкой. Это требует \(2\) попытки прохождения, поэтому невозможно построить конструкцию с \(1\) попыткой.

В третьем наборе входных данных, это занимает \(2\) попытки в среднем чтобы пройти каждый уровень, и игрок всегда может повторить уровень без откатывания не прошлые уровни. Таким образом, математическое ожидание равно \(8\). Обратите внимание, что есть решения с меньшим количеством уровней, но вам не требуется минимизировать их количество.

A. Особая перестановка

Конструктив Теория вероятностей *800

Вам задано одно целое число \(n\) (\(n > 1\)).

Напомним, что перестановкой длины \(n\) называется массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\), расположенных в любом порядке. Например, \([2, 3, 1, 5, 4]\) является перестановкой длины \(5\), но \([1, 2, 2]\) не является перестановкой (\(2\) встречается в массиве дважды), а также \([1, 3, 4]\) не является перестановкой (\(n = 3\), но в массиве есть \(4\)).

Ваша задача — найти такую перестановку \(p\) длины \(n\), что не существует индекса \(i\) (\(1 \le i \le n\)) такого, для которого выполняется \(p_i = i\) (таким образом, для всех \(i\) от \(1\) до \(n\) должно выполняться условие \(p_i \ne i\)).

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Если существует несколько возможных ответов, вы можете вывести любой. Можно доказать, что ответ существует для любого \(n > 1\).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Единственная строка набора тестовых данных содержит одно целое число \(n\) (\(2 \le n \le 100\)) — длину перестановки, которую вам необходимо найти.

Выходные данные

Для каждого набора тестовых данных выведите \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) — перестановку, в которой не существует индекса \(i\) (\(1 \le i \le n\)) такого, что для него выполняется \(p_i = i\) (таким образом, для всех \(i\) от \(1\) до \(n\) должно выполняться условие \(p_i \ne i\)).

Если существует несколько возможных ответов, вы можете вывести любой. Можно доказать, что ответ существует для любого \(n > 1\).

Примечание

D. Число в последовательность

Конструктив математика теория чисел *1300

Вам задано целое число \(n\) (\(n > 1\)).

Ваша задача — найти последовательность целых чисел \(a_1, a_2, \ldots, a_k\) такую, что:

  • каждое \(a_i\) строго больше \(1\);
  • \(a_1 \cdot a_2 \cdot \ldots \cdot a_k = n\) (то есть произведение этой последовательности равно \(n\));
  • \(a_{i + 1}\) делится на \(a_i\) для всех \(i\) от \(1\) до \(k-1\);
  • \(k\) является максимально возможным (то есть длина этой последовательности является максимально возможной).

Если существует несколько таких последовательностей, любая из них считается подходящей. Можно доказать, что хотя бы одна корректная последовательность всегда существует для любого целого числа \(n > 1\).

Вам необходимо ответить на \(t\) независимых наборов тестовых данных.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов тестовых данных. Затем следуют \(t\) наборов тестовых данных.

Единственная строка набора тестовых данных содержит одно целое число \(n\) (\(2 \le n \le 10^{10}\)).

Гарантируется, что сумма \(n\) не превосходит \(10^{10}\) (\(\sum n \le 10^{10}\)).

Выходные данные

Выведите ответ на каждый набор тестовых данных: в первой строке выведите одно положительное целое число \(k\)максимально возможную длину \(a\). Во второй строке выведите \(k\) целых чисел \(a_1, a_2, \ldots, a_k\) — последовательность длины \(k\), удовлетворяющую ограничениям из условия задачи.

Если существует несколько возможных ответов, вы можете вывести любой из них. Можно доказать, что хотя бы одна корректная последовательность всегда существует для любого целого числа \(n > 1\).

B. Прыжки

Конструктив математика *1200

Вы стоите на оси \(\mathit{OX}\) в точке \(0\) и хотите попасть в целочисленную точку \(x > 0\).

Вы можете сделать некоторое количество прыжков. Предположим, вы сейчас в точке \(y\) (\(y\) может быть отрицательным) и прыгаете в \(k\)-й раз. Вы можете:

  • либо прыгнуть в точку \(y + k\),
  • либо прыгнуть в точку \(y - 1\).

Какое минимальное количество прыжков вам понадобится, чтобы попасть в точку \(x\)?

Входные данные

В первой строке задано единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой и единственной строке каждого набора задано единственное целое число \(x\) (\(1 \le x \le 10^6\)) — точка, куда вам нужно попасть.

Выходные данные

Для каждого набора входных данных, выведите единственное число — минимальное количество прыжков, чтобы попасть в \(x\). Можно доказать, что мы можем достигнуть любую целую точку \(x\).

Примечание

В первом наборе входных данных \(x = 1\), поэтому вам нужен только один прыжок: \(1\)-й прыжок из \(0\) в \(0 + 1 = 1\).

Во втором наборе \(x = 2\). Вам необходимы хотя бы три прыжка:

  • \(1\)-й прыжок из \(0\) в \(0 + 1 = 1\);
  • \(2\)-й прыжок из \(1\) в \(1 + 2 = 3\);
  • \(3\)-й прыжок из \(3\) в \(3 - 1 = 2\);

Двух прыжков недостаточно, потому что есть только следующие варианты:

  • \(1\)-й прыжок равный \(-1\) и \(2\)-й равный \(-1\) — вы попадете в \(0 -1 -1 =-2\);
  • \(1\)-й прыжок равный \(-1\) и \(2\)-й равный \(+2\) — вы попадете в \(0 -1 +2 = 1\);
  • \(1\)-й прыжок равный \(+1\) и \(2\)-й равный \(-1\) — вы попадете в \(0 +1 -1 = 0\);
  • \(1\)-й прыжок равный \(+1\) и \(2\)-й равный \(+2\) — вы попадете в \(0 +1 +2 = 3\);

В третьем наборе, вам нужно два прыжка: \(1\)-й равный \(+1\) и \(2\)-й равный \(+2\), тогда \(0 + 1 + 2 = 3\).

В четвертом наборе, вам нужно три прыжка: \(1\)-й равный \(-1\), \(2\)-й равный \(+2\) и \(3\)-й равный \(+3\), тогда \(0 - 1 + 2 + 3 = 4\).

C. Пинг-понг

игры Конструктив математика *1100

Алиса и Боб играют в пинг-понг по упрощенным правилам.

Игрок, подающий мяч, начинает раунд. Подающий наносит удар по мячу, затем принимающий делает ответный удар, отбивая мяч назад. После этого подающий и принимающий должны поочередно отбивать, пока один из них не пропустит мяч.

Тот, кто не отбивает удар, проигрывает этот раунд. Победитель раунда начинает следующий раунд. Алиса начинает первый раунд.

У Алисы \(x\) выносливости, а у Боба \(y\). Чтобы ударить по мячу (при подаче или отбивании), каждый игрок тратит \(1\) выносливости, поэтому, если у него нулевая выносливость, он не может отбить мяч (и проигрывает раунд) или не может подать мяч (в этом случае подача мяча переходит к другому игроку). Если у обоих игроков закончилась выносливость, игра окончена.

Иногда стратегически оптимально не отбивать мяч, проиграть текущий раунд, но сохранить выносливость. Но во время подачи игрок обязан произвести удар, если у него осталась выносливость.

И Алиса, и Боб играют оптимально и хотят, во-первых, максимизировать свое количество побед а, во-вторых, минимизировать количество побед своего противника.

Подсчитайте итоговое число побед Алисы и Боба.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая и единственная строка каждого набора содержит два целых числа \(x\) и \(y\) (\(1 \le x, y \le 10^6\)) — выносливость Алисы и Боба.

Выходные данные

Для каждого набора входных данных выведите два целых числа — итоговое число побед Алисы и Боба, если они оба играют оптимально.

Примечание

В первом примере Алиса подает мяч и тратит \(1\) выносливости. Затем Боб отбивает мяч и также тратит \(1\) выносливости. Алиса не может отбить мяч, так как у нее не осталось выносливости, и она проигрывает раунд. У них обоих закончилась выносливость, так что игра закончилась с \(0\) побед у Алисы и \(1\) победой Боба.

Во втором примере Алиса подает мяч и тратит \(1\) выносливости. Боб решает не отбивать мяч — он проигрывает раунд, но сохраняет выносливость. Алиса, как победитель последнего раунда, подает мяч в следующем и тратит еще \(1\) выносливости. На этот раз Боб отбивает мяч и тратит \(1\) выносливости. У Алисы не осталось сил, поэтому она не может отбить мяч и проигрывает раунд. У них обоих закончилась выносливость, так что игра закончилась с \(1\) победой у Алисы и \(1\) победой у Боба.

В третьем примере Алиса подает мяч и тратит \(1\) выносливости. Боб отбивает мяч и тратит \(1\) выносливости. У Алисы кончилась выносливость, поэтому она не может отбить мяч и проигрывает раунд. Боб, как победитель, подает мяч в следующих \(6\) раундах. Каждый раз Алиса не может отбить мяч и проигрывает каждую раунд. Игра заканчивается с \(0\) побед у Алисы и \(7\) победами у Боба.

E. Четыре точки

геометрия жадные алгоритмы Конструктив математика Перебор Потоки реализация Тернарный поиск *2400

Вам заданы четыре различные целые точки \(p_1\), \(p_2\), \(p_3\) и \(p_4\) на коодинатной плоскости \(\mathit{XY}\).

За один шаг вы можете выбрать одну из точек \(p_i\) и сдвинуть ее в одном из четырех направлений на единицу. Другими словами, если вы выбрали точку \(p_i = (x, y)\), вы можете передвинуть ее в \((x, y + 1)\), \((x, y - 1)\), \((x + 1, y)\) или \((x - 1, y)\).

Ваша задача — сдвинуть точки таким образом, чтобы они образовали квадрат со сторонами параллельными осям \(\mathit{OX}\) и \(\mathit{OY}\) (квадрат со стороной \(0\) разрешен).

Какое минимальное количество шагов вам нужно, чтобы получить такой квадрат?

Входные данные

В первой строке задано единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор состоит из четырех строк. В каждой строке заданы два целых числа \(x\) и \(y\) (\(0 \le x, y \le 10^9\)) — координаты одной из точек \(p_i = (x, y)\).

Все точки в одном наборе различные.

Выходные данные

Для каждого набора входных данных, выведите единственное число — минимальное количество шагов, необходимых для получения квадрата.

Примечание

В первом наборе входных данных, один из оптимальных ответов изображен ниже:

Каждая точка будет сдвинута два раза, поэтому ответ \(2 + 2 + 2 + 2 = 8\).

Во втором наборе, один из оптимальных ответов изображен ниже:

Ответ равен \(3 + 1 + 0 + 3 = 7\).

В третьем наборе, один из оптимальных ответов изображен ниже:

Ответ равен \(1 + 1 + 2 + 1 = 5\).

A. Генерация строки

жадные алгоритмы Конструктив *800

Одним осенним днём Джо заскучал от того, что не может найти себе интересное занятие. Чтобы как-то развлечь Джо, его друг Марти предложил ему сгенерировать строку длины \(n\). Казалось бы, в этом нет ничего сложного, однако Джо должен был сгенерировать свою строку по следующим правилам:

  • строка может содержать только символы 'a', 'b' или 'c';
  • максимальная длина подстроки данной строки, которая является палиндромом, не превосходит \(k\).

Строка \(a\) является подстрокой строки \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов из начала и нескольких (возможно, ни одного или всех) символов из конца. Например, строки «a», «bc», «abc» являются подстроками строки «abc», а строки «ac», «ba», «cba» — нет.

Строка называется палиндромом, если она одинаково читается слева направо и справа налево. Например, строки «abccba», «abbba», «aba», «abacaba», «a» и «bacab» — палиндромы, а строки «abcbba», «abb» и «ab» — нет.

Теперь Джо интересует, как может выглядеть любая подходящая строка. Помогите ему! Можно доказать, что при заданных ограничениях ответ всегда существует.

Входные данные

Каждый тест содержит один или несколько наборов входных данных. В первой строке записано количество наборов входных данных \(t\) (\(1 \le t \le 10\)).

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 1\,000\)) — требуемый размер строки и максимальную длину палиндромной подстроки соответственно.

Выходные данные

Для каждого набора входных данных выведите любую строку, удовлетворяющую ограничениям из условия задачи. Если существует несколько подходящих строк, то разрешается вывести любую из них. Можно доказать, что при заданных ограничениях ответ всегда существует.

Примечание

В первом наборе входных данных палиндромной подстрокой с максимальной длиной является подстрока «aa». Её длина не превосходит \(2\), а значит она является подходящей.

Во втором наборе входных данных все палиндромные подстроки имеют единичную длину.

A. Генерация строки

жадные алгоритмы Конструктив *800

Одним осенним днём Джо заскучал от того, что не может найти себе интересное занятие. Чтобы как-то развлечь Джо, его друг Марти предложил ему сгенерировать строку длины \(n\). Казалось бы, в этом нет ничего сложного, однако Джо должен был сгенерировать свою строку по следующим правилам:

  • строка может содержать только символы 'a', 'b' или 'c';
  • максимальная длина подстроки данной строки, которая является палиндромом, не превосходит \(k\).

Строка \(a\) является подстрокой строки \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов из начала и нескольких (возможно, ни одного или всех) символов из конца. Например, строки «a», «bc», «abc» являются подстроками строки «abc», а строки «ac», «ba», «cba» — нет.

Строка называется палиндромом, если она одинаково читается слева направо и справа налево. Например, строки «abccba», «abbba», «aba», «abacaba», «a» и «bacab» — палиндромы, а строки «abcbba», «abb» и «ab» — нет.

Теперь Джо интересует, как может выглядеть любая подходящая строка. Помогите ему! Можно доказать, что при заданных ограничениях ответ всегда существует.

Входные данные

Каждый тест содержит один или несколько наборов входных данных. В первой строке записано количество наборов входных данных \(t\) (\(1 \le t \le 10\)).

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 1\,000\)) — требуемый размер строки и максимальную длину палиндромной подстроки соответственно.

Выходные данные

Для каждого набора входных данных выведите любую строку, удовлетворяющую ограничениям из условия задачи. Если существует несколько подходящих строк, то разрешается вывести любую из них. Можно доказать, что при заданных ограничениях ответ всегда существует.

Примечание

В первом наборе входных данных палиндромной подстрокой с максимальной длиной является подстрока «aa». Её длина не превосходит \(2\), а значит она является подходящей.

Во втором наборе входных данных все палиндромные подстроки имеют единичную длину.

F. Математическое выражение

дп жадные алгоритмы Конструктив *2700

Барбара опоздала на урок математики, поэтому учитель сразу же заставил ее решить пример на листке. Барбара посмотрела на листок и увидела на нем лишь \(n\) чисел \(a_1, a_2, \ldots, a_n\), без каких-либо арифметических знаков. Учитель объяснил Барбаре, что ей требуется лишь расставить разрешенные знаки между числами так, чтобы получившееся выражение имело максимально возможное значение. Для того чтобы узнать разрешенные знаки, учитель дал Барбаре строку \(s\), которая содержит данную информацию.

Легко заметить, что Барбаре требуется поставить \(n - 1\) знак между соседними числами. Выражение должно начинаться с числа и все знаки должны быть разрешены (содержаться в строке \(s\)). Обратите внимание, что умножение имеет приоритет выше, чем сложение или вычитание, а сложение и вычитание имеют одинаковый приоритет и выполняются слева направо. Помогите Барбаре и составьте требуемое выражение!

Входные данные

Первая строка входных данных содержит единственное целое число \(n\) (\(1 \le n \le 10^5\)) — количество чисел на листке.

Вторая строка входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 9\)), где \(a_i\) равно \(i\)-му элементу \(a\).

Третья строка входных данных содержит строку \(s\) (\(1 \le |s| \le 3\)) — разрешенные в выражении знаки. Гарантируется, что строка может состоять только из символов «-», «+» и «*». Также гарантируется, что все символы строки различны.

Выходные данные

Выведите \(n\) чисел, разделённых \(n - 1\) знаком — выражение, имеющее максимальный результат. Если вариантов ответа несколько — выведите любой из них.

Примечание

В первом тестовом примере также подходят ответы: «2+2+0», «2+2-0», «2*2+0».

B. Найти массив

битмаски жадные алгоритмы Конструктив *1400

Вам дан массив \([a_1, a_2, \dots, a_n]\) такой, что \(1 \le a_i \le 10^9\). Пусть \(S\) – сумма всех элементов массива \(a\).

Назовем массив \(b\), состоящий из \(n\) целых чисел красивым, если:

  • \(1 \le b_i \le 10^9\) для всех \(i\) от \(1\) до \(n\);
  • для каждой пары соседних целых чисел из массива \((b_i, b_{i + 1})\), либо \(b_i\) делит \(b_{i + 1}\), либо \(b_{i + 1}\) делит \(b_i\) (или оба числа делятся друг на друга);
  • \(2 \sum \limits_{i = 1}^{n} |a_i - b_i| \le S\).

Ваша задача — найти красивый массив. Можно показать, что по крайней мере один красивый массив всегда существует.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк. Первая строка содержит одно целое число \(n\) (\(2 \le n \le 50\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите красивый массив \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 10^9\)) на отдельной строке. Можно показать, что существует по крайней мере один красивый массив. Если ответов несколько, выведите любой из них.

D. Пары

Бинарный поиск жадные алгоритмы Конструктив *1900

У вас есть \(2n\) целых чисел \(1, 2, \dots, 2n\). Вы распределяете все \(2n\) чисел на \(n\) пар. После этого вы выбираете \(x\) пар и из каждой из них берете минимум, а из каждой из оставшихся \(n - x\) пар — максимум.

Ваша цель — получить в результате выбора элементов множество \(\{b_1, b_2, \dots, b_n\}\).

Сколько существует различных \(x\)-в (\(0 \le x \le n\)) таких, что возможно получить множество \(b\), если для каждого \(x\) вы можете выбирать, как распределять числа и из каких \(x\) пар выбирать минимумы?

Входные данные

В первой строке задано единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Во второй строке каждого набора заданы \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_1 < b_2 < \dots < b_n \le 2n\)) — множество, которое вы хотите получить.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, выведите единственное число — количество различных \(x\)-в, таких, что возможно получить множество \(b\).

Примечание

В первом наборе входных данных, \(x = 1\) является единственным вариантом: у вас есть одна пара \((1, 2)\) и вы выбираете минимум в ней.

Во втором наборе, есть три возможных \(x\)-а. Если \(x = 1\), то вы можете сформировать следующие пары: \((1, 6)\), \((2, 4)\), \((3, 5)\), \((7, 9)\), \((8, 10)\). Вы можете взять минимум из \((1, 6)\) (равный \(1\)) и максимумы из остальных пар, чтобы получить множество \(b\).

Если \(x = 2\), вы можете сформировать пары \((1, 2)\), \((3, 4)\), \((5, 6)\), \((7, 9)\), \((8, 10)\) и взять минимумы из \((1, 2)\), \((5, 6)\) и максимумы из остальных пар.

Если \(x = 3\), вы можете сформировать пары \((1, 3)\), \((4, 6)\), \((5, 7)\), \((2, 9)\), \((8, 10)\) и взять минимумы из \((1, 3)\), \((4, 6)\), \((5, 7)\).

В третьем наборе, \(x = 0\) является единственным вариантом: вы можете сформировать пары \((1, 3)\), \((2, 4)\) и взять максимумы из обеих пар.

E. План лекций

графы Деревья Конструктив поиск в глубину и подобное реализация снм сортировки *2400

Иван — учитель по программированию. В течение учебного года он планирует прочитать \(n\) лекций на \(n\) различных тем. Каждая тема должна быть использована ровно в одной лекции. Иван хочет выбрать, какую тему он будет объяснять во время \(1\)-й, \(2\)-й, ..., \(n\)-й лекции — формально он хочет выбрать некоторую перестановку целых чисел от \(1\) до \(n\) (назовем эту перестановку \(q\)). \(q_i\) — это номер темы, которую Иван объяснит во время \(i\)-й лекции.

Для каждой темы (за исключением ровно одной) существует обязательная предшествующая тема (для \(i\)-й темы предшествующая тема — \(p_i\)). Иван не может читать лекцию по теме, не прочитав лекцию по ее предшествующей теме. Существует по крайней мере один допустимый порядок тем в соответствии с этими предварительными ограничениями.

Правильный порядок тем может помочь студентам лучше понять лекции. У Ивана есть \(k\) специальных пар тем \((x_i, y_i)\) таких, что он знает, что студенты лучше поймут \(y_i\)-ю тему, если лекция по ней будет проводиться сразу после лекции по \(x_i\)-й теме. Иван хочет удовлетворить ограничениям на каждую такую пару, то есть для каждого \(i \in [1, k]\) должно существовать некоторое \(j \in [1, n - 1]\) такое, что \(q_j = x_i\) и \(q_{j + 1} = y_i\).

Теперь Иван хочет знать, существует ли порядок тем, удовлетворяющий всем этим ограничениям, и если хотя бы один из них существует, найти любой из них.

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 3 \cdot 10^5\), \(1 \le k \le n - 1\)) — количество тем и количество специальных пар тем соответственно.

Вторая строка содержит \(n\) целых чисел \(p_1\), \(p_2\), ..., \(p_n\) (\(0 \le p_i \le n\)), где \(p_i\) — обязательная предшествующая тема для темы \(i\) (или \(p_i = 0\), если у \(i\)-й темы нет предшествующей темы). Ровно одно из этих целых чисел равно \(0\). Существует по крайней мере один порядок тем, такой что для каждой темы \(i\) тема \(p_i\) идет до \(i\)-й темы.

Затем следует \(k\) строк, \(i\)-я строка содержит два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\); \(x_i \ne y_i\)) — темы из специальной пары \(i\). Все значения \(x_i\) попарно различны; аналогично, все значения \(y_i\) попарно различны.

Выходные данные

Если не существует порядка тем, удовлетворяющих всем ограничениям, выведите \(0\).

В противном случае выведите \(n\) попарно различных целых чисел \(q_1\), \(q_2\), ..., \(q_n\) (\(1 \le q_i \le n\)) — порядок тем, удовлетворяющих всем ограничениям. Если ответов несколько, выведите любой из них.

A. Волшебник страны Orz

жадные алгоритмы Конструктив математика *900

Даны \(n\) панелей, расположенных в ряд, которые могут показывать любую цифру от \(0\) до \(9\). Изначально все панели показывают \(0\).

Каждую секунду цифры на всех панелях увеличиваются на \(1\). Другими словами, по прошествии каждой секунды панель, которая показывала \(9\), станет показывать \(0\); панель, которая показывала \(0\), станет показывать \(1\); панель, которая показывала \(1\), станет показывать \(2\) и так далее.

Если панель остановить, то цифра, отображаемая на этой панели, не будет меняться в последующие секунды.

Необходимо остановить ровно одну панель в любую секунду. После этого панели, примыкающие к ней, будут остановлены через одну секунду; панели, примыкающие к этим, будут остановлены через \(2\) секунды и так далее. Иными словами, если остановить панель \(x\), то панель \(y\) (для любых возможных \(y\)) будет остановлена ровно через \(|x−y|\) секунд.

Например, если есть \(4\) панели, и мы останавливаем \(3\)-ю панель, когда на ней отображается цифра \(9\), происходит следующее:

  • панель \(1\) останавливается через \(2\) секунды, когда на ней отображается цифра \(1\);
  • панель \(2\) останавливается через \(1\) секунду, когда на ней отображается цифра \(0\);
  • панель \(4\) останавливается через \(1\) секунду, когда на ней отображается цифра \(0\).

Получается число из \(4\) цифр: \(1090\). Обратите внимание: этот пример не является оптимальным ответом для \(n = 4\).

Как только все панели остановлены, все отображенные на них цифры выписываются слева направо, составляя число из \(n\) разрядов (в нем могут встречаться ведущие нули). Какое самое большое число при этом может быть получено? Изначально все панели показывают \(0\).

Входные данные

Первая строка входных данных состоит из единственного целого числа \(t\) (\(1 \le t \le 100\)) — количества наборов входных данных. Каждый такой набор состоит из одной строки, содержащей единственное целое число \(n\) (\(1 \le n \le 2\cdot10^5\)).

Гарантируется, что сумма \(n\) во всех наборах входных данных не превышает \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите наибольшее возможное число, которое можно получить, остановив одну из панелей оптимальным образом.

Примечание

Для первого набора входных данных оптимальным будет остановить первую панель, когда на ней отображается цифра \(9\).

Для второго набора входных данных оптимальным будет остановить вторую панель, когда на ней отображается цифра \(8\).

C. Три сумки

жадные алгоритмы Конструктив *1900

Даны три сумки. Каждая содержит непустое мультимножество чисел. Над сумками можно производить ряд операций. В ходе каждой операции разрешается выбрать любые две непустые сумки и по одному числу из каждой из этих сумок. Допустим, из первой сумки было выбрано число \(a\), а из второй — число \(b\). После этого число \(b\) убирается из второй сумки, а число \(a\) в первой сумке заменяется на \(a-b\). Обратите внимание, что если эти числа встречаются несколько раз, то убирается/заменяется лишь одно вхождение.

Все операции должны производиться таким образом, чтобы в итоге осталось лишь одно число в одной из сумок (две другие должны быть пустыми). Можно показать, что всегда существует такая комбинация операций, которая приведет к необходимой конечной конфигурации. Среди всех этих конфигураций требуется найти ту, при которой в конце останется наибольшее число.

Входные данные

Первая строка входных данных содержит три целых числа \(n_1\), \(n_2\) и \(n_3\) (\(1 \le n_1, n_2, n_3 \le 3\cdot10^5\), \(1 \le n_1+n_2+n_3 \le 3\cdot10^5\)), разделенных пробелами — количество чисел в трех сумках.

Каждая \(i\)-я из трех последующих строк содержит \(n_i\) целых чисел \(a_{{i,1}}\), \(a_{{i,2}}\), ..., \(a_{{i,{{n_i}}}}\) (\(1 \le a_{{i,j}} \le 10^9\)), разделенных пробелами — числа в мультимножестве \(i\)-й сумки.

Выходные данные

Выведите единственное целое число — максимальное из тех, что могут быть получены в конечной конфигурации.

Примечание

Для первого примера из условия произведем следующие операции:

\([1, 2], [6, 3, 4, 5], [5]\)

\([-5, 2], [3, 4, 5], [5]\) (Применяем операцию к \((1, 6)\))

\([-10, 2], [3, 4], [5]\) (Применяем операцию к \((-5, 5)\))

\([2], [3, 4], [15]\) (Применяем операцию к \((5, -10)\))

\([-1], [4], [15]\) (Применяем операцию к \((2, 3)\))

\([-5], [], [15]\) (Применяем операцию к \((-1, 4)\))

\([], [], [20]\) (Применяем операцию к \((15, -5)\))

Легко удостовериться в том, что большее число получить нельзя. Таким образом, ответом будет \(20\).

H. K and Medians

жадные алгоритмы Конструктив математика *2200

Let's denote the median of a sequence \(s\) with odd length as the value in the middle of \(s\) if we sort \(s\) in non-decreasing order. For example, let \(s = [1, 2, 5, 7, 2, 3, 12]\). After sorting, we get sequence \([1, 2, 2, \underline{3}, 5, 7, 12]\), and the median is equal to \(3\).

You have a sequence of \(n\) integers \([1, 2, \dots, n]\) and an odd integer \(k\).

In one step, you choose any \(k\) elements from the sequence and erase all chosen elements except their median. These elements do not have to go continuously (gaps are allowed between them).

For example, if you have a sequence \([1, 2, 3, 4, 5, 6, 7]\) (i.e. \(n=7\)) and \(k = 3\), then the following options for the first step are possible:

  • choose \([1, \underline{2}, 3]\); \(2\) is their median, so it is not erased, and the resulting sequence is \([2, 4, 5, 6, 7]\);
  • choose \([2, \underline{4}, 6]\); \(4\) is their median, so it is not erased, and the resulting sequence is \([1, 3, 4, 5, 7]\);
  • choose \([1, \underline{6}, 7]\); \(6\) is their median, so it is not erased, and the resulting sequence is \([2, 3, 4, 5, 6]\);
  • and several others.

You can do zero or more steps. Can you get a sequence \(b_1\), \(b_2\), ..., \(b_m\) after several steps?

You'll be given \(t\) test cases. Solve each test case independently.

Input

The first line contains a single integer \(t\) (\(1 \le t \le 1000\)) — the number of test cases.

The first line of each test case contains three integers \(n\), \(k\), and \(m\) (\(3 \le n \le 2 \cdot 10^5\); \(3 \le k \le n\); \(k\) is odd; \(1 \le m < n\)) — the length of the sequence you have, the number of elements you choose in each step and the length of the sequence you'd like to get.

The second line of each test case contains \(m\) integers \(b_1, b_2, \dots, b_m\) (\(1 \le b_1 < b_2 < \dots < b_m \le n\)) — the sequence you'd like to get, given in the ascending order.

It's guaranteed that the total sum of \(n\) over all test cases doesn't exceed \(2 \cdot 10^5\).

Output

For each test case, print YES if you can obtain the sequence \(b\) or NO otherwise. You may print each letter in any case (for example, YES, Yes, yes, yEs will all be recognized as positive answer).

Note

In the first test case, you have sequence \([1, 2, 3]\). Since \(k = 3\) you have only one way to choose \(k\) elements — it's to choose all elements \([1, \underline{2}, 3]\) with median \(2\). That's why after erasing all chosen elements except its median you'll get sequence \([2]\). In other words, there is no way to get sequence \(b = [1]\) as the result.

In the second test case, you have sequence \([1, 2, 3, 4, 5, 6, 7]\) and one of the optimal strategies is following:

  1. choose \(k = 3\) elements \([2, \underline{3}, 4]\) and erase them except its median; you'll get sequence \([1, 3, 5, 6, 7]\);
  2. choose \(3\) elements \([3, \underline{5}, 6]\) and erase them except its median; you'll get desired sequence \([1, 5, 7]\);

In the fourth test case, you have sequence \([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]\). You can choose \(k=7\) elements \([2, 4, 6, \underline{7}, 8, 10, 13]\) and erase them except its median to get sequence \(b\).

A. Правильная скобочная последовательность

жадные алгоритмы Конструктив *1000

Напомним, что скобочная последовательность называется правильной, если путем вставки в нее символов + и 1 можно получить из нее корректное математическое выражение. Например, последовательности (())(), () и (()(())) — правильные, в то время как )(, (() и (()))( — нет. Назовем правильную скобочную последовательность — «ПСП».

Вам задана последовательность \(s\) из \(n\) символов (, ) и/или ?. В этой последовательности есть ровно один символ ( и ровно один символ ).

Вам необходимо заменить каждый символ ? либо на ), либо на ( (разные символы ? могут быть заменены разными скобками). Вы не можете изменять порядок символов, удалять их, вставить другие символы, и каждый ? должен быть заменен.

Определите, возможно ли получить ПСП после этих замен.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей \(s\) (\(2 \le |s| \le 100\)) — последовательность символов (, ) и/или ?. В этой последовательности есть ровно один символ ( и ровно один символ ).

Выходные данные

Для каждого набора входных выведите YES, если можно получить правильную скобочную последовательность, или NO в противном случае}.

Вы можете вывести каждую букву в любом регистре (например, YES, Yes, yes, yEs будут распознаны как положительный ответ).

Примечание

В первом примере последовательность уже является ПСП.

В третьем примере вы можете получить ПСП следующим образом: ()() или (()).

В четвертом примере вы можете получить ПСП следующим образом: ()().

D. Деление с округлением вверх

Конструктив математика Перебор теория чисел *1700

Вам задан массив \(a_1, a_2, \dots, a_n\), в котором \(a_i = i\).

За один шаг, вы можете выбрать две позиции \(x\) и \(y\) (\(x \neq y\)) и присвоить \(a_x = \left\lceil \frac{a_x}{a_y} \right\rceil\) (деление с округлением вверх).

Ваша задача: сделать так, чтобы массив \(a\) состоял из \(n - 1\) единиц и \(1\)-й двойки за не более чем \(n + 5\) шагов. Заметим, что не нужно минимизировать количество шагов.

Входные данные

В первой строке задано единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой и единственной строке каждого набора задано одно целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — длина массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, выведите список операций, который сделает так, что массив \(a\) станет состоять из \(n - 1\) единиц и \(1\)-й двойки, в следующем формате: сначала, выведите одно число \(m\) (\(m \le n + 5\)) — количество операций; далее выведите \(m\) пар чисел \(x\) и \(y\) (\(1 \le x, y \le n\); \(x \neq y\)) (\(x\) может быть как больше, так и меньше \(y\)) — выбранные позиции на соответствующем шаге.

Можно доказать, что для заданных ограничений всегда возможно найти некоторый список операций.

Примечание

В первом наборе входных данных, у вас есть массив \(a = [1, 2, 3]\). Вы можете сделать, например, следующее:

  1. выберем \(3\), \(2\): \(a_3 = \left\lceil \frac{a_3}{a_2} \right\rceil = 2\) и массив \(a = [1, 2, 2]\);
  2. выберем \(3\), \(2\): \(a_3 = \left\lceil \frac{2}{2} \right\rceil = 1\) и массив \(a = [1, 2, 1]\).
Вы получили массив с \(2\) единицами и \(1\) двойкой за \(2\) шага.

Во втором наборе, \(a = [1, 2, 3, 4]\). Вы можете, например, сделать следующее:

  1. выберем \(3\), \(4\): \(a_3 = \left\lceil \frac{3}{4} \right\rceil = 1\) и массив \(a = [1, 2, 1, 4]\);
  2. выберем \(4\), \(2\): \(a_4 = \left\lceil \frac{4}{2} \right\rceil = 2\) и массив \(a = [1, 2, 1, 2]\);
  3. выберем \(4\), \(2\): \(a_4 = \left\lceil \frac{2}{2} \right\rceil = 1\) и массив \(a = [1, 2, 1, 1]\).

C. Странное перемешивание

Бинарный поиск интерактив Конструктив Перебор *2500

Это интерактивная задача.

Алиса, Витя, Сева и Антон решили перемешать колоду карт. Для этого они позвали \(n\) своих друзей, усадили их по кругу, пронумеровали от \(1\) до \(n\) против часовой стрелки (то есть друзья \(i\) и \(i+1\) являются соседями, друзья \(1\) и \(n\) тоже соседи) и раздали каждому по \(k\) карт, где \(k\) — четно. Соседом слева человека \(i\) является человек \(i - 1\), а соседом справа — человек \(i + 1\) (за исключением людей \(1\) и \(n\), которые являются соответствующими соседями друг друга).

Каждую секунду происходит следующее: если у человека находится \(x\) карт, то он передаёт \(\lfloor x / 2 \rfloor\) карт своему соседу слева и \(\lceil x / 2 \rceil\) карт соседу справа. Передача карт происходит одновременно для всех игроков.

Оказалось, что человек под номером \(p\) не понял, что он должен делать, и каждую секунду отдаёт все свои карты своему соседу справа. Вы знаете общее число друзей \(n\) и начальное количество карт у каждого из них \(k\), но не знаете \(p\). Ваша задача — узнать \(p\), задавая вопросы вида «сколько карт в данный момент находится у участника с номером \(q\)?», где \(q\) — некоторый выбранный вами индекс. После каждого из ваших вопросов участники произведут ровно один ход, передав карты своим соседям. Вам нужно угадать искомую позицию, задав не более \(1000\) вопросов.

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(4 \le n \le 10^5\), \(2 \le k \le 10^9\), \(k\) четно) — количество людей и количество карт у каждого из них изначально.

Протокол взаимодействия

Для того, чтобы узнать количество карт в текущий момент у человека под номером \(q\) (\(1 \le q \le n\)), выведите в отдельной строке «? \(q\)». Процесс перемешивания начинается после вашего первого вопроса, таким образом, ответ на первый вопрос всегда в точности равен \(k\).

Когда вы определили человека, который не понял правила, выведите в отдельной строке «! \(p\)», где \(p\) — искомая позиция (\(1 \le p \le n\)), и после этого ваша программа должна немедленно завершиться.

Вам требуется найти искомого человека, задав не более, чем \(1000\) вопросов.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Для того, чтобы сделать взлом, используйте следующий формат теста.

В единственной строке входных данных должны содержаться три числа \(n\), \(k\) и \(p\) (\(4 \le n \le 10^5\), \(2 \le k \le 10^9\), \(k\) четно, \(1 \le p \le n\)) — количество людей, количество карт у каждого из них и искомая позиция.

Примечание

В примере карты передаются следующим образом:

  • \(2\) \(2\) \(2\) \(2\) — у человека \(1\) количество карт равно \(2\).
  • \(1\) \(2\) \(3\) \(2\) — у человека \(1\) количество карт равно \(1\).

После этого количество карт у людей перестаёт меняться.

D. Странное расселение

графы жадные алгоритмы Конструктив Паросочетания поиск в глубину и подобное *2200

В ЛКШ на территории Летово школьники будь жить в домиках. Некоторые пары домиков соединены крытыми переходами, по которым можно перемещаться в обоих направлениях. В некоторых из этих домиках будут жить преподаватели, но из соображений безопасности они не могут быть размещены произвольным образом. А именно, должны выполняться следующие условия:

  • Каждый переход между домами, ни в одном из которых не живут преподаватели, будет закрыт. Все остальные переходы будут открыты.
  • От любого дома до другого должен существовать способ добраться по открытым переходам.
  • Преподаватели не могут жить в домах, соединённых переходом.

Помогите организаторам выбрать домики, в которых будут жить преподаватели, так, чтобы выполнялись все требования безопасности, или определите, что это невозможно.

Входные данные

В первой строке дано одно целое число \(t\) (\(1 \le t \le 10^5\)), обозначающее количество наборов входных данных.

Описание каждого набора входных данных начинается с двух чисел \(n\) и \(m\) (\(2 \le n \le 3 \cdot 10^5\), \(0 \le m \le 3 \cdot 10^5\)) — количества домиков и переходов.

Далее следуют \(m\) строк, в каждой из которых даны числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)), описывающие переход между домами \(u\) и \(v\). Гарантируется, что между любыми двумя домами существует не более одного перехода, и никакой переход не соединяет домик сам с собой.

Сумма значений \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\), и сумма \(m\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в первой строке выведите «YES», если организаторы могут поселить преподавателей так, чтобы выполнялись требования безопасности, и «NO» в противном случае. Если ответ «YES», то во второй строке выведите количество домов, в которые нужно поселить преподавателей, а в третьей строке — номера выбранных домов.

Примечание

Следующая картинка соответствует второму примеру из условия:

C. Хватит инверсий

Конструктив математика *1500

У вас есть последовательность \(a\) из \(n\) элементов \(1, 2, 3, \dots, k - 1, k, k - 1, k - 2, \dots, k - (n - k)\) (\(k \le n < 2k\)).

Назовем инверсией в \(a\) пару индексов \(i < j\) таких, что \(a[i] > a[j]\).

Предположим, что у вас есть некоторая перестановка \(p\) размера \(k\) и вы строите последовательность \(b\) размера \(n\) следующим образом: \(b[i] = p[a[i]]\).

Ваша задача — найти такую перестановку \(p\), что суммарное количество инверсий в \(b\) не превосходит суммарного количества инверсий в \(a\), и \(b\) лексикографически максимальна.

Напоминание: последовательность из \(k\) целых чисел называется перестановкой, если она содержит все числа от \(1\) по \(k\) ровно по одному разу.

Еще одно напоминание: последовательность \(s\) лексикографически меньше последовательности \(t\), если либо \(s\) — префикс \(t\), или для первого \(i\), для которого \(s_i \ne t_i\), выполняется \(s_i < t_i\) (в первой позиции, в которой эти последовательности различаются, элемент в \(s\) меньше элемента в \(t\)).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой и единственной строке каждого набора заданы два целых числа \(n\) и \(k\) (\(k \le n < 2k\); \(1 \le k \le 10^5\)) — длина последовательности \(a\) и ее максимум.

Гарантируется, что сумма \(k\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных, выведите \(k\) целых чисел — перестановку \(p\), которая максимизирует \(b\) лексикографически, не увеличивая суммарное количество инверсий.

Можно доказать, что \(p\) существует и единственная.

Примечание

В первом наборе входных данных, последовательность \(a = [1]\), поэтому существует только одна перестановка \(p = [1]\).

Во втором наборе, последовательность \(a = [1, 2]\). В \(a\) нет инверсий, а потому только одна перестановка \(p = [1, 2]\) не увеличивает количество инверсий.

В третьем наборе, \(a = [1, 2, 1]\) и имеет \(1\) инверсию. Если мы используем \(p = [2, 1]\), то \(b = [p[a[1]], p[a[2]], p[a[3]]] = [2, 1, 2]\) и также имеет \(1\) инверсию.

В четвертом наборе, \(a = [1, 2, 3, 2]\), и так как \(p = [1, 3, 2]\) то \(b = [1, 3, 2, 3]\). И \(a\), и \(b\) имеют по \(1\) инверсии и \(b\) — лексикографически максимальна.

B. Различные делители

Бинарный поиск жадные алгоритмы Конструктив математика теория чисел *1000

Число \(x\) называется делителем числа \(y\), если \(y\) делится на \(x\) без остатка. Например, \(1\) является делителем \(7\), а \(3\) не является делителем \(8\).

Мы дали Вам число \(d\) и попросили найти наименьшее положительное целое \(a\), обладающее следующими свойствами:

  • у числа \(a\) есть хотя бы \(4\) делителя;
  • разность между любыми двумя различными делителями \(a\) не меньше \(d\).
Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 3000\)) — количество наборов входных данных.

Описание каждого набора состоит из одной строки, в которой задано целое число \(d\) (\(1 \leq d \leq 10000\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число \(a\) — наименьшее число, удовлетворяющее условиям выше.

Примечание

В первом наборе входных данных, число \(6\) имеет делители \([1, 2, 3, 6]\). Их всего \(4\) и разница между любыми двумя их них не менее \(1\). Любое меньшее число имеет меньше \(4\) делителей.

Во втором наборе, число \(15\) имеет делители \([1, 3, 5, 15]\). Их всего \(4\) и разница между любыми двумя из них не менее \(2\).

Ответ \(12\) неверный, потому его делители: \([1, 2, 3, 4, 6, 12]\). И разность между, например, делителями \(2\) и \(3\) меньше \(d=2\).

C. Уничтожение массива

жадные алгоритмы Конструктив Перебор реализация сортировки Структуры данных *1700

Вы нашли бесполезный массив целых чисел \(a\) длины \(2n\). Так как он оказался Вам не нужен, Вы решили выкинуть все элементы \(a\).

Это было бы просто, но оказалось, что выкидывать числа надо, соблюдая следующие правила:

  1. Сначала Вы выбираете натуральное число \(x\).
  2. Затем Вы \(n\) раз повторите следующую операцию:
    • выбрать два числа с суммой \(x\)
    • выкинуть их из \(a\) и заменить \(x\) на максимальное из этих двух чисел.

Например, если изначально \(a = [3, 5, 1, 2]\), то Вы можете выбрать \(x = 6\) и выкинуть второе и третье число в \(a\), сумма которых равна \(5 + 1 = 6\). После этого \(x\) станет равно \(5\), а в массиве останутся числа \(3\) и \(2\), которые Вы можете выкинуть на следующей операции.

Обратите внимание, что Вы выбираете \(x\) только в начале и не можете изменить его между операциями.

Напишите программу, чтобы определить, как выбросить все элементы \(a\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следуют описания самих наборов.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \leq n \leq 1000\)).

Во второй строке каждого набора задано \(2n\) натуральных чисел \(a_1, a_2, \dots, a_{2n}\) (\(1 \leq a_i \leq 10^6\)) — изначальный массив \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных в первой строке выведите YES если возможно выкинуть все элементы массива. Иначе выведите NO.

Если Вы вывели YES в следующей строке выведите значение \(x\), которое Вы выбираете в начале. В следующих \(n\) строках выведите по два числа — числа, которые Вы выбираете на очередной операции.

Примечание

Первый набор входных данных был описан в условии.

Во втором и третьем наборах входных данных можно показать, что нельзя выкинуть все элементы массива \(a\).

E. Что это?

жадные алгоритмы Конструктив *2500

Луноход наконец-то достиг поверхности планеты X. Приземлившись, он встретился с препятствием, на котором записана перестановка \(p\) длины \(n\). Учёным удалось выяснить, что для того, чтобы преодолеть препятствие, необходимо добиться того, чтобы \(p\) стала тождественной (должно выполняться \(p_i = i\) для всех \(i\)).

К сожалению, учёные не могут управлять роботом на расстоянии. Из-за этого единственный способ сделать \(p\) тождественной — применить к \(p\) следующую операцию несколько раз:

  • Выбрать две позиции \(i\) и \(j\) (\(i \neq j\)), такие, что \(p_j = i\) и поменять местами значения \(p_i\) и \(p_j\). Операция занимает \((j - i)^2\) секунд из-за выполнения её роботом.

Позиции \(i\) и \(j\) выбирает робот (учёные не могут влиять на его выбор). Он будет применять эту операцию до тех пор, пока \(p\) не станет тождественной. Можно показать, что не более чем через \(n\) операций (вне зависимости от выбора \(i\) и \(j\)) перестановка станет тождественной.

Учёные попросили Вас найти максимальное время, за которое робот сделает \(p\) тождественной (т.е. худший возможный вариант развития событий), чтобы они могли отдохнуть или же отправить более продвинутый луноход на планету X. Также учёные попросили Вас предоставить пример перестановки \(p\) и последовательности операций робота, которые максимизируют ответ.

Для лучшего понимания условия обратитесь к примечаниям к примеру.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

В каждой из следующих \(t\) строк задано одно целое число \(n\) (\(2 \leq n \leq 10^5\)) — длина перестановки \(p\).

Обратите внимание, что перестановка \(p\) Вам не дана, и Вам нужно найти максимальное время работы робота по всем перестановкам длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных, в первой строке выведите максимальное время работы робота (в секундах).

Во второй строке выведите исходную перестановку \(p\), на которой достигается Ваш ответ.

В третьей строке выведите количество операций \(m \leq n\), которое робот сделает в Вашем примере.

В следующих \(m\) строках выведите по два числа \(i\) и \(j\) — индексы позиций, которые робот выбирает на этой операции. Обратите внимание, что \(p_j = i\) должно выполняться (в момент операции).

Примечание

Для \(n = 2\), \(p\) может быть равна \([1, 2]\) или \([2, 1]\). В первом случае \(p\) уже является тождественной, а во втором случае робот сделает её тождественной за \(1\) секунду вне зависимости от выбора \(i\) и \(j\) на первой операции.

Для \(n = 3\), \(p\) может оказаться равна \([2, 3, 1]\).

  • Если робот выберет \(i = 3, j = 2\) на первой операции, то через одну секунду \(p\) станет равна \([2, 1, 3]\). Теперь робот может выбрать только \(i = 1, j = 2\) или \(i = 2, j = 1\). В любом из этих случаев, \(p\) станет тождественной через ещё одну секунду (всего — \(2\) секунды).
  • Если робот выберет \(i = 1, j = 3\) на первой операции, то через четыре секунды \(p\) станет равна \([1, 3, 2]\). Вне зависимости от выбора \(i\) и \(j\) на второй операции, \(p\) станет тождественной через пять секунд работы робота.

Можно показать, что робот всегда сможет завершить работу с перестановкой длины \(3\) за \(5\) или меньше секунд.

F. Необычная матрица

2-sat Конструктив Перебор *1900

Вам даны две бинарные квадратные матрицы \(a\) и \(b\) размера \(n \times n\). Матрица называется бинарной, если каждый её элемент равен \(0\) или \(1\). Вы можете делать следующие операции над матрицей \(a\) произвольное число раз (0 или более):

  • вертикальный xor. Вы выбираете число \(j\) (\(1 \le j \le n\)) и для всех \(i\) (\(1 \le i \le n\)) делаете следующее: \(a_{i, j} := a_{i, j} \oplus 1\) (\(\oplus\) — это операция xor (исключающее или)).
  • горизонтальный xor. Вы выбираете число \(i\) (\(1 \le i \le n\)) и для всех \(j\) (\(1 \le j \le n\)) делаете следующее: \(a_{i, j} := a_{i, j} \oplus 1\).

Заметьте, что элементы матрицы \(a\) изменяются после каждой операции.

Например, если \(n=3\) и матрица \(a\) равна: \(\) \begin{pmatrix} 1 & 1 & 0 \\ 0 & 0 & 1 \\ 1 & 1 & 0 \end{pmatrix} \(\) Тогда следующий набор операций показывает пример преобразований:

  • вертикальный xor, \(j=1\). \(\) a= \begin{pmatrix} 0 & 1 & 0 \\ 1 & 0 & 1 \\ 0 & 1 & 0 \end{pmatrix} \(\)
  • горизонтальный xor, \(i=2\). \(\) a= \begin{pmatrix} 0 & 1 & 0 \\ 0 & 1 & 0 \\ 0 & 1 & 0 \end{pmatrix} \(\)
  • вертикальный xor, \(j=2\). \(\) a= \begin{pmatrix} 0 & 0 & 0 \\ 0 & 0 & 0 \\ 0 & 0 & 0 \end{pmatrix} \(\)

Проверьте, существует ли такая последовательность операций, что матрица \(a\) станет равна матрице \(b\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Первая строка каждого набор входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 1000\)) — размер матриц.

Следующие \(n\) строк содержат строки длины \(n\), состоящие из символов '0' и '1' — описание матрицы \(a\).

Далее следует пустая строка.

Следующие \(n\) строк содержат строки длины \(n\), состоящие из символов '0' и '1' — описание матрицы \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • «YES», если существует такая последовательность операций, что матрица \(a\) станет равна матрице \(b\);
  • «NO» в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

Первый набор входных данных разобран в условии.

Во втором наборе входных данных подходит следующая последовательность операций:

  • горизонтальный xor, \(i=1\);
  • горизонтальный xor, \(i=2\);
  • горизонтальный xor, \(i=3\);

Можно доказать, что в третьем наборе входных данных не существует последовательности операций, так что матрица \(a\) становится равной матрице \(b\).

A. Сумма, кратная K

Бинарный поиск жадные алгоритмы Конструктив математика *1000

Вам задано два целых числа \(n\) и \(k\).

Вам нужно создать массив длины \(n\) из целых положительных чисел \(a_1, a_2, \dots, a_n\) такой, что сумма \((a_1 + a_2 + \dots + a_n)\) делится на \(k\) и максимум в массиве \(a\) наименьший возможный.

Чему равен наименьший возможный максимальный элемент массива \(a\)?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой и единственной строке каждого набора заданы два целых числа \(n\) и \(k\) (\(1 \le n \le 10^9\); \(1 \le k \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — наименьший возможный максимальный элемент массива \(a\) такого, что сумма \((a_1 + \dots + a_n)\) делится на \(k\).

Примечание

В первом наборе входных данных \(n = 1\), поэтому массив состоит из одного элемента \(a_1\) и, если мы сделаем \(a_1 = 5\), он будет делиться на \(k = 5\) и будет наименьшим.

Во втором наборе, мы можем создать массив \(a = [1, 2, 1, 2]\). Сумма делится на \(k = 3\) и максимум равен \(2\).

Во третьем наборе, мы можем создать массив \(a = [1, 1, 1, 1, 1, 1, 1, 1]\). Сумма делится на \(k = 8\) и максимум равен \(1\).

A. Nezzar и доска

Конструктив математика теория чисел *1800

На доске написаны \(n\) различных целых чисел \(x_1,x_2,\ldots,x_n\). Nezzar может сделать следующую операцию несколько раз.

  • Выбрать два числа \(x,y\) (не обязательно различных) на доске и записать на доске число \(2x-y\). Обратите внимание, что он не убирает выбранные числа.

Nezzar интересуется, может ли его любимое число \(k\) оказаться на доске после того, как он выполнит эту операцию несколько раз.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находятся два целых числа \(n,k\) (\(2 \le n \le 2 \cdot 10^5\), \(-10^{18} \le k \le 10^{18}\)).

Во второй строке описания каждого набора входных данных находятся \(n\) различных целых чисел \(x_1,x_2,\ldots,x_n\) (\(-10^{18} \le x_i \le 10^{18}\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в собственной строке выведите «YES», если число \(k\) может оказаться на доске. Иначе выведите «NO».

Вы можете вывести каждый символ в любом регистре (верхнем или нижнем).

Примечание

В первом наборе входных данных число \(1\) уже написано на доске.

Во втором наборе входных данных Nezzar может выполнить следующие операции, чтобы написать число \(k=0\) на доску:

  • Выбрать \(x=3\) и \(y=2\) и написать \(4\) на доску.
  • Выбрать \(x=4\) и \(y=7\) и написать \(1\) на доску.
  • Выбрать \(x=1\) и \(y=2\) и написать \(0\) на доску.

В третьем наборе входных данных невозможно получить число \(k = -1\) на доске.

C. Nezzar и красивая карта

геометрия жадные алгоритмы Конструктив математика сортировки *2200

Nezzar любит игру osu!.

osu! играется на карте, которая может быть представлена как массив различных точек на плоскости. Карта называется красивой, если для любых трех последовательных точек \(A,B,C\), записанных в порядке следования в массиве, угол между этими тремя точками с центром в \(B\) будет строго меньше, чем \(90\) градусов.

Точки \(A,B,C\) слева образуют угол меньший, чем \(90\) градусов, поэтому они могут быть тремя последовательными точками в красивой карте; точки \(A',B',C'\) справа образуют угол, больший либо равный \(90\) градусам, поэтому они не могут быть тремя последовательными точками в красивой карте.

Сейчас у Nezzar есть карта, состоящая из \(n\) различных точек \(A_1,A_2,\ldots,A_n\). Nezzar хочет переупорядочить эти \(n\) точек так, чтобы получившаяся карта стала красивой.

Более формально, вы должны найти перестановку \(p_1,p_2,\ldots,p_n\) целых чисел от \(1\) до \(n\) такую, что карта \(A_{p_1},A_{p_2},\ldots,A_{p_n}\) будет красивой. Если это невозможно, вы должны определить это.

Входные данные

В первой строке находится единственное целое число \(n\) (\(3 \le n \le 5000\)).

Затем следуют \(n\) строк, в \(i\)-й из них находятся два целых числа \(x_i\), \(y_i\) (\(-10^9 \le x_i, y_i \le 10^9\)) — координаты точки \(A_i\).

Гарантируется, что все точки различны.

Выходные данные

Если решения нет, выведите \(-1\).

Иначе выведите \(n\) чисел, образующих допустимую перестановку \(p\).

Если существует несколько возможных решений, вы можете вывести любое.

Примечание

Это иллюстрация к первому примеру:

Обратите внимание, что угол между \(A_1\), \(A_2\) и \(A_5\) с центром в \(A_2\) равен \(0\) градусов. Однако угол между \(A_1\), \(A_5\) и \(A_2\) с центром в \(A_5\) равен \(180\) градусам.

D. Nezzar и тайные перестановки

графы Конструктив поиск в глубину и подобное *2800

Nezzar придумал абсолютно новую игру «Тайные перестановки» и собирается сыграть в нее со своим лучшим другом Nanako.

В начале игры Nanako и Nezzar оба знают два целых числа \(n\) и \(m\). Игра происходит следующим образом.

  • Сначала Nezzar тайно загадывает две перестановки \(p_1,p_2,\ldots,p_n\) и \(q_1,q_2,\ldots,q_n\) целых чисел от \(1\) до \(n\). Nanako тайно загадывает \(m\) неупорядоченных пар \((l_1,r_1),(l_2,r_2),\ldots,(l_m,r_m)\);
  • Затем Nanako показывает выбранные пары Nezzar;
  • Видя эти \(m\) неупорядоченных пар, Nezzar проверяет, существует ли такое \(1 \le i \le m\), что \((p_{l_i}-p_{r_i})\) и \((q_{l_i}-q_{r_i})\) имеют различные знаки. Если да, то Nezzar моментально проигрывает игру и получает счет \(-1\). Иначе счет, который Nezzar получает, равен количеству индексов \(1 \le i \le n\) таких, что \(p_i \neq q_i\).

Однако Nezzar случайно узнал пары Nanako заранее и решил извлечь из этого выгоду. Помогите Nezzar найти две перестановки \(p\) и \(q\) такие, что счет игры будет максимальным.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 5 \cdot 10^5\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находятся два целых числа \(n,m\) (\(1 \le n \le 5 \cdot 10^5, 0 \le m \le \min(\frac{n(n-1)}{2},5 \cdot 10^5)\)).

Затем следуют \(m\) строк, \(i\)-я из них содержит два целых числа \(l_i,r_i\) (\(1 \le l_i,r_i \le n\), \(l_i \neq r_i\)), описывающих \(i\)-ю пару, которую выбрал Nanako. Гарантируется, что все \(m\) неориентированных пар различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\), и что сумма \(m\) по всем наборам входных данных не превосходит \(5\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите две перестановки \(p_1,p_2,\ldots,p_n\) и \(q_1,q_2,\ldots,q_n\) такие, что счет, который получит Nezzar, будет максимальным.

Примечание

В первом наборе входных данных для каждой пары Nanako:

  • для первой пары \((1,2)\): \(p_1 - p_2 = 1 - 2 = -1\), \(q_1 - q_2 = 3 - 4 = -1\), они имеют одинаковый знак;
  • для второй пары \((3,4)\): \(p_3 - p_4 = 3 - 4 = -1\), \(q_3 - q_4 = 1 - 2 = -1\), они имеют одинаковый знак.

Поскольку Nezzar не проиграл моментально, Nezzar получает счет \(4\), потому что \(p_i \neq q_i\) для всех \(1 \leq i \leq 4\). Очевидно, что это максимально возможный счет, который Nezzar может получить.

B1. Покраска массива I

дп жадные алгоритмы Конструктив реализация Структуры данных *1900

Единственное различие между двумя версиями задачи заключается в том, что в этой версии вам нужно найти максимальный возможный ответ.

Гомеру очень нравятся массивы. Сегодня он красит массив \(a_1, a_2, \dots, a_n\) двумя видами цветов, белым и черным. Покраска массива \(a_1, a_2, \dots, a_n\) описывается массивом \(b_1, b_2, \dots, b_n\), где \(b_i\) обозначает цвет \(a_i\) (\(0\) для белого и \(1\) для черного).

Согласно покраске \(b_1, b_2, \dots, b_n\) массив \(a\) разделяется на два новых массива \(a^{(0)}\) и \(a^{(1)}\), где \(a^{(0)}\) — это подпоследовательность всех белых элементов в \(a\), а \(a^{(1)}\) — это подпоследовательность всех черных элементов в \(a\). Например, если \(a = [1,2,3,4,5,6]\) и \(b = [0,1,0,1,0,0]\), то \(a^{(0)} = [1,3,5,6]\) и \(a^{(1)} = [2,4]\).

Количество отрезков в массиве \(c_1, c_2, \dots, c_k\), обозначаемое \(\mathit{seg}(c)\), — это количество элементов, которое останется, если объединить все соседние элементы с одинаковым значением в \(c\). Например, количество отрезков в \([1,1,2,2,3,3,3,2]\) равно \(4\), так как массив станет равным \([1,2,3,2]\) после объединения соседних элементов с одинаковым значением. В частности, количество отрезков в пустом массиве равно \(0\).

Гомер хочет найти покраску \(b\), согласно которой суммарное количество отрезков в \(a^{(0)}\) и \(a^{(1)}\), т. е. \(\mathit{seg}(a^{(0)})+\mathit{seg}(a^{(1)})\), максимально. Найдите, чему равно это значение.

Входные данные

Первая строка содержит целое число \(n\) (\(1 \leq n \leq 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq n\)).

Выходные данные

Выведите единственное число — максимально возможное суммарное количество отрезков.

Примечание

В первом примере можно выбрать \(a^{(0)} = [1,2,3,3]\), \(a^{(1)} = [1,2,3]\) и \(\mathit{seg}(a^{(0)}) = \mathit{seg}(a^{(1)}) = 3\). Таким образом, ответ \(3+3 = 6\).

Во втором примере можно выбрать \(a^{(0)} = [1,2,3,4,5,6,7]\) и \(a^{(1)}\) пустое. Мы видим, что \(\mathit{seg}(a^{(0)}) = 7\) и \(\mathit{seg}(a^{(1)}) = 0\). Таким образом, ответ \(7+0 = 7\).

B2. Покраска массива II

дп жадные алгоритмы Конструктив реализация Структуры данных *2100

Единственное различие между двумя версиями задачи заключается в том, что в этой версии вам нужно найти минимальный возможный ответ.

Гомеру очень нравятся массивы. Сегодня он красит массив \(a_1, a_2, \dots, a_n\) двумя видами цветов, белым и черным. Покраска массива \(a_1, a_2, \dots, a_n\) описывается массивом \(b_1, b_2, \dots, b_n\), где \(b_i\) обозначает цвет \(a_i\) (\(0\) для белого и \(1\) для черного).

Согласно покраске \(b_1, b_2, \dots, b_n\) массив \(a\) разделяется на два новых массива \(a^{(0)}\) и \(a^{(1)}\), где \(a^{(0)}\) — это подпоследовательность всех белых элементов в \(a\), а \(a^{(1)}\) — это подпоследовательность всех черных элементов в \(a\). Например, если \(a = [1,2,3,4,5,6]\) и \(b = [0,1,0,1,0,0]\), то \(a^{(0)} = [1,3,5,6]\) и \(a^{(1)} = [2,4]\).

Количество отрезков в массиве \(c_1, c_2, \dots, c_k\), обозначаемое \(\mathit{seg}(c)\),  — это количество элементов, которое останется, если объединить все соседние элементы с одинаковым значением в \(c\). Например, количество отрезков в \([1,1,2,2,3,3,3,2]\) равно \(4\), так как массив станет равным \([1,2,3,2]\) после объединения соседних элементов с одинаковым значением. В частности, количество отрезков в пустом массиве равно \(0\).

Гомер хочет найти покраску \(b\), согласно которой суммарное количество отрезков в \(a^{(0)}\) и \(a^{(1)}\), т. е. \(\mathit{seg}(a^{(0)})+\mathit{seg}(a^{(1)})\), минимально. Найдите, чему равно это значение.

Входные данные

Первая строка содержит целое число \(n\) (\(1 \leq n \leq 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq n\)).

Выходные данные

Выведите единственное число — минимально возможное суммарное количество отрезков.

Примечание

В первом примере можно выбрать \(a^{(0)} = [1,1,2,2]\), \(a^{(1)} = [2,3]\) и \(\mathit{seg}(a^{(0)}) = \mathit{seg}(a^{(1)}) = 2\). Таким образом, ответ \(2+2 = 4\).

Во втором примере можно выбрать \(a^{(0)} = [1,1,1,1]\), \(a^{(1)} = [2,2,2]\) и \(\mathit{seg}(a^{(0)}) = \mathit{seg}(a^{(1)}) = 1\). Таким образом, ответ \(1+1 = 2\).

C. Непрерывный город

битмаски Конструктив *2500

Некоторое время назад Гомер жил в красивом городе. В нем есть \(n\) домов, пронумерованных от \(1\) до \(n\), а также \(m\) ориентированных дорог. Каждая дорога имеет положительную длину и всегда направлена от дома с меньшим индексом к дому с большим. Для каждых двух (разных) домов между ними есть максимум одна дорога.

Гомер обнаружил, что для некоторых двух чисел \(L\) и \(R\) такой город может быть \((L, R)\)-непрерывным.

Город называется \((L, R)\)-непрерывным, если выполняются два условия:

  1. все пути от дома \(1\) до дома \(n\) имеют длину от \(L\) до \(R\) (включительно);
  2. для каждого целого \(L \leq d \leq R\) есть ровно один путь от дома \(1\) до дома \(n\) с длиной равной \(d\).

Путь от дома \(u\) к дому \(v\) — это последовательность \(u = x_0 \to x_1 \to x_2 \to \dots \to x_k = v\), где для каждого \(1 \leq i \leq k\) есть дорога от дома \(x_{i-1}\) к дому \(x_{i}\). Длина пути — это сумма длин всех дорог в пути. Два пути \(x_0 \to x_1 \to \dots \to x_k\) и \(y_0 \to y_1 \to \dots \to y_l\) считаются различными, если \(k \neq l\), или \(x_i \neq y_i\) для какого-то \(0 \leq i \leq \min\{k, l\}\).

Переехав в другой город, Гомер запомнил только числа \(L\) и \(R\), но забыл число домов \(n\), число дорог \(m\), а также то, как дома соединены дорогами. Однако он считает, что количество домов должно быть не больше \(32\) (потому что город маленький).

Как лучший друг Гомера, пожалуйста, скажите ему, может ли существовать \((L, R)\)-непрерывный город, или нет.

Входные данные

Одна строка содержит два целых числа \(L\) и \(R\) (\(1 \leq L \leq R \leq 10^6\)).

Выходные данные

Если невозможно найти \((L, R)\)-непрерывный город c не более \(32\) домами, выведите «NO».

В противном случае в первой строке выведите «YES», а затем описание \((L, R)\)-непрерывного города.

Вторая строка должна содержать два целых числа \(n\) (\(2 \leq n \leq 32\)) и \(m\) (\(1 \leq m \leq \frac {n(n-1)} 2\)), где \(n\) обозначает количество домов, а \(m\) — количество дорог.

Затем должно следовать \(m\) строк. \(i\)-я из \(m\) строк должна содержать три целых числа \(a_i\), \(b_i\) (\(1 \leq a_i < b_i \leq n\)) и \(c_i\) (\(1 \leq c_i \leq 10^6\)), обозначающие направленную дорогу от дома \(a_i\) к дому \(b_i\) длиной \(c_i\).

Требуется, чтобы для каждых двух домов было не более одной дороги, соединяющей их. Иначе говоря, для каждых \(1 \leq i < j \leq m\), либо \(a_i \neq a_j\), либо \(b_i \neq b_j\).

Примечание

В первом примере существует только один путь от дома \(1\) до дома \(n = 2\), а его длина составляет \(1\).

Во втором примере есть три пути от дома \(1\) до дома \(n = 5\), а именно \(1 \to 2 \to 5\) длиной \(4\), \(1 \to 3 \to 5\) длиной \(5\), и \(1 \to 4 \to 5\) длиной \(6\).

A. Средство от бессонницы

Конструктив математика реализация *800

«Раз дракон. Два дракон. Три дракон», — считала принцесса. У нее была бессонница, а считать барашков ей надоело еще в девять лет.

Впрочем, считать драконов просто так тоже было скучно, поэтому она развлекалась как могла. Этой ночью она представляла, что все посчитанные драконы явились сюда, чтобы ее украсть, а она отбивается от них, как может. Каждого k-ого дракона она била сковородкой по морде. Каждому l-ому — прищемляла хвост балконной дверью. Каждому m-ому — наступала на лапу острым каблучком. Наконец, каждому n-ому она грозила позвать мамочку, и он в ужасе ретировался.

Скольким воображаемым драконам успела нанести моральный или физический ущерб принцесса, если всего она насчитала d драконов?

Входные данные

Входные данные содержат целые числа k, l, m, n и d, каждое число в отдельной строке (1 ≤ k, l, m, n ≤ 10, 1 ≤ d ≤ 105).

Выходные данные

Выведите количество пострадавших драконов.

Примечание

В первом примере каждый первый дракон был жестоко бит сковородкой. Некоторым доставалось также от дверей и каблучков, но даже сковородки хватало всем.

Во втором примере неповрежденными остались драконы 1, 7, 11, 13, 17, 19 и 23.

C. Немногословная принцесса

жадные алгоритмы Конструктив *1700

«Следующий», — сказала принцесса и оценивающе посмотрела на очередного жениха.

Принцессе очень хочется выбрать самого достойного жениха, и чем больше у него денег, тем он достойнее. Каждый раз, когда она видит жениха более богатого, чем любой из предыдущих, она произносит сдержанное «Ах...». Когда же перед ней появляется жених более богатый, чем все предыдущие вместе взятые, у нее вырывается несдержанное «Ого!» («Ах...» в этом случае она не произносит). Когда принцесса видит самого первого жениха, она сохраняет невозмутимость и не произносит ни слова.

Богатство любого жениха определяется целым числом от 1 до 50000. Известно, что принцесса за день увидела n женихов, ровно a раз произнесла «Ах...» и ровно b раз у нее вырвалось «Ого!». Напишите программу, которая выведет последовательность n целых чисел t1, t2, ..., tn, где ti — богатство i-го жениха. Если существует несколько последовательностей, выведите любую. Если последовательности, удовлетворяющей всем заданным условиям, не существует, выведите единственное число -1.

Входные данные

В единственной строке входных данных записаны три целых числа n, a и b (1 ≤ n ≤ 100, 0 ≤ a, b ≤ 15, n > a + b), разделенных пробелами.

Выходные данные

Выведите любую последовательность целых чисел t1, t2, ..., tn, где ti (1 ≤ ti ≤ 50000) — богатство i-го жениха, удовлетворяющую заданным условиям. Если последовательности, удовлетворяющей всем заданным условиям, не существует, выведите единственное число -1.

Примечание

Рассмотрим ответ для первого примера.

  • Принцесса произнесла «Ах...» (выделены жирным): 5 1 3 6 16 35 46 4 200 99.
  • Принцесса не смогла сдержать «Ого!» (выделены жирным): 5 1 3 6 16 35 46 4 200 99.

C. Покраска забора

жадные алгоритмы Конструктив Перебор *1600

Вы наконец проснулись после такого невероятного сна и решили немного прогуляться на свежем воздухе. Снаружи вы увидели забор вашего дома — такой скучный, что вам захотелось его перекрасить.

У вас есть забор, состоящий из \(n\) досок, и \(i\)-я доска покрашена в цвет \(a_i\). Вы хотите перекрасить забор так, чтобы \(i\)-я доска стала цвета \(b_i\).

Для этого вы пригласили \(m\) маляров: \(j\)-й маляр придет в момент времени \(j\) и перекрасит ровно одну доску в цвет \(c_j\). Вы можете сказать каждому маляру, какую именно доску перекрасить, но вы не можете отказаться от его услуг, т. е. каждый маляр обязан покрасить ровно одну доску.

Можете ли вы получить желаемую раскраску \(b\)? Если это возможно, выведите для каждого маляра номер доски, которую он должен покрасить.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов.

В первой строке каждого набора заданы два целых числа \(n\) и \(m\) (\(1 \le n, m \le 10^5\)) — количество досок в заборе и количество маляров.

Во второй строке каждого набора заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — первоначальные цвета досок забора.

В третьей строке каждого набора заданы \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le n\)) — желаемые цвета досок забора.

В четвертой строке каждого набора заданы \(m\) целых чисел \(c_1, c_2, \dots, c_m\) (\(1 \le c_j \le n\)) — цвета, в которые перекрашивают маляры.

Гарантируется, что сумма \(n\) не превосходит \(10^5\), и сумма \(m\) не превосходит \(10^5\) по всем наборам входных данных.

Выходные данные

Для каждого набора входных данных, выведите «NO», если невозможно получить раскраску \(b\).

В противном случае выведите «YES» и \(m\) целых чисел \(x_1, x_2, \dots, x_m\), где \(x_j\) — это номер доски, которую должен перекрасить \(j\)-й маляр.

Ответ можете выводить в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ на запрос).

D. AB граф

графы жадные алгоритмы Конструктив Перебор реализация *2000

Ваш друг Salem — брат Warawreh, и ему нравятся только математические и геометрические задачи. Он решил уже множество таких задач, но, по словам Warawreh, чтобы успешно окончить университет, ему нужно решать больше графовых задач. Так как Salem не очень хорош в графах, он попросил вас помочь ему с такой задачей.

Вам задан полный ориентированный граф из \(n\) вершин без петель. Другими словами, у вас есть \(n\) вершин, и для каждой пары вершин \(u\) и \(v\) (\(u \neq v\)) есть две направленных дуги \((u, v)\) и \((v, u)\).

На каждой направленной дуге графа написано по одной букве: либо «a», либо «b» (дуги \((u, v)\) и \((v, u)\) могут иметь различные метки).

Вам также задано целое число \(m > 0\). Вам нужно найти путь длины \(m\) такой, что строка, полученная выписыванием букв на дугах в порядке из обхода, будет являться палиндромом. Длина пути — это количество дуг в нем.

Вы можете посещать одни и те же вершины и дуги произвольное количество раз.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных.

В первой строке каждого набора заданы два целых числа \(n\) и \(m\) (\(2 \leq n \leq 1000\); \(1 \leq m \leq 10^{5}\)) — количество вершин в графе и желаемая длина палиндрома.

В следующих \(n\) строках задано по \(n\) символов. \(j\)-й символ \(i\)-й строки описывает символ, написанный на дуге из вершины \(i\) в вершину \(j\).

Каждый символ — это «a» или «b», если \(i \neq j\), либо же «*», если \(i = j\), так как граф не содержит петель.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(1000\) и сумма \(m\) не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных, если возможно найти такой путь, выведите «YES» и сам путь как последовательность из \(m + 1\) целых чисел: номера вершин в пути в порядке обхода. Если существует несколько возможных путей, выведите любой из них.

В противном случае (если ответа нет), выведите «NO».

Примечание

Граф для первых трех наборов входных данных изображен ниже:

В первом наборе ответ — это последовательность \([1,2]\), означающая следующий путь:

\(\)1 \xrightarrow{\text{b}} 2\(\)

Таким образом, полученная строка равна b.

Во втором наборе ответ — это последовательность \([2,1,3,2]\), означающая следующий путь:

\(\)2 \xrightarrow{\text{b}} 1 \xrightarrow{\text{a}} 3 \xrightarrow{\text{b}} 2\(\)

Таким образом, полученная строка равна bab.

В третьем наборе ответ — это последовательность \([1,3,1,3,1]\), означающая следующий путь:

\(\)1 \xrightarrow{\text{a}} 3 \xrightarrow{\text{a}} 1 \xrightarrow{\text{a}} 3 \xrightarrow{\text{a}} 1\(\)

Таким образом, полученная строка равна aaaa.

Строка, полученная в четвертом наборе, равна abaaba.

C. Базовая дипломатия

жадные алгоритмы Конструктив Перебор реализация *1600

У Алексея есть \(n\) друзей. А ещё Алексей сейчас в отпуске, поэтому у него есть целых \(m\) дней, чтобы поиграть в эту новую популярную кооперативную игру! Поскольку эта игра кооперативная, Алексею нужен один сокомандник в каждый из \(m\) дней.

Каждый день какие-то его друзья свободны и готовы играть в эту игру, а остальные заняты и не могут. Каждый день Алексей должен выбрать одного из свободных друзей и предложить ему поиграть (а тот, разумеется, согласится). Однако если какой-то из друзей будет играть с Алексеем суммарно строго больше \(\left\lceil\dfrac{m}{2}\right\rceil\) раз (округление вверх), то все остальные обидятся. Конечно же, Алексей не хочет никого обижать.

Помогите ему выбрать сокомандников таким образом, чтобы никто не играл с Алексеем суммарно строго больше \(\left\lceil\dfrac{m}{2}\right\rceil\) раз.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит два натуральных числа \(n\) и \(m\) (\(1\leq n, m\leq 100\,000\)) — количество друзей и количество дней, соответственно.

В \(i\)-й из следующих \(m\) строк содержится натуральное число \(k_i\) (\(1\leq k_i\leq n\)), за которым следуют \(k_i\) попарно различных целых чисел \(f_{i1}\), ..., \(f_{ik_i}\) (\(1\leq f_{ij}\leq n\)), разделённых пробелами — свободные друзья в день \(i\).

Гарантируется, что сумма значений \(n\) и сумма значений \(m\) по всем наборам входных данных не превосходят \(100\,000\). Гарантируется, что сумма всех \(k_i\) по всем дням всех наборов входных данных не превосходит \(200\,000\).

Выходные данные

Выведите ответ для каждого набора входных данных. Если невозможно никого не обидеть, то выведите «NO».

В противном случае в первой строке выведите «YES», а во второй строке выведите \(m\) целых чисел \(c_1\), ..., \(c_m\), разделённых пробелами. Каждое \(c_i\) должно быть номером друга, взятого в команду в \(i\)-й день (соответственно, это должно быть одно из чисел \(f_{ij}\)).

Никакое значение не должно встречаться больше, чем \(\left\lceil\dfrac{m}{2}\right\rceil\) раз. Если есть несколько возможных ответов, выведите любой из них.

D. Делители и степенные разности

графы Конструктив математика теория чисел *2200

Вам дана матрица \(a\), состоящая из положительных целых чисел. В ней \(n\) строк и \(m\) столбцов.

Постройте матрицу \(b\), состоящую из положительных целых чисел. Она должна иметь такой же размер, что и матрица \(a\), а также должны выполняться следующие условия:

  • \(1 \le b_{i,j} \le 10^6\);
  • \(b_{i,j}\) делится на \(a_{i,j}\);
  • модуль разности чисел в любой паре соседних клеток (двух клеток, имеющих общую сторону) в \(b\) равен \(k^4\) для некоторого целого числа \(k \ge 1\) (\(k\) не обязательно одинаковое для всех пар, для каждой пары это число может быть свое).

Можно показать, что ответ всегда существует.

Входные данные

В первой строке находятся два целых числа \(n\) и \(m\) (\(2 \le n,m \le 500\)).

Каждая из следующих \(n\) строк содержит \(m\) целых чисел. \(j\)-е число в \(i\)-й строке — это \(a_{i,j}\) (\(1 \le a_{i,j} \le 16\)).

Выходные данные

Выведите \(n\) строк, в каждой \(m\) целых чисел. \(j\)-е число в \(i\)-й строке должно быть \(b_{i,j}\).

Примечание

В первом примере матрица \(a\) может быть использована как матрица \(b\), потому что модуль разности чисел в любой паре соседних клеток равен \(1 = 1^4\).

В третьем примере:

  • \(327\) делится на \(3\), \(583\) делится на \(11\), \(408\) делится на \(12\), \(664\) делится на \(8\);
  • \(|408 - 327| = 3^4\), \(|583 - 327| = 4^4\), \(|664 - 408| = 4^4\), \(|664 - 583| = 3^4\).

E. Парный платёж

Бинарный поиск графы дп Конструктив кратчайшие пути Перебор Потоки *2200

В стране \(n\) городов и \(m\) двунаправленных дорог. Дороги в стране формируют неориентированный взвешенный граф. Граф может быть несвязным. У каждой дороги есть свой параметр \(w\). Вы можете ездить по дорогам, но правительство издало новый закон: вы можете проезжать только по двум дорогам сразу (проехать из города \(a\) в город \(b\), и из города \(b\) в город \(c\)) и вы должны будете заплатить \((w_{ab} + w_{bc})^2\) денег, чтобы проехать по этим дорогам. Для каждого города \(t\) найдите, можно ли добраться до него из города \(1\), и какое наименьшее количество денег необходимо потратить, чтобы добраться из \(1\) в \(t\).

Входные данные

В первой строке находятся два целых числа \(n\), \(m\) (\(2 \leq n \leq 10^5\), \(1 \leq m \leq min(\frac{n \cdot (n - 1)}{2}, 2 \cdot 10^5)\)).

В следующих \(m\) строках находятся по три целых числа \(v_i\), \(u_i\), \(w_i\) (\(1 \leq v_i, u_i \leq n\), \(1 \leq w_i \leq 50\), \(u_i \neq v_i\)). Гарантируется, что в графе нет кратных рёбер, то есть для любого ребра \((u_i, v_i)\) не существует других рёбер \((u_i, v_i)\) или \((v_i, u_i)\).

Выходные данные

Для каждого города \(t\) выведите одно целое число. Если нет корректного пути из \(1\) в \(t\) выведите \(-1\). Иначе выведите минимальное необходимое количество денег, чтобы добраться из \(1\) в \(t\).

Примечание

Граф в первом примере выглядит так.

Во втором примере путь из \(1\) в \(3\) проходит через \(2\), так что результирующая стоимость поездки будет \((1 + 2)^2 = 9\).

C. Как можно меньше ничьих

графы жадные алгоритмы Конструктив математика Перебор поиск в глубину и подобное реализация *1500

Скоро состоится большой футбольный чемпионат! \(n\) команд будут участвовать в нем, и каждая пара различных команд сыграет ровно один матч друг с другом.

У матча может быть два различных исхода:

  • матч может закончиться вничью, тогда обе команды получат по \(1\) очку;
  • одна из команд может победить, тогда победившая команда получит \(3\) очка, а проигравшая — \(0\).

Счет команды — суммарное количество очков, полученное командой за все матчи, в которых она играла.

Вас интересует гипотетическая ситуация, в которой все команды будут в конце чемпионата иметь одинаковый счет. Простой пример такой ситуации — если все матчи закончатся вничью, но вас интересует подобная ситуация с минимально возможным количеством ничьих.

Ваша задача — найти ситуацию (выбрать результат каждой игры), в которой у всех команд одинаковый итоговый счет, а количество ничьих минимально возможно.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Затем следуют сами наборы входных данных. Каждый набор описывается одной строкой, содержащей целое число \(n\) (\(2 \le n \le 100\)) — количество команд.

Выходные данные

Для каждого набора входных данных выведите \(\frac{n(n - 1)}{2}\) целых чисел, описывающих результаты игр в следующем порядке: первое число соответствует результату матча между командой \(1\) и командой \(2\), второе — между командой \(1\) и командой \(3\), затем \(1\) и \(4\), ..., \(1\) и \(n\), \(2\) и \(3\), \(2\) и \(4\), ..., \(2\) и \(n\), и так далее, до результата матча между командой \(n - 1\) и командой \(n\).

Число, соответствующее результату матча между командой \(x\) и командой \(y\), должно быть равно \(1\), если побеждает команда \(x\), \(-1\), если побеждает команда \(y\), или \(0\), если матч заканчивается вничью.

Все команды должны иметь одинаковый итоговый счет, и количество ничьих должно быть минимально возможным. Если оптимальных ответов несколько — выведите любой из них. Можно показать, что всегда есть способ составить результаты игр так, что все команды имеют одинаковый итоговый счет.

Примечание

В первом наборе входных данных из примера обе команды получают по \(1\) очку, так как их матч заканчивается вничью.

Во втором наборе входных данных из примера команда \(1\) побеждает команду \(2\) (команда \(1\) получает \(3\) очка), команда \(1\) проигрывает команде \(3\) (команда \(3\) получает \(3\) очка), и команда \(2\) выигрывает у команды \(3\) (команда \(2\) получает \(3\) очка).

B. Сбалансированные остатки

Конструктив математика Перебор *1000

Вам дано число \(n\) (делящееся на \(3\)) и массив \(a[1 \dots n]\). За один ход вы можете увеличить любой из элементов массива на единицу. Формально, вы выбираете индекс \(i\) (\(1 \le i \le n\)) и заменяете \(a_i\) на \(a_i + 1\). Вы можете выбирать один и тот же индекс \(i\) неоднократно для разных ходов.

Обозначим за \(c_0\), \(c_1\) и \(c_2\) количества чисел из массива \(a\) которые имеют остаток \(0\), \(1\) и \(2\) при делении на число \(3\) соответственно. Скажем, что массив \(a\) имеет сбалансированные остатки, если \(c_0\), \(c_1\) и \(c_2\) равны между собой.

Например, если \(n = 6\) и \(a = [0, 2, 5, 5, 4, 8]\), то возможна следующая последовательность ходов:

  • изначально \(c_0 = 1\), \(c_1 = 1\) и \(c_2 = 4\), эти величины не равны между собой. Увеличим \(a_3\), теперь массив \(a = [0, 2, 6, 5, 4, 8]\);
  • \(c_0 = 2\), \(c_1 = 1\) и \(c_2 = 3\), эти величины не равны между собой. Увеличим \(a_6\), теперь массив \(a = [0, 2, 6, 5, 4, 9]\);
  • \(c_0 = 3\), \(c_1 = 1\) и \(c_2 = 2\), эти величины не равны между собой. Увеличим \(a_1\), теперь массив \(a = [1, 2, 6, 5, 4, 9]\);
  • \(c_0 = 2\), \(c_1 = 2\) и \(c_2 = 2\), эти величины равны между собой, значит, массив \(a\) имеет сбалансированные остатки.

Найдите, какое минимальное количество ходов необходимо сделать, чтобы массив \(a\) имел сбалансированные остатки.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^4\)). Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора входных данных находится одно целое число \(n\) (\(3 \le n \le 3 \cdot 10^4\)) — длина массива \(a\). Гарантируется, что число \(n\) делится на \(3\).

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 100\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(150\,000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество ходов, которые надо совершить, чтобы массив \(a\) имел сбалансированные остатки.

Примечание

Первый набор входных данных разобран в условии.

Во втором наборе входных данных необходимо сделать один ход для \(i=2\).

В третьем наборе входных данных необходимо сделать три хода:

  • первый ход: \(i=9\);
  • второй ход: \(i=9\);
  • третий ход: \(i=2\).

В четвертом наборе входных данных величины \(c_0\), \(c_1\) и \(c_2\) изначально совпадают, поэтому массив \(a\) уже имеет сбалансированные остатки.

D. Хранительница Бесконечного Зоопарка

битмаски дп жадные алгоритмы Конструктив математика *1800

В Сингапурском зоопарке появилась новая достопримечательность: Бесконечный Зоопарк.

Бесконечный Зоопарк может быть представлен графом с бесконечным числом вершин, обозначенных \(1,2,3,\ldots\). От вершины \(u\) до вершины \(u+v\) существует ориентированное ребро, если и только если \(u\&v=v\), где \(\&\) обозначает операцию побитового И. Других ребер в графе нет.

Хранительница Зоопарка получила \(q\) запросов. В \(i\)-м запросе она спросит вас, может ли она добраться от вершины \(u_i\) до вершины \(v_i\) по ориентированным ребрам.

Входные данные

Первая строка содержит целое число \(q\) (\(1 \leq q \leq 10^5\)) — количество запросов.

\(i\)-я из следующих \(q\) строк будет содержать два целых числа \(u_i\), \(v_i\) (\(1 \leq u_i, v_i < 2^{30}\)) — запрос, сделанный Хранительницей Зоопарка.

Выходные данные

Для \(i\)-го из \(q\) запросов выведите «YES» в единственной строке, если Хранительница Зоопарка может добраться от вершины \(u_i\) до вершины \(v_i\). В противном случае выведите «NO».

Ответ можно вывести в любом регистре. Например, если ответ «YES», то вывод «Yes» или «yeS» также будет считаться правильным ответом.

Примечание

Ниже показан подграф на вершинах \(1,2,3,4,5,6\).

F. Магниты

Бинарный поиск интерактив Конструктив *2700

Это интерактивная задача.

Kochiya Sanae играет с магнитами. Когда она поняла, что некоторые из этих магнитов размагничены, ей стало любопытно их найти.

Есть \(n\) магнитов, которые могут быть одного из следующих \(3\) типов:

  • N
  • S
  • - — эти магниты размагничены.

Обратите внимание, что вы не знаете типы этих магнитов заранее.

У вас есть устройство, которое может измерять силу между магнитами, и вы можете использовать его не более \(n+\lfloor \log_2n\rfloor\) раз.

Вы можете поместить несколько магнитов в левую часть устройства, а несколько в правую, и запустить устройство. Очевидно, что каждый магнит можно поместить максимум в одну сторону (необязательно использовать все магниты). Вы можете использовать один и тот же магнит в нескольких запросах.

Тогда устройство покажет силу, которую эти магниты производят. Формально, пусть \(n_1,s_1\) — число магнитов типов N и S соответственно в левой части и \(n_2,s_2\) — в правой, тогда сила между ними будет равна \(n_1n_2+s_1s_2-n_1s_2-n_2s_1\). Обратите внимание, что cила может быть как положительной, так и отрицательной (и нулем).

Однако, если абсолютное значение силы (модуль силы) будет строго больше \(n\), машина развалится на части.

Вы должны найти все магниты типа - (все размагниченные), без поломки машины.

Заметьте, что интерактор не адаптивен. Типы магнитов фиксируются перед началом взаимодействия и не изменяются при запросах.

Гарантируется наличие не менее \(2\) магнитов, тип которых не равен -, и по крайней мере \(1\) магнита типа -.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

Протокол взаимодействия

Для каждого набора входных данных сначала следует читать целое число \(n\) (\(3 \leq n \leq 2000\)) — число магнитов.

Гарантируется, что общая сумма всех \(n\) по всем наборам входных данных не превышает \(2000\).

После этого можно вставить несколько магнитов в машину и сделать запрос из условия.

Вы должны вывести каждый запрос в три строки:

  • В первой строке выведите «? l r» (без кавычек), где \(l\) и \(r\) (\(1 \leq l,r < n\), \(l+r \leq n\)) соответственно обозначают количество поставленных магнитов в левую и в правую части.
  • Во второй строке выведите \(l\) целых чисел \(a_1, \dots, a_l\) (\(1 \leq a_i \leq n\), \(a_i \neq a_j\) если \(i \neq j\)) — индексы магнитов, которые вы положили влево.
  • В третьей строке выведите \(r\) целых чисел \(b_1, \dots, b_r\) (\(1 \leq b_i \leq n\), \(b_i \neq b_j\) if \(i \neq j\)) — индексы магнитов, которые вы положили вправо.
  • Один и тот же магнит нельзя поместить в обе стороны в одном запросе. Формально, вы должны гарантировать, что \(a_i \neq b_j\) для любых \(i\) и \(j\). Однако, вы можете оставить некоторые магниты неиспользованными.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

После этого следует прочитать целое число \(F\) —, силу, которую создают эти магниты.

Обратите внимание, что если ваш запрос недействителен (лимит запросов превышен, машина ломается, либо параметры не удовлетворяют ограничениям), интерактор немедленно прекратит работу. В этом случае завершите работу программы, чтобы получить вердикт Неправильный ответ вместо произвольного вердикта.

Если вы уверены в правильности ответа, воспользуйтесь следующим форматом, чтобы сообщить о нем:

  • «! k A», где \(k\) — количество найденных магнитов, а \(A\) — массив, состоящий из \(k\) различных целых чисел от \(1\) до \(n\), обозначающий индексы найденных магнитов типа -. Элементы \(A\) можно вывести в произвольном порядке.
  • После этого, если это был последний набор входных данных, вы должны завершить работу своей программы, в противном случае вы должны продолжить работу со следующим набором входных данных.

Заметьте, что интерактор не адаптивен. Типы магнитов фиксируются перед началом взаимодействия и не изменяются при запросах.

Взломы

Чтобы взломать решение, используйте следующий формат:

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных во взломе.

Каждый из следующих \(t\) наборов входных данных должен быть выведен в двух строках:

  • В первой строке содержится одно целое число \(n\) (\(3 \leq n \leq 2000\)) — количество магнитов.
  • Во второй строке находится строка \(S\) длиной \(n\), состоящая только из N, S и -, обозначающая типы магнитов.
  • В каждом из наборов входных данных должно быть по крайней мере \(2\) магнита, чей тип не равен -, и по крайней мере \(1\) магнит типа -. При этом общая сумма \(n\) во всем наборам входных данных должна не превышать \(2000\).
Примечание

Пустые строки в примере - только для вас, чтобы лучше понять процесс взаимодействия. Вы не обязаны их выводить.

В примере типы магнитов равны NN--.

Сначала вы ставите третий магнит слева, а четвертый — справа. Оба магнита имеют тип -, таким образом, никакой силы нет.

Затем вы помещаете первый магнит слева, а второй и третий — справа. Третий магнит имеет тип -, в то время как два других магнита имеют тип N, таким образом, произведенная сила составляет \(1\).

В следующих двух запросах сила составляет \(0\), так как справа находится только магнит типа -.

Затем мы можем определить, что магнитами типа - являются третий и четвертый, поэтому мы должны вывести «! 2 3 4» и завершить работу программы.

G. Обменяйте и переверните

графы Конструктив математика *2800

Есть \(n\) монет, пронумерованных от \(1\) до \(n\). Изначально монета \(c_i\) находится на позиции \(i\) и лежит лицевой стороной вверх ((\(c_1, c_2, \dots, c_n)\) является перестановкой чисел от \(1\) до \(n\)). Вы можете делать операции с этими монетами.

Одна операция состоит в следующем:

  • Выберите \(2\) различных индекса \(i\) и \(j\).

  • Поменяйте местами монеты на позициях \(i\) и \(j\).

  • Затем переверните обе эти монеты на позициях \(i\) и \(j\) (если они изначально лежали лицевой стороной вверх, то после операции они будут лежать лицевой стороной вниз, и наоборот).

Постройте последовательность из не более чем \(n+1\) операций таким образом, чтобы после выполнения всех операций монета \(i\) находилась на позиции \(i\) лицевой стороной вверх.

Обратите внимание, что вам не нужно минимизировать количество операций.

Входные данные

Первая строка содержит одно целое число \(n\) (\(3 \leq n \leq 2 \cdot 10^5\)) — количество монет.

Во второй строке содержатся \(n\) целых чисел \(c_1,c_2,\dots,c_n\) (\(1 \le c_i \le n\), \(c_i \neq c_j\) для \(i\neq j\)).

Выходные данные

В первой строке выведите целое число \(q\) \((0 \leq q \leq n+1)\) — количество операций, которые вы использовали.

В каждой из следующих \(q\) строк выведите по два целых числа \(i\) и \(j\) \((1 \leq i, j \leq n, i \ne j)\) — позиции, которые вы выбрали для очередной операции.

Примечание

Будем обозначать монету \(i\), обращенную лицевой стороной вверх, как \(i\), а монету \(i\), обращенную вниз, как \(-i\).

Последовательность ходов, выполненная в первом примере, изменяет монеты следующим образом:

  • \([~~~2,~~~1,~~~3]\)
  • \([-3,~~~1,-2]\)
  • \([-3,~~~2,-1]\)
  • \([~~~1,~~~2,~~~3]\)

Во втором примере монеты изначально находятся на своих местах, поэтому операций не нужно.

D. Ход гения

битмаски жадные алгоритмы Конструктив математика *1900

Вам заданы три целых числа \(a\), \(b\) и \(k\).

Найдите два двоичных числа \(x\) и \(y\) (\(x \ge y\)) такие, что:

  1. и \(x\), и \(y\) состоят из \(a\) нулей и \(b\) единиц (в двоичной системе счисления);
  2. \(x - y\) в двоичной системе содержит ровно \(k\) единиц.
В \(x\) и \(y\) ведущие нули запрещены.
Входные данные

В единственной строке заданы три целых числа \(a\), \(b\) и \(k\) (\(0 \leq a\); \(1 \leq b\); \(0 \leq k \leq a + b \leq 2 \cdot 10^5\)) — количество нулей, единиц и единиц в результирующем числе.

Выходные данные

В первой строке выведите «Yes», если можно найти два подходящих числа или «No» в противном случае.

В случае, если ответ существует, во второй строке выведите число \(x\) в двоичной системе счисления, а в третьей строке выведите число \(y\) также в двоичной системе счисления.

Если возможных ответов несколько, то выведите любой.

Примечание

В первом примере \(x = 101000_2 = 2^5 + 2^3 = 40_{10}\), \(y = 100001_2 = 2^5 + 2^0 = 33_{10}\), \(40_{10} - 33_{10} = 7_{10} = 2^2 + 2^1 + 2^0 = 111_{2}\). Отсюда видно, что в \(x-y\) содержатся ровно \(3\) единицы.

Во втором примере \(x = 10100_2 = 2^4 + 2^2 = 20_{10}\), \(y = 10010_2 = 2^4 + 2^1 = 18\), \(x - y = 20 - 18 = 2_{10} = 10_{2}\). Ровно одна единица.

В третьем примере из условия можно показать, что ответа нет.

E. Почти отказоустойчивая база данных

жадные алгоритмы Конструктив Перебор поиск в глубину и подобное реализация *2500

Вы храните в базе данных массив длины \(m\). Чтобы обезопасить данные от случайного повреждения, база данных хранит не одну, а \(n\) физических копий хранимой информации.

К сожалению, недавно в базе данных произошла масштабная авария, которая потенциально изменила информацию в каждой копии.

Предполагается, что инцидент поменял не более двух элементов в каждой копии. Вам нужно восстановить исходный массив из текущего состояния базы данных.

Если существует несколько способов восстановления, найдите любой. Если нет ни одного массива, отличающегося от каждой копии не более чем в двух позициях, определите это тоже.

Входные данные

В первой строке задано два целых числа \(n\) и \(m\) (\(2 \le n\); \(1 \le m\); \(n \cdot m \le 250\,000\)) — количество физических копий исходной информации и размер массива исходной информации, соответственно.

В каждой из следующих \(n\) строк задан массив из \(m\) чисел \(s_{i, 1}, s_{i, 2}, \dots, s_{i, m}\) (\(1 \le s_{i, j} \le 10^9\)) — очередная физическая копия в базе данных после аварии.

Выходные данные

Если можно восстановить массив, который мог бы представлять исходную информацию, то выведите в первой строке слово «Yes», и во второй строке сам массив из ровно \(m\) чисел от \(1\) до \(10^9\).

Если возможных ответов несколько, то выведите любой.

Если ни одного ответа нет, то выведите в единственной строке слово «No».

Примечание

В первом примере массив \([1, 10, 1, 100]\) отличается от первой и второй физических копий ровно в одной позиции, от третьей физической копии ровно в двух позициях.

Во втором примере массив \([1, 1, 1, 1, 1, 1, 1]\) равен первой физической копии и отличается от каждой из остальных девяти физических копий не более чем в двух позициях.

В третьем примере невозможно найти какой-нибудь массив, который отличается не более чем в двух позициях от обеих физических копий после аварии.

A. Антирюкзак

жадные алгоритмы Конструктив *800

Дано два целых числа \(n\) и \(k\). Нужно выбрать максимальное количество различных натуральных чисел от \(1\) до \(n\) так, чтобы среди них нельзя было выбрать подмножество чисел с суммой \(k\).

Подмножеством множества чисел называется множество, которое может быть получено из исходного удалением некоторых (возможно, всех или никаких) элементов множества.

Входные данные

Первая строка содержит одно целое число \(T\) (\(1 \le T \le 100\)) — количество наборов входных данных.

Каждая из следующих \(T\) строк содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 1000\)) — описания наборов входных данных.

Выходные данные

Для каждого набора входных данных выведите две строки. В первой строке выведите количество выбранных чисел \(m\).

Во второй строке выведите \(m\) различных натуральных чисел от \(1\) до \(n\) — выбранные числа.

Если существует несколько решений, выведите любое из них. Вы можете выводить числа в любом порядке.

C. K-красивые строки

Бинарный поиск жадные алгоритмы Конструктив Перебор Строки *2000

Дана строка \(s\) из строчных букв английского алфавита и число \(k\). Назовем строку из строчных букв английского алфавита красивой, если количество вхождений каждой буквы в эту строку кратно числу \(k\). Требуется найти лексикографически минимальную красивую строку длины \(n\), которая лексикографически больше или равна строке \(s\). Если такой строки не существует, выведите \(-1\).

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\) — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).
Входные данные

Первая строка содержит одно целое число \(T\) (\(1 \le T \le 10\,000\)) — количество наборов входных данных.

Следующие \(2 \cdot T\) строк содержат описание наборов входных данных. Описание каждого набора состоит из двух строк.

Первая строка описания содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 10^5\)) — длину строки \(s\) и число \(k\) соответственно.

Вторая строка содержит строку \(s\) из строчных букв английского алфавита.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого тестового случая в отдельной строке выведите лексикографически минимальную красивую строку длины \(n\), которая больше или равна строке \(s\), или \(-1\), если такой строки не существует.

Примечание

В первом наборе входных данных «acac» лексикографически больше или равна \(s\), а каждая буква в ней встречается \(2\) или \(0\) раз, поэтому она красивая.

Во втором наборе входных данных каждая буква в \(s\) встречается \(0\) или \(1\) раз, поэтому сама \(s\) является ответом.

Можно показать, что в третьем наборе подходящей строки нет.

В четвертом примере каждая буква встречается \(0\), \(3\) или \(6\) раз в «abaabaaab». Все эти числа делятся на \(3\).

E. Огромный XOR

битмаски жадные алгоритмы Конструктив математика Строки *2600

Даны два целых числа \(l\) и \(r\) в двоичном представлении. Пусть \(g(x, y)\) равняется побитовому исключающему ИЛИ всех целых чисел от \(x\) до \(y\) включительно (т. е. \(x \oplus (x+1) \oplus \dots \oplus (y-1) \oplus y\)). Определим \(f(l, r)\) как максимум по всем значениям \(g(x, y)\) при \(l \le x \le y \le r\).

Выведите \(f(l, r)\).

Входные данные

Первая строка входных данных содержит одна целое число \(n\) (\(1 \le n \le 10^6\)) — длину двоичного представления числа \(r\).

Вторая строка содержит двоичное представление числа \(l\) — строку из цифр \(0\) и \(1\) длины \(n\) (\(0 \le l < 2^n\)).

Третья строка содержит двоичное представление числа \(r\) — строку из цифр \(0\) и \(1\) длины \(n\) (\(0 \le r < 2^n\)).

Гарантируется, что \(l \le r\). Двоичное представление числа \(r\) не содержит лишних ведущих нулей (если \(r=0\), то его битовое представление состоит из одного нуля). Двоичное представление числа \(l\) дополнено ведущими нулями так, чтобы его длина была равна \(n\).

Выходные данные

В единственной строке выведите значение \(f(l, r)\) в двоичном представлении без лишних ведущих нулей для данных \(l\) и \(r\).

Примечание

В примере из условия \(l=19\), \(r=122\). \(f(x,y)\) максимально и равно \(127\), например, при \(x=27\), \(y=100\).

D. Dogeforces

Деревья жадные алгоритмы Конструктив поиск в глубину и подобное разделяй и властвуй снм сортировки Структуры данных *2300

В компании Dogeforces работают \(k\) сотрудников. У каждого сотрудника, кроме сотрудников нижнего звена, есть не менее \(2\) подчиненных. У сотрудников нижнего звена нет подчиненных. У каждого сотрудника (кроме руководителя компании) есть ровно один непосредственный начальник. Руководитель компании является непосредственным или косвенным начальником всех сотрудников. Известно, что в Dogeforces любой начальник получает зарплату строго больше, чем все его подчиненные.

Полная структура компании является секретом, но вам известно количество сотрудников нижнего звена и для каждой пары сотрудников нижнего звена известна зарплата их общего начальника (если таких начальников несколько, то начальника с минимальной зарплатой). Вам предстоит восстановить структуру компании.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 500\)) — количество сотрудников нижнего звена.

Далее следует \(n\) строк, где \(i\)-я строка содержит \(n\) целых чисел \(a_{i,1}, a_{i,2}, \dots, a_{i,n}\) (\(1 \le a_{i,j} \le 5000\)) — зарплата общего начальника сотрудников с номерами \(i\) и \(j\). Гарантируется, что \(a_{i,j} = a_{j,i}\). Обратите внимание, что \(a_{i,i}\) равно зарплате \(i\)-го сотрудника.

Выходные данные

В первую строку выведите одно целое число \(k\) — количество сотрудников в компании.

Во второй строке выведите \(k\) целых чисел \(c_1, c_2, \dots, c_k\), где \(c_i\) — зарплата сотрудника с номером \(i\).

В третьей строке выведите одно целое число \(r\) — номер сотрудника, который является руководителем компании.

В последующих \(k-1\) строках выведите по два целых числа \(v\) и \(u\) (\(1 \le v, u \le k\)) — номер сотрудника и его непосредственного начальника.

Обратите внимание, что сотрудники нижнего звена имею номера с \(1\) по \(n\), а для остальных сотрудников вам предстоит назначить номера от \(n+1\) до \(k\). Если корректных структур компании несколько, вы можете вывести любую из них.

Примечание

Одна из возможных структур в первом примере:

E. A-Z граф

графы Конструктив Структуры данных хэши *2400

У вас есть ориентированный граф, состоящий из \(n\) вершин. Каждое ориентированное ребро (дуга) помечено одной буквой. Первоначально, граф пустой.

Вам нужно обработать \(m\) запросов на нем. Каждый запрос одного из трех типов:

  • «\(+\) \(u\) \(v\) \(c\)» — добавить дугу из \(u\) в \(v\) с меткой \(c\). Гарантируется, что в данный момент в графе нет дуги \((u, v)\);
  • «\(-\) \(u\) \(v\)» — удалить дугу из \(u\) в \(v\). Гарантируется, что в данный момент в графе есть дуга \((u, v)\);
  • «\(?\) \(k\)» — найти последовательность из \(k\) вершин \(v_1, v_2, \dots, v_k\) такую, что существуют и маршрут \(v_1 \to v_2 \to \dots \to v_k\), и маршрут \(v_k \to v_{k - 1} \to \dots \to v_1\), и если вы выпишите буквы вдоль обоих маршрутов, вы получите одинаковые строки. Вы можете посещать одни и те же вершины любое количество раз.
Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\); \(1 \le m \le 2 \cdot 10^5\)) — количество вершин в графе и количество запросов.

В следующих \(m\) строках заданы сами запросы — по одному в строке. Каждый запрос одного из трех типов:

  • «\(+\) \(u\) \(v\) \(c\)» (\(1 \le u, v \le n\); \(u \neq v\); \(c\) — строчная буква латинского алфавита);
  • «\(-\) \(u\) \(v\)» (\(1 \le u, v \le n\); \(u \neq v\));
  • «\(?\) \(k\)» (\(2 \le k \le 10^5\)).

Гарантируется, что вы не добавляете кратные ребра и удаляете только существующие ребра. Также в тесте есть хотя бы один запрос третьего типа.

Выходные данные

Для каждого запроса третьего типа, выведите YES, если существует последовательность \(v_1, v_2, \dots, v_k\), описанная выше, иначе выведите NO.

Примечание

В первом запросе третьего типа \(k = 3\), и мы можем, например, выбрать последовательность \([1, 2, 3]\), так как \(1 \xrightarrow{\text{a}} 2 \xrightarrow{\text{b}} 3\) и \(3 \xrightarrow{\text{a}} 2 \xrightarrow{\text{b}} 1\).

Во втором запросе третьего типа \(k = 2\), и мы не можем выбрать такую последовательность \(p_1, p_2\), что дуги \((p_1, p_2)\) и \((p_2, p_1)\) имеют одинаковые метки.

В третьем запросе третьего типа, мы можем, например, выбрать последовательность \([1, 2, 3, 2, 1]\), где \(1 \xrightarrow{\text{a}} 2 \xrightarrow{\text{b}} 3 \xrightarrow{\text{d}} 2 \xrightarrow{\text{c}} 1\).

F. Уничтожение ребер

графы Конструктив Перебор поиск в глубину и подобное реализация *2900

Вам дан неориентированный связный граф, состоящий из \(n\) вершин и \(m\) ребер. Ваша цель — уничтожить все ребра данного графа.

Вы можете выбрать любую вершину в качестве начальной и начать ходить от нее по ребрам. Когда вы идете по ребру, вы разрушаете его. Очевидно, что вы не можете пройти по ребру, если оно уже разрушено.

Вы можете выполнить операцию смена режима не более одного раза во время обхода, и эта операция может быть выполнена только тогда, когда вы находитесь в какой-то вершине (вы не можете выполнить ее во время обхода ребра). После смены режима ребра, через которые вы проходите, удаляются следующим образом: первое ребро после смены режима не уничтожается, второе — уничтожается, третье — не уничтожается, четвертое — уничтожается и так далее. Вы не можете переключиться обратно в исходный режим, и вам не нужно выполнять эту операцию, если вы этого не хотите.

Можете ли вы уничтожить все ребра данного графа?

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 3000\); \(n - 1 \le m \le \min(\frac{n(n-1)}{2}, 3000\))) — число вершин и число ребер в графе.

Затем следуют \(m\) строк, каждая из которых содержит два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\); \(x_i \ne y_i\)) — концы \(i\)-го ребра.

Эти ребра образуют связный неориентированный граф без кратных ребер.

Выходные данные

Если невозможно уничтожить все ребра, выведите 0.

В противном случае выведите последовательность ваших действий следующим образом. Сначала выведите \(k\) — количество действий (\(k \le 2m + 2\)). Затем выведите саму последовательность, состоящую из \(k\) целых чисел. Первое целое число должно быть индексом стартовой вершины. Затем каждое следующее целое число должно быть либо индексом следующей вершины в вашем обходе, либо \(-1\), если вы используете операцию смена режима. Вы можете использовать операцию смена режима не более одного раза.

Если ответов несколько, выведите любой из них.

C. Солнечный огород

графы Конструктив *2300

В Солнечном огороде растет много подсолнухов.

Солнечный огород представляет из себя прямоугольную таблицу из \(n\) строк и \(m\) столбцов, где в каждой ячейке находится грядка. На всех грядках раньше росли подсолнухи. К сожалению, одной ночью молния ударила в несколько (возможно, ноль) ячеек, и некоторые подсолнухи были сожжены. Другими словами, некоторые ячейки таблицы стали пустыми. Что удивительно, никакие две пустые ячейки не имеют общих точек (ни сторон, ни углов).

Сейчас владелица участка хочет убрать еще несколько (возможно, ноль) подсолнухов так, чтобы были выполнены следующие два условия:

  • Из любой пустой клетки можно добраться в любую другую пустую клетку. Другими словами, пустые клетки связны.
  • Между любыми двумя пустыми клетками существует ровно один простой путь. Другими словами, в пустых клетках нет циклов.

Из одной пустой клетки можно перейти в другую, если и только если они имеют общую сторону.

Ваша задача — предложить владелице, какие подсолнухи нужно убрать, чтобы оба условия были выполнены.

Обратите внимание, что вы не можете сажать подсолнухи. Также обратите внимание, что вам не нужно минимизировать число убранных подсолнухов. Можно показать, что решение всегда существует.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\), \(m\) (\(1 \le n,m \le 500\)) — количество строк и количество столбцов.

Каждая из следующих \(n\) строк содержит \(m\) символов. Каждый символ — либо «X», либо «.», что обозначает, соответственно, пустую клетку и клетку с подсолнухом.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(250\,000\).

Выходные данные

Для каждого набора входных данных выведите \(n\) строк. Каждая строка должна содержать \(m\) символов, описывающих очередную строку таблицы. Каждый символ должен быть равен либо «X», либо «.», что обозначает, соответственно, пустую клетку и клетку с подсолнухом.

Если существует несколько решений, выведите любое из них. Можно показать, что решение всегда существует.

Примечание

Будем использовать запись \((x,y)\) для обозначения клетки в \(x\)-й строке и \(y\)-м столбце.

На следующих изображениях белые, желтые и синие клетки обозначают клетки с подсолнухами, клетки, куда ударила молния, и убранные в решении подсолнухи, соответственно.

В первом наборе входных данных одно из решений — убрать подсолнухи в клетках \((1,2)\), \((2,3)\) и \((3 ,2)\).

Другое возможное решение — убрать подсолнухи из клеток \((1,2)\), \((2,2)\) и \((3,2)\).

Данное решение — неверное, так как между любыми двумя клетками есть два простых пути, то есть есть цикл. Например, между \((1,1)\) и \((3,3)\) есть два таких пути:

  1. \((1,1)\to (1,2)\to (1,3)\to (2,3)\to (3,3)\)

  2. \((1,1)\to (2,1)\to (3,1)\to (3,2)\to (3,3)\)

Данное решение неверное, так как между пустыми клетками \((1,1)\) и \((3,3)\) нельзя пройти.

F. Квадраты

графы Деревья дп Конструктив Структуры данных *3300

\(n\) квадратов нарисованы на полу слева направо. На \(i\)-м квадрате записаны три целых числа \(p_i,a_i,b_i\). Последовательность \(p_1,p_2,\dots,p_n\) образует перестановку.

Во время каждого раунда вы будете стартовать с самого левого квадрата \(1\) и прыгать вправо. Если вы сейчас на \(i\)-м квадрате, вы можете сделать одну из следующих двух операций:

  1. Перепрыгнуть на \(i+1\)-й квадрат и заплатить за это \(a_i\). Если \(i=n\), тогда вы можете закончить раунд, заплатив \(a_i\).
  2. Перепрыгнуть на \(j\)-й квадрат и заплатить за это \(b_i\), где \(j\) — это самый левый квадрат, который удовлетворяет условиям \(j > i, p_j > p_i\). Если таких \(j\) не существует, вы можете закончить раунд, заплатив \(b_i\).

В игре будет \(q\) раундов. Чтобы сделать ее сложнее, вы должны поддерживать множество квадратов \(S\) (изначально пустое). Вы обязаны оказаться на этих квадратах во время раунда (вы можете также побывать и в других квадратах). Множество квадратов \(S\) для \(i\)-го раунда получается добавлением или удалением одного квадрата из множества квадратов для \((i-1)\)-го раунда.

Для каждого раунда найдите минимальную цену, которую вы должны заплатить, чтобы его закончить.

Входные данные

В первой строке находятся два целых числа \(n\), \(q\) (\(1\le n,q\le 2 \cdot 10^5\)) — количество квадратов и количество раундов.

Во второй строке находятся \(n\) различных целых чисел \(p_1,p_2,\dots,p_n\) (\(1\le p_i\le n\)). Гарантируется, что последовательность \(p_1,p_2,\dots,p_n\) образует перестановку.

В третьей строке находятся \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(-10^9\le a_i\le 10^9\)).

В четвертой строке находятся \(n\) целых чисел \(b_1,b_2,\dots,b_n\) (\(-10^9\le b_i\le 10^9\)).

Затем следуют \(q\) строк, \(i\)-я из них содержит единственное целое число \(x_i\) (\(1\le x_i\le n\)). Если \(x_i\) было в множестве \(S\) для \((i-1)\)-го раунда, то вы должны удалить его, иначе вы должны добавить его.

Выходные данные

Выведите \(q\) строк, каждая из них должна содержать единственное целое число — минимальную цену, которую вы должны заплатить, чтобы закончить соответствующий раунд.

Примечание

Давайте обозначим символом \(T\) конец раунда. Тогда мы можем нарисовать два графа, соответствующих первому и второму примерам.

В первом раунде первого примера множество квадратов, через которое вы должны пройти, это \(\{1\}\). Путь, который вы можете использовать, это \(1\to 3\to T\). Его стоимость равна \(6\).

Во втором раунде первого примера множество квадратов, через которое вы должны пройти, это \(\{1,2\}\). Путь, который вы можете использовать, это \(1\to 2\to 3\to T\). Его стоимость равна \(8\).

A. Раздели!

жадные алгоритмы Конструктив Перебор Строки *900

Каваширо Нитори — девочка, любящая спортивное программирование.

Однажды она нашла строку и целое число. Будучи опытным составителем задач, она сразу подумала о следующей задаче.

Дана строка \(s\) и параметр \(k\), проверьте, существует ли последовательность из \(k+1\) непустой строки \(a_1,a_2...,a_{k+1}\) такая, что \(\)s=a_1+a_2+\ldots +a_k+a_{k+1}+R(a_k)+R(a_{k-1})+\ldots+R(a_{1}).\(\)

Здесь \(+\) обозначает конкатенацию (соединение) строк. \(R(x)\) — разворот строки \(x\), например, \(R(abcd) = dcba\). Обратите внимание, что в выражении выше специально пропущено слагаемое вида \(R(a_{k+1})\).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 100\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1\le n\le 100\), \(0\le k\le \lfloor \frac{n}{2} \rfloor\)) — длину строки \(s\) и параметр \(k\).

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(n\), состоящую из строчных букв латинского алфавита.

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если можно найти \(a_1,a_2,\ldots,a_{k+1}\), и «NO» (без кавычек) иначе.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

В первом наборе входных данных одно из решений \(a_1=qw\) и \(a_2=q\).

Во втором наборе входных данных одно из решений \(a_1=i\) и \(a_2=o\).

В пятом наборе входных данных одно из решений — это \(a_1=dokidokiliteratureclub\).

B. M-массивы

жадные алгоритмы Конструктив математика *1200

Дан массив \(a_1, a_2, \ldots, a_n\), состоящий из \(n\) положительных целых чисел, и положительное целое число \(m\).

Вы должны разделить элементы этого массива на несколько массивов. Внутри каждого из массивов вы можете переставить числа как угодно.

Назовём массив \(m\)-делимым, если сумма любых двух соседних чисел массива делится на \(m\) (соседними называются числа, стоящие на позициях \(i\) и \(i+1\) для некоторого \(i\)). Массив из одного элемента является \(m\)-делимым.

Найдите наименьшее количество \(m\)-делимых массивов, на которые можно разделить \(a_1, a_2, \ldots, a_n\).

Входные данные

В первой строке находится единственное целое число \(t\) \((1 \le t \le 1000)\)  — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится два целых числа \(n\), \(m\) \((1 \le n \le 10^5, 1 \le m \le 10^5)\).

Во второй строке описания каждого набора входных данных находится \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((1 \le a_i \le 10^9)\).

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превосходят \(10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ на задачу.

Примечание

В первом наборе входных данных можно разделить массив следующим образом:

  • \([4, 8]\). Этот массив является \(4\)-делимым, потому что \(4+8\) делится на \(4\).
  • \([2, 6, 2]\). Этот массив является \(4\)-делимым, потому что \(2+6\) и \(6+2\) делятся на \(4\).
  • \([9]\). Этот массив является \(4\)-делимым, потому что он состоит из одного элемента.

C1. k-НОК (простая версия)

Конструктив математика *1200

Это простая версия задачи. Единственное отличие  — в этой версии задачи \(k = 3\).

Дано целое число \(n\). Необходимо найти такие \(k\) положительных целых чисел \(a_1, a_2, \ldots, a_k\), что:

  • \(a_1 + a_2 + \ldots + a_k = n\)
  • \(LCM(a_1, a_2, \ldots, a_k) \le \frac{n}{2}\)

\(LCM\)  — наименьшее общее кратное чисел \(a_1, a_2, \ldots, a_k\).

Можно показать, что при заданных ограничениях ответ всегда существует.

Входные данные

В первой строке входных данных находится единственное целое число \(t\) \((1 \le t \le 10^4)\)  — количество наборов входных данных.

В единственной строке описания каждого набора входных данных находятся два целых числа \(n\), \(k\) (\(3 \le n \le 10^9\), \(k = 3\)).

Выходные данные

Для каждого набора входных данных выведите \(k\) положительных целых чисел \(a_1, a_2, \ldots, a_k\), удовлетворяющих необходимым условиям.

C2. k-НОК (сложная версия)

Конструктив математика *1600

Это сложная версия задачи. Единственное отличие  — в этой версии задачи \(3 \le k \le n\).

Дано целое число \(n\). Необходимо найти такие \(k\) положительных целых чисел \(a_1, a_2, \ldots, a_k\), что:

  • \(a_1 + a_2 + \ldots + a_k = n\)
  • \(LCM(a_1, a_2, \ldots, a_k) \le \frac{n}{2}\)

\(LCM\)  — наименьшее общее кратное чисел \(a_1, a_2, \ldots, a_k\).

Можно показать, что при заданных ограничениях ответ всегда существует.

Входные данные

В первой строке входных данных находится единственное целое число \(t\) \((1 \le t \le 10^4)\)  — количество наборов входных данных.

В единственной строке описания каждого набора входных данных находятся два целых числа \(n\), \(k\) (\(3 \le n \le 10^9\), \(3 \le k \le n\)).

Гарантируется, что сумма \(k\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(k\) положительных целых чисел \(a_1, a_2, \ldots, a_k\), удовлетворяющих необходимым условиям.

A. Домино на подоконнике

Комбинаторика Конструктив математика *800

У вас есть игральная доска, которую можно представить в виде поля из \(2 \times n\) клеток.

Первые \(k_1\) клеток на первой строке и первые \(k_2\) клеток на второй строке покрашены в белый. Все остальные клетки окрашены в черный.

У вас есть \(w\) белых доминошек (плитки \(2 \times 1\), обе клетки которых белые) и \(b\) черных доминошек (плитки \(2 \times 1\), обе клетки которых черные).

Вы можете положить белую доминошку на доску, если обе клетки доски под ней белые и не заняты другими доминошками. Аналогично, вы можете положить черную доминошку на доску, если обе клетки доски под ней черные и не заняты другими доминошками.

Можете ли вы положить все \(w + b\) доминошек на доску, если вы можете класть доминошки как вертикально, так и горизонтально?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 3000\)) — количество наборов входных данных.

В первой строке каждого набора входных данных заданы три целых числа \(n\), \(k_1\) и \(k_2\) (\(1 \le n \le 1000\); \(0 \le k_1, k_2 \le n\)).

Во второй строке каждого набора заданы два целых числа \(w\) и \(b\) (\(0 \le w, b \le n\)).

Выходные данные

Для каждого набора входных данных, выведите YES, если возможно уложить все \(w + b\) доминошек на доску, или NO в противном случае.

Вы можете вывести каждую букву в любом регистре (например, YES, Yes, yes, yEs будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных, \(n = 1\), \(k_1 = 0\) и \(k_2 = 1\). Следовательно, у доски \(2 \times 1\) клетка \((1, 1)\) — черная, а \((2, 1)\) — белая. Таким образом, вы не можете положить ни одной белой доминошки, так как только одна клетка доски белая.

Во втором наборе, доска того же размера \(2 \times 1\), но обе клетки — белые. Так как \(w = 0\) и \(b = 0\), то вы можете уложить \(0 + 0 = 0\) доминошек на доску.

В третьем наборе, доска \(2 \times 3\), но полностью покрашена в черный (так как \(k_1 = k_2 = 0\)), а потому вы не можете уложить ни одной белой доминошки.

В четвертом наборе, клетки \((1, 1)\), \((1, 2)\), \((1, 3)\) и \((2, 1)\) — белые, а все остальные — черные. Вы можете уложить \(2\) белые доминошки на позиции \(((1, 1), (2, 1))\) и \(((1, 2), (1, 3))\), и \(2\) черные доминошки на позиции \(((1, 4), (2, 4))\) \(((2, 2), (2, 3))\).

C. Сортировка матрицы

битмаски жадные алгоритмы Конструктив Перебор *2600

Даны две таблицы \(A\) и \(B\) размера \(n \times m\).

Назовём сортировкой по столбцу следующее действие: выбирается столбец, и все строки упорядочиваются по значению в этом столбце, от строк, содержащих меньшие значения, к строкам с большими. В случае, если две строки имеют одинаковое значение в этом столбце, их порядок не меняется (такие сортировки называются стабильными).

Подобное поведение сортировки по столбцу можно найти практически в любом офисном приложении для работы с таблицами. Петя работает в одном из таких приложений, и у него открыта таблица \(A\). Он хочет проделать ноль или более операций сортировки по столбцу, чтобы получить таблицу \(B\).

Определите, может ли он это сделать, и если может, предложите ему алгоритм действий — последовательность столбцов, по которым нужно применить сортировку по столбцу. Обратите внимание, что не требуется минимизировать число действий.

Входные данные

В первой строке даны два числа \(n\) и \(m\) (\(1 \le n, m \le 1500\)) — размеры таблицы.

Каждая из следующих \(n\) строк содержит \(m\) целых чисел \(a_{i,j}\) (\(1 \le a_{i, j} \le n\)) — элементы таблицы \(A\).

Каждая из следующих \(n\) строк содержит \(m\) целых чисел \(b_{i, j}\) (\(1 \le b_{i, j} \le n\)) — элементы таблицы \(B\).

Выходные данные

Если превратить таблицу \(A\) в таблицу \(B\) невозможно, выведите \(-1\).

В противном случае выведите \(k\) (\(0 \le k \le 5000\)) — количество сортировок, которые нужно сделать.

Затем выведите \(k\) целых чисел \(c_1, \ldots, c_k\) (\(1 \le c_i \le m\)) — номера столбцов, по которым нужно сделать сортировку.

Можно доказать, что если Петя может осуществить желаемое, то \(5000\) действий ему хватит.

Примечание

Рассмотрим второй пример. После сортировки по первому столбцу таблица имеет вид

\(\)\begin{matrix} 1&3&3\\ 1&1&2\\ 2&3&2. \end{matrix}\(\)

После того, как мы отсортируем таблицу по второму столбцу, она станет

\(\)\begin{matrix} 1&1&2\\ 1&3&3\\ 2&3&2, \end{matrix}\(\)

что нам и нужно.

В третьем тесте любая сортировка не меняет таблицу, так как все столбцы уже отсортированы.

A. Сбалансируйте биты

жадные алгоритмы Конструктив *1600

Скобочная последовательность называется сбалансированной, если ее можно превратить в корректное математическое выражение путем добавления символов '+' и '1'. Например, последовательности «(())()», «()» и «(()(()))» являются сбалансированными, а «)(», «(()» и «(()))(» — нет.

Вам дана бинарная строка \(s\) длины \(n\). Постройте две сбалансированные скобочные последовательности \(a\) и \(b\) длины \(n\) такие, что для всех \(1\le i\le n\) выполняется:

  • если \(s_i=1\), то \(a_i=b_i\)
  • если \(s_i=0\), то \(a_i\ne b_i\)

Если это невозможно, вы должны это определить.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных содержится одно целое число \(n\) (\(2\le n\le 2\cdot 10^5\), \(n\) — четное).

Следующая строка содержит строку \(s\) длины \(n\), состоящую из символов 0 и 1.

Сумма \(n\) во всех тестовых случаях не превышает \(2\cdot 10^5\).

Выходные данные

Если такие две сбалансированные скобочные последовательности существуют, выведите «YES» в первой строке, иначе выведите «NO». Вы можете выводить каждый символ в любом регистре.

Если ответ «YES», в двух следующих строках выведите сбалансированные скобочные последовательности \(a\) и \(b\), удовлетворяющие условиям.

Если есть несколько решений, то можно вывести любое.

Примечание

В первом наборе входных данных \(a=\)«()()()» и \(b=\)«((()))». Символы равны в позициях \(1\), \(3\), \(4\) и \(6\), ровно в тех позициях, где \(s_i=1\).

Во втором наборе входных данных \(a=\)«()()((()))» и \(b=\)«(())()()()». Символы равны в позициях \(1\), \(4\), \(5\), \(7\), \(8\), \(10\), ровно в тех позициях, где \(s_i=1\).

В третьем наборе входных данных решения нет.

B. 3-раскраска

игры интерактив Конструктив *1700

Это интерактивная задача.

Алиса и Боб играют в игру. Есть доска \(n\times n\), изначально пустая. Мы будем обозначать ячейку в строке \(i\) и столбце \(j\) как \((i, j)\) для \(1\le i, j\le n\). Также, есть бесконечный запас фишек \(3\) цветов, обозначенных \(1\), \(2\) и \(3\).

Алиса и Боб ходят по очереди по следующим правилам: каждый ход начинается с того, что Алиса называет один из трех цветов, назовем его \(a\). Затем Боб выбирает цвет \(b\ne a\), выбирает пустую ячейку и помещает на нее фишку цвета \(b\).

Мы говорим, что случился конфликт, если есть две соседние ячейки, содержащие фишки одного цвета. Две ячейки считаются соседними, если у них есть общая сторона.

Если в какой-то момент возникает конфликт, Алиса побеждает. В противном случае, если было совершено \(n^2\) ходов (так что доска полностью заполнилась) без конфликтов, побеждает Боб.

У нас есть доказательство того, что у Боба есть выигрышная стратегия. Сыграйте в игру за Боба и выиграйте.

Интерактор адаптивен. Таким образом, выбор цвета Алисой может зависеть от предыдущих ходов Боба.

Протокол взаимодействия

Взаимодействие начинается с чтения единственного целого числа \(n\) (\(2\le n\le 100\)) — размера доски.

Дальше начинаются ходы. Каждый ход следует начинать с чтения целого \(a\) (\(1\le a\le 3\)) — выбранного цвета Алисы.

Затем необходимо вывести три целых числа \(b,i,j\) (\(1\le b\le 3,b\ne a, 1\le i,j\le n\)) —, что означает, что Боб кладет в ячейку \((i, j)\) фишку цвета \(b\). Ячейка \((i, j)\) не должна содержать фишки из предыдущих ходов. Если ваш ход недействителен или проигрывает партию, взаимодействие прекратится и вы получите вердикт Неправильный ответ.

После того как все \(n^2\) ходов были сделаны, завершите программу, чтобы избежать неожиданных вердиктов.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Формат взломов

Для взлома используйте следующий формат.

Первая строка содержит одно целое число \(n\) (\(2\le n\le 100\)).

Вторая строка содержит \(n^2\) целых чисел \(a_1,\ldots,a_{n^2}\) (\(1\le a_i\le 3\)), где \(a_i\) обозначает цвет Алисы на \(i\)-м ходу игры.

Интерактор может отклониться от заданного во взломе порядка цветов, но только в том случае, если это заставит Боба проиграть.

Примечание

Конечное состояние доски из примера изображено ниже. Боб выигрывает, потому что нет двух соседних ячеек с фишками одного и того же цвета. \(\)\begin{matrix}2&3\\3&1\end{matrix}\(\)

Пример приведен только для демонстрации входного и выходного формата. Не гарантируется, что он будет представлять оптимальную стратегию для Боба или реальное поведение интерактора.

D. Переверните карты

2-sat жадные алгоритмы Конструктив сортировки Структуры данных *2600

Есть колода из \(n\) карт. На карте \(i\) на лицевой стороне написано число \(a_i\), а на оборотной — \(b_i\). Каждое целое число от \(1\) до \(2n\) встречается на картах ровно один раз.

Колода называется отсортированной, если лицевые значения находятся в порядке возрастания, а оборотные — в порядке убывания. То есть, если \(a_i< a_{i+1}\) и \(b_i> b_{i+1}\) для всех \(1\le i<n\).

Перевернуть карту \(i\) означает поменять местами значения \(a_i\) и \(b_i\). Вы должны перевернуть некоторое подмножество карт (возможно, ни одной), а затем разместить эти карты в каком-то порядке. Какое минимальное количество карт вы должны перевернуть, чтобы отсортировать колоду?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1\le n\le 2\cdot 10^5\)) — количество карт.

Следующие \(n\) строк описывают карты. \(i\)-я из этих строк содержит два целых числа \(a_i, b_i\) (\(1\le a_i, b_i\le 2n\)). Каждое целое число от \(1\) до \(2n\) встречается ровно один раз.

Выходные данные

Если отсортировать колоду невозможно, выведите «-1». В противном случае выведите минимальное количество карт, которые необходимо перевернуть, чтобы отсортировать колоду.

Примечание

В первом примере мы переворачиваем карты \((1, 9)\) и \((2, 7)\). Затем карты располагают в порядке \((3,10), (5,8), (6,4), (7,2), (9,1)\). Колода отсортирована потому, что \(3<5<6<7<9\) и \(10>8>4>2>1\).

Во втором примере отсортировать колоду невозможно.

F. Сбалансируйте карты

геометрия графы Конструктив разделяй и властвуй реализация Структуры данных *3500

Сбалансированная скобочная последовательность определяется как целая последовательность целых чисел, которая может быть построена по следующим правилам:

  • Пустая последовательность сбалансирована.
  • Если \([a_1,\ldots,a_n]\) и \([b_1,\ldots, b_m]\) сбалансированы, то их конкатенация \([a_1,\ldots,a_n,b_1,\ldots,b_m]\) сбалансирована.
  • Если \(x\) — целое положительное число и \([a_1,\ldots,a_n]\) сбалансирована, то \([x,a_1,\ldots,a_n,-x]\) сбалансирована.

Положительные числа можно представить себе в виде открывающихся скобок, а отрицательные — в виде закрывающих скобок, где соответствующие скобки должны иметь одинаковый тип (абсолютное значение). Например, \([1, 2, -2, -1]\) и \([1, 3, -3, 2, -2, -1]\) сбалансированы, но \([1, 2, -1, -2]\) и \([-1, 1]\) не сбалансированы.

Есть \(2n\) карт. Каждая карта имеет число на лицевой стороне и число на оборотной. Каждое целое число \(1,-1,2,-2,\ldots,n,-n\) встречается на лицевой стороне ровно одной карты и на оборотной стороне ровной одной карты (необязательно той же карты).

Вы можете переупорядочить карты, как вам угодно. Вам не разрешено переворачивать карты, поэтому числа не могут перемещаться между лицевой и оборотной сторонами карты. Ваша задача — упорядочить карты так, чтобы последовательности, заданные числами на лицевых и оборотных сторонах, были сбалансированы, или сообщить, что это невозможно.

Входные данные

В первой строке содержится одно целое число \(n\) (\(1\le n\le 2\cdot 10^5\)) — количество типов скобок и половина количества карт.

Следующие \(2n\) строк описывают карты. В \(i\)-й из этих строк содержатся два целых числа \(a_i\), \(b_i\) (\(-n\le a_i,b_i\le n\), \(a_i\ne 0\), \(b_i\ne 0\)) — числа на лицевой и оборотной стороне \(i\)-й карты соответственно. Каждое целое число \(1,-1,2,-2,\ldots,n,-n\) встречается ровно один раз как \(a_i\) и ровно один раз как \(b_i\).

Выходные данные

В первой строке выведите «YES», если можно упорядочить карты, чтобы выполнялось условие. В противном случае выведите «NO». Вы можете выводить каждый символ в любом регистре.

Если это возможно, в следующих \(2n\) строках выведите карты в таком порядке, чтобы и лицевая и оборотная части были сбалансированы. Если есть несколько решений, то можно вывести любое.

Примечание

В первом примере лицевые числа образуют сбалансированную последовательность \([1,4,-4,-1,5,3,2,-2,-3,-5]\), а оборотные числа создают сбалансированную последовательность \([3,-3,4,-4,1,-1,2,5,-5,-2]\).

Во втором примере карты даются в таком порядке, что лицевые числа сбалансированы, а оборотные образуют несбалансированную последовательность \([1,2,-1,-2]\). Если бы мы поменяли местами вторую и третью карты, то сбалансировали бы оборотные числа и разбалансировали бы лицевые. Но нет такого порядка, который бы балансировал и то, и другое.

A. Дежавю

Конструктив Строки *800

Палиндром — это строка, которая читается одинаково в обоих направлениях. Например, строки «z», «aa», «aba» и «abccba» — палиндромы, а «codeforces» и «ab» — нет. Вы ненавидите палиндромы, потому что они вызывают у вас дежавю.

Дана строка \(s\). Вы должны вставить ровно один символ 'a' в \(s\). Если таким образом можно получить строку, которая не является палиндромом, вам нужно найти одну из них. В противном случае следует сообщить, что это невозможно.

Например, предположим, что \(s=\) «cbabc». Вставив 'a', можно получить «acbabc», «cababc», «cbaabc», «cbabac», или «cbabca». Строка «cbaabc» — палиндром, и не подходит, поэтому вы должны вывести другую из вышеперечисленных строк.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит строку \(s\), состоящую из строчных английских букв.

Суммарная длина всех строк не превышает \(3\cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если нет решения, выведите «NO».

В противном случае выведите «YES», а в следующей строке выведите строку длиной \(|s|+1\). Если есть несколько решений, можно вывести любое из них.

Вы можете выводить каждый символ «YES» и «NO» в любом регистре.

Примечание

Первый набор входных данных описан в условии.

Во втором наборе входных данных можно получить либо «aab», либо «aba». Но «aba» — это палиндром, поэтому «aab» — единственный правильный ответ.

В третьем наборе входных данных «zaza» и «zzaa» — правильные ответы, а «azza» — нет.

В четвертом наборе входных данных «baa» — единственный правильный ответ.

В пятом наборе входных данных мы можем получить только «aa», что является палиндромом. Следовательно, ответ «NO».

В шестом наборе входных данных «anutforajaroftuna» — палиндром, но вставка 'a' в любом другом месте подходит.

B. Меняем биты

жадные алгоритмы Конструктив математика реализация *1200

Дана бинарная строка \(a\) длины \(n\). За одну операцию можно выбрать любой префикс \(a\) с равным числом символов \(0\) и \(1\). Затем все символы в префиксе меняются: каждый \(0\) становится \(1\), а каждый \(1\)\(0\).

Например, предположим, что \(a=0111010000\).

  • В первой операции можно выбрать префикс длины \(8\), так как он имеет четыре \(0\) и четыре \(1\): \([01110100]00\to [10001011]00\).
  • Во второй операции можно выбрать префикс длины \(2\), так как он имеет один \(0\) и одну \(1\): \([10]00101100\to [01]00101100\).
  • Для третьей операции запрещено выбирать префикс длины \(4\), так как он имеет три \(0\) и одну \(1\).

Можете ли вы преобразовать строку \(a\) в строку \(b\), сделав некоторое конечное количество операций (возможно, ни одной)?

Входные данные

В первой строке содержится одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных содержится одно целое \(n\) (\(1\le n\le 3\cdot 10^5\)) — длина строк \(a\) и \(b\).

Следующие две строки содержат строки \(a\) и \(b\) длиной \(n\), состоящие из символов \(0\) и \(1\).

Сумма \(n\) во всех наборах входных данных не превышает \(3\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если возможно преобразовать \(a\) в \(b\), или «NO», если это невозможно. Вы можете выводить каждый символ в любом регистре.

Примечание

Первый набор входных данных разобран в условии.

Во втором наборе входных данных мы преобразуем \(a\) в \(b\), используя ноль операций.

В третьем наборе входных данных нельзя сделать ни одну операцию, поэтому преобразовать \(a\) в \(b\) невозможно.

В четвертом наборе входных данных, вот одно из таких преобразований:

  • Выберите префикс длины \(2\), чтобы получить \(100101010101\).
  • Выберите префикс длины \(12\), чтобы получить \(011010101010\).
  • Выберите префикс длины \(8\), чтобы получить \(100101011010\).
  • Выберите префикс длины \(4\), чтобы получить \(011001011010\).
  • Выберите префикс длины \(6\), чтобы получить \(100110011010\).

В пятом наборе входных данных единственной разрешенной операцией является преобразование \(a\) в \(111000\). Но для получившейся строки единственная разрешенная операция — это вернуться к строке, с которой мы начали, поэтому мы не можем преобразовать \(a\) в \(b\).

D. Эпическая трансформация

жадные алгоритмы Конструктив Структуры данных *1400

Вам задан массив \(a\) длины \(n\), состоящий из целых чисел. Вы можете применять следующую операцию, состоящую из нескольких шагов, над массивом \(a\) ноль или более раз:

  • вы выбираете два различных числа в массиве \(a_i\) и \(a_j\);
  • вы удаляете \(i\)-й и \(j\)-й элементы из массива.

Например, если \(n=6\) и \(a=[1, 6, 1, 1, 4, 4]\), то вы можете произвести следующую последовательность операций:

  • выбираем \(i=1, j=5\). Массив \(a\) становится равным \([6, 1, 1, 4]\);
  • выбираем \(i=1, j=2\). Массив \(a\) становится равным \([1, 4]\).

Каким может быть минимальный размер массива после применения к нему некоторой последовательности операций?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальный возможный размер массива после применения к нему некоторой последовательности операций.

E. Восстановление перестановки

Конструктив реализация *1500

Перестановка — это последовательность из \(n\) целых чисел от \(1\) до \(n\), в которой все числа встречаются ровно по одному разу. Например, \([1]\), \([3, 5, 2, 1, 4]\), \([1, 3, 2]\) — перестановки, а \([2, 3, 2]\), \([4, 3, 1]\), \([0]\) — нет.

Поликарпу подарили перестановку \(p\) чисел от \(1\) до \(n\). Однако, когда Поликарп пришёл домой, он заметил, что в кармане перестановка \(p\) превратилась в массив \(q\) согласно следующему правилу:

  • \(q_i = \max(p_1, p_2, \ldots, p_i)\).

Теперь Поликарпу стало интересно: какую лексикографически минимальную и лексикографически максимальную перестановки ему могли подарить.

Массив \(a\) длины \(n\) лексикографически меньше массива \(b\) длины \(n\), если существует индекс \(i\) (\(1 \le i \le n\)), такой что первые \(i-1\) элементов у массивов \(a\) и \(b\) совпадают, а \(i\)-й элемент у массива \(a\) меньше, чем \(i\)-й элемент у массива \(b\). Например массив \(a=[1, 3, 2, 3]\) лексикографически меньше массива \(b=[1, 3, 4, 2]\).

Например, если \(n=7\) и \(p=[3, 2, 4, 1, 7, 5, 6]\), тогда \(q=[3, 3, 4, 4, 7, 7, 7]\) и следующие перестановки могли быть в качестве \(p\) изначально:

  • \([3, 1, 4, 2, 7, 5, 6]\) (лексикографически минимальная перестановка);
  • \([3, 1, 4, 2, 7, 6, 5]\);
  • \([3, 2, 4, 1, 7, 5, 6]\);
  • \([3, 2, 4, 1, 7, 6, 5]\) (лексикографически максимальная перестановка).

Для заданного массива \(q\) найдите лексикографически минимальную и лексикографически максимальную перестановки, которые могли быть подарены Поликарпу изначально.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^4\)). Далее следуют \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(q_1, q_2, \ldots, q_n\) (\(1 \le q_i \le n\)).

Гарантируется, что массив \(q\) был получен применением правила из условия к какой-то перестановке \(p\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите две строки:

  • в первой строке выведите \(n\) целых чисел — лексикографически минимальную перестановку, которая могла быть подарена Поликарпу изначально;
  • во второй строке выведите \(n\) целых чисел — лексикографически максимальную перестановку, которая могла быть подарена Поликарпу изначально.

F. Треугольные пути

графы Конструктив кратчайшие пути математика сортировки *2000

Рассмотрим бесконечный треугольник, состоящий из слоев. Занумеруем слои, начиная с единицы, от верхней точки треугольника (сверху вниз). На \(k\)-м слое треугольника расположены \(k\) точек, пронумерованных слева направо. Каждая точка бесконечного треугольника описывается парой чисел \((r, c)\) (\(1 \le c \le r\)), где \(r\) — номер слоя, а \(c\) — номер точки в слое. Из каждой точки \((r, c)\) исходит два направленных ребра в точки \((r+1, c)\) и \((r+1, c+1)\), но только одно из рёбер активировано. Если \(r + c\) — чётно, тогда активировано ребро в точку \((r+1, c)\), иначе активировано ребро в точку \((r+1, c+1)\). Изучите картинку для лучшего понимания.

Черным цветом обозначены активированные ребра. Серым цветом обозначены не активированные ребра.

Из точки \((r_1, c_1)\) можно дойти до точки \((r_2, c_2)\), если между ними существует путь только из активированных рёбер. Например, на картинке выше существует путь из точки \((1, 1)\) в точку \((3, 2)\), но не существует пути из точки \((2, 1)\) в точку \((1, 1)\).

Изначально вы находитесь в точке \((1, 1)\). За каждый ход вы можете:

  • Заменить активированное ребро для точки \((r, c)\). То есть, если активировано ребро в точку \((r+1, c)\), то вместо него активированным станет ребро в точку \((r+1, c+1)\), иначе, если активировано ребро в точку \((r+1, c+1)\), то вместо него активированным станет ребро в точку \((r+1, c)\). Это действие увеличивает стоимость пути на \(1\);
  • Переместиться из текущей точку в другую, перейдя по активированному ребру. Это действие не увеличивает стоимость пути.

Вам дана последовательность из \(n\) точек бесконечного треугольника \((r_1, c_1), (r_2, c_2), \ldots, (r_n, c_n)\). Найдите путь минимальной стоимости из точки \((1, 1)\), проходящий через все \(n\) точек в произвольном порядке.

Входные данные

Первая строка содержит одно целое \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор начинается со строки, в которой записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество точек, которые необходимо посетить.

Во второй строке находится \(n\) чисел \(r_1, r_2, \ldots, r_n\) (\(1 \le r_i \le 10^9\)), где \(r_i\) — номер слоя, в котором находится \(i\)-я точка.

Во третьей строке находится \(n\) чисел \(c_1, c_2, \ldots, c_n\) (\(1 \le c_i \le r_i\)), где \(c_i\) — номер \(i\)-й точки в слое \(r_i\).

Гарантируется, что все \(n\) точек различны.

Гарантируется, что всегда существует хотя бы один способ обойти все \(n\) точек.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальную стоимость пути, проходящего через все точки в соответствующем наборе входных данных.

A. Бинарная литература

жадные алгоритмы Конструктив реализация Строки *1900

Бинарная строка — это строка, содержащая только символы 0 и 1.

Koyomi Kanou усердно работает над своей мечтой стать писательницей. Чтобы попрактиковаться, она решила принять участие в Конкурсе по Написанию Бинарных Романов. Указание к конкурсу состоит из трёх бинарных строк длины \(2n\). Корректным романом для конкурса является бинарная строка длины не более \(3n\), содержащая в качестве подпоследовательностей не менее двух из трёх данных строк.

Koyomi только что получила три строки — указание от организаторов конкурса. Помогите ей написать корректный роман для конкурса.

Строка \(a\) является подпоследовательностью строки \(b\), если \(a\) можно получить из \(b\), удалив несколько (возможно, ноль) символов.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое \(n\) (\(1 \le n \le 10^5\)).

Каждая из следующих трех строк содержит бинарную строку длины \(2n\). Гарантируется, что эти три строки попарно различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую бинарную строку длины не более \(3n\), которая в качестве подпоследовательностей содержит как минимум две из заданных бинарных строк.

Можно доказать, что при данных ограничениях такая бинарная строка существует всегда.

Если есть несколько возможных ответов, вы можете вывести любой из них.

Примечание

В первом наборе входных данных бинарные строки 00 и 01 являются подпоследовательностями выходной строки: 010 и 010. Обратите внимание, что 11 не является подпоследовательностью выходной строки, но это не требуется.

Во втором наборе входных данных все три входных строки являются подпоследовательностями выходной строки: 011001010, 011001010 и 011001010.

B. Почти отсортированные

Бинарный поиск Комбинаторика Конструктив реализация *1800

Seiji Maki не только любит наблюдать за развитием отношений, он также любит наблюдать за последовательностями чисел, особенно перестановками. Сегодня он смотрит на почти отсортированные перестановки.

Перестановка \(a_1, a_2, \dots, a_n\) чисел \(1, 2, \dots, n\) считается почти отсортированной, если условие \(a_{i + 1} \ge a_i - 1\) выполняется для всех \(i\) от \(1\) до \(n - 1\) включительно.

Maki рассматривает список всех почти отсортированных перестановок чисел \(1, 2, \dots, n\), приведенных в лексикографическом порядке, и хочет найти в этом списке перестановку \(k\)-ю. Можете ли вы помочь ему найти такую перестановку?

Перестановка \(p\) лексикографически меньше перестановки \(q\), если и только если выполняется следующее:

  • в первой позиции, где \(p\) и \(q\) различны, в перестановке \(p\) элемент меньше, чем соответствующий элемент в \(q\).
Входные данные

В первой строке содержится одно целое число \(t\) (\(1\le t\le 1000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей два целых числа \(n\) и \(k\) (\(1 \le n \le 10^5\), \(1 \le k \le 10^{18}\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую \(k\)-ю почти отсортированную перестановку длины \(n\) в лексикографическом порядке, или \(-1\), если ее не существует.

Примечание

Для первого и второго набора входных данных список почти отсортированных перестановок с \(n = 1\) составляет \(\{[1]\}\).

Для третьего и пятого набора входных данных список почти отсортированных перестановок с \(n = 3\) составляет \(\{[1, 2, 3], [1, 3, 2], [2, 1, 3], [3, 2, 1]\}\).

D. Обмены на ребрах

геометрия Конструктив сортировки *3000

В связи со специфическим инцидентом на баскетбольной тренировке, Akari придумал следующую задачу со спортивного программирования!

Вам даны \(n\) точек на плоскости, никакие три из которых не лежат на одной прямой. Изначально точка \(i\) имеет метку \(a_i\), причем метки \(a_1, a_2, \dots, a_n\) образуют перестановку чисел \(1, 2, \dots, n\).

Вы можете менять эти метки с помощью следующей операции:

  1. Выберите два разных целых числа \(i\) и \(j\) между \(1\) и \(n\).
  2. Поменяйте местами метки точек \(i\) и \(j\).
  3. Нарисуйте отрезок между точками \(i\) и \(j\).

Последовательность операций корректна, если после применения всех операций в последовательности точка \(k\) имеет метку \(k\) для всех \(k\) от \(1\) до \(n\) включительно, и нарисованные отрезки не пересекаются внутри друг друга. Формально, если два отрезка пересекаются, то они должны сделать это в общей конечной точке обоих отрезков.

В частности, все нарисованные отрезки должны быть попарно различными.

Найдите любую корректную последовательность операций или определите, что ее нет.

Входные данные

В первой строке содержится целое число \(n\) (\(3 \le n \le 2000\))  — количество точек.

В \(i\)-й из следующих \(n\) строк содержится три целых числа \(x_i\), \(y_i\), \(a_i\) (\(-10^6 \le x_i, y_i \le 10^6\), \(1 \le a_i \le n\)), что означает, что точка \(i\) имеет координаты \((x_i, y_i)\) и изначально имеет метку \(a_i\).

Гарантируется, что все точки различны, никакие три точки не лежат на одной прямой, а метки \(a_1, a_2, \dots, a_n\) образуют перестановку чисел \(1, 2, \dots, n\).

Выходные данные

Если невозможно выполнить корректную последовательность операций, выведите \(-1\).

В противном случае выведите целое число \(k\) (\(0 \le k \le \frac{n(n - 1)}{2}\))  — количество выполняемых операций, а затем \(k\) строк, каждая из которых содержит два целых числа \(i\) и \(j\) (\(1 \le i, j \le n\), \(i\neq j\))  — номера точек, выбранных для операции.

Обратите внимание, что вам не требуется минимизировать или максимизировать значение \(k\).

Если возможных ответов несколько, вы можете вывести любой из них.

Примечание

Следующая анимация демонстрирует первый пример. Черные числа обозначают номера точек, а оранжевые — их метки.

Во втором примере все метки изначально находятся в правильном положении, поэтому никаких операций не требуется.

E. Дерево-календарь

Деревья Конструктив Перебор поиск в глубину и подобное сортировки Структуры данных *3100

Yuu Koito и Touko Nanami — молодожёны! В день свадьбы Yuu подарила Touko ориентированное дерево с \(n\) вершинами и корнем в \(1\), а также маркировку \(a\), которая является некоторым DFS обходом дерева. Каждое ребро в этом дереве направлено в сторону от корня.

Следующий алгоритм после вызова dfs(1) возвращает \(a\) — DFS-обход дерева, корнем которого является \(1\):


номер := 0
a := массив длины n

функция dfs(u):
номер := номер + 1
a[u] := номер
для всех v, для которых есть ориентированное ребро (u -> v):
dfs(v)

Обратите внимание, что для дерева может существовать несколько различных DFS-обходов

Touko настолько понравился подарок, что она решила поиграть с ним! Каждый день, начиная с дня после свадьбы, Touko выполняет следующую процедуру один раз:

  • Среди всех ориентированных рёбер \(u \rightarrow v\) таких, что \(a_u < a_v\), выберите рёбро \(u' \rightarrow v'\) с лексикографически минимальной парой \((a_{u'}, a_{v'})\).
  • Обменяйте местами \(a_{u'}\) и \(a_{v'}\).

Прошли дни со свадьбы, а Touko как-то забыла, когда была свадьба, и какой была оригинальная маркировка \(a\)! Опасаясь, что Yuu может разозлиться, Touko решила попросить вас определить эту информацию, используя текущую маркировку.

Будучи ее хорошим другом, вы должны найти количество дней, прошедших со свадьбы, и оригинальную маркировку дерева. Однако есть шанс, что Touko могла ошибиться в процессе, в результате чего текущую маркировку невозможно получить ни из какой начальной маркировки, в этом случае, пожалуйста, сообщите об этом Touko.

Входные данные

В первой строке входных данных содержится целое число \(n\) (\(2 \le n \le 3 \cdot 10^5\)) — количество вершин в дереве.

Во второй строке содержатся \(n\) целые числа \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i \le n\), все \(a_i\) различны) — текущая маркировка дерева.

Каждая из следующих \(n - 1\) строк содержит два целых числа \(u_i\) и \(v_i\) (\(1 \le u, v \le n\), \(u \neq v\)), описывающие ориентированное ребро от \(u_i\) до \(v_i\). Ребра образуют корневое ориентированное дерево с корнем в \(1\).

Выходные данные

Если текущую маркировку невозможно получить ни из какого DFS-обхода, выведите NO.

В противном случае в первой строке выведите YES. Во второй строке выведите единственное целое число, обозначающее количество дней со дня свадьбы. В третьей строке выведите \(n\) чисел через пробел, обозначающих оригинальную маркировку дерева.

Если есть несколько правильных решений, вы можете вывести любое. Это означает, что вы можете вывести любую пару (DFS-обход, количество дней), для которой мы получим текущую конфигурацию, начав из DFS-обхода, который вы предоставили, ровно через предоставленное вами количество дней.

Примечание

Следующая анимация демонстрирует первый пример. Белая метка внутри вершины обозначает номер вершины \(i\), а оранжевая метка — значение \(a_i\).

A. Средняя высота

Конструктив *800

Sayaka Saeki является членом студенческого совета, в который входит \(n\) других членов (не считая Sayaka). \(i\)-й член совета имеет высоту \(a_i\) миллиметров.

Наступает конец учебного года, и Sayaka хочет сфотографировать всех остальных членов студенческого совета. Будучи трудолюбивой девушкой и перфекционисткой, она хочет выстроить всех членов в ряд таким образом, чтобы количество последовательных пар фотогеничных членов было как можно больше.

Пара из двух последовательных членов совета \(u\) и \(v\) в строке считается фотогеничной, если их средний рост — целое число, т.е. \(\frac{a_u + a_v}{2}\) — целое число.

Помогите Sayaka расположить остальных членов в ряд таким образом, чтобы максимизировать количество фотогеничных последовательных пар.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1\le t\le 500\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое \(n\) (\(2 \le n \le 2000\))  — число других членов совета.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i \le 2 \cdot 10^5\))  — высоты каждого из остальных членов совета в миллиметрах.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2000\).

Выходные данные

Для каждого набора входных данных выведите в одной строке \(n\) целых чисел — высоты других членов в порядке, который дает наибольшее количество фотогеничных последовательных пар. Если таких порядков несколько, выведите любой из них.

Примечание

В первом наборе входных данных есть одна фотогеничная пара: \((1, 1)\) — фотогенична, так как \(\frac{1+1}{2}=1\) — целое число, а \((1, 2)\) — нет, так как \(\frac{1+2}{2}=1.5\) — нецелое число.

Во втором наборе входных данных обе пары фотогеничны.

B. Длина НОД

Конструктив математика теория чисел *1100

Даны три целых числа \(a\), \(b\) и \(c\).

Найдите два целых положительных числа \(x\) и \(y\) (\(x > 0\), \(y > 0\)) такие, что:

  • десятичная запись \(x\) без лидирующих нулей состоит из \(a\) цифр;
  • десятичная запись \(y\) без лидирующих нулей состоит из \(b\) цифр;
  • десятичная запись \(gcd(x, y)\) без лидирующих нулей состоит из \(c\) цифр.

\(gcd(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\).

Выведите \(x\) и \(y\). Если возможны несколько ответов, то выведите любой из них.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 285\)) — количество наборов входных данных.

В каждой из следующих \(t\) строк записаны по три целых числа \(a\), \(b\) и \(c\) (\(1 \le a, b \le 9\), \(1 \le c \le min(a, b)\)) — необходимые длины чисел.

Можно показать, что ответ существует для всех наборов входных данных при заданных ограничениях.

Дополнительное ограничение на входные данные: все наборы входных данных различны.

Выходные данные

На каждый набор входных данных выведите два целых положительных числа — \(x\) и \(y\) (\(x > 0\), \(y > 0\)) такие, что:

  • десятичная запись \(x\) без лидирующих нулей состоит из \(a\) цифр;
  • десятичная запись \(y\) без лидирующих нулей состоит из \(b\) цифр;
  • десятичная запись \(gcd(x, y)\) без лидирующих нулей состоит из \(c\) цифр.
Примечание

В примере:

  1. \(gcd(11, 492) = 1\)
  2. \(gcd(13, 26) = 13\)
  3. \(gcd(140133, 160776) = 21\)
  4. \(gcd(1, 1) = 1\)

D. Строка минимальной стоимости

графы жадные алгоритмы Конструктив Перебор Строки *1600

Определим стоимость строки \(s\) как количество пар индексов \(i\) и \(j\) (\(1 \le i < j < |s|\)) таких, что \(s_i = s_j\) и \(s_{i+1} = s_{j+1}\).

Заданы два положительных целых числа \(n\) и \(k\). Среди всех строк длины \(n\), содержащих только первые \(k\) букв латинского алфавита, найдите строку с минимально возможной стоимостью. Если таких строк несколько — найдите любую из них.

Входные данные

Единственная строка содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5; 1 \le k \le 26\)).

Выходные данные

Выведите строку \(s\) такую, что она состоит из \(n\) символов, каждый из которых является одной из первых \(k\) латинских букв, и она имеет минимально возможную стоимость среди всех таких строк. Если таких строк несколько — выведите любую из них.

C. A-B палиндром

Конструктив реализация Строки *1200

Вам дана строка \(s\), состоящая из символов '0', '1' и '?'. Вам необходимо заменить все символы '?' в строке \(s\) на '0' или '1' так, чтобы строка стала палиндромом и чтобы в ней было ровно \(a\) символов '0' и ровно \(b\) символов '1'. Обратите внимание, что каждый из символов '?' вы заменяете независимо от других.

Строка \(t\) длины \(n\) называется палиндромом, если для всех \(i\) (\(1 \le i \le n\)) верно равенство \(t[i] = t[n-i+1]\).

Например, если \(s=\)«01?????0», \(a=4\) и \(b=4\), то можно заменить символы '?' следующими способами:

  • «01011010»;
  • «01100110».

Для заданной строки \(s\) и чисел \(a\) и \(b\) замените все символы '?' в строке \(s\) на '0' или '1' так, чтобы строка стала палиндромом и чтобы в ней было ровно \(a\) символов '0' и ровно \(b\) символов '1'.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^4\)). Далее следуют \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(a\) и \(b\) (\(0 \le a, b \le 2 \cdot 10^5\), \(a + b \ge 1\)).

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(a+b\), состоящую из символов '0', '1' и '?'.

Гарантируется, что сумма длин строк \(s\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите:

  • «-1», если нельзя заменить все символы '?' в строке \(s\) на '0' или '1' так, чтобы строка стала палиндромом и чтобы в ней было ровно \(a\) символов '0' и ровно \(b\) символов '1';
  • строку, которая получается в результате замены, в противном случае.

Если существует несколько подходящий способов замены символов, то можете выводить любой.

D. Испорченный массив

жадные алгоритмы Конструктив Структуры данных *1200

Вам дано число \(n\) и массив \(b_1, b_2, \ldots, b_{n+2}\), полученный согласно следующему алгоритму:

  • был загадан некоторый массив \(a_1, a_2, \ldots, a_n\);
  • массив \(a\) записали в массив \(b\), т.е. \(b_i = a_i\) (\(1 \le i \le n\));
  • \((n+1)\)-м элементом массива \(b\) записали сумму чисел в массиве \(a\), т.е. \(b_{n+1} = a_1+a_2+\ldots+a_n\);
  • \((n+2)\)-м элементом массива \(b\) записали некоторое число \(x\) (\(1 \le x \le 10^9\)), т.е. \(b_{n+2} = x\);
  • массив \(b\) был перемешан.

Например, массив \(b=[2, 3, 7, 12 ,2]\) мог быть получен следующими способами:

  • \(a=[2, 2, 3]\) и \(x=12\);
  • \(a=[3, 2, 7]\) и \(x=2\).

Для заданного массива \(b\) найдите любой массив \(a\), который мог быть загадан изначально.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^4\)). Далее следуют \(t\) наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Вторая строка каждого набора содержит \(n+2\) целых числа \(b_1, b_2, \ldots, b_{n+2}\) (\(1 \le b_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите:

  • «-1», если массив \(b\) не мог быть получен ни по какому массиву \(a\);
  • \(n\) целых чисел \(a_1, a_2, \ldots, a_n\), иначе.

Если существует несколько массивов \(a\), то можете выводить любой.

A. Массив и пики

Конструктив реализация *800

Последовательность \(n\) целых чисел называется перестановкой, если она содержит все целые числа от \(1\) до \(n\) по одному разу.

Вам даны два целых числа \(n\) и \(k\). Постройте перестановку \(a\) чисел от \(1\) до \(n\), в которой ровно \(k\) пиков. Индекс \(i\) массива \(a\) размера \(n\) называется пиком, если \(1 < i < n\), \(a_i \gt a_{i-1}\) и \(a_i \gt a_{i+1}\). Если такой перестановки не существует, выведите \(-1\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

Далее следуют \(t\) строк, каждая из которых содержит два целых числа \(n\) (\(1 \leq n \leq 100\)) и \(k\) (\(0 \leq k \leq n\)) — требуемую длину массива и необходимое число пиков.

Выходные данные

Выведите \(t\) строк. Для каждого набора входных данных, если необходимой перестановки не существует, выведите \(-1\). В противном случае выведите строку, содержащую \(n\) целых чисел, образующих перестановку целых чисел \(1\) до \(n\), содержащую ровно \(k\) пиков.

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных ответом является, например, \(a = [2,4,1,5,3]\). Здесь индексы \(i=2\) и \(i=4\) являются пиками. Это так, потому что \((a_{2} \gt a_{1} \), \(a_{2} \gt a_{3})\), а также \((a_{4} \gt a_{3}\), \(a_{4} \gt a_{5})\).

B. Последовательности И

битмаски Комбинаторика Конструктив математика *1400

Последовательность \(n\) (\(n \ge 2\)) неотрицательных целых чисел \(a_1, a_2, \dots, a_n\) называется хорошей, если для всех \(i\) от \(1\) до \(n-1\) выполняется следующее условие: \(\)a_1 \: \& \: a_2 \: \& \: \dots \: \& \: a_i = a_{i+1} \: \& \: a_{i+2} \: \& \: \dots \: \& \: a_n,\(\) где \(\&\) обозначает операцию побитового И.

Вам дан массив \(a\) размера \(n\) (\(n \geq 2\)). Найдите количество перестановок \(p\) чисел от \(1\) до \(n\), для которых последовательность \(a_{p_1}\), \(a_{p_2}\), ... ,\(a_{p_n}\) является хорошей. Так как это число может быть большим, выведите его по модулю \(10^9+7\).

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — размер массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) строк, где \(i\)-я строка содержит количество хороших перестановок в \(i\)-м наборе входных данных по модулю \(10^9 + 7\).

Примечание

В первом наборе входных данных все числа равны, поэтому все перестановки являются хорошими. Всего есть \(6\) перестановок чисел от \(1\) до \(3\): \([1,2,3]\), \([1,3,2]\), \([2,1,3]\), \([2,3,1]\), \([3,1,2]\), \([3,2,1]\).

Во втором наборе входных данных можно показать, что хороших перестановок нет.

В третьем наборе входных данных существуют \(36\) хороших перестановок. Например, перестановка \([1,5,4,2,3]\) дает последовательность \(s=[0,0,3,2,0]\). Она хорошая, так как

  • \( s_1 = s_2 \: \& \: s_3 \: \& \: s_4 \: \& \: s_5 = 0\),
  • \( s_1 \: \& \: s_2 = s_3 \: \& \: s_4 \: \& \: s_5 = 0\),
  • \( s_1 \: \& \: s_2 \: \& \: s_3 = s_4 \: \& \: s_5 = 0\),
  • \( s_1 \: \& \: s_2 \: \& \: s_3 \: \& \: s_4 = s_5 = 0\).

D. НОД и МОД

графы жадные алгоритмы Конструктив снм сортировки теория чисел *2000

Вам дан массив \(a\) из \(n\) (\(n \geq 2\)) положительных целых чисел, а также целое число \(p\). Рассмотрим неориентированный взвешенный граф на \(n\) вершинах, пронумерованных от \(1\) до \(n\), в котором между вершинами \(i\) и \(j\) (\(i<j\)) добавлены следующие ребра:

  • Если \(gcd(a_i, a_{i+1}, a_{i+2}, \dots, a_{j}) = min(a_i, a_{i+1}, a_{i+2}, \dots, a_j)\), то между вершинами \(i\) и \(j\) существует ребро веса \(min(a_i, a_{i+1}, a_{i+2}, \dots, a_j)\).
  • Если \(i+1=j\), то между вершинами \(i\) и \(j\) существует ребро веса \(p\).

Здесь \(gcd(x, y, \ldots)\) обозначает наибольший общий делитель (НОД) чисел \(x\), \(y\), ....

Обратите внимание, между вершинами \(i\) и \(j\) появляются кратные ребра, если оба условия выполнены. Если же ни одно условие не выполнено для \(i\) и \(j\), то между ними нет ребер.

Ваша цель — найти вес минимального остовного дерева данного графа.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(p\) (\(2 \leq n \leq 2 \cdot 10^5\), \(1 \leq p \leq 10^9\)) — количество вершин и параметр \(p\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, a_3, \dots, a_n\) (\(1 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) строк. Для каждого набора входных данных выведите вес соответствующего минимального остовного дерева.

Примечание

Ниже изображены графы для четырех наборов входных данных примера (ребра одного из минимальных остовных деревьев показаны розовым):

Набор 1

Набор 2

Набор 3

Набор 4

E. Ценовой баланс

Комбинаторика Конструктив математика сортировки *2300

Массив называется красивым, если все его элементы равны.

Вы можете преобразовать некоторый массив, выполнив следующие шаги любое количество раз:

  1. Выберите два индекса \(i\) и \(j\) (\(1 \leq i,j \leq n\)), а также целое число \(x\) (\(1 \leq x \leq a_i\)). Назовем \(i\) истоком, а \(j\) — стоком.
  2. Уменьшите \(i\)-й элемент на \(x\), и увеличьте \(j\)-й элемент на \(x\). Итоговые значения на \(i\)-й и \(j\)-й позициях равны \(a_i-x\) и \(a_j+x\) соответственно.
  3. Стоимость такой операции равна \(x \cdot |j-i| \).
  4. После этой операции \(i\) больше не может стать стоком, а \(j\) больше не может стать истоком.
Общая стоимость преобразования равна сумме стоимостей на шаге \(3\).

Например, массив \([0, 2, 3, 3]\) может быть преобразован в красивый массив \([2, 2, 2, 2]\) с общей стоимостью \(1 \cdot |1-3| + 1 \cdot |1-4| = 5\).

Массив называется сбалансированным, если его можно преобразовать в красивый массив, и стоимость такого преобразования однозначно определена. Другими словами, минимальная стоимость преобразования в красивый массив равна максимальной стоимости.

Вам дан массив \(a_1, a_2, \ldots, a_n\) длины \(n\), элементы которого — неотрицательные целые числа. Ваша задача — найти количество сбалансированных массивов, являющихся перестановками данного. Два массива считаются различными, если элементы на некоторых позициях отличаются. Так как ответ может быть большим, выведите его по модулю \(10^9 + 7\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — размер массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — элементы массива.

Выходные данные

Выведите одно целое число — количество сбалансированных перестановок по модулю \(10^9+7\).

Примечание

В первом примере \([1, 2, 3]\) является сбалансированным массивом, так как мы можем выбрать индекс \(3\) как исток, и индекс \(1\) как сток. После этой операции мы получим красивый массив \([2, 2, 2]\), итоговая стоимость преобразования равна \(2\). Можно показать, что это единственное возможная последовательность операций, приводящая к красивому массиву. Аналогично можно показать, что все другие перестановки тоже сбалансированные.

Во втором примере сбалансированные перестановки — это \([0, 0, 4, 4]\) и \([4, 4, 0, 0]\).

В третьем примере все перестановки являются сбалансированными.

F. Задача об обмене

Конструктив Перебор сортировки Структуры данных *2500

Вам даны два массива \(a\) и \(b\), оба из \(n\) элементов. Вы можете поменять местами два элемента в \(b\) не более одного раза (или ничего не делать). Вам нужно минимизировать величину \(\)\sum_{i}|a_{i}-b_{i}|.\(\)

Найдите минимально возможное значение этой суммы.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le {10^9}\)).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le {10^9}\)).

Выходные данные

Выведите минимально возможное значение суммы \(\sum_{i}|a_{i}-b_{i}|\).

Примечание

В первом примере можно поменять местами первый и пятый элементы массива \(b\), и он станет равным \([ 5, 2, 3, 4, 1 ]\).

В таком случае значение суммы будет равно \(|5-5| + |4-2| + |3-3| + |2-4| + |1-1| = 4\), что является минимумом.

Во втором примере можно поменять местами первый и второй элементы. Ответ равен \(2\).

A. Феникс и золото

жадные алгоритмы Конструктив математика *800

Феникс собрал \(n\) кусков золота и теперь хочет взвесить их вместе, чтобы почувствовать себя богатым. Все веса различны и \(i\)-й кусок золота весит \(w_i\). Феникс будет класть свои \(n\) кусков на весы по одному.

У весов есть необычный дефект: если суммарный вес на них равен \(x\), они взорвутся. Может ли Феникс положить все его \(n\) кусков золота на весы в каком-то порядке, чтобы весы не взорвались в процессе? Если да, помогите ему определить какой-нибудь порядок.

Говоря формально, переставьте элементы массива \(w\) так, чтобы для каждого \(i\) \((1 \le i \le n)\), \(\sum\limits_{j = 1}^{i}w_j \ne x\).

Входные данные

Входные данные состоят из нескольких наборов. В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора заданы два целых числа \(n\) и \(x\) (\(1 \le n \le 100\); \(1 \le x \le 10^4\)) — количество кусков золота у Феникса и вес, который нужно избежать, соответственно.

Во второй строке каждого набора заданы \(n\) целых чисел через пробел \((1 \le w_i \le 100)\) — веса кусков золота. Гарантируется, что все веса попарно различны.

Выходные данные

Для каждого набора входных данных, если Феникс не может положить все \(n\) кусков избежав взрыва, выведите NO. В противном случае выведите YES и массив \(w\) в соответствующем порядке. Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных, Феникс кладет на весы сначала кусок золота веса \(3\), потом кусок веса \(2\), и наконец кусок веса \(1\). На весах сначала будет суммарный вес \(3\), потом — \(5\), затем — \(6\). Весы не взорвутся, потому что вес на них никогда не равен \(2\).

Во втором наборе, весы покажут \(8\), \(9\), \(11\), \(14\) и \(18\) — ничего равного \(3\).

В третьем наборе, Феникс должен положить кусок весом \(5\) на весы, и весы в любом случае взорвутся.

C. Феникс и башни

жадные алгоритмы Конструктив Структуры данных *1400

У Феникса есть \(n\) блоков высотой \(h_1, h_2, \dots, h_n\), где все \(h_i\) не превосходят некоторого значения \(x\). Он планирует расставить все \(n\) блоков в виде \(m\) башен. Высота башни — это просто сумма высот блоков, из которой она состоит. Для того чтобы башни выглядели красиво, высота никаких двух башен не должна отличаться более, чем на \(x\).

Помогите Фениксу построить \(m\) башен красиво. В каждой башне должно быть хотя бы по одному блоку и все блоки должны быть использованы.

Входные данные

Входные данные состоят из нескольких наборов. В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора заданы три целых числа \(n\), \(m\) и \(x\) (\(1 \le m \le n \le 10^5\); \(1 \le x \le 10^4\)) — количество блоков, количество выстраиваемых башен и максимально разрешенная разность высот между любой парой башен, соответственно.

Во второй строке каждого набора заданы \(n\) целых чисел через пробел (\(1 \le h_i \le x\)) — высоты блоков.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных, если Феникс не сможет построить \(m\) башен красиво, выведите NO. В противном случае выведите YES и \(n\) целых чисел \(y_1, y_2, \dots, y_n\), где \(y_i\) (\(1 \le y_i \le m\)) — это номер башни, в которую попадет \(i\)-й блок.

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе, первая башня будет высоты \(1+2+3=6\), а вторая — высоты \(1+2=3\). Их разность \(6-3=3\) и не превосходит \(x=3\), поэтому башни красивые.

Во втором наборе, первая башня будет высоты \(1\), вторая — \(1+2=3\) и третья — \(3\). Максимальная разность между любой парой башен равна \(3-1=2\), что не превосходит \(x=3\), поэтому башни красивые.

F. Феникс и землетрясение

графы Деревья жадные алгоритмы Конструктив поиск в глубину и подобное снм *2600

Родина Феникса, Страна Огня, состоит из \(n\) городов, которые были соединены \(m\) дорогами, но из-за землетрясения они все были разрушены. Теперь Страна Огня хочет восстановить \(n-1\) из этих дорог так, чтобы все города стали снова связаны.

Первоначально, в \(i\)-м городе есть \(a_i\) тонн асфальта. Чтобы восстановить дорогу, необходимо \(x\) тонн асфальта. При этом, чтобы восстановить дорогу между городами \(i\) и \(j\), в городах \(i\) и \(j\) должно быть суммарно хотя бы \(x\) тонн асфальта. Другими словами, в городе \(i\) есть \(a_i\) тонн асфальта, а городе \(j\) — \(a_j\) тонн, то после восстановления дороги между ними останется \(a_i+a_j-x\) тонн. Асфальт можно перевозить между городами, если дорога между ними уже восстановлена.

Определите, возможно ли связать все города, и если да, то выведите последовательность дорог, которые нужно восстановить, в соответствующем порядке.

Входные данные

В первой строке заданы целые числа \(n\), \(m\) и \(x\) (\(2 \le n \le 3 \cdot 10^5\); \(n-1 \le m \le 3 \cdot 10^5\); \(1 \le x \le 10^9\)) — количество городов, количество дорог и количество асфальта, необходимого для восстановления одной дороги.

В следующей строке заданы \(n\) целых чисел через пробел \(a_i\) (\(0 \le a_i \le 10^9\)) — первоначальное количество асфальта в городе \(i\).

В следующих \(m\) строках задано по два целых числа \(x_i\) и \(y_i\) (\(x_i\ne y_i\); \(1 \le x_i, y_i \le n\)) — города соединенные \(i\)-й дорогой. Гарантируется, что между каждой парой городов есть не более одной дороги, и что перед землетрясением города были связаны.

Выходные данные

Если невозможно связать все города, выведите NO. В противном случае выведите YES и далее \(n-1\) целое число \(e_1, e_2, \dots, e_{n-1}\) — порядок, в котором нужно восстанавливать дороги. \(e_i\) — это номер \(i\)-й в порядке восстановления дороги. Если существует несколько ответов, выведите любой.

Примечание

В первом примере, дороги восстанавливаются в следующем порядке:

  • Дорога \(3\) восстановлена (соединяет города \(3\) и \(4\)). В городе \(4\) первоначально было \(4\) тонны асфальта. После восстановления, осталось \(3\) тонны.
  • Дорога \(2\) восстановлена (соединяет города \(2\) и \(3\)). Асфальт из города \(4\) можно перевезти в город \(3\) и использовать на дорогу. Осталось \(2\) тонны.
  • Дорога \(1\) восстановлена (соединяет города \(1\) и \(2\)). Асфальт перевезен в город \(2\) и потрачен на дорогу. Осталась \(1\) тонна.
  • Дорога \(4\) восстановлена (соединяет города \(4\) и \(5\)). Асфальт перевезен в город \(4\) и потрачен на дорогу. Больше асфальта не осталось.
Все города теперь связаны.

Во втором примере, города \(1\) и \(2\) используют свой асфальт вместе для постройки дороги. В каждом городе по \(1\) тонне, то есть вместе \(2\) тонны, чего достаточно.

В третьем примере, для восстановления дороги между городами \(1\) и \(2\) асфальта недостаточно.

C. Ехаб снова делит массив

битмаски дп Конструктив математика *1700

Ехаб снова решил развлечься. У него есть массив \(a\) длины \(n\). Он называет массив хорошим, если его нельзя разбить на \(2\) непересекающихся подпоследовательности такие, что сумма элементов первой равна сумме элементов второй. Сейчас он хочет удалить минимальное количество элементов из \(a\) так, что оставшийся массив будет хорошим. Вы можете ему в этом помочь?

Последовательность \(a\) является подпоследовательностью \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) элементов. Разбить массив это разделить его на \(2\) подпоследовательности так, чтобы каждый элемент входил ровно в одну из них. Вы должны использовать все элементы по одному разу.

Входные данные

В первой строке записано одно целое число \(n\) (\(2 \le n \le 100\)) — размер массива \(a\).

Во второй строке записаны \(n\) целых чисел \(a_1\), \(a_2\), \(\ldots\), \(a_{n}\) (\(1 \le a_i \le 2000\)) — элементы массива \(a\).

Выходные данные

Первая строка должна содержать минимальное количество элементов, которое нужно удалить.

Вторая строка должна содержать индексы этих элементов, записанные через пробел.

Если существует несколько решений, выведите любое из них. Можно показать, что решение всегда существует.

Примечание

В первом примере вы можете разбить массив на \([6,9]\) и \([3,12]\), так что необходимо удалить хотя бы \(1\) элемент. Удаление \(3\) подходит.

Во втором примере массив уже хороший.

B. Утренняя пробежка

жадные алгоритмы Конструктив сортировки *1200

Волонтеры 2050 организуют мероприятие «Беги! Догони восходящее солнце». Начав 25 апреля в 7:30, участники пробегут по 6-километровому маршруту вокруг города Юньци.

На маршруте будет \(n+1\) контрольный пункт. Они пронумерованы \(0\), \(1\), ..., \(n\). Участники начнут в контрольном пункте \(0\) и закончат в пункте \(n\). Ни один контрольный пункт нельзя пропустить — они должны будут пробежать от пункта \(0\) до пункта \(1\), потом от пункта \(1\) до пункта \(2\), и так далее. Изучите картинку из секции примечание для разъяснения.

Между каждой парой соседних контрольных пунктов есть \(m\) различных путей на выбор. Для всех \(1\le i\le n\), чтобы пробежать от пункта \(i-1\) до пункта \(i\), участник должен выбрать ровно один путь из \(m\) возможных. Длина \(j\)-го пути между пунктами \(i-1\) и \(i\) равняется \(b_{i,j}\) для всех \(1\le j\le m\) и \(1\le i\le n\).

Чтобы протестировать маршрут, у нас есть \(m\) бегунов. Каждый бегун должен пробежать от пункта \(0\) до пункта \(n\) один раз, посетив все промежуточные пункты. Каждый путь между каждой парой соседних контрольных пунктов должен быть использован ровно одним бегуном. Если бегун выберет путь длины \(l_i\) между пунктами \(i-1\) и \(i\) (\(1\le i\le n\)), его усталость будет равна \(\)\min_{i=1}^n l_i,\(\) то есть минимальной длине из путей, по которым он пробежал.

Выберите пути для \(m\) бегунов так, чтобы их суммарная усталость была минимальна.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq n,m \leq 100\)).

В \(i\)-й из следующих \(n\) строк даны \(m\) целых чисел \(b_{i,1}\), \(b_{i,2}\), ..., \(b_{i,m}\) (\(1 \le b_{i,j} \le 10^9\)).

Гарантируется, что сумма \(n\cdot m\) по всем наборам входных данных не превышает \(10^4\).

Выходные данные

Для каждого набора входных данных выведите \(n\) строк. \(j\)-е число в \(i\)-й строке должно равняться длине пути, который \(j\)-й бегун выберет между контрольными пунктами \(i-1\) и \(i\). В \(i\)-й строке должно быть ровно \(m\) целых чисел и эти числа должны образовывать перестановку чисел \(b_{i, 1}\), ..., \(b_{i, m}\) для всех \(1\le i\le n\).

Если существует несколько решений, выведите любое.

Примечание

В первом наборе входных данных сумма усталостей равна \(\min(2,5) + \min(3,3) + \min(4,1) = 6\).

Во втором наборе входных данных сумма усталостей равна \(\min(2,4,3) + \min(3,1,5) = 3\).

C. Филломино 2

жадные алгоритмы Конструктив поиск в глубину и подобное реализация *1400

Филломино это классическая головоломка. (Вам не нужно знать Филломино, чтобы решить эту задачу.) В одной из аудиторий в городе Юньци несколько человек играют в настольную игру, вдохновленную этой головоломкой:

Рассмотрим шахматную доску \(n\) на \(n\). Ее строки пронумерованы от \(1\) до \(n\) сверху вниз. А столбцы пронумерованы от \(1\) до \(n\) слева направо. Клетка на пересечении \(x\)-й строки и \(y\)-го столбца обозначается \((x, y)\). Главная диагональ доски это клетки \((x, x)\) для всех \(1 \le x \le n\).

На главной диагонали доски написана перестановка чисел \(\{1, 2, 3, \dots, n\}\). В каждой из клеток написано ровно одно число. Цель игры — разделить клетки ниже и на главной диагонали (таких клеток ровно \(1+2+ \ldots +n\) штук) на \(n\) связных областей, которые удовлетворяют следующим условиям:

  1. Каждая область должна быть связной. Это означает, что мы можем добраться от любой клетки области до любой другой клетки той же области, посещая только клетки из этой области и перемещаясь из клетки в соседнюю по стороне.
  2. \(x\)-я область должна содержать клетку главной диагонали, в которой написано \(x\), для всех \(1\le x\le n\).
  3. Количество клеток, принадлежащих \(x\)-й области, должно равняться \(x\) для всех \(1\le x\le n\).
  4. Каждая клетка ниже и на главной диагонали должна принадлежать ровно одной области.
Входные данные

Первая строка содержит одно целое число \(n\) (\(1\le n \le 500\)), обозначающее размер доски.

Вторая строка содержит \(n\) целых чисел \(p_1\), \(p_2\), ..., \(p_n\). \(p_i\) это число, написанное в клетке \((i, i)\). Гарантируется, что каждое из чисел \(\{1, \ldots, n\}\) встречаются ровно один раз среди \(p_1\), ..., \(p_n\).

Выходные данные

Если решения не существует, выведите \(-1\).

Иначе, выведите \(n\) строк. \(i\)-я строка должна содержать \(i\) чисел. \(j\)-е число в \(i\)-й строке должно равняться \(x\), если клетка \((i, j)\) принадлежит области размера \(x\).

Примечание

Решения для примеров изображены на иллюстрациях:

G. Звездная ночь в кемпинге

графы Конструктив Потоки *3300

У подножия горы Лиюшань будут установлены \(n\) палаток, для тех, кто желает испытать радость от единения с природой, спокойствия ночи и яркого звездного неба.

Палатка номер \(i\) будет расположена в точке \((x_i, y_i)\) и будет иметь вес \(w_i\). Палатка считается важной, если оба \(x_i\) и \(y_i\) являются четными. Вам нужно убрать некоторые из палаток так, чтобы для каждой оставшейся важной палатки \((x, y)\) не существовало \(3\) другие палатки \((x'_1, y'_1)\), \((x'_2, y'_2)\) и \((x'_3, y'_3)\), такие что оба условия выполнены:

  1. \(|x'_j-x|, |y'_j - y|\leq 1\) для всех \(j \in \{1, 2, 3\}\).
  2. Эти четыре палатки образуют параллелограмм (или прямоугольник), и одна из его сторон параллельна оси \(x\).

Максимизируйте сумму весов оставшихся палаток.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1\leq n\leq 1\,000\)), обозначающее количество палаток.

Каждая из следующих \(n\) строк содержит три целых числа \(x_i\), \(y_i\) и \(w_i\) (\(-10^9\leq x_i,y_i \leq 10^9\), \(1\leq w_i\leq 10^9\)), обозначающие координаты \(i\)-й палатки и ее вес. Никакие две палатки не расположены в одной точке.

Выходные данные

Выведите одно целое число — максимальную сумму весов оставшихся палаток.

Примечание

Иллюстрация для второго примера. Черные треугольники обозначают важные палатки. Этот пример также показывает все \(8\) запрещенных паттернов.

E. Сдвиг на один

геометрия графы Деревья Конструктив поиск в глубину и подобное сортировки *2700

На бесконечной плоскости лежат \(n\) точек. Координаты \(i\)-й точки \((x_i, y_i)\) такие, что \(x_i > 0\) и \(y_i > 0\). Координаты необязательно целые.

За один ход осуществляются следующие операции:

  • выбрать две точки \(a\) и \(b\) (\(a \neq b\));
  • подвинуть точку \(a\) из \((x_a, y_a)\) либо в \((x_a + 1, y_a)\), либо в \((x_a, y_a + 1)\);
  • подвинуть точку \(b\) из \((x_b, y_b)\) либо в \((x_b + 1, y_b)\), либо в \((x_b, y_b + 1)\);
  • удалить точки \(a\) и \(b\).

Ход можно совершить только в том случае, если существует прямая, проходящая через новые координаты \(a\), новые координаты \(b\) и \((0, 0)\).

Иначе ход совершить нельзя, и точки остаются на своих начальных координатах \((x_a, y_a)\) и \((x_b, y_b)\), соответственно.

Нумерация точек не меняется после удаления точек. Если точки удалены, то они не могут быть выбраны в последующих ходах. Обратите внимание, что необходимо двигать обе точки во время хода, нельзя оставлять их в изначальных координатах.

Какое наибольшее количество ходов можно совершить? Какие это ходы?

Если существует несколько ответов, то выведите любой из них.

Входные данные

В первой строке записано одно целое \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество точек.

В \(i\)-й из следующих \(n\) строк записаны четыре целых числа \(a_i, b_i, c_i, d_i\) (\(1 \le a_i, b_i, c_i, d_i \le 10^9\)). Координаты \(i\)-й точки — \(x_i = \frac{a_i}{b_i}\) и \(y_i = \frac{c_i}{d_i}\).

Выходные данные

В первой строке выведите одно целое число \(c\) — наибольшее количество ходов, которые можно совершить.

В каждой из следующих \(c\) строк должно быть записано описание хода: два целых числа \(a\) и \(b\) (\(1 \le a, b \le n\), \(a \neq b\)) — точки, удаляемые на текущем ходу. Должен существовать способ подвинуть точки \(a\) и \(b\) согласно условию так, чтобы существовала прямая, проходящая через новые координаты \(a\), новые координаты \(b\) и \((0, 0)\). Никакая удаленная точка не может быть удалена в последующих ходах.

Если существует несколько ответов, то выведите любой из них. Можно выводить ходы и точки внутри ходов в произвольном порядке.

Примечание

Точки из первого примера и перемещения для тех из них, которые выбираются в ходах:

C. Не соседняя матрица

Конструктив *1000

Будем считать числа \(a\) и \(b\) соседними, если они отличаются ровно на единицу, то есть \(|a-b|=1\).

Будем считать клетки квадратной матрицы \(n \times n\) соседними, если они имеют общую сторону, то есть для клетки \((r, c)\) соседними являются клетки \((r, c-1)\), \((r, c+1)\), \((r-1, c)\) и \((r+1, c)\).

Для заданного числа \(n\) постройте квадратную матрицу \(n \times n\), такую что:

  • Каждое число от \(1\) до \(n^2\) встречается в этой матрице ровно один раз;
  • Если \((r_1, c_1)\) и \((r_2, c_2)\) соседние клетки, тогда числа записанные в них не должны быть соседними.
Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 100\)). Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных характеризуется одним целым числом \(n\) (\(1 \le n \le 100\)).

Выходные данные

Для каждого набора входных данных выведите:

  • -1, если искомой матрицы не существует;
  • искомую матрицу, иначе (любую подходящую, если таких существует много).

Матрицу следуют выводить в виде \(n\) строк, где каждая строка содержит \(n\) целых чисел.

F2. Угадай K-й ноль (сложная версия)

Бинарный поиск интерактив Конструктив Структуры данных *2200

Это интерактивная задача.

Это сложная версия задачи. Отличия от простой версии состоят в том, что в сложной версии \(1 \le t \le \min(n, 10^4)\) и количество запросов ограничено числом \(6 \cdot 10^4\).

Поликарп играет в компьютерную игру. В этой игре загадан массив, состоящий из нулей и единиц. Поликарп выиграет, если \(t\) раз угадает позицию \(k\)-го слева нуля.

Поликарп может сделать не более \(6 \cdot 10^4\) запросов следующего вида:

  • ? \(l\) \(r\) — узнать сумму всех элементов на позициях от \(l\) до \(r\) (\(1 \le l \le r \le n\)) включительно.

Чтобы игра была более интересной, каждый угаданный ноль превращается в единицу и игра продолжается на измененном массиве. Более формально, если позиция \(k\)-го нуля равнялась \(x\), тогда после того, как Поликарп угадает эту позицию, \(x\)-й элемент массива заменится с \(0\) на \(1\).

Помогите Поликарпу выиграть в игре.

Протокол взаимодействия

Сначала ваша программа должна считать два целых числа \(n\) и \(t\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le t \le \min(n, 10^4)\)).

Далее следуют \(t\) строк, каждая из которых содержит одно целое число \(k\) (\(1 \le k \le n\)). Гарантируется, что в момент запроса в массиве есть хотя бы \(k\) нулей. Для того, чтобы получить следующее значение \(k\), вы должны вывести ответ для текущего значения \(k\).

После этого вы можете сделать не более \(6 \cdot 10^4\) запросов.

Используйте следующий формат, чтобы вывести ответ (это не считается за запрос, то есть не учитывается в ограничении \(6 \cdot 10^4\)):

  • ! \(x\) — позиция \(k\)-го нуля.

Позиции в массиве нумеруются слева направо от \(1\) до \(n\) включительно.

После вывода \(t\) ответов ваша программа должна немедленно завершиться.

В этой задаче интерактор не адаптивный. Это означает, что в рамках одного теста загаданный массив и запросы не меняются.

При некорректном запросе будет выведено -1. При получении данного значения ваша программа должна немедленно завершиться штатным образом (к примеру, с помощью вызова exit(0)), иначе тестирующая система может выдать произвольный вердикт.

При превышении количества запросов будет выведен вердикт неправильный ответ.

Ваше решение может получить вердикт Решение «зависло», если вы ничего не выведете или забудете сбросить буфер вывода.

Чтобы сбросить буфер вывода вам нужно сделать следующее сразу после вывода запроса и символа конца строки:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • см. документацию других языков.

Взломы

Используйте следующий формат для взломов:

В первой строке выведите строку \(s\) (\(1 \le |s| \le 2 \cdot 10^5\)), состоящую из нулей и единиц, и целое число \(t\) (\(1 \le t \le \min(|s|, 10^4)\)) — загаданный массив и количество запросов, соответственно. В следующих \(t\) строках выведите число \(k\) (\(1 \le k \le |s|\)).

Взламываемое решение не будет иметь прямого доступа к загаданному массиву.

Примечание

В первом тесте загадан массив \([1, 0, 1, 1, 0, 1]\). После ответа на запрос \(k=2\) массив превратился в \([1, 0, 1, 1, 1, 1]\).

A. Настя и почти хорошие числа

Конструктив математика теория чисел *1000

Настя загадала \(2\) целых положительных числа \(A\) и \(B\) и сказала, что:

  • Число называется хорошим, если оно кратно \(A \cdot B\);
  • Иначе число называется почти хорошим, если оно кратно \(A\).

Например, если \(A = 6\) и \(B = 4\), то числа \(24\) и \(72\) хорошие, числа \(6\), \(660\) и \(12\) — почти хорошие, числа \(16\), \(7\) не являются ни хорошими, ни почти хорошими.

Найдите \(3\) различных положительных целых числа \(x\), \(y\) и \(z\) такие, что ровно одно из них хорошее, а остальные \(2\) — почти хорошие, и \(x + y = z\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных.

В первой строке каждого набора заданы два целых числа \(A\) и \(B\) (\(1 \le A \le 10^6\), \(1 \le B \le 10^6\)) — загаданные Настей числа.

Выходные данные

Для каждого набора входных данных выведите:

  • «YES» и \(3\) различных положительных целых числа \(x\), \(y\) и \(z\) (\(1 \le x, y, z \le 10^{18}\)) такие, что ровно одно из них хорошее, а остальные \(2\) — почти хорошие, и \(x + y = z\).
  • «NO», если ответа не существует.
Буквы в словах «YES» и «NO» можно выводить в любом регистре.

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных: \(60\) — хорошее число; \(10\) и \(50\) — почти хорошие.

Во втором наборе входных данных: \(208\) — хорошее число; \(169\) и \(39\) — почти хорошие.

В третьем наборе входных данных: \(154\) — хорошее число; \(28\) и \(182\) — почти хорошие.

B. Настя и хороший массив

Конструктив математика теория чисел *1300

Насте подарили массив целых положительных чисел длины \(n\).

Она называет такой массив \(a\) хорошим, что для любого \(i\) (\(2 \le i \le n\)) выполняется \(gcd(a_{i - 1}, a_{i}) = 1\), где \(gcd(u, v)\) обозначает наибольший общий делитель (НОД) чисел \(u\) и \(v\).

Вы можете выполнять такую операцию: выбрать некоторые различные индексы \(i, j\) (\(1 \le i, j \le n\), \(i \neq j\)), а также два целых числа \(x, y\) (\(1 \le x, y \le 2 \cdot 10^9\)). При этом должно выполняться \(\min{(a_i, a_j)} = \min{(x, y)}\). Затем заменить \(a_i\) на \(x\), а \(a_j\) на \(y\).

Девочка просит вас за не более чем \(n\) операций сделать массив хорошим.

Можно показать, что это всегда возможно.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных.

В первой строке каждого набора задано целое число \(n\) (\(1 \le n \le 10^5\)) — длина массива Насти.

Во второй строке каждого набора заданы \(n\) целых чисел \(a_1, a_2, \ldots, a_{n}\) (\(1 \le a_i \le 10^9\)) — массив Насти.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого из \(t\) наборов входных данных в первой строке выведите одно целое число \(k\) (\(0 \le k \le n\)) — количество выполненных вами операций. Вам не нужно минимизировать это число.

В каждой из последующих \(k\) строк выведите \(4\) целых числа \(i\), \(j\), \(x\), \(y\) (\(1 \le i \neq j \le n\), \(1 \le x, y \le 2 \cdot 10^9\)) такие, что \(\min{(a_i, a_j)} = \min{(x, y)}\) — таким образом вы заменяете \(a_i\) на \(x\); \(a_j\) на \(y\).

Если существует несколько решений, выведите любое из них.

Примечание

Рассмотрим первый набор входных данных.

Изначально \(a = [9, 6, 3, 11, 15]\).

В первой операции заменяем \(a_1\) на \(11\); \(a_5\) на \(9\). Это возможно потому, что \(\min{(a_1, a_5)} = \min{(11, 9)} = 9\).

После этой операции \(a = [11, 6, 3, 11, 9]\).

Во второй операции заменяем \(a_2\) на \(7\); \(a_5\) на \(6\). Это возможно потому, что \(\min{(a_2, a_5)} = \min{(7, 6)} = 6\).

После этой операции \(a = [11, 7, 3, 11, 6]\) — хороший массив.

Во втором наборе входных данных исходный массив уже является хорошим.

C. Настя и загаданная перестановка

интерактив Конструктив *2000

Это интерактивная задача!

Настя загадала перестановку \(p\) длины \(n\), состоящую из элементов от \(1\) до \(n\). Неизвестно по какой причине вы хотите восстановить перестановку. Для того, чтобы сделать это, вы даете Насте целое число \(t\) (\(1 \le t \le 2\)), два различных индекса \(i\) и \(j\) (\(1 \le i, j \le n\), \(i \neq j\)) и целое число \(x\) (\(1 \le x \le n - 1\)).

В зависимости от \(t\) она ответит:

  • \(t = 1\): \(\max{(\min{(x, p_i)}, \min{(x + 1, p_j)})}\);
  • \(t = 2\): \(\min{(\max{(x, p_i)}, \max{(x + 1, p_j)})}\).

Вы можете спросить Настю не более \(\lfloor \frac {3 \cdot n} { 2} \rfloor + 30\) раз. Гарантируется, что она не будет менять перестановку в зависимости от ваших вопросов. Удастся ли вам восстановить перестановку?

Входные данные

Входные данные состоят из нескольких наборов. В начале вам выдается целое число \(T\) (\(1 \le T \le 10\,000\)) — количество наборов входных данных.

В начале каждого набора вам выдается целое число \(n\) (\(3 \le n \le 10^4\)) — длина перестановки \(p\).

Гарантируется, что перестановка в каждом наборе входных данных фиксирована и сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^4\).

Протокол взаимодействия

Чтобы задать вопрос, выведите «? \(t\) \(i\) \(j\) \(x\)» (\(t = 1\) или \(t = 2\), \(1 \le i, j \le n\), \(i \neq j\), \(1 \le x \le n - 1\)). Затем вы должны считать ответ.

Если мы ответим \(−1\) вместо правильного ответа, это означает, что вы превысили количество запросов или сделали неверный запрос. Завершите программу сразу после получения \(−1\), и вы увидите вердикт Неправильный ответ. В противном случае вы можете получить произвольный вердикт, потому что ваше решение будет продолжать читать из закрытого потока.

Чтобы дать ответ, выведите «! \(p_1\) \(p_2\) \(\ldots\) \(p_{n}\)» (без кавычек). Заметьте, что вывод ответа не считается одним из \(\lfloor \frac {3 \cdot n} {2} \rfloor + 30\) запросов.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • Cмотрите документацию для других языков.

Взломы

Чтобы сделать взлом, используйте следующий формат теста:

В первой строке должно находиться единственное целое число \(T\) (\(1 \le T \le 10\,000\)) — количество наборов входных данных.

Для каждого набора входных данных в первой строке выведите целое число \(n\) (\(3 \le n \le 10^4\)) — длина загаданной перестановки \(p\).

Во второй строке выведите \(n\) разделенных пробелами целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)), где \(p\) является перестановкой.

При этом сумма \(n\) по всем наборам должна не превосходить \(2 \cdot 10^4\).

Примечание

Рассмотрим первый набор входных данных. Загаданной перестановкой является \([3, 1, 4, 2]\).

Мы выводим «? \(2\) \(4\) \(1\) \(3\)» и получаем в ответ \(\min{(\max{(3, p_4}), \max{(4, p_1)})} = 3\).

Мы выводим «? \(1\) \(2\) \(4\) \(2\)» и получаем в ответ \(\max{(\min{(2, p_2)}, \min{(3, p_4)})} = 2\).

Рассмотрим второй набор входных данных. Загаданной перестановкой является \([2, 5, 3, 4, 1]\).

Мы выводим «? \(2\) \(3\) \(4\) \(2\)» и получаем в ответ \(\min{(\max{(2, p_3}), \max{(3, p_4)})} = 3\).

D. Настя играет с деревом

Деревья дп жадные алгоритмы Конструктив поиск в глубину и подобное реализация снм Структуры данных *2500

У Насти есть невзвешенное дерево из \(n\) вершин, с которым ей не терпится поиграть!

Девочка будет выполнять следующую операцию с деревом столько раз, сколько ей потребуется:

  1. удалить любое существующее ребро, затем
  2. добавить неориентированное ребро между любой парой вершин.

Какое минимальное количество операций требуется девочке, чтобы получить из дерева бамбук? Бамбуком называется дерево, степень вершин в котором не превосходит \(2\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных.

В первой строке каждого набора задано число \(n\) (\(2 \le n \le 10^5\)) — количество вершин в дереве.

Следующая \(n - 1\) строка каждого набора входных данных описывают ребро дерево в формате \(a_i\), \(b_i\) (\(1 \le a_i, b_i \le n\), \(a_i \neq b_i\)).

Гарантируется, что заданный граф является деревом и сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого из наборов входных данных в первой строке выведите одно целое число \(k\) — минимальное количество операций, необходимых, чтобы получить из дерева бамбук.

В последующих \(k\) строках выведите \(4\) целых числа \(x_1\), \(y_1\), \(x_2\), \(y_2\) (\(1 \le x_1, y_1, x_2, y_{2} \le n\), \(x_1 \neq y_1\), \(x_2 \neq y_2\)) — таким образом вы удаляете ребро \((x_1, y_1)\) и добавляете неориентированное ребро \((x_2, y_2)\).

Обратите внимание, что ребро \((x_1, y_1)\) обязано содержаться в графе до его удаления.

Примечание

Обратите внимание, что граф может быть несвязным после какого-то количества операций.

Рассмотрим первый набор входных данных:

Красным обозначены удаленные ребра, а зеленым – добавленные.

E. Настя и красивая матрица

Бинарный поиск дп жадные алгоритмы Конструктив *2700

Вы обожаете числа, не так ли?) У Насти их много, и она решила поделиться ими с вами! Ну не прелесть?)

Пусть \(a_i\) — это количество чисел, равных \(i\) (\(1 \le i \le k\)), которые у вас есть.

Матрица \(n \times n\) называется красивой, если она содержит все числа, которые у вас есть, а также для каждой подматрицы \(2 \times 2\) исходной матрицы, выполняется:

  1. Количество занятых ячеек не превышает \(3\);
  2. Диагонали не содержат одинаковых чисел.

Составьте красивую матрицу минимального размера.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных.

В первой строке каждого набора заданы \(2\) числa \(m\) и \(k\) (\(1 \le m, k \le 10^5\)) — количество чисел полученных от Насти и длина массива \(a\) соответственно.

Во второй строке каждого набора заданы \(k\) целых чисел \(a_1, a_2, \ldots, a_{k}\) (\(0 \le a_i \le m\), \(a_1 + a_2 + \ldots + a_{k} = m\)), где \(a_i\) — это количество чисел \(i\), которое у вас есть.

Гарантируется, что суммы \(m\) и \(k\) по всем наборам входных данных не превосходят \(2 \cdot 10^5\).

Выходные данные

Для каждого из \(t\) наборов входных данных в первой строке выведите одно целое число \(n\) — размер составленной вами красивой матрицы.

В последующий \(n\) строках выведите по \(n\) целых чисел \(b_{i, j}\) (\(0 \le b_{i, j} \le k\), если позиция пуста, выведите \(b_{i, j} = 0\)) — составленная вами красивая матрица \(b\).

Примечание

Обратите внимание, что \(0\) в этой задаче считается пустой позицией, а не числом.

Возможные ответы для первого набора входных данных:

\(\begin{array}{cc} 1 & 1 \\ 4 & 0 \\ \end{array} \hspace{0,5cm} \begin{array}{cc} 1 & 4 \\ 1 & 0 \\ \end{array} \hspace{0,5cm} \begin{array}{cc} 4 & 0 \\ 1 & 1 \\ \end{array}\)

Примеры некрасивых матриц для первого набора входных данных:

\(\begin{array}{cc} 1 & 0 \\ 4 & 1 \\ \end{array} \hspace{0,5cm} \begin{array}{cc} 4 & 1 \\ 7 & 1 \\ \end{array} \hspace{0,5cm} \begin{array}{cc} 1 & 0 \\ 4 & 0 \\ \end{array}\)

Пример некрасивой матрицы для второго набора входных данных:

\(\begin{array}{cc} 3 & 4 & 0 & 2 & 2 \\ 3 & 2 & 3 & 3 & 0 \\ 0 & 1 & 0 & 0 & 0 \\ 3 & 0 & 0 & 0 & 0 \\ 2 & 1 & 3 & 3 & 3 \\ \end{array}\)

В данном случае левая верхняя матрица содержит \(4\) числа.

B. Повелитель значений

Конструктив *1100

Торгуя на своей любимой бирже, трейдер Василий вдруг понял, что нашел в ней уязвимость. С помощью этой уязвимости он может менять некоторые значения служебных переменных в свою пользу. Чтобы навести суеты, он решил поменять все значения служебных переменных \(a_1, a_2, \ldots, a_n\) на \(-a_1, -a_2, \ldots, -a_n\). По непонятной причине, количество служебных переменных — всегда четное число.

Василий понимает, что каждым своим действием он будет привлекать все больше внимания службы безопасности, поэтому количество его действий не должно превышать \(5\,000\), а также после каждой операции ни одна из переменных по модулю не должна превышать \(10^{18}\). Василий может совершать два типа действий для двух выбранных переменных с индексами \(i\) и \(j\), где \(i < j\):

  1. Выполнить присваивание \(a_i = a_i + a_j\)
  2. Выполнить присваивание \(a_j = a_j - a_i\)

Василий просит вас разработать стратегию, приводящую все служебные переменные к требуемым значениям.

Входные данные

Во входных данных находится несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 20\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит одно целое четное число \(n\) (\(2 \le n \le 10^3\)) — количество системных переменных.

Вторая строка набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((1 \le a_i \le 10^9)\) — описание начального состояния системных переменных.

Выходные данные

Для каждого набора входных данных выведите ответ в следующем формате:

Первая строка вывода должна содержать количество действий \(k\), которое совершит стратегия. Обратите внимание, что вам не требуется минимизировать \(k\). Должно выполняться неравенство \(k \le 5\,000\).

Следующие \(k\) строк должны содержать действия в формате «type i j», где «type» равен «1», если стратегии нужно выполнить присваивание первого типа, и «2» — если стратегии нужно выполнить присваивание второго типа. Обратите внимание, что должно выполняться \(i < j\).

Можно показать, что ответ всегда существует.

Примечание

В первом тестовом примере одной из возможных последовательностей операций может быть следующая:

  1. «2 1 2». Значения переменных после применения операции: [1, 0, 1, 1]
  2. «2 1 2». Значения переменных после применения операции: [1, -1, 1, 1]
  3. «2 1 3». Значения переменных после применения операции: [1, -1, 0, 1]
  4. «2 1 3». Значения переменных после применения операции: [1, -1, -1, 1]
  5. «2 1 4». Значения переменных после применения операции: [1, -1, -1, 0]
  6. «2 1 4». Значения переменных после применения операции: [1, -1, -1, -1]
  7. «1 1 2». Значения переменных после применения операции: [0, -1, -1, -1]
  8. «1 1 2». Значения переменных после применения операции: [-1, -1, -1, -1]

Во втором тестовом примере одной из возможных последовательностей операций может быть следующая:

  1. «2 1 4». Значения переменных после применения операции: [4, 3, 1, -2]
  2. «1 2 4». Значения переменных после применения операции: [4, 1, 1, -2]
  3. «1 2 4». Значения переменных после применения операции: [4, -1, 1, -2]
  4. «1 2 4». Значения переменных после применения операции: [4, -3, 1, -2]
  5. «1 3 4». Значения переменных после применения операции: [4, -3, -1, -2]
  6. «1 1 2». Значения переменных после применения операции: [1, -3, -1, -2]
  7. «1 1 2». Значения переменных после применения операции: [-2, -3, -1, -2]
  8. «1 1 4». Значения переменных после применения операции: [-4, -3, -1, -2]

B. Сортировка перестановки

жадные алгоритмы Конструктив *900

Вам дана перестановка \(a\) состоящая из \(n\) чисел \(1\), \(2\), ..., \(n\) (перестановка — это массив, в котором каждый элемент от \(1\) до \(n\) встречается ровно один раз).

Вы можете выполнять операцию следующего вида — выбрать подмассив (непрерывный подотрезок) \(a\) и переставить в нем элементы произвольным образом. Но такую операцию нельзя применить ко всему массиву целиком.

Например, \(a = [2, 1, 4, 5, 3]\) и мы хотим применить операцию к подмассиву \(a[2, 4]\) (подмассиву, содержащему все элементы от \(2\)-го до \(4\)-го), тогда после операции массив может иметь вид \(a = [2, 5, 1, 4, 3]\), или, например, \(a = [2, 1, 5, 4, 3]\).

Ваша задача — определить минимальное количество вышеописанных операций, позволяющих отсортировать перестановку \(a\) в возрастающем порядке.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2000\)) — количество наборов входных данных.

Первая строка набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 50\)) — количество элементов в перестановке.

Вторая строка набора входных данных содержит \(n\) различных целых чисел от \(1\) до \(n\) — заданную перестановку \(a\).

Выходные данные

Для каждого набора выходных данных выведите одно целое число — минимальное количество вышеописанных операций, позволяющих отсортировать перестановку \(a\) по возрастанию.

Примечание

В объяснениях \(a[i, j]\) означает подмассив \(a\), который начинается с \(i\)-го элемента и заканчивается \(j\)-м элементом.

В первом наборе входных данных из условия можно выбрать подмассив \(a[2, 3]\) и поменять в нем элементы местами.

Во втором наборе входных данных перестановка уже отсортирована, поэтому операции применять не нужно.

В третьем наборе входных данных можно выбрать подмассив \(a[3, 5]\) и превратить \(a\) в \([2, 1, 3, 4, 5]\), а затем выбрать подмассив \(a[1, 2]\) и превратить \(a\) в \([1, 2, 3, 4, 5]\).

A. Среднее неравенство...

Конструктив сортировки *800

Вам дан массив \(a\) из \(2n\) различных целых чисел. Вы хотите расположить элементы этого массива по кругу так, чтобы ни один элемент не был равен среднему арифметическому своих \(2\) соседей.

Более формально, найдите массив \(b\) такой, что:

  • \(b\) является перестановкой \(a\).

  • Для каждого \(i\) от \(1\) до \(2n\), \(b_i \neq \frac{b_{i-1}+b_{i+1}}{2}\), где \(b_0 = b_{2n}\) и \(b_{2n+1} = b_1\).

Можно показать, что при ограничениях задачи такой массив \(b\) всегда существует.

Входные данные

Первая строка ввода содержит одно целое число \(t\) \((1 \leq t \leq 1000)\) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) \((1 \leq n \leq 25)\).

Вторая строка каждого набора входных данных содержит \(2n\) целых чисел \(a_1, a_2, \ldots, a_{2n}\) \((1 \leq a_i \leq 10^9)\) — элементы массива.

Обратите внимание, что нет ограничений на сумму \(n\) по всем наборам входных данных.

Выходные данные

Для каждого набора входных данных выведите \(2n\) целых чисел, \(b_1, b_2, \ldots b_{2n}\), для которых выполняются требования из условия.

Примечание

В первом примере массив \([3, 1, 4, 2, 5, 6]\) подходит, так как он является перестановкой \([1, 2, 3, 4, 5, 6]\), а также \(\frac{3+4}{2}\neq 1\), \(\frac{1+2}{2}\neq 4\), \(\frac{4+5}{2}\neq 2\), \(\frac{2+6}{2}\neq 5\), \(\frac{5+3}{2}\neq 6\), \(\frac{6+1}{2}\neq 3\).

D. Убить Антона

Конструктив математика Перебор Строки Структуры данных *2200

После того, как Антон отклонил \(10^{100}\) задач на структуры данных, Errorgorn очень зол на него и решил его убить.

ДНК Антона можно представить в виде строки \(a\), которая содержит только символы из строки «ANTON» (всего \(4\) различных символов).

Errorgorn может заменить ДНК Антона на строку \(b\), которая должна быть перестановкой \(a\). Однако тело Антона может защититься от этой атаки. За \(1\) секунду его тело может поменять местами \(2\) соседних символа его ДНК, чтобы превратить ее обратно в \(a\). Тело Антона умно и будет использовать минимальное количество ходов.

Чтобы максимизировать вероятность смерти Антона, Errorgorn хочет изменить ДНК Антона на строку, которая максимизирует время, необходимое телу Антона для возвращения к его исходному ДНК. Но поскольку Errorgorn занят решением новых задач на структуры данных, ему нужна ваша помощь, чтобы найти лучшую строку \(B\). Сможете ли вы ему помочь?

Входные данные

Первая строка ввода содержит одно целое число \(t\) \((1 \leq t \leq 100000)\) — количество наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит \(1\) строку \(a\) (\(1 \leq |a| \leq 100000\)). \(a\) состоит только из символов "A", "N", "O" и "T".

Гарантируется, что сумма \(|a|\) по всем тестовым примерам не превышает \(100000\).

Выходные данные

Для каждого набора входных данных выведите единственную строку \(b\). Если ответов несколько, вы можете вывести любой из них. \(b\) должна быть перестановкой строки \(a\).

Примечание

Для первого набора входных данных, телу Антона требуется \(7\) секунд, чтобы превратить NNOTA в ANTON:

NNOTA \(\to\) NNOAT \(\to\) NNAOT \(\to\) NANOT \(\to\) NANTO \(\to\) ANNTO \(\to\) ANTNO \(\to\) ANTON.

Обратите внимание, что нельзя вывести такие строки, как AANTON, ANTONTRYGUB, AAA и anton, так как они не являются перестановкой ANTON.

Для первого тестового случая телу Антона требуется \(2\) секунды, чтобы преобразовать AANN в NAAN. Обратите внимание, что другие строки, такие как NNAA и ANNA также будут приняты.

E. Oolimry и суффиксный массив

Комбинаторика Конструктив математика *2400

Однажды Oolimry увидел суффиксный массив. Ему стало интересно, сколько строк могут дать этот суффиксный массив.

Более формально, для данного суффиксного массив длины \(n\) и размера алфавита \(k\), подсчитайте количество строк, которые порождают такой суффиксный массив.

Пусть \(s\) — строка длины \(n\). Тогда \(i\)-й суффикс \(s\) — это подстрока \(s[i \ldots n-1]\). Суффиксный массив — это массив целых чисел, которые представляют собой позиции начал всех суффиксов данной строки после сортировки этих суффиксов в лексикографическом порядке. Например, суффиксный массив oolimry — это \([3,2,4,1,0,5,6]\), так как отсортированный массив суффиксов — это \([\texttt{imry},\texttt{limry},\texttt{mry},\texttt{olimry},\texttt{oolimry},\texttt{ry},\texttt{y}]\).

Строка \(x\) лексикографически меньше строки \(y\), если либо \(x\) является префиксом \(y\)\(x\neq y\)), либо существует такой \(i\), что \(x_i < y_i\), и для любого \(1\leq j < i\) , \(x_j = y_j\).

Входные данные

Первая строка содержит 2 целых числа \(n\) и \(k\) (\(1 \leq n \leq 200000,1 \leq k \leq 200000\)) — длину суффиксного массива и размер алфавита соответственно.

Вторая строка содержит \(n\) целых чисел \(s_0, s_1, s_2, \ldots, s_{n-1}\) (\(0 \leq s_i \leq n-1\)) где \(s_i\)\(i\)-й элемент суффиксного массива, т.е. стартовая позиция \(i\)-го лексикографически наименьшего суффикса. Гарантируется, что для всех \(0 \leq i< j \leq n-1\), \(s_i \neq s_j\).

Выходные данные

Выведите, сколько строк порождают данный суффиксный массив. Поскольку число может быть очень большим, выведите ответ по модулю \(998244353\).

Примечание

В первом примере «abb» является единственным возможным решением.

Во втором примере можно легко показать, что не существует возможных строк, так как все буквы должны быть одинаковыми.

В четвертом примере одной из возможных строк является «ddbacef».

Пожалуйста, не забывайте выводить свои ответы по модулю \(998244353\).

F. Запросы медианы

интерактив Конструктив Теория вероятностей *3000

Это интерактивная задача.

Есть загаданная перестановка \(p\) (нумерация начинается с \(1\)) из чисел от \(1\) до \(n\). Формально, для \(1 \leq i \leq n\), \(1 \leq p[i] \leq n\) и для \(1 \leq i < j \leq n\), \(p[i] \neq p[j]\). Известно, что \(p[1]<p[2]\).

За \(1\) запрос, вы даете \(3\) различные целые числа \(a,b,c\) (\(1 \leq a,b,c \leq n\)) и получаете медиану из \(\{|p[a]-p[b]|,|p[b]-p[c]|,|p[a]-p[c]|\}\).

В этом случае медиана — это \(2\)-й элемент (в \(1\)-индексации) последовательности, отсортированной в неубывающем порядке. Медиана чисел \(\{4,6,2\}\) равна \(4\), а медиана чисел \(\{0,123,33\}\) равна \(33\).

Можете ли вы найти загаданную перестановку за не более чем \(2n+420\) запросов?

Примечание: интерактор не является адаптивным: перестановка зафиксирована до того, как сделаны какие-либо запросы.

Входные данные

Первая строка ввода содержит одно целое число \(t\) \((1 \leq t \leq 1000)\) — количество наборов входных данных.

Первая строка каждого набора входных данных состоит из одного целого числа \(n\) \((20 \leq n \leq 100000)\) — длины загаданной перестановки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(100000\).

Протокол взаимодействия

Для каждого набора входных данных вы начинаете взаимодействие с чтения \(n\).

Чтобы выполнить запрос, выведите «? a b c», где \(a,b,c\)\(3\) индекса, которые вы хотите использовать для запроса.

Числа должны удовлетворять требованиям \(1 \leq a,b,c \leq n\) и \(a \neq b\),\(b \neq c\),\(a \neq c\).

Для каждого запроса вы получите одно целое число \(x\): медиану из \(\{|p[a]-p[b]|,|p[b]-p[c]|,|p[a]-p[c]|\}\).

Если ваш запрос некорректен или вы задали более \(2n+420\) запросов, интерактор выведет «-1» и завершит взаимодействие. Вы получите вердикт Неправильный ответ. Завершите программу, чтобы избежать получения других вердиктов.

Когда вы определите загаданную перестановку, выведите «! p[1] p[2] ... p[n]». Если перестановка определена верно, интерактор выведет «1». В противном случае интерактор выведет «-1» и завершит взаимодействие. Вы получите вердикт Неправильный ответ. Убедитесь, что вы сразу же вышли, чтобы избежать получения других вердиктов.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы:

Для взлома используйте следующий формат теста:

Первая строка должна содержать одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Первая строка каждого набора входных данных должна содержать одно целое число \(n\) (\(20 \leq n \leq 100000\)) — длину секретной перестановки.

Следующая строка должна содержать \(n\) целых чисел \(p[1],p[2],p[3],\ldots,p[n]\) такие, что \(p[1]<p[2]\) и \(p\) — перестановка чисел от \(1\) до \(n\).

Вы должны убедиться, что сумма \(n\) по всем тестовым примерам не превышает \(100000\).

Примечание

Загаданная перестановка — \(\{9,10,19,7,16,18,11,14,15,6,20,8,17,4,5,3,12,2,13,1\}\).

Для первого запроса значениями \((a,b,c)\) являются \((1,5,2)\). Поскольку \(p[1]=9\), \(p[5]=16\) и \(p[2]=10\), то возвращаемое значение — медиана \(\{|9-16|,|16-10|,|9-10|\}\), которая равна \(6\).

Для второго запроса значения \((a,b,c)\) равны \((20,19,2)\). Поскольку \(p[20]=1\), \(p[19]=13\) и \(p[2]=10\). Возвращаемое значение — медиана \(\{|1-13|,|13-10|,|1-10|\}\), которая равна \(9\).

Каким-то чудом мы выяснили, что загаданная перестановка — \(\{9,10,19,7,16,18,11,14,15,6,20,8,17,4,5,3,12,2,13,1\}\). Мы выводим ее и получаем от интерактора \(1\), что означает, что мы правильно угадали перестановку.

B1. Игра на палиндроме (простая версия)

игры Конструктив *1200

Единственное отличие между простой и сложной версией заключается в том, что \(s\) в простой версии изначально является палиндромом, что не всегда верно в сложной версии.

Палиндромом называется строка, читающаяся одинаково слева направо и справа налево. Например, «101101» — палиндром, а «0101» — нет.

Алиса и Боб играют в игру со строкой \(s\) (которая изначально является палиндромом в простой версии) длины \(n\), состоящей из символов '0' и '1'. Оба игрока ходят по очереди, и Алиса делает первый ход.

За один ход игрок может сделать одну из следующих операций:

  1. Выбрать любое \(i\) (\(1 \le i \le n\)) такое, что \(s[i] =\) '0', заменить \(s[i]\) на '1' и заплатить 1 доллар, или
  2. Развернуть всю строку, заплатив 0 долларов. Эта операция доступна только в том случае, если сейчас строка не палиндром, и последняя операция была не разворотом. Это значит, что если Алиса развернула строку, то Боб не может развернуть ее следующим ходом, и наоборот.

Под разворотом строки подразумевается переупорядочивание символов от последнего к первому. Например, «01001» после разворота становится «10010».

Игра заканчивается тогда, когда вся строка состоит из '1'. Игрок, потративший меньше долларов, побеждает. Если оба игрока потратили одинаковую сумму, то игра завершается ничьей. Выведите результат игры, если оба игрока действуют оптимально.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 10^3\)). Далее следуют \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 10^3\)).

Вторая строка набора содержит строку \(s\) длины \(n\), состоящую только из '0' и '1'. Гарантируется, что строка \(s\) палиндром и содержит минимум один '0'.

Обратите внимание, что ограничения на сумму \(n\) по всем наборам входных данных нет.

Выходные данные

Для каждого набора входных данных выведите ответ:

  • «ALICE», если Алиса побеждает,
  • «BOB», если Боб побеждает,
  • «DRAW», если игра закончится ничьей.
Примечание

В первом примере:

  • на \(1\)-м ходу Алиса обязана использовать \(1\)-ю операцию, так как строка — палиндром.
  • на \(2\)-м ходу Боб разворачивает строку.
  • на \(3\)-м ходу Алиса опять обязана использовать \(1\)-ю операцию. Теперь все символы '1', игра окончена.
Алиса тратит \(2\) доллара, а Боб \(0\). Таким образом, Боб побеждает.

B2. Игра на палиндроме (сложная версия)

игры Конструктив *1900

Единственное отличие между простой и сложной версией заключается в том, что \(s\) в простой версии изначально палиндром, что не всегда верно в сложной версии.

Палиндромом называется строка, читающаяся одинаково слева направо и справа налево. Например, «101101» — палиндром, а «0101» — нет.

Алиса и Боб играют в игру со строкой \(s\) длины \(n\) состоящей из символов '0' и '1'. Оба игрока ходят по очереди, и Алиса делает первый ход.

Каждый ход игрок может сделать одну из следующих операций:

  1. Выбрать любое \(i\) (\(1 \le i \le n\)) такое, что\(s[i] =\) '0' и заменить \(s[i]\) на '1'. Цена такого ходя 1 доллар.
  2. Развернуть всю строку, заплатив 0 долларов. Эта операция доступна только в том случае, если сейчас строка НЕ палиндром, и последняя операция была не разворотом. Это значит, что если Алиса развернула строк, тогда Боб не может развернуть ее следующим ходом, и наоборот.

Под разворотом строки подразумевается переупорядочивание символов от последнего к первому. Например, «01001» после разворота становится «10010».

Игра заканчивается тогда, когда вся строка состоит из '1'. Игрок, потратившей меньше долларов, побеждает. Если оба игрока потратили одинаковую сумму, то игра завершается ничьей. Выведите результат игры, если оба игрока действуют оптимально.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 10^3\)). Далее следуют \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 10^3\)).

Вторая строка набора содержит строку \(s\) длины \(n\), состоящую только из '0' и '1'. Гарантируется, что строка \(s\) содержит минимум один '0'.

Обратите внимание, что ограничения на сумму \(n\) по всем наборам входных данных нет.

Выходные данные

Для каждого набора входных данных выведите ответ:

  • «ALICE», если Алиса побеждает,
  • «BOB», если Боб побеждает,
  • «DRAW», если игра закончится ничьей.
Примечание

В первом примере,

  • на \(1\)-м ходу, Алиса использует \(2\)-ю операцию, чтобы развернуть строку, так как если она сделает \(1\)-ю операцию, то обязательно проиграет. Это заставляет Боба использовать \(1\)-ю операцию.
  • на \(2\)-м ходу Боб использует \(1\)-ю операцию, так как \(2\)-я не может быть использована два раза подряд. Все символы строки '1', игра окончена.
Алиса потратила \(0\) долларов, а Боб \(1\). Таким образом, Алиса победила.

Во втором примере,

  • на \(1\)-м ходу Алиса использует \(1\)-ю операцию, так как строка — палиндром.
  • на \(2\)-м ходу Боб разворачивает строку.
  • на \(3\)-м ходу Алиса должна использовать \(1\)-ю операцию. Все символы строки '1', игра окончена.
Алиса потратила \(2\) доллара, а Боб \(0\). Таким образом, Боб победил.

D. Это птица! Нет, это самолет! Нет, это AaParsa!

графы Конструктив кратчайшие пути *2500

В Шааззззляндии есть \(n\) городов, пронумерованных от \(0\) до \(n-1\). Гааззззляндией, бессмертным врагом Шааззззляндии, правит AaParsa.

Будучи главой разведывательной службы Гааззззляндии, AaParsa выполняет самую важную шпионскую миссию в истории Гааззззляндии на Шааззззляндии.

AaParsa установил \(m\) транспортных пушек в городах Шааззззляндии. \(i\)-я пушка установлена в городе \(a_i\) и изначально направлена на город \(b_i\).

Гарантируется, что в каждом из \(n\) городов есть по крайней мере одна транспортная пушка, и что никакие две пушки из одного города изначально не направлены на один и тот же город (то есть, все пары \((a_i, b_i)\) попарно различны).

AaParsa использовал очень продвинутую технологию для создания пушек, пушки вращаются каждую секунду. Другими словами, если \(i\)-я пушка направлена на город \(x\) в какую-то секунду, то в следующую секунду она будет нацелена на город \((x + 1) \mod n\).

Транспортные пушки, как следует из их названия, предназначены для транспортировки, в частности, для перевозки людей. Если вы используете \(i\)-ю пушку, чтобы запустить себя в направлении города, на который она сейчас нацелена, вы будете находиться в воздухе в течение \(c_i\) секунд, прежде чем достигнете цели.

Если вы все еще не поняли, использование \(i\)-й пушки на \(s\)-й секунде (что возможно, только если вы в данный момент находитесь в городе \(a_i\)) запустит вас в город \((b_i + s) \mod n\), и вы приземлитесь в нем через \(c_i\) секунд (таким образом, вы окажетесь там в \((s + c_i)\)-ю секунду). Обратите внимание, что пушка, из которой вы изначально стартовали, будет вращаться каждую секунду, но вы, очевидно, не будете менять направление, пока находитесь в воздухе.

В своем грандиозном плане AaParsa хочет использовать пушки для перемещения между городами Шааззляндии, и он может начать перемещения в секунду \(0\). Чтобы использовать их в полной мере, ему нужно знать минимальное количество секунд, необходимое для достижения города \(u\) из города \(v\) с помощью пушек, для каждой пары городов \((u, v)\).

Обратите внимание, что AaParsa может оставаться в любом городе столько, сколько захочет.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) \((2 \le n \le 600 , n \le m \le n^2)\) — количество городов и пушек соответственно.

В \(i\)-й строке следующих \(m\) строк содержатся три целых числа \(a_i\), \(b_i\) и \(c_i\) \(( 0 \le a_i , b_i \le n-1 , 1 \le c_i \le 10^9)\), обозначающие пушку в городе \(a_i\), которая изначально направлена на \(b_i\) и путешествие c которой занимает \(c_i\) секунд.

Гарантируется, что в каждом из \(n\) городов есть по крайней мере одна транспортная пушка, и что никакие две пушки из одного города изначально не направлены на один и тот же город (то есть, все пары \((a_i, b_i)\) попарно различны).

Выходные данные

Выведите \(n\) строк, каждая из которых должна содержать \(n\) целых чисел.

\(j\)-е целое число в \(i\)-й строке должно быть равно минимальному времени, необходимому для достижения города \(j\) из города \(i\).

Примечание

В первом примере один из возможных путей перехода от \(0\) к \(2\) был бы таким:

  1. Остаться внутри \(0\) и ничего не делать в течение \(1\) секунды.
  2. Использовать первую пушку и приземлиться в \(2\) через \(1\) секунду.
Обратите внимание: мы могли бы использовать вторую пушку в \(0\)-ю секунду, но в этом случае нам потребовалось бы \(3\) секунды, чтобы достичь города \(2\).

A. Eshag любит большие массивы

жадные алгоритмы Конструктив математика *800

У Eshag есть массив \(a\), состоящий из \(n\) целых чисел.

Eshag может выполнить следующую операцию любое количество раз: выбрать некоторую подпоследовательность \(a\) и удалить из нее каждый элемент, который строго больше чем \(AVG\), где \(AVG\) — среднее арифметическое значение чисел в выбранной подпоследовательности.

Например, если \(a = [1 , 4 , 3 , 2 , 4]\) и Eshag применит операцию к подпоследовательности, содержащей \(a_1\), \(a_2\), \(a_4\) и \(a_5\), то он удалит те из этих \(4\) элементов, которые больше чем \(\frac{a_1+a_2+a_4+a_5}{4} = \frac{11}{4}\), поэтому после операции массив \(a\) станет \(a = [1 , 3 , 2]\).

Ваша задача — найти максимальное количество элементов, которые Eshag может удалить из массива \(a\), применив описанную выше операцию несколько (возможно, ноль) раз.

Последовательность \(b\) является подпоследовательностью массива \(c\), если \(b\) может быть получена из \(c\) путем удаления нескольких (возможно, нуля или всех) элементов.

Входные данные

Первая строка содержит целое число \(t\) \((1\le t\le 100)\) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) \((1\le n\le 100)\) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((1\le a_i \le 100)\) — элементы массива \(a\).

Выходные данные

Для каждого наборов входных данных выведите одно целое число — максимальное количество элементов, которые Eshag может удалить из массива \(a\).

Примечание

Рассмотрим первый набор входных данных.

Первоначально \(a = [1, 1, 1, 2, 2, 3]\).

В первой операции Eshag может выбрать подпоследовательность, содержащую \(a_1\), \(a_5\) и \(a_6\), их среднее арифметическое равно \(\frac{a_1 + a_5 + a_6}{3} = \frac{6}{3} = 2\). Поэтому \(a_6\) будет удалено.

После этого \(a = [1, 1, 1, 2, 2]\).

Во второй операции Eshag может выбрать подпоследовательность, содержащую весь массив \(a\), среднее арифметическое всех его элементов равно \(\frac{7}{5}\). Поэтому \(a_4\) и \(a_5\) будут удалены.

После этого \(a = [1, 1, 1]\).

Во втором наборе входных данных Eshag не может удалить ни одного элемента.

B. Расставьте тарелки

Конструктив реализация *800

В честь вашего дня рождения вы подготовили праздничный стол! Теперь вы хотите посадить за него как можно больше гостей.

Стол можно схематично представить в виде прямоугольника с высотой \(h\) и шириной \(w\), разбитого на \(h \times w\) ячеек. Будем обозначать через \((i, j)\) ячейку в \(i\)-й строке и \(j\)-м столбце прямоугольника (\(1 \le i \le h\); \(1 \le j \le w\)).

В каждую ячейку можно либо поставить тарелку для гостя, либо оставить её пустой.

Поскольку гостя нужно посадить рядом со своей тарелкой, можно ставить тарелки только на границу стола — в первую или последнюю строку прямоугольника, либо в первый или последний столбец. Формально, для любой ячейки \((i, j)\), в которую ставится тарелка, должно выполняться хотя бы одно из следующих условий: \(i = 1\), \(i = h\), \(j = 1\), \(j = w\).

Чтобы гостям было максимально комфортно, никакие две тарелки не должны находиться в ячейках, имеющих общую сторону или угол. Иными словами, если в ячейке \((i, j)\) находится тарелка, нельзя ставить тарелки в ячейки \((i - 1, j)\), \((i, j - 1)\), \((i + 1, j)\), \((i, j + 1)\), \((i - 1, j - 1)\), \((i - 1, j + 1)\), \((i + 1, j - 1)\), \((i + 1, j + 1)\).

Поставьте как можно больше тарелок на стол, не нарушая описанные выше условия.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке задано целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Каждая из следующих \(t\) строк описывает один набор входных данных и содержит два целых числа \(h\) и \(w\) (\(3 \le h, w \le 20\)) — высоту и ширину стола.

Выходные данные

Для каждого набора входных данных выведите \(h\) строк по \(w\) символов каждый. Символ \(j\) в строке \(i\) должен быть равен \(1\), если в ячейку \((i, j)\) ставится тарелка, и \(0\) в противном случае. Если существует несколько решений, выведите любое из них.

Все тарелки должны стоять на границе стола. Никакие две тарелки не могут стоять в ячейках, соседних по стороне или углу. Число тарелок, выставленных на стол при этих условиях, должно быть максимальным возможным.

Разрешается выводить дополнительные пустые строки.

Примечание

В примере представлен единственный способ расставить \(6\) тарелок на стол в первом наборе входных данных.

Во втором наборе входных данных есть много способов расставить \(4\) тарелки, приведён один из них.

Поставить больше \(6\) тарелок в первом наборе входных данных или \(4\) тарелок во втором невозможно.

D. Секретный Санта

графы жадные алгоритмы Конструктив математика Потоки *1600

В компании ВКонтакте в декабре традиционно проводится мероприятие под названием «Секретный Санта». Суть его в следующем.

В мероприятии участвуют \(n\) сотрудников, пронумерованных от \(1\) до \(n\). Каждому сотруднику \(i\) назначается другой сотрудник \(b_i\), которому сотрудник \(i\) должен сделать новогодний подарок. При этом каждый сотрудник назначается ровно одному другому сотруднику, и никто не назначается сам себе (но возможно, что два сотрудника окажутся назначены друг другу). Формально, все \(b_i\) должны быть различными целыми числами от \(1\) до \(n\), и для любого \(i\) должно выполняться \(b_i \ne i\).

Как правило, назначение происходит случайным образом. Но в качестве эксперимента у участников мероприятия спросили, кому бы они хотели сделать подарок. Каждый сотрудник \(i\) сказал, что желает сделать подарок сотруднику \(a_i\).

Найдите такое корректное назначение \(b\), что как можно больше пожеланий сотрудников окажется выполнено.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Каждый набор входных данных задан в двух строках. Первая строка содержит целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — число участников мероприятия.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\); \(a_i \ne i\)) — пожелания сотрудников в порядке от \(1\)-го до \(n\)-го.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите две строки.

В первой строке выведите целое число \(k\) (\(0 \le k \le n\)) — число выполненных пожеланий в вашем назначении.

Во второй строке выведите \(n\) различных целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le n\); \(b_i \ne i\)) — номера сотрудников, назначенных сотрудникам \(1, 2, \ldots, n\).

Число \(k\) должно быть равно числу индексов \(i\) таких, что \(a_i = b_i\), и должно быть максимальным возможным. Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных существует два корректных назначения — \([3, 1, 2]\) и \([2, 3, 1]\). В первом случае будет выполнено два пожелания, а во втором — одно. Таким образом, \(k = 2\), и верным ответом является только назначение \([3, 1, 2]\).

E. Минимакс

жадные алгоритмы Конструктив Строки *2100

Префикс-функция от строки \(t = t_1 t_2 \ldots t_n\) и позиции \(i\) в ней — это длина \(k\) наибольшего собственного (не равного всей подстроке) префикса подстроки \(t_1 t_2 \ldots t_i\), который одновременно является суффиксом этой подстроки.

Например, для строки \(t = \) abacaba значения префикс-функции от позиций \(1, 2, \ldots, 7\) равны \([0, 0, 1, 0, 1, 2, 3]\).

Введём функцию \(f(t)\), равную максимальному значению префикс-функции строки \(t\) по всем её позициям. Например, \(f(\)abacaba\() = 3\).

Вам дана строка \(s\). Переставьте её символы произвольным образом, чтобы получить строку \(t\) (количество вхождений любого символа в строки \(s\) и \(t\) должно совпадать). Значение \(f(t)\) должно быть минимальным возможным. Среди всех вариантов минимизировать \(f(t)\) выберите тот, где строка \(t\) лексикографически минимальна.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Каждый набор входных данных состоит из одной строки \(s\) (\(1 \le |s| \le 10^5\)), состоящей из строчных латинских букв.

Гарантируется, что сумма длин строк \(s\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку \(t\).

Мультимножество букв в строках \(s\) и \(t\) должно совпадать. Значение \(f(t)\), максимума префикс-функции в строке \(t\), должно быть минимальным возможным. Строка \(t\) должна быть лексикографически минимальной среди всех строк, удовлетворяющих предыдущим условиям.

Примечание

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\) — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).

В первом наборе входных данных \(f(t) = 0\) и значения префикс-функции равны \([0, 0, 0, 0, 0]\) для любой перестановки букв. Строка ckpuv является лексикографически минимальной перестановкой букв строки vkcup.

Во втором наборе входных данных \(f(t) = 1\), значения префикс-функции равны \([0, 1, 0, 1, 0, 1, 0]\).

В третьем наборе входных данных \(f(t) = 5\), значения префикс-функции равны \([0, 1, 2, 3, 4, 5]\).

G. Вот это переворот

Конструктив *3300

У вас есть две строки \(a\) и \(b\) равной длины \(n\), состоящие из символов 0 и 1, а также целое число \(k\).

Вам нужно сделать строки \(a\) и \(b\) равными.

За один шаг вы можете выбрать любую подстроку \(a\), содержащую ровно \(k\) символов 1 (и произвольное число символов 0), и перевернуть её. Формально, если \(a = a_1 a_2 \ldots a_n\), вы можете выбрать любые \(l\) и \(r\) (\(1 \le l \le r \le n\)) такие, что среди символов \(a_l, a_{l+1}, \ldots, a_r\) ровно \(k\) единиц, и сделать \(a\) равной \(a_1 a_2 \ldots a_{l-1} a_r a_{r-1} \ldots a_l a_{r+1} a_{r+2} \ldots a_n\).

Найдите способ сделать строки \(a\) и \(b\) равными, используя не более \(4n\) переворотов такого рода, или определите, что такого способа не существует. Минимизировать число переворотов не нужно.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 2000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Каждый набор входных данных состоит из трёх строк. Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2000\); \(0 \le k \le n\)).

Вторая строка содержит строку \(a\) длины \(n\).

Третья строка содержит строку \(b\) той же длины. Обе строки состоят из символов 0 и 1.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2000\).

Выходные данные

Для каждого набора входных данных, если невозможно сделать \(a\) и \(b\) равными, используя не более \(4n\) переворотов, выведите одно целое число \(-1\).

В противном случае выведите целое число \(m\) (\(0 \le m \le 4n\)) — число переворотов в вашей последовательности шагов, и \(m\) пар целых чисел \(l_i, r_i\) (\(1 \le l_i \le r_i \le n\)) — границы подстрок \(a\), которые нужно перевернуть, в хронологическом порядке. Каждая подстрока должна содержать ровно \(k\) единиц на момент переворота.

Обратите внимание, что \(m\) минимизировать не нужно. Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных после первого переворота \(a = \) 011010, после второго переворота \(a = \) 010110, после третьего переворота \(a = \) 010101.

C. Симметричный амфитеатр

*особая задача дп Конструктив

Все готовятся к VK Fest 2021! Для того, чтобы зрителям была лучше видна главная сцена, планируется построить амфитеатр. В этой задаче мы будем рассматривать его сбоку — схематично он будет иметь форму лестницы из \(n\) одинаковых квадратов. Лестница — это одна или более башен квадратов, выстроенных в ряд, где высоты башен невозрастают слева направо.

На следующем рисунке можно видеть три разные фигуры из \(12\) квадратов. Первые две фигуры — лестницы, а третья — нет.

Из эстетических соображений было решено, что амфитеатр должен быть симметричным. Формально, амфитеатр называется симметричным, если при отражении его схемы относительно прямой \(x = y\) получается тот же самый рисунок (где ось \(x\) направлена слева направо, а ось \(y\) — снизу вверх). Например, первая лестница на рисунке выше — симметричная, а вторая — нет.

Кроме того, амфитеатр должен быть максимально компактным — а именно, сторона минимального квадрата, внутрь которого можно его поместить, должна быть как можно меньше.

По заданному числу \(n\) нарисуйте схему амфитеатра из ровно \(n\) квадратов, удовлетворяющую всем условиям.

Входные данные

В единственной строке задано одно целое число \(n\) (\(1 \le n \le 100\)) — число квадратов, из которых нужно составить схему амфитеатра.

Выходные данные

Если не существует схемы амфитеатра из \(n\) квадратов, выведите единственное число \(-1\).

Иначе в первой строке выведите целое число \(m\) — минимальное возможное число строк и столбцов в схеме амфитеатра. Далее выведите \(m\) строк, описывающих схему. Каждая строка должна содержать ровно \(m\) символов 'o' (строчная латинская буква) или '.', где 'o' описывает построенный квадрат, а '.' — пустое место. Схема амфитеатра должна состоять ровно из \(n\) символов 'o'. Ячейка в левом нижнем углу должна содержать квадрат. Если возможных ответов с минимальным \(m\) несколько, выведите любой из них.

G. Карта биомов

*особая задача графы Конструктив поиск в глубину и подобное

Поликарп решил сгенерировать карту биомов для своей игры. Карта представляет собой матрицу, разбитую на клетки \(1 \times 1\). В каждой клетке карты должен находиться один из доступных биомов.

Каждый биом определяется двумя параметрами: температура (целое число от \(1\) до \(n\)) и влажность (целое число от \(1\) до \(m\)). Но, возможно, не для каждой комбинации температура/влажность доступен соответствующий биом.

Карта биомов должна быть сгенерирована по следующим правилам:

  • каждая клетка карты принадлежит ровно одному биому;
  • каждому доступному биому принадлежит хотя бы одна клетка карты;
  • если две клетки карты являются соседними по стороне, и они принадлежат биомам с параметрами (\(t_1, h_1\)) и (\(t_2, h_2\)) соответственно, то должно выполняться равенство \(|t_1-t_2| + |h_1-h_2| = 1\);
  • пусть количество доступных биомов равно \(k\). Ни количество строк, ни столбцов карты не должно превышать \(k\).

Помогите Поликарпу сгенерировать карту биомов, которая удовлетворяет всем вышеописанным условиям (или сообщите, что это невозможно).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 20\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 10\)) — максимальные параметры температуры и влажности.

Следующие \(n\) строк содержат по \(m\) целых чисел \(a_{i,1}, a_{i, 2}, \dots, a_{i, m}\) (\(0 \le a_{i, j} \le 100\)), где \(a_{i, j}\) — идентификатор биома с параметрами \((i, j)\), если \(a_{i, j} \neq 0\), иначе биом с такими параметрами недоступен.

Все идентификаторы биомов различны и есть хотя бы два доступных биома.

Выходные данные

Для каждого набора входных данных выведите ответ в следующем формате:

  • в единственной строке выведите \(-1\), если не существует карты удовлетворяющей всем условиям;
  • иначе в первой строке выведите два целых числа \(h\) и \(w\) — количество строк и столбцов карты соответственно. В следующих \(h\) строках выведите по \(w\) целых чисел — идентификаторы биомов в соответствующих клетках поля.

I. Экскурсии

*особая задача графы Конструктив Паросочетания поиск в глубину и подобное Потоки

Ирина работает в экскурсионной компании Саратова. Сегодня она собирается организовать экскурсии по городам Саратов и Энгельс.

Всего существует \(n_1\) достопримечательность в Саратове и \(n_2\) достопримечательность в Энгельсе. Города разделены рекой, но есть \(m\) автобусных маршрутов, которые проходят по мостам и позволяют туристам добраться из Саратова в Энгельс и обратно. Маршрут \(i\)-го автобуса проходит от \(x_i\)-й достопримечательности в Саратове до \(y_i\)-й достопримечательности в Энгельсе, а также в обратном направлении.

Ирина хочет спланировать экскурсии на текущий день. Экскурсионные поездки начинаются в Саратове утром, продолжаются в Энгельсе днем и заканчиваются в Саратове вечером.

Каждый турист начинает свой экскурсионный день с какой-нибудь достопримечательности Саратова, \(k_i\) туристов начинают с \(i\)-й достопримечательности. Затем гиды везут их в Энгельс: на каждой достопримечательности Саратова гид выбирает автобусный маршрут, ведущий от этой достопримечательности в Энгельс, и все туристы, отправляющиеся с этой достопримечательности, отправляются в Энгельс по этому автобусному маршруту. После завершения экскурсий в Энгельсе происходит то же самое: для каждой достопримечательности в Энгельсе гид выбирает автобусный маршрут, ведущий от этой достопримечательности в Саратов, и все туристы с этой достопримечательности отправляются в Саратов по этому автобусному маршруту.

Этот процесс может привести к такой ситуации, что некоторые туристы вернутся к той же достопримечательности в Саратове, с которой они начали утром. Очевидно, туристам это не нравится, поэтому Ирина хочет выбрать, куда гиды повезут туристов (как по дороге из Саратова в Энгельс, так и по дороге из Энгельса в Саратов), чтобы минимально возможное количество туристов вернулось к той же достопримечательности, с которой они начали. Помогите Ирине найти оптимальный план!

Входные данные

Первая строка содержит три целых числа \(n_1\), \(n_2\) и \(m\) (\(1 \le n_1, n_2 \le 100\); \(\max(n_1, n_2) \le m \le n_1 \cdot n_2\)) — количество достопримечательностей в Саратове, количество достопримечательностей в Энгельсе и количество автобусных маршрутов соответственно.

Вторая строка содержит \(n_1\) целых чисел \(k_1, k_2, \dots, k_{n_1}\) (\(1 \le k_i \le 10^6\)), где \(k_i\) — количество туристов, начинающих с \(i\)-й достопримечательности в Саратове.

Затем следует \(m\) строк, каждая из которых описывает автобусный маршрут: \(i\)-я строка содержит два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i \le n_1\); \(1 \le y_i \le n_2\)), что означает, что \(i\)-й маршрут автобуса соединяет \(x_i\)-ю достопримечательность в Саратове и \(y_i\)-ю достопримечательность в Энгельсе. Все автобусные маршруты различны, и у каждой достопримечательности есть по крайней мере один автобусный маршрут, ведущий к ней / от нее.

Выходные данные

Выведите одно целое число — минимально возможное количество туристов, которые вернутся к тому же месту, откуда они начали.

D. Потерянное дерево

Деревья интерактив Конструктив *1800

Это интерактивная задача.

Маленький Дорми на фестивале столкнулся со странной головоломкой: ему нужно угадать ребра невзвешенного дерева из \(n\) вершин! Вершины дерева пронумерованы от \(1\) до \(n\).

Ему разрешается задавать организатору вопросы одного вида:

  • Маленький Дорми выбирает вершину \(r\) (\(1 \le r \le n\)), а организатор в ответ предоставляет ему массив целых чисел \(d_1, d_2, \ldots, d_n\), где \(d_i\) — длина кратчайшего пути из \(r\) в вершину \(i\) для всех \(1 \le i \le n\).

Кроме того, чтобы сделать головоломку нечестной дополнительно озадачить Дорми, организатор разрешает задать не более \(\lceil\frac{n}{2}\rceil\) вопросов, где \(\lceil x \rceil\) обозначает наименьшее целое число, большее либо равное \(x\).

Маленький Дорми переживает, что может не угадать дерево, поэтому ему нужна ваша помощь!

Обратите внимание, что организатор создает дерево до начала взаимодействия, и не меняет его в процессе взаимодействия.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 2\,000\)) — количество вершин в дереве.

После этого начинается взаимодействие.

Выходные данные

Когда ваша программа нашла дерево, выведите одну строку, содержащую «!», а затем \(n-1\) строку, каждая из которых содержит два целых числа \(a\) и \(b\), означающие ребро, соединяющее вершины \(a\) и \(b\) (\(1 \le a, b \le n\)). После этого ваша программа должна сбросить буфер вывода и завершиться.

Вы можете выводить ребра дерева в любом порядке, ребро \((a,b)\) и ребро \((b,a)\) считаются одним и тем же ребром. Вывод ответа не считается как один из вопросов.

Протокол взаимодействия

После чтения количества вершин, вы можете задать не более \(\lceil\frac{n}{2}\rceil\) вопросов. Каждый вопрос задается в формате «? r», где целое число \(r\) (\(1 \le r \le n\)) обозначает номер вершины, которую вы выбрали для этого вопроса.

После этого считайте \(n\) целых чисел \(d_1, d_2, \ldots, d_n\) в отдельной строке, где \(d_i\) равно длине кратчайшего пути из вершины \(r\) в вершину \(i\).

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Если в какой-то момент вы задали больше, чем \(\lceil \frac{n}{2} \rceil\) вопросов, взаимодействие прекратится, и вы получите вердикт «Неправильный ответ».

Взломы

Чтобы взломать решение, используйте следующий формат теста.

Первая строка содержит целое число \(n\) (\(2 \le n \le 2\,000\)).

Следующие \(n−1\) строк содержат два целых числа \(u\) и \(v\) (\(1 \le u,v \le n\)), обозначающие ребро между вершинами \(u\) и \(v\) (\(u \neq v\)). Эти \(n-1\) ребер должны образовывать дерево.

Примечание

Ниже показано дерево из первого примера.

Обратите внимание, что ребра можно выводить в любом порядке.

Кроме того, ниже показаны ответы для всех возможных вопросов в примере \(1\):

  • \(1\): \([0,1,2,2]\)
  • \(2\): \([1,0,1,1]\)
  • \(3\): \([2,1,0,2]\)
  • \(4\): \([2,1,2,0]\)

Ниже показано дерево из второго примера.

Далее показаны ответы для всех возможных вопросов в примере \(2\):

  • \(1\): \([0,4,1,3,2]\)
  • \(2\): \([4,0,3,1,2]\)
  • \(3\): \([1,3,0,2,1]\)
  • \(4\): \([3,1,2,0,1]\)
  • \(5\): \([2,2,1,1,0]\)

H. Потерянные вершины

графы Деревья дп интерактив Конструктив сортировки *3500

Это интерактивная задача.

Так как маленький Эрики прошел на Международную олимпиаду школьников по информатике в этом году, он получил подарок от своих друзей: дерево с \(n\) вершинами!

По пути к месту проведения Эрики было скучно, поэтому он решил сыграть в игру с маленьким Ивонном с использованием нового дерева. Сначала Ивонн загадывает две (не обязательно различные) вершины \(a\) и \(b\) в этом дереве (не сообщая их Эрики), а затем сообщает ему подсказку \(f\) — одну из вершин на простом пути от \(a\) до \(b\).

Затем маленький Эрики может спрашивать следующие вопросы:

Задача маленького Эрики — найти вершины \(a\) и \(b\).

Маленький Ивонн считает игру слишком простой, поэтому в начале игры, перед тем, как дать подсказку \(f\), он просит Эрики найти максимальное количество запросов, необходимых для нахождения \(a\) и \(b\) для всех возможных значений \(a\), \(b\) и \(f\) в предположении, что Эрики действует оптимально. Под оптимальными действиями подразумевается стратегия, делающая наименьшее число запросов. Конечно, после того, как маленький Эрики скажет это максимальное количество запросов, Ивонн не разрешит сделать больше запросов в самой игре.

Дерево, \(a\), \(b\) и \(f\) фиксированы до начала игры и не меняются в зависимости от запросов.

Протокол взаимодействия

Сначала считайте строку, содержащую одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество вершин в дереве.

Сделающие \(n−1\) строк описывают дерево маленького Дорми. Каждая из этих строк содержит два целых числа \(u\) и \(v\) (\(1 \le u,v \le n\)), обозначающие ребро между вершинами \(u\) и \(v\) (\(u \neq v\)). Гарантируется, что эти ребра образуют дерево.

После этого вы должны вывести \(k\) — максимальное число запросов, необходимое для определения \(a\) и \(b\) по всем возможным значениям \(a\), \(b\) и \(f\) в предположении оптимальной игры. Вы должны вывести перевод строки и сбросить буфер вывода после вывода \(k\).

Затем считайте одно целое число \(f\) (\(1 \le f \le n\)) — подсказку: вершину на пути от \(a\) до \(b\) включительно.

После этого вы можете делать запросы. Вам будет разрешено сделать не более \(k\) запросов, где \(k\) — число, которое вы вывели.

Для того, чтобы сделать запрос, выведите «? r», где \(r\) — целое число, \(1 \le r \le n\), обозначающее, за какую вершину вы хотите подвесить дерево.

В ответ вы получите целое число \(x\) (\(1 \le x \le n\)) — наименьший общий предок вершин \(a\) и \(b\), если дерево подвесить за \(r\).

Когда ваша программа определит \(a\) и \(b\), выведите их в следующем формате: «! a b», где \(a\) и \(b\) — две загаданные вершины, и завершите программу сразу после сброса буфера вывода. Вы можете вывести \(a\) и \(b\) в любом порядке.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Если вы сделаете некорректный вывод, или сделаете более \(k\) запросов, взаимодействие прекратится и вы получите вердикт «Неправильный ответ». Вывод считается некорректным, если это некорректный запрос, или вы вывели \(k\), меньшее \(0\) или большее \(n\).

Взломы

Чтобы взломать решение, используйте следующий формат:

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)).

Следующие \(n−1\) строк содержат по два целых числа \(u\) и \(v\) (\(1 \le u,v \le n\)), обозначающие ребро между вершинами \(u\) и \(v\) (\(u \neq v\)). Эти \(n-1\) ребра должны образовывать дерево.

Следующая строка содержит два целых числа \(a\) и \(b\) (\(1 \le a,b \le n\)).

Последняя строка должна содержать одно целое число \(f\) (\(1 \le f \le n\)). Вершина \(f\) должна лежать на простом пути от \(a\) до \(b\) включительно.

Примечание

Дерево из первого примера показано ниже. Вершины \(a\) и \(b\) выделены жирным.

Обратите внимание, что вы можете вывести \(a\) и \(b\) в любом порядке.

Ниже приведены ответы на все возможные запросы \(1,2,\ldots,n\):

  • \(1\): \(1\)
  • \(2\): \(2\)
  • \(3\): \(2\)
  • \(4\): \(4\)

__________________________________________

Дерево из второго примера показано ниже. Вершины \(a\) и \(b\) выделены жирным.

Ниже приведены ответы на все возможные запросы \(1,2,\ldots,n\) в примере \(2\):

  • \(1\): \(1\)
  • \(2\): \(4\)
  • \(3\): \(1\)
  • \(4\): \(4\)
  • \(5\): \(4\)

A. Омкар и плохая легенда

Конструктив Перебор *800

Омкар получил сообщение от Антона: «Ваша легенда по задаче A слишком запутанная. Просто сделайте формальное условие». В связи с этим Омкар дает вам массив \(a = [a_1, a_2, \ldots, a_n]\) из \(n\) попарно различных целых чисел. Массив \(b = [b_1, b_2, \ldots, b_k]\) называется хорошим, если для любых различных элементов \(b_i, b_j\) массива \(b\), \(|b_i-b_j|\) встречается в \(b\) хотя бы один раз. Кроме того, все элементы \(b\) должны быть попарно различными. Можете ли вы добавить несколько (возможно, \(0\)) целых чисел в \(a\), чтобы получился хороший массив \(b\) размером не более \(300\)? Если \(a\) уже хороший, вы не обязаны добавлять никаких элементов.

Например, массив \([3, 6, 9]\) является хорошим, поскольку \(|6-3|=|9-6| = 3\), встречается в массиве, и \(|9-3| = 6\), встречается в массиве, тогда как массив \([4, 2, 0, 6, 9]\) не является хорошим, поскольку \(|9-4| = 5\) не встречается в массиве.

Для целых чисел \(x\) и \(y\), \(|x-y| = x-y\), если \(x > y\) и \(|x-y| = y-x\) в противном случае.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит \(t\) (\(1 \leq t \leq 50\)), количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 100\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) попарно различных целых чисел \(a_1, a_2, \cdots, a_n\) (\(-100 \leq a_i \leq 100\)) — элементы массива \(a\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую YES, если Омкар может создать хороший массив \(b\) путем добавления целых чисел к \(a\) и NO в противном случае. Регистр каждой буквы не имеет значения, поэтому YEs и nO также будут приняты.

Если первая строка YES, выведите вторую строку, содержащую одно целое число \(k\) (\(n \leq k \leq 300\)).

Затем выведите одну строку, содержащую \(k\) попарно различных целых чисел \(b_1, b_2, \cdots, b_k\) (\(-10^9 \leq b_i \leq 10^9\)) — элементы хорошего массива \(b\). \(b_1, b_2, \cdots, b_k\) могут быть в любом порядке. Для каждого \(a_i\) из \(a\), \(a_i\) должно хотя бы раз встречаться в \(b\).

Можно показать, что если Омкар может создать такой массив \(b\), то он может сделать это и таким образом, чтобы удовлетворить вышеуказанным ограничениям.

Если существует несколько решений, можно вывести любое.

Примечание

Для первого набора входных данных можно добавить целые числа к \(a\), чтобы получить массив \(b = [3, 0, 6, 9, 3]\). Обратите внимание, что \(|6-3| = |9-6| = |3-0| = 3\) и \(3\) встречается в \(b\), \(|6-0| = |9-3| = 6\) и \(6\) встречается в \(b\), а также \(|9-0| = 9\) встречается в \(b\), поэтому \(b\) хороший.

Для второго набора входных данных можно добавить целые числа к \(a\), чтобы получить массив \(b = [5, 3, 1, 2, 4]\). Здесь \(|2-1| = |3-2| = |4-3| = |5-4| = 1\) встречается в \(b\), \(|3-1| = |4-2| = |5-3| = 2\) встречается в \(b\), \(|4-1| = |5-2| = 3\) встречается в \(b\), и \(|5-1| = 4\) встречается в \(b\), поэтому \(b\) является хорошим.

Для четвертого набора входных данных можно добавить целые числа к \(a\), чтобы получить массив \(b = [8, 12, 6, 2, 4, 10]\). Здесь \(|4-2| = |6-4| = |8-6| = |10-8| = |12-10| = 2\) встречается в \(b\), \(|6-2| = |8-4| = |10-6| = |12-8| = 4\) встречается в \(b\), \(|8-2| = |10-4| = |12-6| = 6\) встречается в \(b\), \(|10-2| = |12-4| = 8\) встречается в \(b\), а также \(|12-2| = 10\) встречается в \(b\), поэтому \(b\) хороший.

Можно доказать, что для всех остальных наборов входных данных невозможно получить хороший массив \(b\).

B. Принцесса Веруртейлунга

Конструктив Перебор Строки *1200

Я, Фишль, принцесса Веруртейлунга, спустилась на эту землю по зову судьбы — О, ты тоже путешественница из другого мира? Очень хорошо, я разрешаю вам путешествовать со мной.

Нет ничего удивительного в том, что Фишль говорит, так странно выбирая выражения. Однако на этот раз даже Оз, ее друг-ворон, не может истолковать их! Может быть, вы поможете нам понять, что говорит эта юная принцесса?

Вам дана строка из \(n\) строчных латинских букв — слово, которое только что произнесла Фишль. Вы думаете, что MEX строки может помочь вам найти смысл этого сообщения. MEX строки определяется как самая короткая строка, которая не встречается как непрерывная подстрока во входных данных. Если существует несколько таких строк, то за MEX считается лексикографически наименьшая из них. Обратите внимание, что пустая подстрока НЕ считается MEX.

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\) — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).

Строка \(a\) является подстрокой \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов из начала и нескольких (возможно, ни одного или всех) символов из конца.

Узнайте, что представляет собой строка MEX!

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \leq t \leq 1000\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 1000\)) — длина слова. Вторая строка каждого набора входных данных содержит одну строку из \(n\) строчных латинских букв.

Сумма \(n\) по всем наборам входных данных не превышает \(1000\).

Выходные данные

Для каждого набора входных данных выведите MEX строки в отдельной строке.

F. Омкар и Акмар

meet-in-the-middle бпф геометрия игры китайская теорема об остатках Комбинаторика Конструктив математика строковые суфф. структуры *2600

Омкар и Акмар играют в игру на круговой доске с \(n\) (\(2 \leq n \leq 10^6\)) клетками. Клетки пронумерованы от \(1\) до \(n\), для каждой \(i\) (\(1 \leq i \leq n-1\)) клетка \(i\) соседствует с клеткой \(i+1\), а клетка \(1\) соседствует с клеткой \(n\). Изначально каждая клетка пуста.

Омкар и Акмар по очереди выкладывают на доску букву A или B, причем Акмар ходит первым. Буква должна быть помещена на пустую клетку. Кроме того, буква не может быть помещена в такую клетку, что соседняя клетка содержит ту же букву.

Игрок проигрывает, когда наступает его очередь и больше нет допустимых ходов.

Выведите количество возможных различных игр, в которых оба игрока играют оптимально по модулю \(10^9+7\). Обратите внимание, что мы рассматриваем только те партии, в которых кто-то из игроков проиграл, и не осталось ни одного допустимого хода.

Две игры считаются разными, если количества ходов в них отличаются, или на каком-то ходу буква или номер клетки, на которую ставится буква, были разными.

Ход считается оптимальным, если он максимизирует шансы игрока на победу, предполагая, что другой игрок также играет оптимально. Более формально, если игрок, чья очередь ходить, имеет выигрышную стратегию, он должен сделать ход, после которого у него останется выигрышная стратегия. Если же у него ее нет, то он может сделать любой ход.

Входные данные

Первая строка будет содержать целое число \(n\) (\(2 \leq n \leq 10^6\)) — количество клеток на доске.

Выходные данные

Выведите одно целое число, — количество возможных различных игр, в которых оба игрока играют оптимально по модулю \(10^9+7\).

Примечание

В первом примере первый игрок имеет \(4\) возможных хода. Независимо от того, как ходит первый игрок, у второго игрока есть ровно \(1\) возможный ход, поэтому существует \(4\) возможных игры.

B. Плохой мальчик

жадные алгоритмы Конструктив математика *900

Райли — очень плохой мальчик, но в то же время он мастер йо-йо. Поэтому он решил использовать свои навыки йо-йо, чтобы досадить своему другу Антону.

Комната Антона может быть представлена в виде сетки с \(n\) строк и \(m\) столбцов. Пусть \((i, j)\) обозначает клетку в строке \(i\) и столбце \(j\). В настоящее время Антон стоит в клетке \((i, j)\) своей комнаты. Чтобы досадить Антону, Райли решил бросить ровно два йо-йо в клетки комнаты (они могут находиться в одной клетке).

Поскольку Антону не нравятся йо-йо, брошенные на пол, он должен поднять оба йо-йо и вернуться в исходную клетку. Расстояние, пройденное Антоном — это кратчайший путь, который проходит через позиции обоих йо-йо и возвращается в \((i, j)\), если можно проходить только в соседние по стороне клетки. То есть, если он находится в клетке \((x, y)\), то за один шаг (если клетка с такими координатами существует) он может попасть в одну из клеток \((x + 1, y)\), \((x - 1, y)\), \((x, y + 1)\) и \((x, y - 1)\).

Райли размышляет, куда ему бросить эти два йо-йо, чтобы расстояние, пройденное Антоном, было максимальным. Но поскольку он очень занят, он попросил вас помочь ему.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Затем следуют \(t\) наборов входных данных.

Единственная строка каждого набора входных данных содержит четыре целых числа \(n\), \(m\), \(i\), \(j\) (\(1 \leq n, m \leq 10^9\), \(1\le i\le n\), \(1\le j\le m\)) — размеры комнаты и клетки, на которой в данный момент стоит Антон.

Выходные данные

Для каждого набора входных данных выведите четыре целых числа \(x_1\), \(y_1\), \(x_2\), \(y_2\) (\(1 \leq x_1, x_2 \leq n\), \(1\le y_1, y_2\le m\)) — координаты, куда должны быть брошены два йо-йо. Они будут брошены в координаты \((x_1,y_1)\) и \((x_2,y_2)\).

Если ответов несколько, вы можете вывести любой.

Примечание

Вот визуализация первого набора входных данных.

C. Сложные скалы

жадные алгоритмы Конструктив математика реализация *1200

Вы — дизайнер игр, и хотите создать полосу препятствий. Игрок будет идти слева направо. У вас уже есть \(n\) высот гор, и вы хотите расположить эти высоты так, чтобы абсолютная разность между высотами первой и последней гор была как можно меньше.

Кроме того, вы хотите сделать игру сложной, а поскольку идти в гору или по равнине сложнее, чем спускаться по склону, то сложность уровня будет равна количеству гор \(i\) (\(1 \leq i < n\)) таких, что \(h_i \leq h_{i+1}\), где \(h_i\) — высота \(i\)-й горы. Вы не хотите потратить впустую ни одну из смоделированных гор, поэтому должны использовать их все.

Из всех вариантов, минимизирующих \(|h_1-h_n|\), найдите самый сложный. Если существует несколько порядков, удовлетворяющих этим требованиям, вы можете найти любой.

Входные данные

Первая строка будет содержать одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Затем следуют \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — количество гор.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(h_1,\ldots,h_n\) (\(1 \leq h_i \leq 10^9\)), где \(h_i\) — высота \(i\)-й горы.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел — заданные высоты в порядке, который максимизирует сложность уровня среди всех порядков, минимизирующих \(|h_1-h_n|\).

Если существует несколько порядков, удовлетворяющих этим требованиям, вы можете вывести любой.

Примечание

В первом наборе входных данных:

Игрок начинает с высоты \(2\), затем поднимается на высоту \(4\), увеличивая сложность на \(1\). После этого он спускается на высоту \(1\), и сложность не меняется, потому что он спускается вниз. Наконец, игрок поднимется на высоту \(2\), и сложность увеличится на \(1\). Абсолютная разность между начальной и конечной высотой равна \(0\), а следовательно минимальна. Трудность максимальна при данных условиях.

Во втором наборе входных данных:

Игрок начинает с высоты \(1\), затем поднимается до высоты \(3\), увеличивая сложность на \(1\). Абсолютная разниость между начальной и конечной высотой равна \(2\) и она минимально возможная, так как это единственные высоты. Трудность максимальна.

F. Исправляем фигуры

графы жадные алгоритмы Конструктив математика поиск в глубину и подобное снм *2200

У вас есть связный неориентированный граф, состоящий из \(n\) вершин и \(m\) ребер. У \(i\)-го узла есть начальное значение \(v_i\) и целевое значение \(t_i\).

За одну операцию можно выбрать любое ребро \((i, j)\) и добавить \(k\) к \(v_i\) и \(v_j\), где \(k\) может быть любым целым числом. В частности, \(k\) может быть отрицательным.

Ваша задача определить, можно ли, выполнив некоторое конечное число операций (возможно, ноль), добиться того, что каждого узла \(i\), \(v_i = t_i\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)), количество наборов входных данных. Затем следуют наборы входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\), \(m\) (\(2 \leq n \leq 2\cdot 10^5\), \(n-1\leq m\leq \min(2\cdot 10^5, \frac{n(n-1)}{2})\)) — количество вершин и ребер соответственно.

Вторая строка содержит \(n\) целых чисел \(v_1\ldots, v_n\) (\(-10^9 \leq v_i \leq 10^9\)) — начальные значения вершин.

Третья строка содержит \(n\) целых чисел \(t_1\ldots, t_n\) (\(-10^9 \leq t_i \leq 10^9\)) — целевые значения вершин.

Каждая из следующих \(m\) строк содержит два целых числа \(i\) и \(j\), обозначающих ребро между вершинами \(i\) и \(j\) (\(1 \leq i, j \leq n\), \(i\ne j\)).

Гарантируется, что граф связный и между одной парой вершин есть не более одного ребра.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\), а сумма \(m\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого наборам входных данных, если возможно, чтобы значение в каждой вершине стало равно целевому после некоторого количества операций, выведите «YES». В противном случае выведите «NO».

Примечание

Вот визуализация первого тестового случая (оранжевые значения обозначают начальные значения, а синие — целевые):

Один из возможных порядков действий для получения нужных значений для каждого узла следующий:

  • Операция \(1\): Добавить \(2\) к вершинами \(2\) и \(3\).
  • Операция \(2\): Добавить \(-2\) к вершинам \(1\) и \(4\).
  • Операция \(3\): Добавить \(6\) к вершинам \(3\) и \(4\).

Теперь мы видим, что в общей сложности мы добавили \(-2\) к вершине \(1\), \(2\) к вершине \(2\), \(8\) к вершине \(3\) и \(4\) к вершине \(4\), что привело каждую вершину к нужному значению.

Для графа из второго набора входных данных получить нужные значения невозможно.

D. Еще одна задача про деление чисел

Конструктив математика теория чисел *1700

Вам даны два целых числа \(a\) и \(b\). За один ход вы можете выполнить одно из следующих действий:

  • Взять целое число \(c\) (\(c > 1\), \(a\) делится на \(c\)) и заменить \(a\) на \(\frac{a}{c}\);
  • Взять целое число \(c\) (\(c > 1\), \(b\) делится на \(c\)) и заменить \(b\) на \(\frac{b}{c}\).

Ваша цель сделать \(a\) равным \(b\), используя \(k\) этих операций.

Например, числа \(a=36\) и \(b=48\) можно сделать равными за \(4\) хода:

  • \(c=6\), делим \(b\) на \(c\) \(\Rightarrow\) \(a=36\), \(b=8\);
  • \(c=2\), делим \(a\) на \(c\) \(\Rightarrow\) \(a=18\), \(b=8\);
  • \(c=9\), делим \(a\) на \(c\) \(\Rightarrow\) \(a=2\), \(b=8\);
  • \(c=4\), делим \(b\) на \(c\) \(\Rightarrow\) \(a=2\), \(b=2\).

Для заданных чисел \(a\) и \(b\) определите, можно ли сделать их равными ровно за \(k\) ходов.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^4\)). Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных характеризуется тремя целыми числами \(a\), \(b\) и \(k\) (\(1 \le a, b, k \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите:

  • «Yes», если можно ли сделать числа \(a\) и \(b\) равными ровно за \(k\) ходов;
  • «No», иначе.

Строки «Yes» и «No» можно выводить в произвольном регистре.

E. Игра с картами

Бинарный поиск дп жадные алгоритмы Конструктив реализация Структуры данных *2500

У Алисы сломался компьютер и теперь она не может играть в свою любимую карточную игру. Чтобы помочь Алисе, Боб решил помочь ей и ответить на \(n\) запросов.

Изначально в левой и правой руке Боб держит по одной карте с числом \(0\), записанным на этих картах. Во время выполнения \(i\)-го запроса Алиса предлагает Бобу заменить карту в правой или левой руке на карту с числом \(k_i\) (Боб выбирает, какую из карт заменить, Боб обязан заменить ровно одну карту).

После замены карты Алиса хочет, чтобы число на левой и правой картах принадлежали каким-то заданным отрезкам (отрезки для левой и правой карты могут быть различны). Формально, пусть число записанное на левой карте — \(x\), а на правой — \(y\). Тогда после замены карты на \(i\)-м запросе должно выполняться, что \(a_{l, i} \le x \le b_{l, i}\) и \(a_{r, i} \le y \le b_{r,i}\).

Скажите, сможет ли Боб ответить на все запросы, чтобы все условия удовлетворялись. Если ответить на все запросы возможно, то приведите способ это сделать.

Входные данные

В первой строке вводятся два целых числа \(n\) и \(m\) (\(2 \le n \le 100\,000\), \(2 \le m \le 10^9\)) — количество запросов и максимально возможное значение на карте.

Далее следует описание \(n\) запросов. Описание каждого запроса состоит из трех строк.

В первой строке описания \(i\)-го запроса вводится целое число \(k_i\) (\(0 \le k_i \le m\)) — число, записанное на новой карте.

Во второй строке описания \(i\)-го запроса вводятся два целых числа \(a_{l, i}\) и \(b_{l, i}\) (\(0 \le a_{l, i} \le b_{l, i} \le m\)) — минимальное и максимальное допустимые значения, записанные на карте в левой руке после замены.

Во третьей строке описания \(i\)-го запроса вводятся два целых числа \(a_{r, i}\) и \(b_{r,i}\) (\(0 \le a_{r, i} \le b_{r,i} \le m\)) — минимальное и максимальное допустимые значения, записанные на карте в правой руке после замены.

Выходные данные

В первой строке выведите «Yes», если Боб может ответить на все запросы, и «No» иначе.

Если Боб может ответить на все \(n\) запросов, то во второй строке выходных данных должны содержаться \(n\) чисел, соответствующих корректному способу ответить на все запросы. Если в ответ на \(i\)-й запрос Бобу нужно взять карту в левую руку, выведите \(0\), иначе выведите \(1\). Если существует несколько корректных способов ответить на запросы, то любой из них будет засчитан.

A. Отличные графы

графы жадные алгоритмы Конструктив кратчайшие пути сортировки *1400

У Фермера Джона есть ферма, состоящая из \(n\) пастбищ, соединенных с помощью односторонних дорог. У каждой дороги есть вес, означающий время, которое необходимо потратить, чтобы пройти по ней. Дороги могут иметь отрицательный вес, иными словами, коровы по ним движутся так быстро, что способны перемещаться назад во времени! Однако, Фермер Джон гарантирует, что коровы никак не смогут попасть во временную петлю в том смысле, что не смогут, двигаясь по дорогам, уйти бесконечно далеко в прошлое. Кроме того, каждая пара пастбищ соединена не более чем одной дорогой в каждом направлении.

К сожалению, Фермер Джон потерял карту фермы. Все, что он знает — это массив \(d\), где \(d_i\) — это минимальное время, за которое коровы могут добраться до \(i\)-го пастбища из \(1\)-го, двигаясь по дорогам. Стоимость его фермы — это сумма весов всех дорог, и Фермер Джон хочет узнать минимально возможную стоимость фермы, которая не противоречит тому, что он помнит.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — количество пастбищ.

Во второй строке каждого набора заданы \(n\) целых чисел через пробел \(d_1, d_2, \ldots, d_n\) (\(0 \leq d_i \leq 10^9\)) — массив \(d\). Гарантируется, что \(d_1 = 0\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора, выведите минимально возможную стоимость фермы, которая не противоречит воспоминаниям Фермера Джона.

Примечание

В первом наборе вы можете добавить дороги

  • от пастбища \(1\) к пастбищу \(2\) с весом \(2\),
  • от пастбища \(2\) к пастбищу \(3\) с весом \(1\),
  • от пастбища \(3\) к пастбищу \(1\) с весом \(-3\),
  • от пастбища \(3\) к пастбищу \(2\) с весом \(-1\),
  • от пастбища \(2\) к пастбищу \(1\) с весом \(-2\).
Суммарная стоимость равна \(2 + 1 + -3 + -1 + -2 = -3\).

Во втором набор вы можете добавить дорогу от пастбища \(1\) к пастбищу \(2\) с весом \(1000000000\) и дорогу от пастбища \(2\) к пастбищу \(1\) со стоимостью \(-1000000000\). Суммарная стоимость равна \(1000000000 + -1000000000 = 0\).

В третьем наборе, вы не можете добавить ни одной дороги. Суммарная стоимость равна \(0\).

A. Симпатичные перестановки

жадные алгоритмы Конструктив реализация *800

Есть ряд из \(n\) кошек, пронумерованных с \(1\) по \(n\): \(i\)-я кошка на позиции \(i\). Кошкам надоедает вращаться на одном и том же месте целый день, поэтому они хотят поменяться местами так, чтобы никакая кошка не осталась на том же самом месте. Кошки очень ленивы, а поэтому они хотят минимизировать суммарное расстояние, на которое им нужно передвинуться. Помогите им решить, какой кошке переместиться на какое место.

Например, если кошки \(3\), то можно выбрать следующую перестановку: \([3, 1, 2]\). Никакая кошка не осталась на своем месте. Суммарное расстояние, на которое сдвинулись кошки равно \(1 + 1 + 2 = 4\), т. е. кошка \(1\) сдвинулась на один вправо, кошка \(2\) сдвинулась на один вправо, а кошка \(3\) — на два влево.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой и единственной строке каждого набора задано одно целое число \(n\) (\(2 \leq n \leq 100\)) — количество кошек.

Можно доказать, что при текущих ограничениях ответ всегда существует.

Выходные данные

Выведите \(t\) ответов — по одному на набор входных данных. Каждый ответ должен состоять из \(n\) целых чисел — перестановки минимальной стоимости. Если существует несколько ответов, выведите любой из них.

Примечание

В первом наборе входных данных есть одна возможная перестановка, удовлетворяющая условиям: \([2, 1]\).

Второй набор описан в условии задачи. Другой возможный ответ — это \([2, 3, 1]\).

B. Сложить и умножить

Конструктив математика теория чисел *1500

Дано бесконечное множество, сгенерированное следующим образом:

  • \(1\) принадлежит множеству.
  • Если \(x\) принадлежит множеству, то \(x \cdot a\) и \(x+b\) также принадлежат множеству.

Например, если \(a=3\) и \(b=6\), то первые пять элементов множества равны:

  • \(1\),
  • \(3\) (\(1\) лежит в множестве, поэтому \(1\cdot a=3\) лежит в множестве),
  • \(7\) (\(1\) лежит в множестве, поэтому \(1+b=7\) лежит в множестве),
  • \(9\) (\(3\) лежит в множестве, поэтому \(3\cdot a=9\) лежит в множестве),
  • \(13\) (\(7\) лежит в множестве, поэтому \(7+b=13\) лежит в множестве).

Даны положительные целые числа \(a\), \(b\), \(n\). Выясните, принадлежит ли \(n\) множеству.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 10^5\)) – количество наборов входных данных. Далее следует описание наборов входных данных.

Строка, описывающая набор входных данных содержит три целых числа \(n\), \(a\), \(b\) (\(1\leq n,a,b\leq 10^9\)), разделенных пробелом.

Выходные данные

Для каждого набора входных данных выведите «Yes», если \(n\) принадлежит множеству, и «No» иначе. Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

В первом наборе \(24\) генерируется следующим образом:

  • \(1\) лежит в множестве, поэтому \(3\) и \(6\) лежат в множестве;
  • \(3\) лежит в множестве, поэтому \(9\) и \(8\) лежат в множестве;
  • \(8\) лежит в множестве, поэтому \(24\) и \(13\) лежат в множестве.

Таким образом, \(24\) принадлежит множеству.

Первые пять элементов множества из второго набора входных данных описаны в условии. Можно заметить, что \(10\) не в их числе.

D1. ПРС и криминальный список (простая версия)

битмаски интерактив Конструктив математика *1700

Это простая версия задачи. Единственное различие между простой и сложной версиями заключается в том, что в этой версии \(k=2\). Вы можете делать взломы, только если решили обе версии этой задачи.

Это интерактивная задача.

Для каждого десятичного числа есть соответствующая ему \(k\)-ичная запись. Цифры числа, записанного в \(k\)-ичной системе счисления, будем называть \(k\)-цифрами. Определим \(k\)-ичный XOR двух \(k\)-цифр \(a\) и \(b\) как \((a + b)\bmod k\).

\(k\)-ичный XOR двух \(k\)-ичных чисел равен числу, полученному попарным \(k\)-ичным XOR соответствующих \(k\)-цифр. \(k\)-ичный XOR двух десятичных чисел \(a\) и \(b\) обозначается \(a\oplus_{k} b\) и равен десятичному представлению \(k\)-ичного XOR \(a\) и \(b\), записанных в \(k\)-ичной системе счисления. Все числа, встречающиеся далее в условии, записаны в десятичной системе счисления, если не указано иное. В случае \(k = 2\), что всегда верно для этой версии задачи, \(k\)-ичный XOR — это то же самое, что побитовое исключающее ИЛИ.

Вы взломали базу преступлений Полиции Рокпорт-Сити (ПРС), так же известную как Криминальный Список. Но, чтобы получить к ней доступ, вам нужен пароль. Вы его не знаете, но вполне уверены, что его значение лежит между \(0\) и \(n-1\) включительно. Вы решили угадать его. Вы можете сделать не более чем \(n\) попыток, далее система заблокируется. Система адаптивна – каждый раз, когда вы делаете неверную попытку, она меняет пароль. А именно, если до попытки пароль был равен \(x\) и вы попытались ввести другое число \(y\), то система поменяет пароль на число \(z\) такое, что \(x\oplus_{k} z=y\). Угадайте пароль и взломайте систему.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 10\,000\)) — количество наборов входных данных. Далее следует описание \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) (\(1\leq n\leq 2\cdot 10^5\)) и \(k\) (\(k=2\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Протокол взаимодействия

Для каждого набора входных данных считайте два целых числа \(n\) и \(k\). Вам разрешено сделать не более \(n\) попыток угадать пароль.

Для каждой попытки выведите одно целое число \(y\) (\(0\leq y\leq 2\cdot 10^7\)). Пусть текущий пароль равен \(x\). Считайте одно целое число \(r\).

Если \(x=y\), вы считаете \(r=1\), и этот набор входных данных считается решенным. Далее вы должны продолжить решать оставшиеся наборы.

Иначе вы считаете \(r=0\), и система поменяет пароль на число \(z\) такое, что \(x\oplus_{k} z=y\).

После каждой попытки не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Если вы сделаете некорректную попытку или превысите лимит в \(n\) попыток, вы считаете \(r=-1\) вместо ответа и получите вердикт Неправильный ответ. В таком случае ваша программа должна немедленно завершается, чтобы избежать неопределенных вердиктов.

Обратите внимание, что система адаптивна. Это значит, что изначальный пароль не зафиксирован в начале и может зависеть от ваших запросов. Гарантируется, что в любой момент времени существует хотя бы один начальный пароль, для которого согласуются все ответы на запросы.

Взломы:

Для взломов используйте следующий формат:

Первая строка должна содержать одно целое число \(t\) (\(1\leq t\leq 10\,000\)) — количество наборов входных данных.

Первая и единственная строка каждого набора должна содержать два целых числа \(n\) (\(1\leq n\leq 2\cdot 10^5\)) и \(k\) (\(k=2\)), равные соответственно количеству возможных попыток и основанию системы счисления. Оптимальный начальный пароль будет автоматически подобран системой.

Сумма \(n\) по всем наборам входных данных не должна превышать \(2\cdot 10^5\).

Примечание

В этом наборе входных данных загаданный пароль равен \(2\).

Первая попытка равна \(3\). Это не равно текущему паролю. Поэтому система возвращает ответ \(0\) и меняет пароль на \(1\), поскольку \(2\oplus_2 1=3\).

Вторая попытка равна \(4\). Это не равно текущему паролю. Поэтому система возвращает ответ \(0\) и меняет пароль на \(5\), поскольку \(1\oplus_2 5=4\).

Третья попытка равна \(5\). Это равно текущему паролю. Поэтому система возвращает ответ \(1\) и работа сделана.

Заметьте, что начальный пароль был взят таким для наглядности объяснения. В действительности система может повести себя иначе, поскольку она адаптивна.

D2. ПРС и криминальный список (сложная версия)

интерактив Конструктив математика Перебор *2200

Это сложная версия задачи. Единственное различие между простой и сложной версиями заключается в том, что здесь \(2\leq k\leq 100\). Вы можете делать взломы, только если решили обе версии этой задачи.

Это интерактивная задача!

Для каждого десятичного числа есть эквивалентное ему \(k\)-ичное. Цифры числа, записанного в \(k\)-ичной системе счисления, будем называть \(k\)-цифрами. Определим \(k\)-ичный XOR двух \(k\)-цифр \(a\) и \(b\) как \((a + b)\bmod k\).

\(k\)-ичный XOR двух \(k\)-ичных чисел равен новому числу, полученному из первых двух попарным \(k\)-ичным XOR соответствующих \(k\)-цифр. \(k\)-ичный XOR двух десятичных чисел \(a\) и \(b\) обозначается \(a\oplus_{k} b\) и равен десятичному представлению \(k\)-ичного XOR \(a\) и \(b\), записанных в \(k\)-ичной системе счисления. Все числа, встречающиеся далее в условии, записаны в десятичной системе счисления, если не указано иное.

Вы взломали базу преступлений Полиции Рокпорт-Сити (ПРС), так же известную как Криминальный Список. Но, чтобы получить к ней доступ, вам нужен пароль. Вы его не знаете, но вполне уверены, что его значение лежит между \(0\) и \(n-1\) включительно. Вы решили угадать его. Вы можете сделать не более чем \(n\) попыток, далее система заблокируется. Система адаптивна – каждый раз, когда вы делаете неверную попытку, она меняет пароль. А именно, если до попытки пароль был равен \(x\) и вы попытались ввести другое число \(y\), то система поменяет пароль на число \(z\) такое, что \(x\oplus_{k} z=y\). Угадайте пароль и взломайте систему.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 10\,000\)) — количество наборов входных данных. Далее следует описание \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) (\(1\leq n\leq 2\cdot 10^5\)) и \(k\) \((2\leq k\leq 100)\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Протокол взаимодействия

Для каждого набора входных данных считайте два целых числа \(n\) и \(k\). Вам разрешено сделать не более \(n\) попыток угадать пароль.

Для каждой попытки выведите одно целое число \(y\) (\(0\leq y\leq 2\cdot 10^7\)). Пусть текущий пароль равен \(x\). Считайте одно целое число \(r\).

Если \(x=y\), вы считаете \(r=1\), и этот набор входных данных считается решенным. Далее вы должны продолжить решать оставшиеся наборы.

Иначе вы считаете \(r=0\), и система поменяет пароль на число \(z\) такое, что \(x\oplus_{k} z=y\).

После каждой попытки не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Если вы сделаете некорректную попытку или превысите лимит в \(n\) попыток, вы считаете \(r=-1\) вместо ответа и получите вердикт Неправильный ответ. В таком случае ваша программа должна немедленно завершается, чтобы избежать неопределенных вердиктов.

Обратите внимание, что система адаптивна. Это значит, что изначальный пароль не зафиксирован в начале и может зависеть от ваших запросов. Гарантируется, что в любой момент времени существует хотя бы один начальный пароль, для которого согласуются все ответы на запросы.

Взломы:

Для взломов используйте следующий формат:

Первая строка должна содержать одно целое число \(t\) (\(1\leq t\leq 10\,000\)) — количество наборов входных данных.

Первая и единственная строка каждого набора должна содержать два целых числа \(n\) (\(1\leq n\leq 2\cdot 10^5\)) и \(k\) (\(2\leq k\leq 100\)), равные соответственно количеству возможных попыток и основанию системы счисления. Оптимальный начальный пароль будет автоматически подобран системой.

Сумма \(n\) по всем наборам входных данных не должна превышать \(2\cdot 10^5\).

Примечание

Набор 1:

В этом наборе входных данных загаданный пароль равен \(2\).

Первая попытка равна \(3\). Это не равно текущему паролю. Поэтому система возвращает ответ \(0\) и меняет пароль на \(1\), поскольку \(2\oplus_2 1=3\).

Вторая попытка равна \(4\). Это не равно текущему паролю. Поэтому система возвращает ответ \(0\) и меняет пароль на \(5\), поскольку \(1\oplus_2 5=4\).

Третья попытка равна \(5\). Это равно текущему паролю. Поэтому система возвращает ответ \(1\) и работа сделана.

Набор 2:

В этом наборе входных данных загаданный пароль равен \(3\).

Первая попытка равна \(1\). Это не равно текущему паролю. Поэтому система возвращает \(0\) и меняет пароль на \(7\), поскольку \(3\oplus_3 7=1\). \([3=(10)_3\), \(7=(21)_3\), \(1=(01)_3\) и \((10)_3\oplus_3 (21)_3 = (01)_3]\).

Вторая попытка равна \(4\). Это не равно текущему паролю. Поэтому система возвращает \(0\) и меняет пароль на \(6\), поскольку \(7\oplus_3 6=4\). \([7=(21)_3\), \(6=(20)_3\), \(4=(11)_3\) and \((21)_3\oplus_3 (20)_3 = (11)_3]\).

Третья попытка равна \(6\). Это равно текущему паролю. Поэтому система возвращает ответ \(1\) и работа сделана.

Заметьте, что начальные пароли были взяты такими для наглядности объяснения. В действительности система может повести себя иначе, поскольку она адаптивна.

E. Финальное преследование

битмаски графы жадные алгоритмы Конструктив математика разделяй и властвуй *2700

В конечном счете вы победили Рэйзора и теперь считаетесь Самым Разыскиваемым уличным гонщиком. Сержант Кросс послал в смертельную погоню за вами целый полицейский отряд. К счастью, вы нашли укромное убежище, но все еще переживаете, что Кросс и его ребята в конце концов вас отыщут. Чтобы увеличить свои шансы на выживание, вы собираетесь перенастроить и перекрасить вашу BMW M3 GTR.

Машину можно представлять как перенумерованный \(n\)-мерный гиперкуб. Простым \(n\)-мерным гиперкубом называется неориентированный невзвешенный граф, построенный рекурсивно следующим образом:

  • Возьмите два простых \((n-1)\)-мерных гиперкуба. Вершины одного из них должны быть пронумерованы числами от \(0\) до \(2^{n-1}-1\), а другого — от \(2^{n-1}\) до \(2^{n}-1\). Простой \(0\)-мерный гиперкуб — это одна вершина.
  • Добавьте ребро между вершинами \(i\) и \(i+2^{n-1}\) для каждого \(0\leq i < 2^{n-1}\).

Перенумерованный \(n\)-мерный гиперкуб получается перестановкой номеров вершин простого \(n\)-мерного гиперкуба произвольным образом.

Примеры простого и перенумерованного \(3\)-мерных гиперкубов представлены ниже:

Заметьте, что перенумерованный \(n\)-мерный гиперкуб обладает следующими свойствами:

  • Он содержит в точности \(2^n\) вершин.
  • Он содержит в точности \(n\cdot 2^{n-1}\) ребер.
  • Каждая вершина соединена ровно с \(n\) другими вершинами.
  • Он не содержит петель и кратных ребер.

Обозначим за \(P\) перестановку, использованную для получения перенумерованного \(n\)-мерного гиперкуба, описывающего вашу машину, из простого \(n\)-мерного гиперкуба. Прежде чем наводить беспорядок в функциональностях машины, вы хотите найти эту перестановку, чтобы, если что-то пойдет не так, суметь восстановить машину. Но это еще не все.

У вас с собой есть \(n\) различных цветов, пронумерованных от \(0\) до \(n-1\). Вы хотите покрасить вершины перенумерованного \(n\)-мерного гиперкуба таким образом, чтобы для каждой вершины \(u\), удовлетворяющей \(0\leq u < 2^n\), и каждого цвета \(c\), удовлетворяющего \(0\leq c < n\), существовала хотя бы одна вершина \(v\), соседняя с \(u\) и покрашенная в цвет \(c\). Иными словами, из каждой вершины должно быть возможно перейти в вершину любого цвета ровно по одному ребру.

Дан перенумерованный \(n\)-мерный гиперкуб, найдите любые допустимые перестановку \(P\) и покраску.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 4096\)) — количество наборов входных данных.

Для каждого набора входных данных первая строка содержит одно целое число \(n\) (\(1\leq n\leq 16\)).

Каждая из последующих \(n\cdot 2^{n-1}\) строк содержит два целых числа \(u\) и \(v\) (\(0\leq u, v < 2^n\)), означающее, что вершины \(u\) и \(v\) соединены ребром.

Гарантируется, что граф, описанный во входных данных, задает перенумерованный \(n\)-мерный гиперкуб.

Также гарантируется, что сумма \(2^n\) по всем наборам входных данных не превосходит \(2^{16}=65\,536\).

Выходные данные

Для каждого набора входных данных выведите две строки.

В первой строке выведите любую перестановку \(P\) длины \(2^n\), которая может быть использована для получения перенумерованного \(n\)-мерного гиперкуба, данного во входных данных, из простого \(n\)-мерного гиперкуба. Два перенумерованных гиперкуба считаются одинаковыми, если они имеют одинаковый набор ребер. Если возможно несколько ответов, выведите любой из них.

Во второй строке выведите покраску. Если не существует покраски, удовлетворяющей условиям, выведите \(-1\). В противном случае напечатайте одну строку, содержащую \(2^n\) целых чисел, разделенных пробелом. \(i\)-е число должно быть равно цвету вершины с номером \((i-1)\) в перенумерованном \(n\)-мерном гиперкубе. Если возможно несколько ответов, выведите любой из них.

Примечание

Покраска и перенумерованный гиперкуб для первого набора входных данных представлены ниже:

Покраска и перенумерованный гиперкуб для второго набора входных данных представлены ниже:

Перенумерованный гиперкуб для третьего набора дан в условии задачи. Однако, можно показать, что не существует покраски, удовлетворяющей всем условиям. Заметьте, что некоторые другие перестановки, например, \([0, 5, 7, 3, 1, 2, 4, 6]\) и \([0, 1, 5, 2, 7, 4, 3, 6]\) дадут этот же перенумерованный гиперкуб.

C. AquaMoon и перестановки

2-sat графы Комбинаторика Конструктив Паросочетания Перебор *2800

Cirno подготовила \(n\) массивов длины \(n\) каждый. Каждый массив — это перестановка из \(n\) целых чисел от \(1\) до \(n\). Эти массивы специальные: для всех \(1 \leq i \leq n\), если мы возьмем \(i\)-й элемент каждого массива и построим другой массив длины \(n\), состоящий из этих элементов, получившийся массив также будет перестановкой \(n\) чисел от \(1\) до \(n\). Другими словами, если эти \(n\) массивов расположить друг под другом, образовав матрицу с \(n\) строками и \(n\) столбцами, эта матрица будет латинским квадратом.

После этого Cirno добавила дополнительные \(n\) массивов, каждый массив также является перестановкой из \(n\) целых чисел от \(1\) до \(n\). Для всех \(1 \leq i \leq n\) существует хотя бы одна позиция \(1 \leq k \leq n\), такая что для \(i\)-го и \((n + i)\)-го массивов \(k\)-е элементы совпадают. Обратите внимание, что массивы с индексами от \(n + 1\) до \(2n\) не обязаны образовывать латинский квадрат.

Также Cirno убедилась, что среди \(2n\) массивов никакие два не равны, то есть для всех пар индексов \(1 \leq i < j \leq 2n\) существует хотя бы одна позиция \(1 \leq k \leq n\), такая что в \(i\)-м и \(j\)-м массивах \(k\)-е элементы различны.

В конце Cirno произвольно поменяла порядок, в котором расположены подготовленные \(2n\) массивов.

AquaMoon называет подмножество всех \(2n\) массивов размера \(n\) хорошим, если эти массивы образуют латинский квадрат.

AquaMoon хочет узнать, сколько хороших подмножеств существует. Поскольку это количество может быть очень большим, найдите его по модулю \(998\,244\,353\). Также она хочет найти любое хорошее подмножество. Можете ли вы помочь ей?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится единственное целое число \(n\) (\(5 \leq n \leq 500\)).

Затем \(2n\) строк следует. \(i\)-я из этих строк содержит \(n\) целых чисел, составляющих \(i\)-й массив.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(500\).

Выходные данные

Для каждого набора входных данных выведите две строки.

В первой строке выведите количество хороших подмножеств по модулю \(998\,244\,353\).

Во второй строке выведите \(n\) индексов от \(1\) до \(2n\) — индексы \(n\) массивов, которые образуют хорошее подмножество (вы можете вывести их в любом порядке). Если существует несколько возможных ответов — выведите любой.

Примечание

В первом наборе входных данных количество хороших подмножеств равно \(1\). Единственное такое подмножество это подмножество массивов с индексами \(1\), \(2\), \(3\), \(4\), \(5\), \(6\), \(7\).

Во втором наборе входных данных количество хороших подмножеств равно \(2\). Эти подмножества это \(1\), \(3\), \(5\), \(6\), \(10\), а также \(2\), \(4\), \(7\), \(8\), \(9\).

D. AquaMoon и неправильная координата

интерактив Конструктив математика *3000

Cirno дала AquaMoon задачу. Есть \(m\) человек, пронумерованных целыми числами от \(0\) до \(m - 1\). Они стоят на координатной прямой в точках с положительными целочисленными координатами. Они смотрят в направлении увеличения координат.

В этот момент все начинают бежать с фиксированной скоростью в направлении увеличения координат. Изначальная координата \(i\)-о человека на прямой это \(x_i\), а скорость \(i\)-о человека это \(v_i\). Поэтому координата \(i\)-о человека в момент времени \(t\) будет \(x_i + t \cdot v_i\).

Cirno запомнила координаты всех \(m\) человек в \(k\) последовательных целочисленных моментах времени от \(0\) до \(k - 1\). В каждый момент координаты всех \(m\) человек были запомнены в произвольном порядке.

Чтобы сделать задачу более веселой, Cirno изменила одну из координат в момент времени \(y\) (\(0 < y < k-1\)) на другое целое число.

AquaMoon хочет найти момент времени \(y\) и изначальную координату \(p\) перед изменением. К сожалению, она совсем не программист. Поэтому она не смогла решить эту задачу. Можете ли вы помочь ей?

Входные данные

Эта задача сделана как интерактивная. Это означает, что ваше решение будет считывать входные данные, которые вывел интерактор. Однако, интерактор выведет полные входные данные в начале, и после этого вы должны будете вывести ответ. Поэтому вы должны решать задачу так, как если бы вы решали обычную, не интерактивную задачу, потому что у вас не будет никакого процесса взаимодействия. Единственная вещь, про которую вы не должны забыть — это сбросить буфер выходного потока после вывода ответа. Иначе ваше решение может получить вердикт «Решение «зависло»». Обратитесь к руководству по интерактивным задачам для более детальной информации про сброс буфера выходного потока.

В первой строке находится два целых числа \(m\) и \(k\) (\(5 \leq m \leq 1000\), \(7 \leq k \leq 1000\)) — количество человек и количество запомненных моментов.

Следующие \(k\) строк содержат запомненные координаты. \(i\)-я из этих строк содержит \(m\) целых чисел от \(1\) до \(10^6\) (включительно), обозначающих координаты, которые запомнила Cirno в момент времени \(i-1\).

Гарантируется, что входные данные валидные (то есть только одно целое число было изменено на другое в соответствии с условием задачи). Также гарантируется, что \(1 \le v_i \le 1000\) для всех \(1 \leq i \leq m\).

Формат теста для взлома:

В первой строке должно находиться два целых числа \(m\) и \(k\) (\(5 \leq m \leq 1000\), \(7 \leq k \leq 1000\)) — количество человек и количество запомненных моментов.

Во второй строке должно находиться \(m\) целых чисел \(x_0, x_1, \dots,x_{m - 1}\) (\(1 \le x_i \le 10^6\)), где \(x_i\) это изначальная координата \(i\)-о человека.

В третьей строке должно находиться \(m\) целых чисел \(v_0, v_1, \dots,v_{m - 1}\) (\(1 \le v_i \le 1000\)), где \(v_i\) это скорость \(i\)-о человека. Должно быть выполнено, что \(x_i + (k-1) v_i \leq 10^6\) для всех \(0 \leq i < m\).

Каждая из следующих \(k\) строк должна содержать \(m\) целых чисел. \(i\)-я строка должна содержать \(m\) различных целых чисел \(p_0, p_1, \ldots, p_{m-1}\) (\(0 \leq p_j < m\)). Их значение: \(j\)-е целое число во входных данных в момент времени \(i\) это координата человека \(p_{j}\).

В последней строке должно находиться три целых числа \(y\), \(i\), \(c\). Cirno поменяла координату \(i\)-о человека в момент времени \(y\) на \(c\) (\(1 \leq y \leq k-2\), \(0 \leq i \leq m - 1\), \(1 \leq c \leq 10^6\), \(c \neq x_i + y \cdot v_i\)).

Выходные данные

Выведите единственную строку с двумя целыми числами \(y\), \(p\) — момент времени, который содержит измененную координату и изначальная координата.

Примечание

В первом тесте изначальные координаты людей это \(9\), \(6\), \(6\), \(9\), \(9\) и их скорости это \(1\), \(2\), \(1\), \(1\), \(1\). Поэтому несложно заметить, что в момент времени \(4\) одна координата была изменена c \(13\) на \(12\).

Это первый тест, записанный в формате для взломов:


5 7
9 6 6 9 9
1 2 1 1 1
2 3 4 1 0
0 2 3 1 4
4 3 0 1 2
1 3 4 0 2
1 4 0 2 3
2 4 1 3 0
2 4 1 3 0
4 0 12

D. Взаимнорастущая последовательность

битмаски жадные алгоритмы Конструктив *1300

Последовательность неотрицательных целых чисел \(a_1, a_2, \dots, a_n\) называется растущей, если для всех \(i\) от \(1\) до \(n - 1\) в двоичной записи \(a_i\) все единичные биты стоят на местах битов, которые тоже единичные, в двоичной записи \(a_{i + 1}\) (иными словами, \(a_i \:\&\: a_{i + 1} = a_i\), где \(\&\) обозначает побитовую операцию И). Если \(n = 1\), то последовательность является растущей.

Например, следующие четыре последовательности являются растущими:

  • \([2, 3, 15, 175]\) — в двоичном виде это \([10_2, 11_2, 1111_2, 10101111_2]\);
  • \([5]\) — в двоичном виде это \([101_2]\);
  • \([1, 3, 7, 15]\) — в двоичном виде это \([1_2, 11_2, 111_2, 1111_2]\);
  • \([0, 0, 0]\) — в двоичном виде это \([0_2, 0_2, 0_2]\).

Следующие три последовательности не являются растущими:

  • \([3, 4, 5]\) — в двоичном виде это \([11_2, 100_2, 101_2]\);
  • \([5, 4, 3]\) — в двоичном виде это \([101_2, 100_2, 011_2]\);
  • \([1, 2, 4, 8]\) — в двоичном виде это \([0001_2, 0010_2, 0100_2, 1000_2]\).

Рассмотрим две последовательности неотрицательных чисел \(x_1, x_2, \dots, x_n\) и \(y_1, y_2, \dots, y_n\). Назовём эту пару последовательностей взаимнорастущими, если последовательность \(x_1 \oplus y_1, x_2 \oplus y_2, \dots, x_n \oplus y_n\) является растущей, где \(\oplus\) является операцией побитового исключающего ИЛИ (то есть XOR).

Задана последовательность целых чисел \(x_1, x_2, \dots, x_n\). Требуется найти такую лексикографически минимальную последовательность \(y_1, y_2, \dots, y_n\), что последовательности \(x_i\) и \(y_i\) являются взаимнорастущими.

Последовательность \(a_1, a_2, \dots, a_n\) лексикографически меньше последовательности \(b_1, b_2, \dots, b_n\), если существует такое \(1 \le k \le n\), что для любых \(1 \le i < k\) выполнено \(a_i = b_i\), но \(a_k < b_k\).

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^4\)). Далее следуют \(t\) наборов входных данных.

В первой строке набора записано целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина последовательности \(x_i\).

Вторая строка набора содержит \(n\) целых чисел \(x_1, x_2, \dots, x_n\) (\(0 \le x_i < 2^{30}\)) — элементы последовательности \(x_i\).

Сумма значений \(n\) по всем наборам входных данных теста не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора данных выведите \(n\) целых чисел \(y_1, y_2, \dots, y_n\) (\(0 \le y_i < 2^{30}\)) — лексикографически минимальную последовательность, которая является взаимнорастущей с заданной последовательностью \(x_i\).

D. Отличные массивы

Бинарный поиск Комбинаторика Конструктив математика реализация сортировки *2300

Назовем целочисленный массив \(a_1, a_2, \dots, a_n\) хорошим, если \(a_i \neq i\) для всех \(i\).

Пусть \(F(a)\) — это количество пар \((i, j)\) (\(1 \le i < j \le n\)) таких, что \(a_i + a_j = i + j\).

Назовем массив \(a_1, a_2, \dots, a_n\) отличным если:

  • \(a\) — хороший;
  • \(l \le a_i \le r\) для всех \(i\);
  • \(F(a)\) максимально возможное среди всех хороших массивов размера \(n\).

Для заданных \(n\), \(l\) и \(r\) посчитайте количество отличных массивов по модулю \(10^9 + 7\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой и единственной строке каждого набора заданы три целых числа \(n\), \(l\) и \(r\) (\(2 \le n \le 2 \cdot 10^5\); \(-10^9 \le l \le 1\); \(n \le r \le 10^9\)).

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите количество отличных массивов по модулю \(10^9 + 7\).

Примечание

В первом наборе входных данных, можно показать, что максимальное \(F(a)\) среди всех хороших массивов \(a\) равно \(2\). Отличными являются следующие массивы:

  1. \([2, 1, 2]\);
  2. \([0, 3, 2]\);
  3. \([2, 3, 2]\);
  4. \([3, 0, 1]\).

B2. Чудесная раскраска - 2

Бинарный поиск жадные алгоритмы Конструктив Структуры данных *1400

Эта задача является продолжением задачи «Чудесная раскраска - 1». Она имеет довольно много отличий, поэтому прочтите это условие полностью.

Совсем недавно у Паши и Маши появилась любимая последовательность чисел \(a_1, a_2, \dots, a_n\). Они захотели и её раскрасить с помощью мелков \(k\) цветов. Раскраска последовательности называется чудесной, если выполняются следующие условия:

  1. каждый элемент последовательности раскрашивается ровно в один из \(k\) цветов, либо не раскрашивается вовсе;
  2. любые два элемента, раскрашенные в один цвет, различны (то есть нет двух одинаковых значений, которые раскрашены в один цвет);
  3. посчитаем для каждого из \(k\) цветов количество элементов, раскрашенных этот цвет — все полученные количества должны быть равны;
  4. суммарное количество раскрашенных элементов при соблюдении первых трёх условий максимально возможно.

Например, пусть последовательность имеет вид \(a=[3, 1, 1, 1, 1, 10, 3, 10, 10, 2]\) и \(k=3\). Одна из чудесных раскрасок изображена на рисунке.

Пример возможной чудесной раскраски для \(a=[3, 1, 1, 1, 1, 10, 3, 10, 10, 2]\) и \(k=3\). Обратите внимание, что один из элементов остался нераскрашенным.

Помогите Паше и Маше найти чудесную раскраску заданной последовательности \(a\).

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10000\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из двух строк. Первая из них содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2\cdot10^5\), \(1 \le k \le n\)) — длину заданной последовательности и количество цветов. Вторая из них содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных теста не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) строк, каждая строка содержит описание возможной чудесной раскраски для соответствующего набора входных данных.

Каждая чудесная раскраска должна быть выведена в виде \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(0 \le c_i \le k\)), где:

  • \(c_i=0\), если \(i\)-й элемент не раскрашен в какой-либо цвет;
  • \(c_i>0\), если \(i\)-й элемент раскрашен в цвет с номером \(c_i\).

Помните, что в чудесной раскраске максимизируется суммарное количество раскрашенных элементов. Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных примера ответ соответствует картинке в условии. Красный цвет имеет номер \(1\), синий имеет номер \(2\), зелёный — номер \(3\).

D1. Домино (упрощённая версия)

Конструктив математика *1700

Единственное отличие этой задачи от задачи D2 состоит в том, что в этой задаче не нужно выводить способ построения ответа, но это необходимо делать в D2.

Рассмотрим прямоугольную таблицу размера \(n \times m\) (из \(n\) строк и \(m\) столбцов). Значение \(n \cdot m\) является чётным числом.

Доминошка — это фигура из двух клеток, имеющих общую сторону. Доминошка является горизонтальной, если одна из клеток находится правее другой, или вертикальной, если одна из клеток находится выше другой.

Необходимо узнать, возможно ли разместить на таблице \(\frac{nm}{2}\) доминошек таким образом, чтобы ровно \(k\) из них были расположены горизонтально, остальные — вертикально. Доминошки не должны пересекаться, и на таблице не должно оставаться незанятых ячеек.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одной строки. Строка содержит три целых числа — \(n\), \(m\), \(k\) (\(1 \le n,m \le 100\), \(0 \le k \le \frac{nm}{2}\), \(n \cdot m\) — чётно) — количество строк, столбцов в таблице и горизонтальных доминошек соответственно.

Выходные данные

Для каждого набора входных данных в отдельной строке выведите «YES», если возможно расположить доминошки описанным способом, иначе — «NO».

Каждую букву можно выводить в любом регистре (YES, yes, Yes будут распознаны как положительный ответ, NO, no и nO будут распознаны как отрицательный ответ).

D2. Домино (усложнённая версия)

Конструктив математика реализация *2100

Единственное отличие этой задачи от задачи D1 состоит в том, что в задаче D1 не нужно выводить способ построения ответа, но это необходимо делать в этой задаче.

Рассмотрим прямоугольную таблицу размера \(n \times m\) (из \(n\) строк и \(m\) столбцов). Значение \(n \cdot m\) является чётным числом.

Доминошка — это фигура из двух клеток, имеющих общую сторону. Доминошка является горизонтальной, если одна из клеток находится правее другой, или вертикальной, если одна из клеток находится выше другой.

В этой таблице необходимо разместить \(\frac{nm}{2}\) доминошек таким образом, чтобы ровно \(k\) из них были расположены горизонтально, остальные — вертикально. Доминошки не должны пересекаться, и на таблице не должно оставаться незанятых ячеек.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одной строки. Строка содержит три целых числа — \(n\), \(m\), \(k\) (\(1 \le n,m \le 100\), \(0 \le k \le \frac{nm}{2}\), \(n \cdot m\) — чётно) — количество строк, столбцов в таблице и горизонтальных доминошек соответственно.

Выходные данные

Для каждого набора входных данных выведите:

  • «NO», если невозможно расположить доминошки описанным способом;
  • в противном случае в первой строке, соответствующей набору входных данных, выведите «YES», далее выведите \(n\) строк, каждая из которых содержит по \(m\) символов — описание расположения доминошек на таблице. Каждая ячейка таблицы должна быть помечена строчной буквой латинского алфавита таким образом, чтобы любые две имеющие общую сторону клетки были помечены одинаковыми буквами тогда и только тогда, когда на них размещена одна и та же доминошка. Иными словами, обе части одной доминошки должны быть помечены одинаковой буквой, но две доминошки, соседние по стороне, должны быть помечены разными буквами. Если существует несколько решений, выведите любое из них.

C. Максимизируйте пересечения

геометрия жадные алгоритмы Комбинаторика Конструктив сортировки *1800

На окружности лежат \(2n\) различных точек, обладающих следующим свойством: как бы вы ни выбрали \(3\) хорды, соединяющие \(3\) непересекающиеся пары точек, ни одна точка строго внутри окружности не принадлежит всем \(3\) хордам. Точки нумеруются \(1, \, 2, \, \dots, \, 2n\) по часовой стрелке.

Изначально \(k\) хорд соединяют \(k\) пар точек таким образом, что все \(2k\) концов этих хорд различны.

Необходимо провести еще \(n - k\) хорд, которые соединят оставшиеся \(2(n - k)\) точек (каждая точка должна быть концом ровно одной хорды).

Пусть \(x\) — это общее количество пересечений всех \(n\) хорд. Вычислите максимальное значение, которого может достичь \(x\) при оптимальном выборе \(n - k\) хорд.

Обратите внимание, что точное расположение точек \(2n\) не имеет значения, пока выполняется свойство, указанное в первом предложении.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Затем следуют \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 100\), \(0 \le k \le n\)) — половину количества точек и количество хорд, построенных изначально.

Затем следуют \(k\) строк. В \(i\)-й из них содержатся два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, \, y_i \le 2n\), \(x_i \ne y_i\)) — концы \(i\)-й хорды. Гарантируется, что \(2k\) чисел \(x_1, \, y_1, \, x_2, \, y_2, \, \dots, \, x_k, \, y_k\) попарно различны.

Выходные данные

Для каждого набора входных данных выведите максимальное количество пересечений, которое можно получить, проведя \(n - k\) дополнительных хорд.

Примечание

В первом наборе входных данных, есть три способа нарисовать \(2\) дополнительных хорд, показанных ниже (черные хорды — первоначально нарисованные, а красные — новые):

Мы видим, что третий способ дает максимальное количество пересечений, а именно \(4\).

Во втором наборе входных данных, больше не нужно строить хорд. Конечно, при наличии только одной хорды пересечений нет.

В третьем наборе входных данных, мы можем сделать не более одного пересечения, проведя хорды \(1-3\) и \(2-4\), как показано ниже:

D. Массив как разность

битмаски графы дп Конструктив математика Перебор поиск в глубину и подобное *1800

Вам дана последовательность из \(n\) целых чисел \(a_1, \, a_2, \, \dots, \, a_n\).

Существует ли последовательность из \(n\) целых чисел \(b_1, \, b_2, \, \dots, \, b_n\) такая, что выполняется следующее свойство?

  • Для каждого \(1 \le i \le n\) существуют два (не обязательно различных) индекса \(j\) и \(k\) (\(1 \le j, \, k \le n\)) такие, что \(a_i = b_j - b_k\).
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 20\)) — количество наборов входных данных. Затем следуют \(t\) наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, \, \dots, \, a_n\) (\(-10^5 \le a_i \le 10^5\)).

Выходные данные

Для каждого набора входных данных выведите строку, содержащую YES, если существует последовательность \(b_1, \, \dots, \, b_n\), удовлетворяющая требуемому свойству, и NO в противном случае.

Примечание

В первом наборе входных данных, последовательность \(b = [-9, \, 2, \, 1, \, 3, \, -2]\) удовлетворяет свойству. Действительно, имеет место следующее:

  • \(a_1 = 4 = 2 - (-2) = b_2 - b_5\);
  • \(a_2 = -7 = -9 - (-2) = b_1 - b_5\);
  • \(a_3 = -1 = 1 - 2 = b_3 - b_2\);
  • \(a_4 = 5 = 3 - (-2) = b_4 - b_5\);
  • \(a_5 = 10 = 1 - (-9) = b_3 - b_1\).

Во втором наборе входных данных достаточно выбрать \(b = [0]\), так как \(a_1 = 0 = 0 - 0 = b_1 - b_1\).

В третьем наборе входных данных можно показать, что никакая последовательность \(b\) длины \(3\) не удовлетворяет свойству.

E. Цвета и отрезки

жадные алгоритмы Конструктив сортировки Структуры данных *2300

Числа \(1, \, 2, \, \dots, \, n \cdot k\) окрашены в \(n\) цветов. Эти цвета обозначены \(1, \, 2, \, \dots, \, n\). Для каждого \(1 \le i \le n\) существует ровно \(k\) чисел, окрашенных в цвет \(i\).

Пусть \([a, \, b]\) обозначает отрезок целых чисел от \(a\) до \(b\) включительно, то есть множество \(\{a, \, a + 1, \, \dots, \, b\}\). Вы должны выбрать \(n\) отрезков \([a_1, \, b_1], \, [a_2, \, b_2], \, \dots, [a_n, \, b_n]\) таких, что:

  • для каждого \(1 \le i \le n\) имеет место \(1 \le a_i < b_i \le n \cdot k\);
  • для каждого \(1 \le i \le n\), числа \(a_i\) и \(b_i\) окрашены цветом \(i\);
  • каждое число \(1 \le x \le n \cdot k\) принадлежит не более чем \(\left\lceil \frac{n}{k - 1} \right\rceil\) отрезкам.

Можно показать, что такое семейство отрезков всегда существует при заданных ограничениях.

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 100\), \(2 \le k \le 100\)) — количество цветов и количество вхождений каждого цвета.

Вторая строка содержит \(n \cdot k\) целых чисел \(c_1, \, c_2, \, \dots, \, c_{nk}\) (\(1 \le c_j \le n\)), где \(c_j\) — цвет числа \(j\). Гарантируется, что для каждого \(1 \le i \le n\) \(c_j = i\) имеет место для ровно \(k\) различных индексов \(j\).

Выходные данные

Выведите \(n\) строк. В \(i\)-й строке должны содержаться два целых числа \(a_i\) и \(b_i\).

Если существует несколько допустимых вариантов выбрать отрезки, выведите любой.

Примечание

В первой выборке каждое число может содержаться не более чем в \(\left\lceil \frac{4}{3 - 1} \right\rceil = 2\) отрезках. Вывод описывается следующим рисунком:

Во втором примере единственным отрезком, который можно выбрать, является \([1, \, 2]\), и каждое число действительно содержится не более чем в \(\left\lceil \frac{1}{2 - 1} \right\rceil = 1\) отрезках.

В третьем примере, каждое число может содержаться не более чем в \(\left\lceil \frac{3}{3 - 1} \right\rceil = 2\) отрезках. Вывод описывается следующим рисунком:

E. Сдвиг перестановки

графы Комбинаторика Конструктив математика Перебор поиск в глубину и подобное снм *2100

Тождественная перестановка длины \(n\) — это массив \([1, 2, 3, \dots, n]\).

Мы применили следующие операции к тождественной перестановке длины \(n\):

  • Вначале мы циклически сдвинули ее вправо на \(k\) позиций, где \(k\) вам неизвестно (вы знаете только то, что \(0 \le k \le n - 1\)). При циклическом сдвиге массива вправо на \(k\) позиций необходимо взять \(k\) последних элементов исходного массива (не меняя их относительный порядок) и дописать \(n - k\) первых элементов исходного массива справа от них (также не меняя относительный порядок этих \(n - k\) элементов). Например, если бы мы циклически сдвинули тождественную перестановку длины \(6\) на \(2\) позиции вправо, мы бы получили массив \([5, 6, 1, 2, 3, 4]\);
  • Далее мы выполнили следующую операцию не более \(m\) раз: выбрали два элемента массива и поменяли их местами.

Вам даны \(n\) и \(m\), а также полученный массив. Ваша задача — найти все возможные значения \(k\) в операции циклического сдвига.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных.

Каждый набор входных данных описывается двумя строками. Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(3 \le n \le 3 \cdot 10^5\); \(0 \le m \le \frac{n}{3}\)).

Вторая строка каждого набора содержит \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\), каждое целое число от \(1\) до \(n\) встречается в последовательности ровно один раз) — полученный массив.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ следующим образом:

  • Вначале выведите одно целое число \(r\) (\(0 \le r \le n\)) — количество возможных значений \(k\) в операции циклического сдвига;
  • Далее выведите \(r\) целых чисел \(k_1, k_2, \dots, k_r\) (\(0 \le k_i \le n - 1\)) — все возможные значения \(k\) в возрастающем порядке.
Примечание

Рассмотрим примеры из условия.

  • В первом наборе входных данных единственное возможное значение для циклического сдвига это \(3\). Если мы сдвинем \([1, 2, 3, 4]\) на \(3\) позиции, мы получим \([2, 3, 4, 1]\). Далее мы можем поменять \(3\)-й и \(4\)-й элементы местами, чтобы получить массив \([2, 3, 1, 4]\);
  • Во втором наборе единственное возможное значение для циклического сдвига это \(0\). Если мы сдвинем \([1, 2, 3]\) на \(0\) позиций, мы получим \([1, 2, 3]\). Далее мы не производим операций обмена (так как нам разрешено совершить не более \(1\)-го обмена), таким образом, полученный массив остается равным \([1, 2, 3]\);
  • В третьем наборе все значения от \(0\) до \(2\) допустимы для циклического сдвига:
    • если мы сдвинем \([1, 2, 3]\) на \(0\) позиций, мы получим \([1, 2, 3]\). Далее мы можем поменять \(1\)-й и \(3\)-й элементы, чтобы получить \([3, 2, 1]\);
    • если мы сдвинем \([1, 2, 3]\) на \(1\) позицию, мы получим \([3, 1, 2]\). Далее мы можем поменять \(2\)-й и \(3\)-й элементы, чтобы получить \([3, 2, 1]\);
    • если мы сдвинем \([1, 2, 3]\) на \(2\) позиции, мы получим \([2, 3, 1]\). Далее мы можем поменять \(1\)-й и \(2\)-й элементы, чтобы получить \([3, 2, 1]\);
  • В четвертом наборе входных данных операции обмена запрещены, однако ни один циклический сдвиг не равен массиву \([1, 2, 3, 4, 6, 5]\).

G. Граф общих делителей

графы Конструктив математика Перебор снм теория чисел хэши *2700

Рассмотрим последовательность различных целых чисел \(a_1, \ldots, a_n\), каждое из которых соответствует отдельной вершине графа. Будем соединять две вершины ребром, если соответствующие им числа не взаимно просты, т. е. если они имеют общий делитель, больший чем \(1\).

Вам даны \(q\) запросов, в каждом запросе вы хотите попасть из вершины, соответствующей значению \(a_s\), в вершину, соответствующую \(a_t\). Для того чтобы это сделать, вы можете выбирать существующее значение \(a_i\), создать новую вершину со значением \(a_{n+1} = a_i \cdot (1 + a_i)\) и соединить ее со всеми вершинами, значения которых не взаимно просты с \(a_{n+1}\). После этого \(n\) увеличивается на \(1\). Вы можете повторять эту операцию любое количество раз, удлиняя последовательность, и, возможно, получая одинаковые значения. Какое минимальное количество вершин нужно добавить, чтобы \(a_t\) стало достижимо из \(a_s\)?

Обратите внимание, что запросы независимы. В каждом запросе вы начинаете с исходной последовательности \(a\), заданной во входных данных.

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(2 \leq n \leq 150\,000\), \(1 \leq q \leq 300\,000\)) — размер исходной последовательности и количество запросов.

Вторая строка содержит \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) (\(2 \leq a_i \leq 10^6\), \(a_i \neq a_j\), если \(i \ne j\)).

\(j\)-я из следующих \(q\) строк содержит два различных целых числа \(s_j\) и \(t_j\) (\(1 \leq s_j, t_j \leq n\), \(s_j \neq t_j\)) — индексы вершин для \(j\)-го запроса.

Выходные данные

Выведите \(q\) строк. \(j\)-я строка должна содержать одно целое число: минимальное количество вершин, которое нужно добавить, чтобы можно было достичь \(a_{s_j}\) из \(a_{t_j}\).

Примечание

В первом примере вы можете добавить вершину со значением \(2 \cdot 3 = 6\), или \(10 \cdot 11 = 110\), или \(3 \cdot 4 = 12\). Ни одно из этих добавлений не нужно в первом запросе, так как вы уже можете добраться из \(a_1 = 2\) в \(a_2 = 10\).

Во втором запросе оптимальным является добавление вершины со значением \(6\) или \(12\). Например, добавляя вершину со значением \(6\), мы сможем добраться из \(a_1 = 2\) в \(a_3 = 3\) по пути со значениями \((2, 6, 3)\).

В последнем запросе второго примера мы хотим добраться из \(a_3 = 7\) в \(a_5 = 25\). Одним из возможных способов достичь это является создание вершины со значением \(6 \cdot 7 = 42\), а затем создание вершины со значением \(25 \cdot 26 = 650\). В финальном графе, состоящем из 7 вершин, существует путь из \(a_3 = 7\) в \(a_5 = 25\).

D. Диана

жадные алгоритмы Конструктив Строки *1800

Вам дано целое число \(n\). Найдите любую строку \(s\) длины \(n\), состоящую только из латинских строчных букв, такую, что каждая непустая подстрока \(s\) встречается в \(s\) нечетное количество раз. Если таких строк несколько, выведите любую. Можно показать, что такая строка всегда существует при заданных ограничениях.

Строка \(a\) является подстрокой \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов из начала и нескольких (возможно, ни одного или всех) символов из конца.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого наборам входных данных выведите одну строку, содержащую строку \(s\). Если таких строк несколько, выведите любую. Можно показать, что такая строка всегда существует при заданных ограничениях.

Примечание

В первом наборе входных данных каждая подстрока «abc» встречается ровно один раз.

В третьем наборе входных данных каждая подстрока «bbcaabbba» встречается нечетное число раз. В частности, «b» встречается \(5\) раз, «a» и «bb» встречаются по \(3\) раза, а каждая из оставшихся подстрок встречается ровно один раз.

C. Ряды монет

дп Конструктив Перебор реализация *1300

Алиса и Боб играют в игру на матрице, состоящей из \(2\) строк и \(m\) столбцов. В ячейке в \(i\)-й строке в \(j\)-м столбце лежит \(a_{i, j}\) монет.

Изначально Алиса и Боб стоят в ячейке \((1, 1)\). Они собираются пройти какой-то последовательностью ходов в ячейку \((2, m)\).

Возможные ходы следующие:

  • Пойти направо — из некоторой ячейки \((x, y)\) в \((x, y + 1)\);
  • Пойти вниз — из некоторой ячейки \((x, y)\) в \((x + 1, y)\).

Сначала Алиса делает все свои ходы, пока не достигнет \((2, m)\). Она собирает монеты во всех клетках, которые они посещает (включая стартовую).

Когда Алиса заканчивает, Боб начинает свой путь. Он также делает ходы, чтобы достичь \((2, m)\), и собирает монеты во всех клетках, которые он посетил, а Алиса нет.

Счет в игре равен суммарному количеству монет, которые собрал Боб.

Алиса хочет минимизировать счет. Боб хочет максимизировать счет. Какой будет счет в игре, если оба игрока играют оптимально?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Затем следуют описания \(t\) наборов входных данных.

В первой строке каждого набора записано одно целое число \(m\) (\(1 \le m \le 10^5\)) — количество столбцов в матрице.

В \(i\)-й из следующих \(2\) строк записаны \(m\) целых чисел \(a_{i,1}, a_{i,2}, \dots, a_{i,m}\) (\(1 \le a_{i,j} \le 10^4\)) — количество монет в ячейке в \(i\)-м ряду в \(j\)-м столбце матрицы.

Сумма \(m\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — счет игры, если оба игрока играют оптимально.

Примечание

Пути для наборов входных данных из примеров изображены ниже. Путь Алисы раскрашен красным, а путь Боба — синим.

D. Скажите палиндромам - нет!

дп Конструктив Перебор Строки *1600

Назовем строку красивой, если в ней нет подстроки длины хотя бы \(2\), которая является палиндромом. Напомним, что палиндром — это строка, читающаяся одинаково от первого символа к последнему и от последнего символа к первому. Например, строки a, bab, acca, bcabcbacb являются палиндромами, а строки ab, abbbaa, cccb — нет.

Определим стоимость строки, как минимальное количество операций, чтобы строка стала красивой, если за одну операцию разрешено изменить любой символ строки на одну из первых \(3\) букв латинского алфавита (в нижнем регистре).

Вам задана строка \(s\) длины \(n\), каждый символ строки — одна из первых \(3\) букв латинского алфавита (в нижнем регистре).

Вам предстоит ответить на \(m\) запросов — вычислите стоимость подстроки строки \(s\) с \(l_i\)-й по \(r_i\)-ю позицию включительно.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — длина строки \(s\) и количество запросов.

Вторая строка содержит строку \(s\), она состоит из \(n\) символов, каждый из которых является одной из первых \(3\) латинских букв.

Следующие \(m\) строк содержат два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — параметры \(i\)-го запроса.

Выходные данные

Для каждого запроса выведите одно целое число — стоимость подстроки строки \(s\) с \(l_i\)-й по \(r_i\)-ю позицию включительно.

Примечание

Рассмотрим запросы в примере из условия.

  • в первом запросе интересующая нас подстрока — baa, ее можно превратить в bac за одну операцию;
  • во втором запросе интересующая нас подстрока — baacb, ее можно превратить в cbacb за две операции;
  • в третьем запросе интересующая нас подстрока — cb, ее можно оставить без изменений;
  • в четвертом запросе интересующая нас подстрока — aa, ее можно превратить в ba за одну операцию.

D. Попробуй угадай

битмаски интерактив Конструктив математика *1800

Это интерактивная задача.

Василий загадал некоторую последовательность чисел \(a_1, a_2, \dots, a_n\), но в целях безопасности он не хочет раскрывать вам ее полностью. Василий готов ответить не больше, чем на \(2 \cdot n\) следующих вопросов:

  • Чему равно значение побитового И двух элементов с индексами \(i\) и \(j\) (\(i \neq j\))
  • Чему равно значение побитового ИЛИ двух элементов с индексами \(i\) и \(j\) (\(i \neq j\))

Вы можете задать любые интересующие вас вопросы Василию и должны узнать \(k\)-е наименьшее число последовательности.

Формально \(k\)-е наименьшее число равно числу на \(k\)-й позиции в отсортированном по неубыванию массиве с 1-индексацией. Для примера, в массиве \([5, 3, 3, 10, 1]\) \(4\)-е наименьшее число будет равно \(5\), а \(2\)-е и \(3\)-е равны \(3\).

Входные данные

Гарантируется, что для каждого элемента из загаданной последовательности выполняется \(0 \le a_i \le 10^9\).

Протокол взаимодействия

В первой строке вам будет дано два целых числа \(n\) и \(k\) \((3 \le n \le 10^4, 1 \le k \le n)\) — количество элементов последовательности \(a\) и число \(k\).

Затем вы можете задать не более \(2 \cdot n\) вопросов (операция «finish» за вопрос не считается).

Каждая строка вашего вывода может быть одного из следующих типов:

  • «or i j» \((1 \le i, j \le n, i \neq j)\), где \(i\) и \(j\) — это индексы элементов, побитовый or которых вы хотите узнать.
  • «and i j» \((1 \le i, j \le n, i \neq j)\), где \(i\) и \(j\) — это индексы элементов, побитовый and которых вы хотите узнать.
  • «finish res», где \(res\) — это \(k\)-е наименьшее число в последовательности. После вывода такой строки необходимо завершить программу.

В ответ на первые два типа операций вы получите целое число \(x\) — результат интересующей вас операции для выбранных чисел.

После вывода каждой строки не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт «Решение зависло». Для сброса буфера используйте:

  • fflush(stdout) в языке C++
  • System.out.flush() в Java
  • stdout.flush() в Python
  • flush(output) в Pascal
  • смотрите документацию для других языков

Если вы сделаете некорректный запрос, то в ответ вы получите \(-1\). После получения ответа \(-1\), вы должны немедленно завершить свою программу, чтобы получить вердикт «Неправильный ответ».

Взломы

Чтобы совершить взлом, вам потребуется использовать следующий формат:

Первая строка должна содержать два целых числа \(n\) и \(k\) \((3 \le n \le 10^4, 1 \le k \le n)\) — количество элементов последовательности \(a\) и число \(k\).

Вторая строка должна содержать \(n\) целых чисел \(a_1, a_2, \dots, a_n\) \((0 \le a_i \le 10^9)\) — описание последовательностии \(a\).

Примечание

В тестовом примере загаданная последовательность выглядит следующим образом: \([1, 6, 4, 2, 3, 5, 4]\).

Ниже разобран протокол взаимодействия из примера.

Запрос (программа участника)Ответ (интерактор)Пояснение
and 2 52\(a_2=6\), \(a_5=3\). Интерактор возвращает побитовый И данных чисел.
or 5 67\(a_5=3\), \(a_6=5\). Интерактор возвращает побитовый ИЛИ данных чисел.
finish 5\(5\) является правильным ответом. Обратите внимание, что требуется найти значение, а не индекс k-го наименьшего числа.

E. Шахматы в Assiut

интерактив Конструктив Перебор *2800

Это интерактивная задача.

ICPC Assiut Community решили провести уникальное соревнование по шахматам, и вы были выбраны для того, чтобы контролировать ферзя и выслеживать прячущегося короля. Его, в свою очередь, будут контролировать члены ICPC Assiut Community.

Вы играете на шахматной доске \(8\times8\), строки которой нумеруются сверху вниз, а столбцы — слева направо. Клетка в строке \(x\) и столбце \(y\) обозначается как \((x, y)\).

За один ход вы можете переместить ферзя на любую клетку на той же горизонтали, вертикали или любой из двух диагоналей. Например, если ферзь был в клетке (\(4\), \(5\)), вы можете переместиться на (\(q_1\), \(5\)), (\(4\), \(q_1\)), (\(q_1\), \(9-q_1\)) или (\(q_2\), \(q_2+1\)), где (\(1 \le q_1 \le 8\), \(q_1 \ne 4\), \(1 \le q_2 \le 7\), \(q_2 \ne 4\)). Заметьте, что ферзь не может оставаться на месте.

За один ход король может переместиться «Вправо», «Влево», «Вверх», «Вниз», «Вниз-Вправо», «Вниз-Влево», «Вверх-Влево», или «Вверх-Вправо» так, чтобы оставаться на доске. Король не может ходить в клетку, находящуюся на одной горизонтали, вертикали или диагонали с ферзем (включая клетку, где стоит ферзь). Например, если король был на клетке (\(4\), \(5\)), он может сходить в (\(4+k_1\), \(5+k_2\)) где (\(-1 \le k_1,k_2 \le 1\), \((k_1, k_2) \ne (0, 0)\)).

В начале игры вы должны разместить ферзя на любую клетку на доске. После этого король тайно размещается на одной из свободных клеток. Вы не знаете позиции короля. Затем, король и ферзь по очереди делают ходы. Король ходит первый. Ходы короля проходят в одном из возможных направлений («Вправо», «Вниз», «Вверх-Влево», и т.д.). Вам будет известно только направление хода. После этого вы должны совершить ход ферзем. Для этого сообщите клетку, на которую вы хотите сходить. Игра продолжается до тех пор, пока вы не выиграете или у вас не закончатся ходы.

Вы выигрываете, если у короля нет доступных ходов. Вы проигрываете после \(130\) ходов ферзя, если король имеет доступный ход.

Входные данные

В первой строке содержится целое число \(t\) (\(1 \le t \le 60\)) — количество наборов входных данных.

Протокол взаимодействия

В каждом наборе входных данных сначала выведите стартовую позицию ферзя. Если вы поставите его в клетку с королем - вы сразу победите.

После этого вы можете сделать не более \(130\) ходов. Каждый ход делается в формате \(x\) \(y\), где \(x\) и \(y\) — это два целых числа (\(1 \leq x,y \leq 8\)), обозначающих строку и столбец новой позиции ферзя. Ваши ходы должны быть корректными ходами ферзя.

После изначального размещения ферзя и после каждого вашего хода считайте строку \(s\), которая обозначает направление хода короля. Это будет одна из следующих строк: «Right», «Left», «Up», «Down», «Down-Right», «Down-Left», «Up-Left», «Up-Right», или «Done», если вы победили в игре. Вы должны расценивать «Done» как конец очередного набора входных данных.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Если в любой момент времени вы совершите недопустимый ход или сделаете более \(130\) ходов, игра завершится моментально и вы получите вердикт Неправильный ответ.

Примечание

В примере король находится в клетке \((8, 8)\) в начале. Игра проходит следующим образом:

C. Прелестные перевороты

жадные алгоритмы Конструктив *2000

У вас есть перестановка — массив \(a = [a_1, a_2, \ldots, a_n]\) из различных целых чисел от \(1\) до \(n\). Длина перестановки \(n\) нечётна.

Вам нужно отсортировать её по возрастанию.

За один шаг вы можете выбрать любой префикс перестановки, имеющий нечётную длину, и перевернуть его. Формально, если \(a = [a_1, a_2, \ldots, a_n]\), вы можете выбрать любое нечётное целое число \(p\) от \(1\) до \(n\) включительно и сделать \(a\) равной \([a_p, a_{p-1}, \ldots, a_1, a_{p+1}, a_{p+2}, \ldots, a_n]\).

Найдите способ отсортировать перестановку \(a\), используя не более \(\frac{5n}{2}\) переворотов такого рода, или определите, что такого способа не существует. Минимизировать число переворотов не нужно.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 2021\); \(n\) нечётно) — длину перестановки.

Вторая строка содержит \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — саму перестановку.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2021\).

Выходные данные

Для каждого набора входных данных, если невозможно отсортировать заданную перестановку, используя не более \(\frac{5n}{2}\) шагов, выведите одно целое число \(-1\).

В противном случае выведите целое число \(m\) (\(0 \le m \le \frac{5n}{2}\)) — число переворотов в вашей последовательности шагов, и \(m\) целых чисел \(p_i\) (\(1 \le p_i \le n\); \(p_i\) нечётно) — длины префиксов \(a\), которые нужно перевернуть, в хронологическом порядке.

Обратите внимание, что \(m\) минимизировать не нужно. Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных перестановка уже отсортирована. Любое чётное число переворотов префикса длины \(3\) не влияет на этот факт.

Во втором наборе входных данных после переворота префикса длины \(3\) перестановка станет равна \([5, 4, 3, 2, 1]\), и далее после переворота префикса длины \(5\) перестановка станет равна \([1, 2, 3, 4, 5]\).

В третьем наборе входных данных перестановку отсортировать невозможно.

A. Mocha и математика

битмаски Конструктив математика *900

Mocha — школьница старших классов. В школе она получила от учителей много знаний, особенно от учителя математики. Недавно Mocha узнала о двоичной системе счисления и заинтересовалась битовыми операциями.

Сегодня у Mocha есть массив целых чисел \(a\) длины \(n\). За одну операцию она может выбрать произвольный отрезок \([l, r]\) и для всех значений \(i\) (\(0\leq i \leq r-l\)) одновременно заменить \(a_{l+i}\) на \(a_{l+i} \,\&\, a_{r-i}\), где \(\&\) обозначает операцию побитового И. Эта операция может быть выполнена произвольное количество раз.

Например, если \(n=5\), исходный массив \([a_1,a_2,a_3,a_4,a_5]\), и Mocha выбирает отрезок \([2,5]\), то после применения операции массив будет равен \([a_1,a_2\,\&\, a_5, a_3\,\&\, a_4, a_4\,\&\, a_3, a_5\,\&\, a_2]\).

Mocha хочет сделать максимальное значение в массиве как можно меньше. Помогите, как лучший друг, вычислить это минимально возможное значение максимума?

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют наборы входных данных, каждый в двух строках.

Первая строка набора входных данных содержит целое число \(n\) (\(1 \le n \le 100\)) — длину массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимально возможное значение максимума после применения некоторого количества операций.

Примечание

В первом наборе входных данных Mocha может выбрать отрезок \([1,2]\), и массив становится равным \([ 0, 0]\), так как первый элемент становится равен \(1\,\&\,2\), а второй — \(2\,\&\,1\).

Во втором наборе входных данных Mocha может выбрать отрезок \([1,3]\), и массив становится равным \([ 1,1,1]\), где первый элемент равен \(1\,\&\,3\), второй элемент — \(1\,\&\,1\), а третий элемент — \(3\,\&\,1\).

C. Mocha и прогулка

графы Конструктив *1200

Mocha живет в городском уезде Чжицзян. В уезде \(n+1\) поселение и \(2n-1\) ориентированная дорога.

Все дороги имеют один из двух типов:

  • \(n-1\) дорога идет от поселения \(i\) к поселению \(i+1\), для всех \(1\leq i \leq n-1\).
  • \(n\) дорог описываются последовательностью \(a_1,\ldots,a_n\). Если \(a_i=0\), то \(i\)-я из этих дорог идет от поселения \(i\) к поселению \(n+1\), иначе она идет от поселения \(n+1\) к поселению \(i\), для всех \(1\leq i\leq n\).

Mocha собирается в поход вместе с Taki. Чтобы поход не был скучным, они собираются посетить каждое поселение ровно один раз. Они могут начать и закончить в любых поселениях. Можете помочь составить им план похода?

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 20\)) — количество наборов входных данных. Далее следуют наборы входных данных, каждый в двух строках.

Первая строка набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^4\)), что означает, что всего поселений \(n+1\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 1\)). Если \(a_i=0\), то есть дорога из поселения \(i\) в поселение \(n+1\). Если \(a_i=1\), то есть дорога из поселения \(n+1\) в поселение \(i\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите одну строку с \(n+1\) целыми числами, где \(i\)-е число — поселение, которое они должны посетить \(i\)-м по порядку. Если ответа не существует, выведите \(-1\).

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных уезд выглядит следующим образом:

Возможные ответы: \((1 \to 4 \to 2 \to 3)\) или \((1 \to 2 \to 3 \to 4)\).

Во втором наборе входных данных уезд выглядит следующим образом:

Возможные ответы — \((4 \to 1 \to 2 \to 3)\), \((1 \to 2 \to 3 \to 4)\), \((3 \to 4 \to 1 \to 2)\) и \((2 \to 3 \to 4 \to 1)\).

D1. Mocha и Diana (простая версия)

графы Деревья жадные алгоритмы Конструктив Перебор снм *1400

Это простая версия задачи. Две версии отличаются ограничениями на \(n\). Вы можете делать взломы, только если обе версии задачи решены.

Лесом называется неориентированный граф без циклов (не обязательно связный).

Mocha и Diana — друзья из Чжицзяна, у каждой из них есть лес с вершинами, пронумерованными от \(1\) до \(n\), и они хотят добавить ребра в свои леса с выполнением следующих условий:

  • После добавления ребер каждый из графов остается лесом.
  • Они добавляют одинаковые ребра. Это значит, что если ребро \((u, v)\) добавляется в лес Mocha, то также ребро \((u, v)\) добавляется в лес Diana, и наоборот.

Mocha и Diana хотят знать, какое максимальное количество ребер они могут добавить, и какие ребра им нужно добавлять.

Входные данные

Первая строка содержит три целых числа \(n\), \(m_1\) и \(m_2\) (\(1 \le n \le 1000\), \(0 \le m_1, m_2 < n\)) — количество вершин и начальное количество ребер в лесе Mocha и в лесе Diana, соответственно.

Каждая из следующих \(m_1\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)) — ребра в лесе Mocha.

Каждая из следующих \(m_2\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)) — ребра в лесе Diana.

Выходные данные

Первая строка содержит одно целое число \(h\) — максимальное количество ребер, которое можно добавить в каждый из лесов Mocha и Diana.

Каждая из следующих \(h\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)) — ребра, которые нужно добавить.

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере нельзя добавить ни одно ребро.

Во втором примере начальные леса выглядят следующим образом.

Можно добавить ребро \((2, 4)\).

D2. Mocha и Diana (сложная версия)

графы Деревья жадные алгоритмы Конструктив Перебор поиск в глубину и подобное снм *2500

Это сложная версия задачи. Две версии отличаются ограничениями на \(n\). Вы можете делать взломы, только если обе версии задачи решены.

Лесом называется неориентированный граф без циклов (не обязательно связный).

Mocha и Diana — друзья из Чжицзяна, у каждой из них есть лес с вершинами, пронумерованными от \(1\) до \(n\), и они хотят добавить ребра в свои леса с выполнением следующих условий:

  • После добавления ребер каждый из графов остается лесом.
  • Они добавляют одинаковые ребра. Это значит, что если ребро \((u, v)\) добавляется в лес Mocha, то также ребро \((u, v)\) добавляется в лес Diana, и наоборот.

Mocha и Diana хотят знать, какое максимальное количество ребер они могут добавить, и какие ребра им нужно добавлять.

Входные данные

Первая строка содержит три целых числа \(n\), \(m_1\) и \(m_2\) (\(1 \le n \le 10^5\), \(0 \le m_1, m_2 < n\)) — количество вершин и начальное количество ребер в лесе Mocha и в лесе Diana, соответственно.

Каждая из следующих \(m_1\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)) — ребра в лесе Mocha.

Каждая из следующих \(m_2\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)) — ребра в лесе Diana.

Выходные данные

Первая строка содержит одно целое число \(h\) — максимальное количество ребер, которое можно добавить в каждый из лесов Mocha и Diana.

Каждая из следующих \(h\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)) — ребра, которые нужно добавить.

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере нельзя добавить ни одно ребро.

Во втором примере начальные леса выглядят следующим образом.

Можно добавить ребро \((2, 4)\).

B. Подозреваемые

Конструктив реализация Структуры данных *1600

Расследуя очередное убийство, Шерлок Холмс определил n подозреваемых. Он точно знает, что убийство совершил ровно один из них. Чтобы определить, кто именно это сделал, детектив выстроил подозреваемых в ряд и пронумеровал их числами от 1 до n. После этого он спросил каждого: «Кто из вас совершил убийство?». Подозреваемый номер i ответил либо «Убийство совершил подозреваемый номер ai», либо «Подозреваемый номер ai не совершал убийства». В том числе, подозреваемый мог сказать это про себя (ai = i).

Шерлок Холмс безошибочно определил, что ровно m ответов были правдой, а все остальные — ложью. Помогите ему теперь понять, кто из подозреваемых соврал, а кто сказал правду?

Входные данные

В первой строке заданы два целых числа n и m (1 ≤ n ≤ 105, 0 ≤ m ≤ n) — общее количество подозреваемых и количество подозреваемых, сказавших правду. В следующих n строках заданы ответы подозреваемых. В i-ой строке написано «+ai» (без кавычек), если подозреваемый номер i говорит, что убийство совершил подозреваемый номер ai, или «-ai» (без кавычек), если подозреваемый номер i говорит, что подозреваемый номер ai не совершал убийства (ai — целое число, 1 ≤ ai ≤ n).

Гарантируется, что существует хотя бы один подозреваемый, такой, что если он совершил убийство, то правду сказали ровно m человек.

Выходные данные

Выведите n строк. В строке номер i должно быть написано «Truth», если подозреваемый номер i точно сказал правду, «Lie», если подозреваемый номер i точно соврал, и «Not defined», если он мог соврать, а мог и сказать правду, в зависимости от того, кто совершил убийство.

Примечание

В первом примере есть единственный человек, и он признается в убийстве, и Шерлок Холмс знает, что один человек сказал правду. Значит, этот человек говорит правду.

Во втором примере трое подозреваемых и все трое отрицают свою вину. Шерлок Холмс знает, что только двое из них говорят правду. Любой из них может быть убийцей, и поэтому ни про кого из них неизвестно, говорит ли он правду.

В третьем примере второй и четвертый защищают первого и третьего. Но правду сказал только один, значит, первый или третий совершил убийство. Оба они могли совершить убийство, значит, второй и четвертый могут как врать, так и говорить правду. Первый и третий же точно врут, поскольку сваливают вину на второго и четвертого.

F1. Ближайшее красивое число (упрощённая версия)

Бинарный поиск битмаски жадные алгоритмы Конструктив Перебор поиск в глубину и подобное *1900

Это упрощённая версия задачи F2. Они отличаются только ограничениями (F1: \(k \le 2\), F2: \(k \le 10\)).

Дано число \(n\). Найдите минимальное целое число \(x\) такое, что \(x \ge n\) и \(x\) является \(k\)-красивым числом.

Число называется \(k\)-красивым, если в его десятичной записи, не содержащей лидирующих нулей, встречается не более \(k\) различных цифр. Например, если \(k = 2\), числа \(3434443\), \(55550\), \(777\) и \(21\) являются \(k\)-красивыми, а числа \(120\), \(445435\) и \(998244353\) — нет.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей два целых числа \(n\) и \(k\) (\(1 \le n \le 10^9\), \(1 \le k \le 2\)).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите \(x\) — минимальное целое \(k\)-красивое число, так чтобы \(x \ge n\).

F2. Ближайшее красивое число (усложнённая версия)

битмаски дп жадные алгоритмы Конструктив Перебор поиск в глубину и подобное *2100

Это усложнённая версия задачи F1. Они отличаются только ограничениями (F1: \(k \le 2\), F2: \(k \le 10\)).

Дано число \(n\). Найдите минимальное целое число \(x\) такое, что \(x \ge n\) и \(x\) является \(k\)-красивым числом.

Число называется \(k\)-красивым, если в его десятичной записи, не содержащей лидирующих нулей, встречается не более \(k\) различных цифр. Например, если \(k = 2\), числа \(3434443\), \(55550\), \(777\) и \(21\) являются \(k\)-красивыми, а числа \(120\), \(445435\) и \(998244353\) — нет.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей два целых числа \(n\) и \(k\) (\(1 \le n \le 10^9\), \(1 \le k \le 10\)).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите \(x\) — минимальное целое \(k\)-красивое число, так чтобы \(x \ge n\).

B. Scenes From a Memory

Конструктив математика Перебор реализация теория чисел *1000

Во время сеанса гипноза Николас неожиданно вспомнил целое положительное число \(n\), не содержащее нулей в десятичной записи.

Вскоре, когда он уже вернулся домой, ему стало интересно: какое максимальное количество цифр можно удалить из числа так, чтобы оно стало не простым, то есть либо составным, либо равным единице? Помогите ему найти ответ!

Для некоторых чисел сделать это невозможно: например, для числа \(53\) невозможно удалить некоторые из его цифр, чтобы получить не простое целое число. Однако, для всех \(n\) в тестах этой задачи гарантируется, что можно удалить некоторые из их цифр, чтобы получить не простое число.

Из числа нельзя удалять все цифры.

Простым называется число, которое не имеет никаких делителей, кроме единицы и самого себя. Составным называется число, которое имеет более двух делителей. \(1\) не является ни простым, ни составным числом.

Входные данные

Каждый тест содержит несколько наборов входных данных.

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

В первой строке каждого набора входных данных находится одно целое положительное число \(k\) (\(1 \le k \le 50\)) — количество цифр в числе.

Во второй строке каждого набора входных данных находится целое положительное число \(n\), не содержащее нулей в десятичной записи (\(10^{k-1} \le n < 10^{k}\)). Гарантируется, что из числа можно удалить менее, чем \(k\) цифр, чтобы оно стало не простым.

Гарантируется, что сумма \(k\) по всем наборам входных данных не превосходит \(10^4\).

Выходные данные

Для каждого набора входных данных выведите в отдельных двух строках выведите два числа: количество цифр, которое вы оставили в первой строке, и оставшееся после удалений число во второй.

Если существует несколько правильных вариантов ответа, вы можете вывести любой.

Примечание

В первом наборе входных данных нельзя удалить \(2\) цифры из числа \(237\), так как все числа \(2\), \(3\) и \(7\) являются простыми. Однако вы можете удалить \(1\) цифру, получив число \(27 = 3^3\).

Во втором наборе входных данных можно удалить все цифры, кроме одной, так как \(4 = 2^2\) — составное число.

C. Кольца

Конструктив математика *1500

Попал Фродо в плен к Саруману. Сорвал он с шеи Фродо мешочек, вытряхнул его содержимое — а там куча разных колец: золотые и серебряные...

— И как мне теперь определить, которое из них Единое?! — взвыл маг.

— А ты бросай их по очереди в Роковую Расселину и следи, когда Мордор падет!

Где-то в параллельном Средиземье, когда Саруман поймал и обыскал Фродо, он обнаружил лишь \(n\) колец. Причем \(i\)-е кольцо было либо золотым, либо серебряным. Для удобства Саруман записал бинарную строку \(s\) из \(n\) символов, где \(i\)-м символом был 0, если \(i\)-е кольцо золотое, и 1, если серебряное.

У Сарумана есть волшебная функция \(f\), которая принимает бинарную строку, а в ответ выдает число, полученное путем перевода строки в двоичное число, а затем перевода двоичного числа в десятичное. Например, \(f(001010) = 10, f(111) = 7, f(11011101) = 221\).

Саруман, однако, считает, что порядок колец играет какую-то важную роль. Он хочет найти \(2\) пары целых чисел \((l_1, r_1), (l_2, r_2)\), для которых:

  • \(1 \le l_1 \le n\), \(1 \le r_1 \le n\), \(r_1-l_1+1\ge \lfloor \frac{n}{2} \rfloor\)
  • \(1 \le l_2 \le n\), \(1 \le r_2 \le n\), \(r_2-l_2+1\ge \lfloor \frac{n}{2} \rfloor\)
  • Пары \((l_1, r_1)\) и \((l_2, r_2)\) различны. То есть, должно выполняться хотя бы одно из условий \(l_1 \neq l_2\) и \(r_1 \neq r_2\).
  • Пусть \(t\) — подстрока \(s[l_1:r_1]\) строки \(s\), а \(w\) — подстрока \(s[l_2:r_2]\) строки \(s\). Тогда существует неотрицательное целое число \(k\), такое, что \(f(t) = f(w) \cdot k\).

Здесь подстрока \(s[l:r]\) обозначает \(s_ls_{l+1}\ldots s_{r-1}s_r\), а \(\lfloor x \rfloor\) обозначает округление числа вниз до ближайшего целого.

Помогите Саруману решить эту задачу! Гарантируется, что при ограничениях задачи существует хотя бы одно решение.

Входные данные

Каждый тест содержит несколько наборов входных данных.

В первой строке находится одно целое положительное число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Описание наборов входных данных приведено ниже.

В первой строке каждого набора входных данных находится одно целое положительное число \(n\) (\(2 \le n \le 2 \cdot 10^4\)) — количество колец.

Во второй строке каждого набора входных данных находится непустая бинарная строка длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке четыре числа \(l_1\), \(r_1\), \(l_2\), \(r_2\), которые обозначают начало первой подстроки, конец первой подстроки, начало второй подстроки и конец второй подстроки соответственно.

Если существует несколько правильных вариантов ответа, вы можете вывести любой.

Примечание

В первом наборе входных данных \(f(t) = f(1111) = 15\), \(f(w) = f(101) = 5\).

Во втором наборе входных данных \(f(t) = f(111000111) = 455\), \(f(w) = f(000111) = 7\).

В третьем наборе входных данных \(f(t) = f(0000) = 0\), \(f(w) = f(1000) = 8\).

В четвертом наборе входных данных \(f(t) = f(11011) = 27\), \(f(w) = f(011) = 3\).

В пятом наборе входных данных \(f(t) = f(001111) = 15\), \(f(w) = f(011) = 3\).

B. MIN-MEX разрез

битмаски дп жадные алгоритмы Конструктив *800

Бинарная строка — это строка, состоящая из символов \(0\) и \(1\).

Определим \(\operatorname{MEX}\) бинарной строки как наименьшую из цифр \(0\), \(1\) или \(2\), которая не встречается в этой строке. Например, \(\operatorname{MEX}\) строки \(001011\) — это \(2\), потому что \(0\) и \(1\) встречаются хотя бы один раз. \(\operatorname{MEX}\) строки \(1111\) — это \(0\), потому что \(0\) и \(2\) не встречаются ни разу, и \(0 < 2\).

Дана бинарная строка \(s\). Необходимо разбить её на произвольное количество подстрок так, чтобы каждая её цифра принадлежала ровно одной подстроке. Строку разрешается разбить на одну подстроку — эту строку целиком.

Строка \(a\) является подстрокой \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) символов из начала и нескольких (возможно, ни одного или всех) символов из конца.

Какую минимальную сумму \(\operatorname{MEX}\) всех полученных подстрок можно получить?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных содержит единственную бинарную строку \(s\) (\(1 \le |s| \le 10^5\)).

Гарантируется, что сумма длин \(s\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — наименьшую сумму \(\operatorname{MEX}\), которую можно получить, разбив \(s\) на подстроки оптимально.

Примечание

В первом наборе входных данных минимальная сумма равна \(\operatorname{MEX}(0) + \operatorname{MEX}(1) = 1 + 0 = 1\).

Во втором наборе входных данных минимальная сумма равна \(\operatorname{MEX}(1111) = 0\).

В третьем наборе входных данных минимальная сумма равна \(\operatorname{MEX}(01100) = 2\).

C. MAX-MEX разрез

битмаски дп жадные алгоритмы Конструктив *1000

Бинарная строка — это строка, состоящая из символов \(0\) и \(1\). Би-таблица — это таблица, состоящая из ровно двух бинарных строк одинаковой длины.

Определим \(\operatorname{MEX}\) би-таблицы как наименьшую из цифр \(0\), \(1\) или \(2\), которая не встречается в этой би-таблице. Например, \(\operatorname{MEX}\) для \(\begin{bmatrix} 0011\\ 1010 \end{bmatrix}\) — это \(2\), потому что \(0\) и \(1\) встречаются хотя бы один раз. \(\operatorname{MEX}\) для \(\begin{bmatrix} 111\\ 111 \end{bmatrix}\) — это \(0\), потому что \(0\) и \(2\) не встречаются ни разу, и \(0 < 2\).

Дана би-таблица с \(n\) столбцами. Необходимо разбить её на произвольное количество би-таблиц (каждая состоит из последовательных столбцов) так, чтобы каждый её столбец принадлежал ровно одной би-таблице. Би-таблицу разрешается разбить на одну би-таблицу — её саму.

Какую максимальную сумму \(\operatorname{MEX}\) всех полученных би-таблиц можно получить?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке описания каждого набора входных данных находится единственное целое число \(n\) (\(1 \le n \le 10^5\)) — количество столбцов в би-таблице.

Каждая из следующих двух строк содержит бинарную строку длины \(n\)  — это строки би-таблицы.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — наибольшую сумму \(\operatorname{MEX}\), которую можно получить, разбив би-таблицу оптимально.

Примечание

В первом наборе входных данных би-таблицу можно разбить следующим образом:

  • \(\begin{bmatrix} 0\\ 1 \end{bmatrix}\), \(\operatorname{MEX}\) равен \(2\).
  • \(\begin{bmatrix} 10\\ 10 \end{bmatrix}\), \(\operatorname{MEX}\) равен \(2\).
  • \(\begin{bmatrix} 1\\ 1 \end{bmatrix}\), \(\operatorname{MEX}\) равен \(0\).
  • \(\begin{bmatrix} 0\\ 1 \end{bmatrix}\), \(\operatorname{MEX}\) равен \(2\).
  • \(\begin{bmatrix} 0\\ 0 \end{bmatrix}\), \(\operatorname{MEX}\) равен \(1\).
  • \(\begin{bmatrix} 0\\ 0 \end{bmatrix}\), \(\operatorname{MEX}\) равен \(1\).

Сумма \(\operatorname{MEX}\) равна \(8\).

E. Пересадка почек

Деревья дп жадные алгоритмы Конструктив поиск в глубину и подобное *2000

Деревом называется связный граф без циклов. В корневом дереве есть особая вершина, которая называется корнем. Родитель вершины \(v\) (отличной от корня) — вершина перед \(v\) на кратчайшем пути от корня до \(v\). Дети вершины \(v\) — все вершины, для которых \(v\) является родителем.

Вершина называется листом, если у неё нет детей. Назовем вершину почкой, если выполняются три следующих условия:

  • она не является корнем,
  • у неё есть хотя бы один ребёнок, и
  • все её дети — листья.

Вам дано корневое дерево из \(n\) вершин. Вершина \(1\) — корень. За одно действие вы можете выбрать любую почку со всеми её детьми (они являются листьями) и переподвесить её за любую другую вершину дерева. Таким действием вы удаляете ребро, соединяющее почку и родителя, и добавляете ребро между почкой и выбранной вершиной дерева. Эта выбранная вершина не может совпадать с выбранной почкой или быть одним из ее детей. Все дети почки остаются соединёнными с ней.

Какое минимальное количество листьев можно получить, если разрешается сделать любое количество вышеописанных действий (возможно, ни одного)?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин в данном дереве.

Каждая из следующих \(n-1\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)), которые означают, что есть в дереве есть ребро между вершинами \(u\) и \(v\).

Гарантируется, что данный граф является деревом.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — минимальное количество листьев, которое можно получить после нескольких (возможно нуля) действий.

Примечание

В первом наборе входных данных дерево выглядит следующим образом:

Сначала вы можете выбрать почку \(4\) и переподвесить её за вершину \(3\). После этого вы можете выбрать почку \(2\) и переподвесить её за вершину \(7\). В результате вы получите следующее дерево с \(2\) листьями:

Можно доказать, что это минимальное количество листьев, которое можно получить.

Во втором наборе входных данных дерево выглядит следующим образом:

Вы можете выбрать почку \(3\) и переподвесить её за вершину \(5\). В результате вы получите следующее дерево с \(2\) листьями:

Можно доказать, что это минимальное количество листьев, которое можно получить.

G. Четыре вершины

графы жадные алгоритмы Конструктив кратчайшие пути реализация Структуры данных *3100

Дан неориентированный взвешенный граф, состоящий из \(n\) вершин и \(m\) рёбер.

На этом графе осуществляются запросы:

  • Удалить из графа существующее ребро.
  • Добавить в граф ещё не существующее в нём ребро.

В самом начале и после каждого запроса вам необходимо найти четыре различные вершины \(a\), \(b\), \(c\), \(d\) такие, что существует путь между \(a\) и \(b\), существует путь между \(c\) и \(d\) и сумма длин двух кратчайших путей из \(a\) в \(b\) и из \(c\) в \(d\) минимальна. Ответ на запрос — это сумма длин этих двух кратчайших путей. Длина пути равна сумме весов рёбер на этом пути.

Входные данные

В первой строке находится два целых числа \(n\) и \(m\) \((4 \le n, m \le 10^5)\) — количество вершин и рёбер в графе соответственно.

Каждая из следующих \(m\) строк содержит три целых числа \(v\), \(u\), \(w\) (\(1 \le v, u \le n, v \neq u\), \(1 \le w \le 10^9\)) — это означает, что существует ребро между вершинами \(v\) и \(u\) с весом \(w\).

Следующая строка содержит одно целое число \(q\) \((0 \le q \le 10^5)\) — количество запросов.

Следующие \(q\) строк содержат запросы двух типов:

  • \(0\) \(v\) \(u\) — такой запрос означает удаление ребра между вершинами \(v\) и \(u\) \((1 \le v, u \le n, v \neq u)\). Гарантируется, что такое ребро существует в графе.
  • \(1\) \(v\) \(u\) \(w\) — такой запрос означает добавление ребра между вершинами \(v\) и \(u\) весом \(w\) (\(1 \le v, u \le n, v \neq u\), \(1 \le w \le 10^9\)). Гарантируется, что такого ребра не было в графе.

Гарантируется, что изначальный граф не содержит кратных рёбер.

В самом начале и после каждого запроса граф не обязательно связный.

Гарантируется, что в любой момент количество рёбер в графе не будет меньше \(4\). Можно доказать, что в любой момент существуют четыре различные вершины \(a\), \(b\), \(c\), \(d\) такие, что существует путь между вершинами \(a\) и \(b\), и существует путь между вершинами \(c\) и \(d\).

Выходные данные

Выведите \(q + 1\) целое число — минимальную сумму длин кратчайших путей для выбранных пар вершин до всех запросов и после каждого из них.

Примечание

До всех запросов можно выбрать вершины \((a, b) = (3, 2)\) и \((c, d) = (1, 4)\). Сумма длин двух кратчайших путей равна \(3 + 1 = 4\).

После первого запроса можно выбрать вершины \((a, b) = (2, 5)\) и \((c, d) = (1, 4)\). Сумма длин двух кратчайших путей равна \(2 + 1 = 3\).

После второго запроса можно выбрать вершины \((a, b) = (3, 4)\) и \((c, d) = (2, 5)\). Сумма длин двух кратчайших путей равна \(1 + 2 = 3\).

После третьего запроса можно выбрать вершины \((a, b) = (2, 6)\) и \((c, d) = (4, 5)\). Сумма длин двух кратчайших путей равна \(4 + 3 = 7\).

После последнего запроса можно выбрать вершины \((a, b) = (1, 6)\) и \((c, d) = (2, 5)\). Сумма длин двух кратчайших путей равна \(3 + 2 = 5\).

H. Xor-квиз

дп интерактив Конструктив математика теория чисел *3200

Это интерактивная задача.

Вам даны два целых числа \(c\) и \(n\). У жюри есть случайно сгенерированное множество \(A\) различных положительных чисел, не превосходящих \(c\) (оно выбирается из всех таких возможных множеств с равной вероятностью). Размер \(A\) равен \(n\).

Ваша задача угадать множество \(A\). Для того, чтобы это сделать, вы можете сделать не более \(\lceil 0.65 \cdot c \rceil\) запросов.

В каждом запросе вы можете выбрать одно целое число \(1 \le x \le c\). В качестве ответа на этот запрос вы получите побитовое исключающее ИЛИ всех таких \(y\), что \(y \in A\) и \(gcd(x, y) = 1\) (т.е. \(x\) и \(y\) взаимно просты). Если таких \(y\) не существует, то такое побитовое ИЛИ равно \(0\).

Вы можете задать все вопросы в самом начале и получить ответы на все запросы. После этого у вас не будет возможности делать запросы.

Вы должны найти любое множество \(A'\) такое, что \(|A'| = n\) и \(A'\) и \(A\) дают одинаковые ответы для всех \(c\) возможных запросов.

Входные данные

Сначала вам даны два целых числа \(c\) и \(n\) (\(100 \le c \le 10^6\), \(0 \le n \le c\)).

Протокол взаимодействия

В первой строке вы должны вывести целое число \(q\) \((0 \le q \le \lceil 0.65 \cdot c \rceil)\) — количество запросов, которые вы хотите сделать. После этого в той же строке выведите \(q\) целых чисел \(x_1, x_2, \ldots, x_q\) \((1 \le x_i \le c)\) — сами запросы.

Для этих запросов вы должны считать \(q\) целых чисел, \(i\)-е из них — это ответ на вышеописанный запрос для \(x = x_i\).

После этого во второй строке вы должны вывести \(n\) целых чисел \(A'_1, A'_2, \ldots, A'_n\) — найденное множество \(A'\).

Если существуют разные множества \(A'\), для которых ответы на все возможные запросы совпадают, то выведите любое из них.

Если вы сделаете более \(\lceil 0.65 \cdot c \rceil\) запросов, или запросы будут некорректными, интерактор немедленно завершит работу, а ваша программа получит вердикт Неправильный ответ.

После вывода запросов не забудьте вывести символ перевода строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Вы не можете делать взломы по этой задаче.

Примечание

Тест из условия сделан только для того, чтобы вы поняли протокол взаимодействия. Ваше решение не будет запускаться на тесте из условия.

В тесте из условия \(A = \{1, 4, 5, 6, 8, 10\}\). Делается \(7\) запросов, \(7 \le \lceil 0.65 \cdot 10 \rceil = 7\), поэтому ограничение на количество запросов не превышено.

Ответы на запросы:

  • Для \(10\): \(1\) — единственное число в множестве \(A\), взаимно простое с \(10\), поэтому ответ \(1\)
  • Для \(2\): \(1_{10} \oplus 5_{10} = 001_2 \oplus 101_2 = 4_{10}\), где \(\oplus\) — побитовое исключающее ИЛИ
  • Для \(3\): \(1_{10} \oplus 4_{10} \oplus 5_{10} \oplus 8_{10} \oplus 10_{10} = 0001_2 \oplus 0100_2 \oplus 0101_2 \oplus 1000_2 \oplus 1010_2 = 2_{10}\)
  • Для \(5\): \(1_{10} \oplus 4_{10} \oplus 6_{10} \oplus 8_{10} = 0001_2 \oplus 0100_2 \oplus 0110_2 \oplus 1000_2 = 11_{10}\)
  • Для \(7\): \(1_{10} \oplus 4_{10} \oplus 5_{10} \oplus 6_{10} \oplus 8_{10} \oplus 10_{10} = 0001_2 \oplus 0100_2 \oplus 0101_2 \oplus 0110_2 \oplus 1000_2 \oplus 1010_2 = 4_{10}\)
  • Для \(1\): \(1_{10} \oplus 4_{10} \oplus 5_{10} \oplus 6_{10} \oplus 8_{10} \oplus 10_{10} = 0001_2 \oplus 0100_2 \oplus 0101_2 \oplus 0110_2 \oplus 1000_2 \oplus 1010_2 = 4_{10}\)
  • Для \(6\): \(1_{10} \oplus 5_{10} = 0001_2 \oplus 0101_2 = 4_{10}\)

D. Своеобразная система счисления

жадные алгоритмы Конструктив математика реализация *2000

Боб выписал на доске \(n\) положительных целых чисел в десятичной системе счисления с суммой \(s\) (то есть по основанию \(10\)). Алиса увидела числа на доске, но по ошибке интерпретировала числа как записанные по основанию \(11\) и сложила их (по основанию \(11\)).

Какие числа должен был написать Боб, чтобы сумма, полученная Алисой, была максимально возможной?

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следуют сами наборы.

В единственной строке каждого набора заданы два целых числа \(s\) и \(n\) (\(1 \leq s \leq 10^9\); \(1 \leq n \leq \min(100, s)\)) — сумма и количество чисел на доске, соответственно. Числа \(s\) и \(n\) заданы в десятичной системе счисления (по основанию \(10\)).

Выходные данные

Для каждого набора данных выведите \(n\) положительных целых чисел — числа, которые должен написать Боб, чтобы полученная Алисой сумма была максимально возможной. Если есть несколько ответов, выведите любой из них.

Примечание

В первом наборе, \(70_{10} + 27_{10} = 97_{10}\), а у Алисы получится сумма \(\)70_{11} + 27_{11} = 97_{11} = 9 \cdot 11 + 7 = 106_{10}.\(\) (Здесь \(x_b\) обозначает число \(x\) по основанию \(b\).) Можно показать, что для Алисы невозможно получить сумму больше, чем \(106_{10}\).

Во втором наборе, Боб выписывает только одно число, поэтому он может выписать только \(17\).

В третьем примере, \(3_{10} + 4_{10} + 100_{10} + 4_{10} = 111_{10}\), а у Алисы получится сумма \(\)3_{11} + 4_{11} + 100_{11} + 4_{11} = 110_{11} = 1 \cdot 11^2 + 1 \cdot 11 = 132_{10}.\(\) Можно показать, что для Алисы невозможно получить сумму более \(132_{10}\).

F. Непереводимое название

2-sat графы Конструктив поиск в глубину и подобное реализация снм *2700

У Алисы есть пустое поле из \(n\) строк и \(m\) столбцов. Некоторые клетки этого поля помечены, и ни одна помеченная клетка не касается края поля. (Две клетки считаются соседними, если они касаются по стороне.)

Алиса хочет записать в каждую клетку число так, чтобы они удовлетворяли следующим условиям:

  • в каждой непомеченной клетке записано либо \(1\), либо \(4\);
  • в каждой помеченной клетке записана сумма чисел всех соседних непомеченных клеток (если у помеченной вершины нет соседних непомеченных, то сумма равна \(0\));
  • в каждой помеченной клетке записанное число делится на \(5\).
Не придумав ничего, Алиса решила попросить помощи у Боба. Помогите Бобу найти любое подходящее заполнение поля, или определить, что такого поля не существует.
Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 500\)) — количество строк и столбцов поля, соответственно.

Далее следуют \(n\) строк, каждая состоит из \(m\) символов. Каждый символ — это «.» или «X» — непомеченная или помеченная клетка, соответственно. Ни одна помеченная клетка не касается краев поля.

Выходные данные

Выведите «NO», если не существует подходящего заполнения. В противном случае выведите «YES». Далее выведите \(n\) строк по \(m\) целых чисел через пробел — числа в клетках поля.

Примечание

Можно показать, что во втором примере не существует подходящего заполнения.

B. Шахматный турнир

Конструктив *1000

Скоро состоится шахматный турнир, в котором примут участие \(n\) шахматистов. Каждый шахматист сыграет одну партию против каждого другого участника. Партия заканчивается либо победой одного игрока и поражением другого, либо ничьей для обоих игроков.

У каждого из шахматиста есть свои ожидания по поводу турнира, они могут быть одного из двух типов:

  1. шахматист хочет не проиграть ни одной партии (то есть закончить турнир без поражений);
  2. шахматист хочет выиграть хотя бы одну партию.

Вам предстоит определить результаты всех матчей, чтобы все шахматисты сыграли в соответствии со своими ожиданиями, или сообщить, что это невозможно. Если правильных ответов несколько, выведите любой из них.

Вам предстоит определить, существует ли такой исход всех матчей, чтобы ожидания всех игроков были удовлетворены. Если существует несколько возможных исходов, выведите любой из них. Если таковых нет, сообщите, что это невозможно.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 200\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(2 \le n \le 50\)) — количество шахматистов.

Вторая строка содержит строку \(s\) (\(|s| = n\); \(s_i \in \{1, 2\}\)). Если \(s_i = 1\), то у \(i\)-го шахматиста ожидания первого типа, иначе второго.

Выходные данные

Для каждого набора входных данных выведите ответ в следующем формате:

В первой строке выведите NO, если удовлетворить ожидания всех шахматистов невозможно.

В противном случае выведите YES, а в последующих \(n\) строках элементы матрицы размером \(n \times n\).

Элемент матрицы в \(i\)-й строке и \(j\)-м столбце должен быть равен:

  • +, если \(i\)-й шахматист выиграл в партии с \(j\)-м шахматистом;
  • -, если \(i\)-й шахматист проиграл в партии с \(j\)-м шахматистом;
  • =, если \(i\)-й и \(j\)-й шахматисты сыграли в ничью;
  • X, если \(i = j\).

D. Лотерея

*особая задача Конструктив математика Перебор реализация *1800

Соревнование Kotlin Heroes близится к завершению. В этот раз в соревновании участвовало \(n\) программистов. И теперь организаторы думают над тем, как развлечь еще и зрителей. Один из возможных вариантов — устроить лотерею. Но для начала нужно провести опрос среди зрителей.

В общем, организаторы опросили \(m\) зрителей, каждому задали два вопроса:

  1. Кто займет первое место?
  2. Кто займет последнее место?

Получив все ответы, организаторы присвоили всем зрителям места на основании того, скольких программистов они угадали. Предположим, что \(c_2\) зрителей правильно угадали и первое и последнее место, \(c_1\) зрителей угадали только первое или только последнее место, и \(c_0\) зрителей не угадали никого. Тогда все \(c_2\) зрителей получат \(1\)-е место, все зрители с одним правильным местом получат место \(c_2 + 1\), а все остальные — место \(c_2 + c_1 + 1\).

Вы были одним из опрашиваемых зрителей. Кроме того, как один из организаторов, вы можете смотреть результаты опроса, но не результаты соревнования. Определите, какое наихудшее место вы можете занять согласно системе ранжирования организаторов?

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(2 \le n \le 1000\); \(1 \le m \le 2 \cdot 10^5\)) — количество программистов, участвовавших в соревновании, и количество опрошенных зрителей.

В следующих \(m\) строках заданы ответы зрителей. В \(i\)-й строке заданы два целых числа \(f_i\) и \(l_i\) (\(1 \le f_i, l_i \le n\); \(f_i \ne l_i\)) — индексы программистов, кто займет первое и последнее места по мнению \(i\)-го зрителя.

Для простоты, ваш ответ всегда первый, то есть ваш ответ — это \(f_1\) и \(l_1\).

Выходные данные

Выведите одно целое число — худшее место, которое вы можете получить согласно системе ранжирования организаторов (чем больше место, тем хуже).

Примечание

В первом примере, если второй программист займет первое место, а первый программист — последнее, то у вас будет \(0\) правильных ответов в то время, как у других двух зрителей — \(2\) правильных ответа. А потому ваше место (в худшем случае) будет равно \(c_2 + c_1 + 1\) \(=\) \(2 + 0 + 1 = 3\).

Во втором примере, если, например, третий программист займет первое место, а второй программист — последнее место, то у вас будет \(1\) правильный ответ. У зрителей \(2\), \(4\) и \(5\) будет \(2\) правильных ответа, у зрителя \(6\) — \(1\) правильный ответ, и у зрителя \(3\) — \(0\) правильных ответов. В результате ваше место будет равно \(c_2 + 1\) \(=\) \(3 + 1 = 4\). (Заметим, что у зрителя \(6\) также будет место \(4\)).

F. Kotlinforces

*особая задача дп Конструктив *2000

Kotlinforces — веб-платформа, на которой проводятся соревнования по программированию.

На Kotlinforces планируется провести \(n\) соревнований по программированию в следующие \(m\) дней. Каждое соревнование проводится в несколько этапов; регламент \(i\)-го соревнования гласит, что оно проводится в \(k_i\) этапов, и каждый этап, начиная со второго, должен пройти ровно на \(t_i\) дней позже предыдущего. То есть, если первый этап \(i\)-го соревнования проводится в день \(x\), второй этап будет проводиться в день \(x+t_i\), третий — в день \(x+2t_i\), ..., \(k_i\)-й этап (он же последний) — в день \(x+(k_i-1)t_i\).

Все \(n\) соревнований необходимо распланировать так, чтобы они прошли за следующие \(m\) дней, и в каждый из этих \(m\) дней проводилось не более одного этапа одного соревнования (два этапа разных соревнований не могут проводиться в один и тот же день).

Возможно ли провести все \(n\) соревнований и соблюсти все условия?

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(1 \le n, m \le 5000\)) — количество соревнований и количество дней, соответственно.

Затем следуют \(n\) строк, в каждой из которых описывается соревнование. В \(i\)-й строке заданы два целых числа \(k_i\) и \(t_i\) (\(2 \le k_i \le 5000\); \(1 \le t_i \le 2\)) — параметры \(i\)-го соревнования.

Выходные данные

Если невозможно запланировать все \(n\) соревнований на следующие \(m\) дней так, что ни в один день не проводится более одного этапа, выведите -1.

Иначе выведите \(n\) целых чисел; \(i\)-е из них должно быть номером дня, в который будет проводиться первый этап \(i\)-го соревнования, дни пронумерованы с \(1\) до \(m\). Если существует несколько подходящих ответов, выведите любой из них.

B. Xor трех

жадные алгоритмы Конструктив Перебор *2500

У вас есть последовательность \(a\) длины \(n\), состоящая из цифр \(0\) и \(1\).

Вы можете выполнять следующую операцию над этой последовательностью:

  • выбрать индекс \(i\) от \(1\) до \(n-2\) (включительно);
  • одновременно заменить значения \(a_{i}\), \(a_{i+1}\), \(a_{i+2}\) на \(a_{i} \oplus a_{i+1} \oplus a_{i+2}\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.
Найдите последовательность из не более чем \(n\) операций, после которой все элементы \(a\) будут равны \(0\), или определите, что это невозможно.

Можно показать, что если существует последовательность операций некоторой длины такая, что после ее выполнения все элементы \(a\) будут равны \(0\), то существует и последовательность длины не более \(n\).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит целое число \(n\) (\(3 \le n \le 2\cdot10^5\)) — длину \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(a_i = 0\) или \(a_i = 1\)) — элементы \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных:

  • если нет способа сделать все элементы \(a\) равными \(0\), выполнив описанную операцию несколько раз, выведите «NO»;
  • в противном случае в первой строке выведите «YES», во второй строке выведите \(k\) (\(0 \le k \le n\)) — количество операций над \(a\) в вашем решении, а затем в третьей строке выведите последовательность \(b_1, b_2, \dots, b_k\) (\(1 \le b_i \le n - 2\)) — индексы, которые вы выбираете.

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере последовательность содержит только числа \(0\), поэтому ничего не нужно делать.

Во втором примере мы можем преобразовать \([1, 1, 1, 1, 0]\) в \([1, 1, 0, 0, 0]\), а затем в \([0, 0, 0, 0, 0]\), сначала выполнив операцию, начиная с третьего элемента \(a\), а потом начиная с первого элемента \(a\).

В третьем примере независимо от того, сделаем ли мы первую операцию, начиная с первого или второго элемента \(a\), мы получим \([1, 1, 1, 1]\), что не может быть преобразовано в \([0, 0, 0, 0]\).

A. Правильные скобочные последовательности

Конструктив *800

Скобочная последовательность — это строка, состоящая только из символов «(» и «)». Правильной скобочной последовательностью называется скобочная последовательность, которую можно преобразовать в корректное арифметическое выражение путем вставок между ее символами символов '1' и '+'. Например, скобочные последовательности «()()», «(())» — правильные (полученные выражения: «(1)+(1)», «((1+1)+1)»), а «)(» и «(» — нет.

Вам дано целое число \(n\). Ваша задача — построить и вывести ровно \(n\) различных правильных скобочных последовательностей длины \(2n\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 50\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей единственное целое число \(n\) (\(1 \le n \le 50\)).

Выходные данные

Для каждого набора входных данных выведите \(n\) строк, каждая из которых должна содержать одну правильную скобочную последовательность длины ровно \(2n\). Все скобочные последовательности, которые вы выводите для одного набора входных данных, должны быть различны (хотя они могут совпадать в разных наборах входных данных). Если ответов несколько, выведите любой из них. Можно показать, что ответ всегда существует.

E. Раскраска

Комбинаторика Конструктив математика реализация *2500

Матрица размера \(n \times m\), состоящая только из цифр \(0\) или \(1\) считается красивой, если сумма в каждой подматрице размера \(2 \times 2\) ровно \(2\), т. е. каждый «квадрат» размера \(2 \times 2\) содержит ровно две цифры \(1\) и две цифры \(0\).

Вам задана матрица размера \(n \times m\). Изначально все ячейки матрицы пусты. Обозначим ячейку стоящую на пересечении \(x\)-й строки \(y\)-го столбца как \((x, y)\). Вам нужно обрабатывать запросы трех типов:

  • \(x\) \(y\) \(-1\) — сделать ячейку \((x, y)\) пустой;
  • \(x\) \(y\) \(0\) — записать цифру \(0\) в ячейку \((x, y)\), это перезапишет то, что там было;
  • \(x\) \(y\) \(1\) — записать цифру \(1\) в ячейку \((x, y)\), это перезапишет то, что там было.

После каждого запроса выведите количество способов заполнить пустые ячейки матрицы так, чтобы матрица была красивой. Так как это значение может быть слишком велико, выведите его по модулю \(998244353\).

Входные данные

Первая строка содержит три числа \(n\), \(m\) и \(k\) (\(2 \le n, m \le 10^6\); \(1 \le k \le 3 \cdot 10^5\)) — количество строк матрицы, количество столбцов и количество запросов соответственно.

Следующие \(k\) строк содержат описания запросов. \(i\)-я строка содержит три числа \(x_i\), \(y_i\), \(t_i\) (\(1 \le x_i \le n\); \(1 \le y_i \le m\); \(-1 \le t_i \le 1\)) — параметры \(i\)-го запроса.

Выходные данные

После каждого запроса выведите число — количество способов заполнить пустые ячейки матрицы так, чтобы матрица была красивой по модулю \(998244353\).

A. Anti-Tetris

графы Конструктив кратчайшие пути *2800

Let us consider the game "Sticky Tetris". In this game, there is a field of \(n \times m\) squares. Tiles appear on the field and the player can move the tiles.

Each tile is a \(4\)-connected set of at most \(7\) squares.

Each new tile appears in any position that fits inside the field, does not intersect any other tile, and the top cell of the tile is at the top row of the field. The player can move the tile left, right, and down, and at any moment the tile must still entirely fit inside the field and must not intersect other tiles. The player can stop the tile at any position at any time. After that, it cannot be moved. Since this is "Sticky Tetris," the tile will not fall once stopped.

You are given a final configuration of a "Sticky Tetris" game. You need to restore a sequence of steps that leads to that configuration if it exists.

Input

The first line contains two integers \(n\) and \(m\) (\(1 \le n, m \le 50\)) — the size of the playing field.

The next \(n\) lines contain a string of \(m\) characters each. Each character could be either a '.', or lowercase English letter. Connected components of the same letter correspond to a single tile. Each tile consists of at most \(7\) squares.

Output

If there is no solution, print \(-1\).

Otherwise, print \(k\) — the number of different tiles that are placed on the field.

On the next \(k\) lines print the sequence of steps for each of the tiles in the order they are placed.

Each line consists of a number \(x\) followed by a string with steps. \(x\) (\(1 \le x \le m\)) is the starting column of the leftmost square in the top row of the tile. The string consists of characters 'L' (for left), 'R' (for right), and 'D' (for down), describing the path of that tile, ending with a single character 'S' (for stop). The final position of the tile determines which tile is being placed. The string with steps can have at most \(n \cdot m + 1\) characters.

M. The Mind

интерактив Конструктив Теория вероятностей *2700

This is an interactive problem.

In this problem, you need to come up with a strategy for a cooperative game. This game is played by two players. Each player receives 5 cards. Each card has a random integer between 1 and 100 on it. It is guaranteed that all numbers on cards are distinct.

The goal of the game is to play a card with a minimal number on it out of all 10 cards dealt to the players before any other card. The problem is that each player can only see their own cards and cannot communicate with another player in any way.

The game consists of 5 turns. During each turn, players simultaneously make a move. Each player can either play their smallest card or do nothing. If on some turn the smallest card is played, and no other card is played on or before that turn, players win. If two cards are played at the same turn or if after all 5 turns, no card is still played, players lose.

Players cannot communicate, so a strategy for the game should only be based on 5 cards that the player has. You can describe a strategy as five numbers \(0.0 \le p_i \le 1.0, \sum_{i=1}^{5}p_i \le 1\), where \(p_i\) — the probability of playing the player's smallest card in their hand on \(i\)-th turn. If you know the cards dealt to the players, and the strategies that players choose, you can compute the probability of winning by a simple formula.

You will be given \(n=1000\) randomly generated hands of 5 cards. You need to generate a strategy for each of the hands to maximize the probability of winning. After the judge program receives all \(n\) strategies, it generates all possible valid pairs of those hands (pairs which have the same numbers are discarded), and computes a probability of winning based on two strategies provided by your program.

To ensure that answers for different hands are independent, you must output a strategy for a hand and flush the standard output before reading information about the next hand.

If the average probability of winning a game is more than 85% over all valid pairs of hands, the test is considered passed. This problem contains the sample test and \(20\) randomly generated tests with \(n = 1000\).

Input

The first line contains one integer \(n\) — the number of hands. It is guaranteed that \(n = 1000\) for all cases except the first sample case.

Each of the next \(n\) lines contains 5 numbers \(a_i\) (\(1 \le a_i \le 100, a_i < a_{i+1}\)) — the cards in the hand. It is guaranteed that each possible set of 5 cards has an equal probability of being chosen.

Output

For each of the \(n\) hands you need to output 5 numbers \(0.0 \le p_i \le 1.0, \sum_{i=1}^{5}p_i \le 1\), where \(p_i\) — probability of playing the smallest card on \(i\)-th turn.

Note

In the example test there is only one valid pair of hands. The winning probability for the example output is equal to \(0.8 + 0.2 \cdot (1 - 0.2) = 0.96\). Also note that the second player will not play a card at all with probability 0.1.

D. Продуктивная встреча

графы жадные алгоритмы Конструктив *1400

На встрече собрались \(n\) человек. В каждый момент времени любые два человека могут отойти и поговорить наедине. Одни и те же два человека могут поговорить несколько (сколько угодно) раз за встречу.

У каждого человека есть ограниченная общительность. Общительность \(i\)-го человека равна неотрицательному целому числу \(a_i\). Это означает, что после \(a_i\) личных разговоров этот человек уходит со встречи (и больше ни с кем не разговаривает). Если \(a_i = 0\), \(i\)-й человек уходит со встречи сразу после ее начала.

Встреча считается тем более продуктивной, чем больше в течение нее состоялось разговоров.

По данному массиву общительности \(a\) определите, какие люди должны разговаривать друг с другом, чтобы суммарное количество разговоров было как можно больше.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В следующих \(2t\) строках даны описания наборов входных данных.

В описании каждого набора данных первая строка содержит целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество людей на встрече, а во второй строке через пробел перечислены \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 2 \cdot 10^5\)) — параметры общительности всех людей.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\). Также гарантируется, что сумма всех \(a_i\) (по всем наборам входных данных и всем \(i\)) не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) ответов на все наборы входных данных.

В первой строке ответа выведите число \(k\) — максимальное количество разговоров, которое возможно провести за встречу.

В каждой из следующих \(k\) строк выведите через пробел по два целых числа \(i\) и \(j\) (\(1 \le i, j \le n\) и \(i \neq j\)) — номера людей, между которыми состоится очередной разговор.

Если ответов несколько, выведите любой из них.

E1. Минимизация перестановки деком

жадные алгоритмы Конструктив математика *1000

На самом деле, задачи E1 и E2 не имеют много общего. Вероятно, вам надо воспринимать их как две отдельные задачи.

Дана перестановка \(p\) размера \(n\). Перестановкой размера \(n\) называется массив размера \(n\), в котором каждое целое число от \(1\) до \(n\) встречается по одному разу. Например, \([1, 4, 3, 2]\) и \([4, 2, 1, 3]\) являются перестановками, а \([1, 2, 4]\) и \([1, 2, 2]\) — нет.

Рассмотрим пустой дек (двухстороннюю очередь). Дек — это структура данных, поддерживающая добавление элементов как в начало, так и в конец. Так, если сейчас в деке лежат элементы \([1, 5, 2]\), при добавлении элемента \(4\) в начало получится последовательность \([\color{red}{4}, 1, 5, 2]\), а при добавлении в конец — \([1, 5, 2, \color{red}{4}]\).

Элементы перестановки по очереди перемещаются в изначально пустой дек, начиная с \(p_1\) и заканчивая \(p_n\). Перед добавлением каждого элемента в дек разрешается выбрать, добавить его в начало или в конец.

Например, если рассмотреть перестановку \(p = [3, 1, 2, 4]\), то одна из возможных последовательностей действий выглядит так:

\(\quad\) 1.положить \(3\) в конец дека:в деке лежит \([\color{red}{3}]\);
\(\quad\) 2.положить \(1\) в начало дека:в деке лежит \([\color{red}{1}, 3]\);
\(\quad\) 3.положить \(2\) в конец дека:в деке лежит \([1, 3, \color{red}{2}]\);
\(\quad\) 4.положить \(4\) в конец дека:в деке лежит \([1, 3, 2, \color{red}{4}]\);

Найдите лексикографически минимальную возможную последовательность элементов в деке после того, как будет обработана вся перестановка.

Последовательность \([x_1, x_2, \ldots, x_n]\) лексикографически меньше последовательности \([y_1, y_2, \ldots, y_n]\), если существует такое \(i \leq n\), что \(x_1 = y_1\), \(x_2 = y_2\), \(\ldots\), \(x_{i - 1} = y_{i - 1}\) и \(x_i < y_i\). Иными словами, если последовательности \(x\) и \(y\) имеют некоторое (возможно, пустое) совпадающее начало, а следующий элемент последовательности \(x\) строго меньше соответствующего элемента последовательности \(y\). Например, последовательность \([1, 3, 2, 4]\) меньше последовательности \([1, 3, 4, 2]\), так как после совпадающего начала \([1, 3]\) в первой последовательности идет меньшее число (\(2\)), чем во второй (\(4\)).

Входные данные

В первой строке записано целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

В следующих \(2t\) строках даны описания наборов входных данных.

В описании каждого набора входных данных первая строка содержит целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — размер перестановки, а во второй строке через пробел перечислены \(n\) целых чисел \(p_i\) (\(1 \le p_i \le n\); все \(p_i\) различны) — элементы перестановки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) строк, каждая из которых содержит ответ на соответствующий набор входных данных. В качестве ответа выведите через пробел \(n\) чисел — элементы лексикографически минимальной перестановки, которую возможно получить в деке после выполнения описанного алгоритма.

Примечание

Один из способов получить лексикографически минимальную перестановку \([1, 3, 2, 4]\) из перестановки \([3, 1, 2, 4]\) (первый набор входных данных из примера) описан в условии задачи.

E. Строительство железных дорог

графы Конструктив кратчайшие пути Перебор Структуры данных *3400

Поскольку железнодорожная система в Генсоке часто перегружена, инженер-энтузиастка Кавасиро Нитори планирует построить больше железных дорог, чтобы уменьшить заторы.

В Генсоке есть \(n\) станций, пронумерованных от \(1\) до \(n\), и \(m\) железных дорог с двусторонним движением. Каждая железная дорога с двусторонним движением соединяет две разные станции и имеет положительную целочисленную длину \(d\). Никакие две железные дороги не соединяют одни и те же станции. Среди \(n\) станций станция \(1\) является главной. Вы можете добраться до любой станции от любой другой пользуясь только дорогами с двусторонним движением.

Из-за технологических ограничений Нитори может строить только односторонние железные дороги. Их длина также может быть произвольным целым положительным числом. Строительство железной дороги в один конец от станции \(u\) будет стоить \(w_u\) единиц ресурсов независимо от станции назначения.

Чтобы уменьшить заторы, Нитори планирует, что после строительства из станции \(1\) в любую другую станцию должно быть хотя бы два различных кратчайших пути, не имеющие общих станций, кроме станции \(1\) и конечной станции. Кроме того, Нитори не хочет изменять длину кратчайшего пути от станции \(1\) до любой другой станции.

В силу разных причин стоимость строительства новой железной дороги иногда может расти бесконтрольно. Произойдут \(q\) событий, где \(i\)-е событие увеличивает стоимость постройки односторонних дорог из станции \(k_i\) на \(x_i\).

Для экономии ресурсов Нитори хочет, чтобы вы помогли ей рассчитать минимальную стоимость строительства железной дороги до всех событий и после каждого из них.

Входные данные

Первая строка входных данных содержит три целых числа \(n\), \(m\), \(q\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le m \le 3 \cdot 10^5\), \(0 \le q \le 2\cdot10^5\)).

Вторая строка содержит \(n\) целых чисел \(w_1,w_2,\ldots,w_n\) (\(1 \le w_i \le 10^9\)).

Каждая из следующих \(m\) строк содержит три целых числа \(u\), \(v\), \(d\) (\(1 \le u,v \le n\), \(u \ne v\), \(1 \le d \le 10^9\)), описывающие двустороннюю железную дорогу между станциями \(u\) и \(v\) длины \(d\).

\(i\)-я из следующих \(q\) строк содержит два целых числа \(k_i,x_i\) (\(1 \le k_i \le n, 1 \le x_i \le 4 \times 10^8\)) — описание событий.

Выходные данные

Выведите \(q+1\) строк, где \(i\)-я строка содержит одно целое число, равное минимальной стоимости строительства железной дороги после \(i-1\)-го события (\(0\)-е событие — ни одного события не произошло).

Примечание

Во втором тестовом примере Нитори может строить железные дороги следующим образом: \(1 \rightarrow 2\), \(1 \rightarrow 3\), \(1 \rightarrow 4\), \(2 \rightarrow 8\). Стоимость в таком случае составит \(14 + 14 + 14 + 4 = 46\).

B. Диаметр графа

графы жадные алгоритмы Конструктив математика *1200

CQXYM хочет построить связный неориентированный граф на \(n\) вершинах с \(m\) ребер и диаметром, строго меньшим \(k-1\).

Также CQXYM не хочет, чтобы граф имел петли или кратные ребра (то есть каждое ребро соединяет две различные вершины, между любой парой вершин проведено не более чем одно ребро).

Диаметр графа — это максимальное расстояние между любыми двумя его вершинами.

Расстояние между двумя вершинами — наименьшее количество ребер в пути, концами которого являются эти вершины.

CQXYM задается вопросом, можно ли построить такой граф.

Входные данные

Входные данные состоят из нескольких тестовых примеров.

Первая строка содержит целое число \(t (1 \leq t \leq 10^5)\) — количество тестовых примеров. Ниже приводится описание тестовых случаев.

Единственная для каждого тестового случая строка содержит три целых числа: \(n(1 \leq n \leq 10^9)\), \(m\), \(k\) \((0 \leq m,k \leq 10^9)\).

Выходные данные

Для каждого тестового случая выведите YES, если построить граф возможно, и NO в противном случае. Вы можете выводить буквы в любом регистре (верхнем или нижнем).

Примечание

В первом тестовом случае диаметр графа равен 0.

Во втором случае диаметр графа может быть только 2.

В третьем случае диаметр графа может быть только 1.

D. Вупсень, Пупсень и 0

Конструктив математика *1600

Вупсеню и Пупсеню подарили массив целых чисел. Так как Вупсень не любит число \(0\), он выкинул все числа, равные \(0\) из массива. В итоге получился массив \(a\) длины \(n\).

Пупсень, напротив, любит число \(0\) и расстроился, когда увидел массив без нулей. Чтобы подбодрить Пупсеня, Вупсень решил придумать другой массив \(b\) длины \(n\) такой, что \(\sum_{i=1}^{n}a_i \cdot b_i=0\). Так как Вупсень не любит число \(0\), в массиве \(b\) не должно быть чисел, равных \(0\). К тому же числа в этом массиве не должны быть слишком большими, поэтому сумма их абсолютных значений не может превышать \(10^9\). Помогите Вупсеню найти любой такой массив \(b\)!

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Следующие \(2 \cdot t\) строк содержат описания наборов входных данных. Описание каждого набора состоит из двух строк.

Первая строка описания каждого набора входных данных содержит единственное целое число \(n\) (\(2 \le n \le 10^5\)) — длину массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^4 \le a_i \le 10^4\), \(a_i \neq 0\)) — элементы массива \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) — элементы массива \(b\) (\(|b_1|+|b_2|+\ldots +|b_n| \le 10^9\), \(b_i \neq 0\), \(\sum_{i=1}^{n}a_i \cdot b_i=0\)).

Можно показать, что ответ всегда существует.

Примечание

В первом наборе входных данных \(5 \cdot 1 + 5 \cdot (-1)=5-5=0\). Также можно было, например, вывести \(3\) \(-3\), так как \(5 \cdot 3 + 5 \cdot (-3)=15-15=0\)

Во втором наборе входных данных \(5 \cdot (-1) + (-2) \cdot 5 + 10 \cdot 1 + (-9) \cdot (-1) + 4 \cdot (-1)=-5-10+10+9-4=0\).

B. Омкар и божественное дерево

Деревья Конструктив *1200

Лорд Омкар хотел бы, чтобы у него было дерево с \(n\) вершинами (\(3 \le n \le 10^5\)), и попросил своих учеников построить дерево. Однако Лорд Омкар создал \(m\) (\(\mathbf{1 \le m < n}\)) ограничений, чтобы гарантировать, что дерево будет настолько божественным, насколько это возможно.

Дерево на \(n\) вершинах — это связный неориентированный граф с \(n\) вершинами и \(n-1\) ребром. Заметим, что для любых двух вершин существует ровно один простой путь между ними, где простой путь — это путь между двумя вершинами, который не содержит ни одной вершины более одного раза.

Вот пример дерева:

Ограничение состоит из \(3\) попарно различных целых чисел, \(a\), \(b\) и \(c\) (\(1 \le a,b,c \le n\)). Оно означает, что вершина \(b\) не может лежать на простом пути между вершинами \(a\) и \(c\).

Сможете ли вы помочь Лорду Омкару и стать его самым доверенным учеником? Вам нужно будет найти божественные деревья для нескольких наборов ограничений. Можно показать, что при ограничениях задачи божественное дерево всегда найдется.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \leq t \leq 10^4\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(3 \leq n \leq 10^5\), \(\mathbf{1 \leq m < n}\)), представляющих размер дерева и количество ограничений.

\(i\)-я из следующих \(m\) строк содержит три целых числа \(a_i\), \(b_i\), \(c_i\) (\(1 \le a_i, b_i, c_i \le n\), \(a\), \(b\), \(c\) попарно различны), обозначающие, что вершина \(b_i\) не может лежать на простом пути между вершинами \(a_i\) и \(c_i\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\)

Выходные данные

Для каждого набора входных данных выведите \(n-1\) строку, обозначающих \(n-1\) ребро в дереве. В каждой строке выведите два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \neq v\)), обозначающие, что между вершинами \(u\) и \(v\) есть ребро. Данные ребра должны образовывать дерево, удовлетворяющее ограничениям Омкара.

Примечание

Вывод первого набора входных данных соответствует следующему дереву:

Для первого ограничения, простой путь между \(1\) и \(3\) — это \(1, 3\), и не содержит \(2\). Простой путь между \(3\) и \(5\) — это \(3, 5\), который не содержит \(4\). Простой путь между \(5\) и \(7\)\(5, 3, 1, 2, 7\), который не содержит \(6\). Простой путь между \(6\) и \(4\)\(6, 7, 2, 1, 3, 4\), который не содержит \(5\). Таким образом, это дерево удовлетворяет всем ограничениям.

Вывод второго примера соответствует следующему дереву:

D. Омкар и смысл жизни

жадные алгоритмы интерактив Конструктив *1800

Оказывается, смысл жизни — это перестановка \(p_1, p_2, \ldots, p_n\) целых чисел \(1, 2, \ldots, n\) (\(2 \leq n \leq 100\)). Омкар, создавший все живое, знает эту перестановку и позволит вам выяснить ее с помощью некоторых запросов.

Запрос состоит из массива \(a_1, a_2, \ldots, a_n\) целых чисел от \(1\) до \(n\). \(a\) — это не обязательно перестановка. Омкар сначала вычислит попарную сумму \(a\) и \(p\), то есть вычислит массив \(s\), где \(s_j = p_j + a_j\) для всех \(j = 1, 2, \ldots, n\). Затем он найдет наименьший индекс \(k\) такой, что \(s_k\) встречается в \(s\) более одного раза, и скажет вам \(k\). Если такого индекса \(k\) не существует, то он скажем вам \(0\).

Можно выполнить не более \(2n\) запросов. Выясните смысл жизни \(p\).

Протокол взаимодействия

Начните взаимодействие с чтения одного целого числа \(n\) (\(2 \leq n \leq 100\))  — длины перестановки \(p\).

Затем вы можете делать запросы. Запрос состоит из одной строки «\(? \enspace a_1 \enspace a_2 \enspace \ldots \enspace a_n\)» (\(1 \leq a_j \leq n\)).

Ответом на каждый запрос будет одно целое число \(k\), как описано выше (\(0 \leq k \leq n\)).

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Чтобы вывести ответ, выведите одну строку «\(! \enspace p_1 \enspace p_2 \enspace \ldots \enspace p_n\)» затем завершите работу.

Вы можете сделать не более \(2n\) запросов. Вывод ответа не считается запросом.

Формат взлома

Для взлома сначала выведите строку, содержащую \(n\) (\(2 \leq n \leq 100\)), затем выведите другую строку, содержащую скрытую перестановку \(p_1, p_2, \ldots, p_n\) чисел от \(1\) до \(n\).

Примечание

В примере скрытая перестановка \(p\) равна \([3, 2, 1, 5, 4]\). Было сделано три запроса.

Первый запрос — \(a = [4, 4, 2, 3, 2]\). Это дает \(s = [3 + 4, 2 + 4, 1 + 2, 5 + 3, 4 + 2] = [7, 6, 3, 8, 6]\). \(6\) — единственное число, которое встречается более одного раза, и впервые оно появляется на индексе \(2\), что делает ответ на запрос \(2\).

Второй запрос — \(a = [3, 5, 1, 5, 5]\). Это дает \(s = [3 + 3, 2 + 5, 1 + 1, 5 + 5, 4 + 5] = [6, 7, 2, 10, 9]\). Здесь нет чисел, которые встречаются более одного раза, поэтому ответ на запрос — \(0\).

Третий запрос — \(a = [5, 2, 4, 3, 1]\). Это дает \(s = [3 + 5, 2 + 2, 1 + 4, 5 + 3, 4 + 1] = [8, 4, 5, 8, 5]\). \(5\) и \(8\) встречаются здесь более одного раза. \(5\) впервые появляется на индексе \(3\), а \(8\) впервые появляется на индексе \(1\), причем \(1 < 3\), что делает ответ на запрос \(1\).

Обратите внимание, что пример приведен только для того, чтобы показать, как работает взаимодействие; не гарантируется, что приведенные выше запросы представляют собой правильную стратегию, с помощью которой можно определить ответ.

E. Момент цветения

графы Деревья жадные алгоритмы Конструктив Паросочетания поиск в глубину и подобное *2200

Она делает все возможное, чтобы безупречно провести последний обряд человека и сохранить баланс инь и ян в мире.

Ху Тао, будучи маленькой проказницей, попыталась напугать вас этой задачей с графом! Вам дан связный неориентированный граф из \(n\) вершин с \(m\) ребрами. У вас также есть \(q\) запросов. Каждый запрос состоит из двух вершин \(a\) и \(b\).

Изначально все ребра графа имеют вес \(0\). Для каждого запроса вы должны выбрать простой путь, начинающийся из \(a\) и заканчивающийся в \(b\). Затем к весу каждого ребра вдоль этого пути добавляется \(1\). Определите, возможно ли, чтобы после обработки всех \(q\) запросов все ребра в этом графе имели четный вес. Если да, то выведите выбор путей для каждого запроса.

Если это невозможно, определите наименьшее количество дополнительных запросов, которые можно добавить, чтобы это стало возможным. Можно показать, что при заданных ограничениях это число не превысит \(10^{18}\).

Простой путь определяется как любой путь, который не посещает вершину более одного раза.

Считается, что ребро имеет четный вес, если его значение кратно \(2\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 3 \cdot 10^5\), \(n-1 \leq m \leq \min{\left(\frac{n(n-1)}{2}, 3 \cdot 10^5\right)}\)).

Каждая из следующих \(m\) строк содержит два целых числа \(x\) и \(y\) (\(1 \leq x, y \leq n\), \(x\neq y\)), указывающих на неориентированное ребро между вершинами \(x\) и \(y\). Входные данные не будут содержать петель или дублирующихся ребер, и полученный граф будет связным.

Следующая строка содержит одно целое число \(q\) (\(1 \leq q \leq 3 \cdot 10^5\)).

Каждая из следующих \(q\) строк содержит два целых числа \(a\) и \(b\) (\(1 \leq a, b \leq n, a \neq b\)), описание каждого запроса.

Гарантируется, что \(nq \leq 3 \cdot 10^5\).

Выходные данные

Если можно заставить все веса ребер быть четными, выведите «YES» в первой строке, а затем \(2q\) строк, указывающих выбор пути для каждого запроса в том же порядке, в котором задаются запросы. Для каждого запроса первая строка должна содержать одно целое число \(x\): количество узлов в выбранном пути. Следующая строка должна содержать \(x\) целых чисел \(p_i\), указывающих выбранный путь (\(p_1 = a, p_x = b\) и все числа должны лежать между \(1\) и \(n\)). Этот путь не может содержать одну вершину более одного раза и должен быть корректным простым путем в графе.

Если невозможно заставить все веса ребер быть четными, выведите «NO» в первой строке и минимальное количество запросов, которые нужно добавить, во второй строке.

Примечание

Вот как выглядят запросы для первого примера (красный цвет соответствует 1-му запросу, синий — 2-му, а зеленый — 3-му):

Обратите внимание, что каждое ребро в графе входит либо в \(0\), либо в \(2\) цветных пути.

Граф во втором примере выглядит следующим образом:

Не существует такого назначения путей, которое заставит все ребра иметь четные веса при заданных запросах. Чтобы получить набор запросов, удовлетворяющих условию, нужно добавить по крайней мере \(2\) новых запроса.

F. Защитник детских мечт

битмаски Конструктив разделяй и властвуй *2500

Даже если вы просто оставите их в покое, они разлетятся на куски сами по себе. Значит, кто-то должен их защищать, верно?

Вы снова играете с Тьюсером в городе Лиюэ. Водя эксцентричного малыша по городу, вы заметили кое-что интересное в его структуре.

Лиюэ можно представить в виде направленного графа, содержащего \(n\) вершин. Вершины пронумерованы от \(1\) до \(n\). Ребро из вершины \(a\) в вершину \(b\) существует тогда и только тогда, когда \(a < b\).

Путь между вершинами \(a\) и \(b\) определяется как последовательность ребер таких, можно начать путь в \(a\), пройти по всем этим ребрам в соответствующем неправлении, и закончить в \(b\). Длина пути равна количеству ребер. Радужный путь длины \(x\) определяется как такой путь в графе, что среди этих \(x\) ребер существует по крайней мере 2 разных цвета.

Любимое число Тьюсера — \(k\). Вам интересно следующее: если вам нужно обозначить каждое ребро цветом, то какое минимальное количество цветов понадобится для того, чтобы все пути длины \(k\) или больше были радужными?

Тьюсер хочет удивить своего старшего брата картой Лиюэ. Он также хочет узнать допустимую раскраску ребер, которая использует минимальное количество цветов. Пожалуйста, помогите ему решить эту задачу!

Входные данные

Единственная строка ввода содержит два целых числа \(n\) и \(k\) (\(2 \leq k < n \leq 1000\)).

Выходные данные

В первой строке выведите \(c\), минимальное количество цветов, необходимое для выполнения вышеуказанных требований.

Во второй строке выведите допустимую раскраску ребер в виде массива из \(\frac{n(n-1)}{2}\) целых чисел от \(1\) до \(c\). В ней должно присутствовать ровно \(c\) различных цветов. Выведите ребра в порядке возрастания сначала по начальному вершине, затем по второй вершине.

Например, если \(n=4\), то цвета ребер нужно выводить в таком порядке: (\(1\), \(2\)), (\(1\), \(3\)), (\(1\), \(4\)), (\(2\), \(3\)), (\(2\), \(4\)), (\(3\), \(4\))

Примечание

Соответствующая конструкция для первого примера выглядит следующим образом:

Невозможно удовлетворить ограничениям, используя менее \(2\) цветов.

Соответствующая конструкция для второго примера выглядит следующим образом:

Можно показать, что не существует конструкции, использующей менее \(3\) цветов.

I. Омкар и мозаика

Комбинаторика Конструктив математика *3500

Омкар создает мозаику, используя цветные квадратные плитки, которые он размещает в сетке \(n \times n\). Когда мозаика будет завершена, в каждой ячейке сетки будет либо глазурная, либо синоперная плитка. Однако в настоящее время он разместил плитки только в некоторых ячейках.

Завершенная мозаика будет шедевром тогда и только тогда, когда каждая плитка примыкает ровно к \(2\) плиткам того же цвета (\(2\) плитки являются примыкающими, если у них есть общая сторона.) Омкар хочет заполнить оставшиеся плитки так, чтобы мозаика стала шедевром. Теперь ему интересно, правда ли, что есть ровно один способ это сделать, и если да, то какой?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 2000\)).

Затем следуют \(n\) строк с \(n\) символами в каждой строке. \(i\)-й символ в \(j\)-й строке соответствует ячейке в строке \(i\) и столбце \(j\) сетки, и будет \(S\), если Омкар поместил в эту ячейку синоперную плитку, \(G\), если Омкар поместил глазурную плитку, и \(.\), если она пуста.

Выходные данные

В первой строке выведите UNIQUE, если существует уникальный способ получить шедевр, NONE, если Омкар не может его создать, и MULTIPLE, если существует более одного способа. Все буквы должны быть заглавными.

Если вы выведете UNIQUE, то после этого выведите \(n\) дополнительных строк с \(n\) символами в каждой строке, такими, что \(i\)-й символ в \(j^{\text{th}}\) строке будет \(S\), если плитка в строке \(i\) и столбце \(j\) шедевра — синоперная, и \(G\), если она глазурная.

Примечание

Для первого примера Омкар может получить шедевры

SSSS

SGGS

SGGS

SSSS

и

SSGG

SSGG

GGSS

GGSS.

Для второго примера можно доказать, что Омкар не может сложить плитки, чтобы создать шедевр.

Для третьего примера можно доказать, что данный шедевр — единственный шедевр, который Омкар может создать, сложив плитки.

Для четвертого примера очевидно, что единственная плитка в любой мозаике, которую создает Омкар, не может быть соседней с двумя плитками одного цвета, так как она будет соседней с \(0\) плитками.

B. Хемосе в магазинах

Конструктив математика снм сортировки *1200

Хемосе вместе со своими друзьями Самезом, Ахмедом, Ашрафом, Саваном и О_Е ходил по магазинам в Германии. Как вы знаете, Хемосе и его друзья решают задачи, поэтому они очень умны. Поэтому они отправятся во все магазины со скидками в Германии.

У Хемосе есть массив из \(n\) целых чисел. Он хочет, чтобы Самез отсортировал массив в неубывающем порядке. Поскольку для Самеза это было бы слишком простой задачей, Хемосе разрешает Самезу использовать только следующую операцию:

  • Выберите индексы \(i\) и \(j\) такие, что \(1 \le i, j \le n\), и \(\lvert i - j \rvert \geq x\). Затем поменяйте местами элементы \(a_i\) и \(a_j\).

Подскажите, пожалуйста, существует ли способ отсортировать массив в неубывающем порядке, используя вышеописанную операцию некоторое конечное число раз (возможно, \(0\))?

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) \((1 \leq t \leq 10^5)\). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(x\) \((1 \leq x \leq n \leq 10^5)\).

Вторая строка каждого наборов входных данных содержит \(n\) целых чисел \(a_1, a_2, ..., a_n\) \((1 \leq a_i \leq 10^9)\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных необходимо вывести одну строку.

Если Самез может отсортировать массив в неубывающем порядке с помощью операции, описанной выше, выведите «YES» (без кавычек). В противном случае выведите «NO» (без кавычек).

Вы можете вывести каждую букву «YES» и «NO» в любом регистре (верхнем или нижнем).

Примечание

В первом наборов входных данных вы не можете выполнить никаких операций.

Во втором наборе входных данных массив уже отсортирован.

В третьем наборе входных данных вы можете выполнить следующие операции:

  • \([5,1,2,3,4]\), \(swap(a_1,a_3)\)
  • \([2,1,5,3,4]\), \(swap(a_2,a_5)\)
  • \([2,4,5,3,1]\), \(swap(a_2,a_4)\)
  • \([2,3,5,4,1]\), \(swap(a_1,a_5)\)
  • \([1,3,5,4,2]\), \(swap(a_2,a_5)\)
  • \([1,2,5,4,3]\), \(swap(a_3,a_5)\)
  • \([1,2,3,4,5]\)

(Здесь под \(swap(a_i, a_j)\) имеется в виду обмен местами элементов на позициях \(i\), \(j\)).

C. Бакри и разделение

битмаски графы Деревья дп Конструктив поиск в глубину и подобное *1700

Бакри столкнулся с задачей, но поскольку ему лень ее решать, он просит вашей помощи.

Вам дано дерево на \(n\) вершинах, \(i\)-й вершине присвоено значение \(a_i\) для каждого \(i\) от \(1\) до \(n\). Напомним, что дерево на \(n\) вершинах — это связный граф с \(n-1\) ребрами.

Вы хотите удалить из дерева не менее \(1\), но не более \(k-1\) ребер так, чтобы выполнялось следующее условие:

  • Для каждой компоненты связности вычислим побитовое исключающего ИЛИ значений вершин в ней. Тогда, эти значения должны быть одинаковыми для всех компонент связности.

Возможно ли выполнить это условие?

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) \((1 \leq t \leq 5 \cdot 10^4)\). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) \((2 \leq k \leq n \leq 10^5)\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, ..., a_n\) \((1 \leq a_i \leq 10^9)\).

В \(i\)-й из следующих \(n-1\) строк содержится два целых числа \(u_i\) и \(v_i\) (\(1 \leq u_i, v_i \leq n\), \(u_i\neq v_i\)), что означает, что между вершинами \(u_i\) и \(v_i\) есть ребро.

Гарантируется, что данный граф является деревом.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных вы должны вывести одну строку. Если вы можете удалить ребра в соответствии с условиями, написанными выше, выведите «YES» (без кавычек). В противном случае выведите «NO» (без кавычек).

Вы можете вывести каждую букву «YES» и «NO» в любом регистре (верхнем или нижнем).

Примечание

Можно показать, что условие недостижимо для первого, третьего и пятого наборов входных данных.

Во втором наборе входных данных можно просто удалить все ребра. Останется \(5\) компонент связности, каждая из которых содержит только одну вершину со значением \(3\), поэтому побитовое ИЛИ для каждой из них будет \(3\).

В четвертом случае дерево изображено ниже: .

Вы можете удалить ребро \((4,5)\).

Побитовое ИЛИ первой компоненты будет равен \(a_1 \oplus a_2 \oplus a_3 \oplus a_4 = 1 \oplus 6 \oplus 4 \oplus 1 = 2\) (где \(\oplus\) обозначает побитовое ИЛИ).

Побитовое ИЛИ второй компоненты будет равно \(a_5 = 2\).

F1. Алиса и перекрашивание 1

жадные алгоритмы Конструктив *2600

Разница между версиями заключается в стоимости операций. Решение для одной версии не будет работать для другой!

У Алисы есть таблица размером \(n \times m\), изначально все ее клетки окрашены в белый цвет. Клетка на пересечении \(i\)-й строки и \(j\)-го столбца обозначается как \((i, j)\). Алиса может выполнять следующие операции:

  • Выбрать любой подпрямоугольник, содержащий клетку \((1, 1)\), и инвертировать цвета всех его клеток. (Инвертировать означает изменить цвет клетки с белого на черный или с черного на белый).

    Эта операция стоит \(1\) монету.

  • Выбрать любой подпрямоугольник, содержащий клетку \((n, 1)\), и инвертировать цвета всех его клеток.

    Эта операция стоит \(2\) монеты.

  • Выбрать любой подпрямоугольник, содержащий клетку \((1, m)\), и инвертировать цвета всех его клеток.

    Эта операция стоит \(4\) монеты.

  • Выбрать любой подпрямоугольник, содержащий клетку \((n, m)\), и инвертировать цвета всех его клеток.

    Эта операция стоит \(3\) монеты.

Напомним, что подпрямоугольник — это все клетки \((x, y)\) с \(x_1 \le x \le x_2\), \(y_1 \le y \le y_2\) для некоторых \(1 \le x_1 \le x_2 \le n\), \(1 \le y_1 \le y_2 \le m\).

Алиса хочет получить свою любимую раскраску с помощью этих операций. Какое наименьшее количество монет ей придется потратить? Можно показать, что всегда можно преобразовать исходную таблицу в любую другую.

Входные данные

Первая строка ввода содержит \(2\) целых числа \(n, m\) (\(1 \le n, m \le 500\)) — размеры таблицы.

В \(i\)-й из следующих \(n\) строк содержится строка \(s_i\) длины \(m\), состоящая из букв W и B. \(j\)-й символ строки \(s_i\) - W, если клетка \((i, j)\) окрашена в белый цвет в любимой раскраске Алисы, и B, если она окрашена в черный цвет.

Выходные данные

Выведите наименьшее количество монет, которое Алиса должна будет потратить, чтобы получить свою любимую раскраску.

Примечание

В первом примере оптимально просто применить четвертую операцию один раз к прямоугольнику, содержащему клетки \((2, 2), (2, 3), (3, 2), (3, 3)\). Это обойдется в \(3\) монеты.

F2. Алиса и перекрашивание 2

жадные алгоритмы Конструктив Паросочетания Потоки *2800

Разница между версиями заключается в стоимости операций. Решение для одной версии не будет работать для другой!

У Алисы есть таблица размером \(n \times m\), изначально все ее клетки окрашены в белый цвет. Клетка на пересечении \(i\)-й строки и \(j\)-го столбца обозначается как \((i, j)\). Алиса может выполнять следующие операции:

  • Выбрать любой подпрямоугольник, содержащий клетку \((1, 1)\), и инвертировать цвета всех его клеток. (Инвертировать означает изменить цвет клетки с белого на черный или с черного на белый).

    Эта операция стоит \(1\) монету.

  • Выбрать любой подпрямоугольник, содержащий клетку \((n, 1)\), и инвертировать цвета всех его клеток.

    Эта операция стоит \(3\) монеты.

  • Выбрать любой подпрямоугольник, содержащий клетку \((1, m)\), и инвертировать цвета всех его клеток.

    Эта операция стоит \(4\) монеты.

  • Выбрать любой подпрямоугольник, содержащий клетку \((n, m)\), и инвертировать цвета всех его клеток.

    Эта операция стоит \(2\) монеты.

Напомним, что подпрямоугольник — это все клетки \((x, y)\) с \(x_1 \le x \le x_2\), \(y_1 \le y \le y_2\) для некоторых \(1 \le x_1 \le x_2 \le n\), \(1 \le y_1 \le y_2 \le m\).

Алиса хочет получить свою любимую раскраску с помощью этих операций. Какое наименьшее количество монет ей придется потратить? Можно показать, что всегда можно преобразовать исходную таблицу в любую другую.

Входные данные

Первая строка ввода содержит \(2\) целых числа \(n, m\) (\(1 \le n, m \le 500\)) — размеры таблицы.

В \(i\)-й из следующих \(n\) строк содержится строка \(s_i\) длины \(m\), состоящая из букв W и B. \(j\)-й символ строки \(s_i\) - W, если клетка \((i, j)\) окрашена в белый цвет в любимой раскраске Алисы, и B, если она окрашена в черный цвет.

Выходные данные

Выведите наименьшее количество монет, которое Алиса должна будет потратить, чтобы получить свою любимую раскраску.

Примечание

В первом примере оптимально просто применить четвертую операцию один раз к прямоугольнику, содержащему клетки \((2, 2), (2, 3), (3, 2), (3, 3)\). Это обойдется в \(2\) монеты.

G. Меняя скобки

дп жадные алгоритмы Конструктив Структуры данных *2200

Задана последовательность из круглых и квадратных скобок. Над этой последовательностью можно произвести следующие операции:

  1. поменять вид скобки с открывающей на закрывающую и наоборот, не меняя форму скобки: то есть можно поменять '(' на ')' и ')' на '('; можно поменять '[' на ']' и ']' на '['. Эта операция стоит \(0\) бурлей.
  2. взять любую квадратную скобку и поменять на круглую, не меняя направление скобки: то есть можно поменять '[' на '(', но не '(' на '['; можно поменять ']' на ')', но не ')' на ']'. Эта операция стоит \(1\) бурль.

Операции можно производить в любом количестве в любом порядке.

Задана строка \(s\) длины \(n\) и \(q\) запросов вида «l r», где \(1 \le l < r \le n\). Для каждой подстроки \(s[l \dots r]\) найдите минимальную цену, которую нужно заплатить, чтобы сделать её правильной скобочной последовательностью. Гарантируется, что подстрока \(s[l \dots r]\) имеет чётную длину.

Запросы надо обрабатывать независимо, то есть изменения в строке, сделанные для ответа на запрос \(i\), не влияют на запросы \(j\) (\(j > i\)). Иными словами, при обработке запроса подстрока \(s[l \dots r]\) берётся из первоначальной заданной строки \(s\).

Правильная скобочная последовательность — это последовательность, которую можно построить по следующим правилам:

  • пустая последовательность является правильной скобочной;
  • если «s» — правильная скобочная последовательность, то последовательности «(s)» и «[s]» являются правильными скобочными;
  • если «s» и «t» – правильные скобочные последовательности, то последовательность «st» (соединение этих последовательностей) является правильной скобочной.

Например, последовательности «», «(()[])», «[()()]()» и «(())()» являются правильными скобочными, в то время как «(», «[(])» и «)))» — нет.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Первая строка каждого набора данных содержит непустую строку \(s\), содержащую только круглые ('(' и ')') и квадратные ('[' и ']') скобки. Длина строки не превышает \(10^6\). Строка содержит не менее \(2\) символов.

Вторая строка содержит одно целое число \(q\) (\(1 \le q \le 2 \cdot 10^5\)) — количество запросов.

Далее идут \(q\) строк, содержащих два целых числа \(l\) и \(r\) (\(1 \le l < r \le n\), где \(n\) — длина строки \(s\)). Гарантируется, что подстрока \(s[l \dots r]\) имеет чётную длину.

Гарантируется, что сумма длин всех строк, заданных во всех наборах входных данных, не превышает \(10^6\). Сумма всех \(q\), заданных во всех наборах входных данных, не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого запроса выведите в отдельной строке целое число \(x\) (\(x \ge 0\)) — минимальную цену, которую нужно заплатить, чтобы данная подстрока стала правильной скобочной последовательностью.

Примечание

Рассмотрим первый набор входных данных. Первый запрос описывает всю строку, её можно привести к следующей правильной скобочной последовательности: «([()])()[[]]». Форма скобок не изменена, поэтому стоимость изменения равна \(0\).

Второй запрос описывает подстроку «)[)()]». Её можно привести к последовательности «(()())», стоимость равна \(2\).

Третий запрос описывает подстроку «))[)». Её можно привести к последовательности «()()», стоимость равна \(1\).

Во втором наборе входных данных все подстроки состоят только из круглых скобок. Можно показать, что любую последовательность чётной длины из круглых скобок можно привести к правильной за \(0\) бурлей.

В третьем наборе входных данных единственный запрос описывает строку «[]», которая уже является правильной скобочной последовательностью.

D. Количество предателей

графы дп Конструктив поиск в глубину и подобное снм *1700

Теофанис начал играть в новую онлайн-игру под названием «Among them». Однако, он постоянно играет с игроками из Кипра, и всех их зовут «Андреас» (самое распространенное имя на Кипре).

В каждой игре Теофанис играет с \(n\) другими игроками. Так как у них всех одинаковые имена, то они были пронумерованы от \(1\) по \(n\).

Игроки написали \(m\) комментариев в чате. Каждый комментарий имеет вид «\(i\) \(j\) \(c\)», где \(i\) и \(j\) — это два различных целых числа, а \(c\) — строка (\(1 \le i, j \le n\); \(i \neq j\); \(c\) — это либо imposter (предатель), либо crewmate (член экипажа)). Данный комментарий означает, что игрок \(i\) говорит, что роль игрока \(j\) — это \(c\).

Предатели всегда врут, а члены экипажа всегда говорят правду.

Помогите Теофанису подсчитать максимальное возможное количество предателей среди всех кипрских игроков, или определить, что комментарии противоречат друг другу (ознакомьтесь с заметками для лучшего понимания).

Заметим, что у каждого игрока ровно одна роль: либо imposter (предатель), либо crewmate (член экипажа).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

В первой строке каждого набора заданы два целых числа \(n\) и \(m\) (\(1 \le n \le 2 \cdot 10^5\); \(0 \le m \le 5 \cdot 10^5\)) — количество игроков, исключая Теофаниса, и количество комментариев.

В каждой из следующих \(m\) строк задан очередной комментарий игроков в форме «\(i\) \(j\) \(c\)», где \(i\) и \(j\) — это два различных целых числа, а \(c\) — строка (\(1 \le i, j \le n\); \(i \neq j\); \(c\) — это либо imposter, либо crewmate).

Для одной пары \((i, j)\) может быть более одного комментария.

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\) и сумма \(m\) не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможное количество предателей. Если комментарии противоречат друг другу, выведите \(-1\).

Примечание

В первом наборе входных данных, предателями могут быть Андреас \(2\) и Андреас \(3\).

Во втором наборе, предателями могут быть Андреас \(1\), Андреас \(2\), Андреас \(3\) и Андреас \(5\).

В третьем наборе, комментарии противоречат друг другу. Это потому что игрок \(1\) называет игрока \(2\) предателем, в то время как игрок \(2\) называет игрока \(1\) членом экипажа. Если игрок \(1\) — член экипажа, то он должен говорить правду, а значит игрок \(2\) — предатель. Но если игрок \(2\) — предатель, то он лжет, и, следовательно, игрок \(1\) не может быть членом экипажа. Противоречие.

F. Идеальная ферма

Конструктив математика *2400

Теофанис решил посетить ферму своего дяди. На ферме есть \(s\) животных и \(n\) загонов для животных. Для удобства, загоны построены в один ряд.

Дядя рассказал Теофанису, что ферму можно назвать удачной, если возможно распределить всех животных по всем загонам так, чтобы не было пустых загонов и существовал последовательный отрезок загонов, в которых в сумме ровно \(k\) животных.

Более того, ферму можно считать идеальной, если она является удачной для любого распределения без пустых загонов.

Ни Теофанис ни его дядя не знают, является ли их ферма идеальной. Поможете ли вы им узнать это?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных.

В первой и единственной строке каждого набора задано три целых числа \(s\), \(n\) и \(k\) (\(1 \le s, n, k \le 10^{18}\); \(n \le s\)).

Выходные данные

Для каждого набора входных данных, выведите YES (в любом регистре), если ферма является идеальной, или NO (в любом регистре) в противном случае.

Примечание

Для первого и второго наборов входных данных, единственная возможная комбинация — это \([1]\), а потому всегда будет отрезок с \(1\) животными, но не всегда — \(2\) животными.

A. Weights

жадные алгоритмы Конструктив *2600

You are given an array \(A\) of length \(N\) weights of masses \(A_1\), \(A_2\)...\(A_N\). No two weights have the same mass. You can put every weight on one side of the balance (left or right). You don't have to put weights in order \(A_1\),...,\(A_N\). There is also a string \(S\) consisting of characters "L" and "R", meaning that after putting the \(i-th\) weight (not \(A_i\), but \(i-th\) weight of your choice) left or right side of the balance should be heavier. Find the order of putting the weights on the balance such that rules of string \(S\) are satisfied. 

Input

The first line contains one integer \(N\) (\(1 \leq N \leq 2*10^5\)) - the length of the array \(A\) The second line contains \(N\) distinct integers: \(A_1\), \(A_2\),...,\(A_N\) (\(1 \leq A_i \leq 10^9\)) - the weights given The third line contains string \(S\) of length \(N\) consisting only of letters "L" and "R" - string determining which side of the balance should be heavier after putting the \(i-th\) weight of your choice

Output

The output contains \(N\) lines. In every line, you should print one integer and one letter - integer representing the weight you are putting on the balance in that move and the letter representing the side of the balance where you are putting the weight. If there is no solution, print \(-1\).

Note

Explanation for the test case: 

after the 1st weight: 3 L (left side is heavier)

after the 2nd weight: 2 R (left side is heavier)

after the 3rd weight: 8 R (right side is heavier)

after the 4th weight: 13 L (left side is heavier)

after the 5th weight: 7 L (left side is heavier)

So, the rules given by string \(S\) are fulfilled and our order of putting the weights is correct.

B. Священный массив

Конструктив реализация *1100

Блэку был ниспослан Священный массив \(a\) состоящий из \(n\) (\(1 \le n \le 2000\)) целых чисел. У каждого элемента \(a\) есть первоначальное состояние. Однако после ругательств в свою сторону, массив разозлился и начал бесконтрольно трансформироваться.

Трансформация состоит из бесконечного количества шагов. На \(i\)-м шаге массив \(a\) меняется следующим образом: в каждой позиции \(j\), \(a_j\) становится равным количеству вхождений значения \(a_j\) в \(a\) перед началом этого шага.

Для большего понимания, ниже приведен пример превращения:

Первоначальный массив:\(2\) \(1\) \(1\) \(4\) \(3\) \(1\) \(2\)
После \(1\)-го шага:\(2\) \(3\) \(3\) \(1\) \(1\) \(3\) \(2\)
После \(2\)-го шага:\(2\) \(3\) \(3\) \(2\) \(2\) \(3\) \(2\)
После \(3\)-го шага:\(4\) \(3\) \(3\) \(4\) \(4\) \(3\) \(4\)
......

В первоначальном массиве были две \(2\), три \(1\), одна \(4\) и одна \(3\), а потому после первого шага, каждый элемент стал равен его количеству вхождений: все двойки стали равны \(2\), все единицы стали равны \(3\), четверка стала равна \(1\) и тройка стала равна \(1\).

Количество шагов в трансформации бесконечно.

Вам нужно обработать \(q\) запросов: в каждом запросе Блэка интересует значение \(a_x\) после \(k\)-го шага трансформации.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следуют сами наборы входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 2000\)) — размер массива \(a\).

Во второй строке каждого набора заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — первоначальные значения массива \(a\).

В третьей строке каждого набора задано одно целое число \(q\) (\(1 \le q \le 100\,000\)) — количество запросов.

В следующих \(q\) строках заданы сами запросы — по одному в строке. В \(i\)-й строке заданы два целых числа \(x_i\) и \(k_i\) (\(1 \le x_i \le n\); \(0 \le k_i \le 10^9\)) означающих, что Блэка интересует значение \(a_{x_i}\) после \(k_i\)-го шага трансформации. \(k_i = 0\) означает, что Блэка интересуют значения первоначального массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2000\), а сумма \(q\) по всем наборам не превосходит \(100\,000\).

Выходные данные

Для каждого набора входных данных выведите \(q\) ответов. \(i\)-м ответом будет являться значение \(a_{x_i}\) после \(k_i\)-го шага трансформации. Можно показать, что ответ на каждый запрос единственен.

Примечание

Первый набор входных данных рассмотрен в условии задачи. Можно видеть, что:

  1. \(k_1 = 0\) (начальный массив): \(a_3 = 1\);
  2. \(k_2 = 1\) (после \(1\)-го шага): \(a_1 = 2\);
  3. \(k_3 = 2\) (после \(2\)-го шага): \(a_2 = 3\);
  4. \(k_4 = 1\) (после \(1\)-го шага): \(a_6 = 3\).

Для второго набора входных данных,

Первоначальный массив:\(1\) \(1\)
После \(1\)-го шага:\(2\) \(2\)
После \(2\)-го шага:\(2\) \(2\)
......

Можно видеть, что:

  1. \(k_1 = 0\) (начальный массив): \(a_1 = 1\);
  2. \(k_2 = 1000000000\): \(a_2 = 2\);

A. Раз-делимое замешательство

Конструктив математика теория чисел *1300

У YouKn0wWho есть последовательность целых чисел \(a_1, a_2, \ldots, a_n\). Он будет выполнять следующую операцию, пока последовательность не станет пустой: выберет индекс \(i\) такой, что \(1 \le i \le |a|\) и \(a_i\) не делится на \((i + 1)\), и удалит этот элемент из последовательности. Здесь \(|a|\) — длина последовательности \(a\) в момент выполнения операции. Обратите внимание, что последовательность \(a\) меняется, и следующая операция выполняется над этой измененной последовательностью.

Например, если \(a=[3,5,4,5]\), то можно выбрать \(i = 2\), так как \(a_2 = 5\) не делится на \(i+1 = 3\). После этой операции последовательность будет \([3,4,5]\).

Помогите YouKn0wWho определить, можно ли удалить всю последовательность с помощью вышеупомянутой операции.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10\,000\))  — количество наборов входных данных

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если возможно удалить всю последовательность с помощью вышеупомянутой операции, выведите «NO» (без кавычек) в противном случае. Вы можете выводить каждую букву в любом регистре (верхнем или нижнем).

Примечание

В первом наборе входных данных YouKn0wWho может выполнить следующие операции (удаляемые элементы подчеркнуты): \([1, \underline{2}, 3] \rightarrow [\underline{1}, 3] \rightarrow [\underline{3}] \rightarrow [\,].\)

Во втором наборе входных данных невозможно удалить всю последовательность, так как \(i\) может быть только \(1\), а когда \(i=1\), \(a_1 = 2\) делится на \(i + 1 = 2\).

B. Мягкая модульная медиана

Конструктив математика теория чисел *1600

У YouKn0wWho есть два четных целых числа \(x\) и \(y\). Помогите ему найти целое число \(n\) такое, что \(1 \le n \le 2 \cdot 10^{18}\) и \(n \bmod x = y \bmod n\). Здесь \(a \bmod b\) обозначает остаток от \(a\) после деления на \(b\). Если таких целых чисел несколько, выведите любое. Можно показать, что такое целое число всегда существует при заданных ограничениях.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\))  — количество наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит два целых числа \(x\) и \(y\) (\(2 \le x, y \le 10^9\), оба числа четные).

Выходные данные

Для каждого набора входных данных выведите одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^{18}\)), которое удовлетворяет условию, указанному в утверждении. Если таких целых чисел несколько, выведите любое. Можно показать, что такое целое число всегда существует при заданных ограничениях.

Примечание

В первом наборе входных данных \(4 \bmod 4 = 8 \bmod 4 = 0\).

Во втором наборе входных данных \(10 \bmod 4 = 2 \bmod 10 = 2\).

В третьем наборе входных данных \(420 \bmod 420 = 420 \bmod 420 = 0\).

D. Деревонумерация

битмаски Деревья жадные алгоритмы игры Конструктив поиск в глубину и подобное реализация *2100

Eikooc и Sushi играют в игру.

Игра проводится на дереве из \(n\) вершин, пронумерованных от \(1\) до \(n\). Напомним, что дерево с \(n\) вершинами это неориентированный связный граф с \(n-1\) ребрами.

Игроки поочередно перемещают фишку по дереву. Eikooc делает первый ход, помещая фишку на любую вершину по своему выбору. Sushi делает следующий ход, затем Eikooc, затем Sushi, и так далее. В каждый ход после первого, игрок должен переместить фишку в какую-то вершину \(u\) такую, что:

  • Между вершинами \(u\) и \(v\) (на которой фишка находится данный момент), есть ребро
  • \(u\) не была посещена ранее
  • \(u \oplus v \leq min(u, v)\)

Здесь \(x \oplus y\) обозначает операцию побитового исключающего ИЛИ чисел \(x\) и \(y\).

Оба игрока играют оптимально. Игрок, который не может сделать ход, проигрывает.

Ниже приведены примеры, демонстрирующие правила игры.

Предположим, Eikooc начинает игру, помещая фишку в вершину \(4\). Затем Sushi перемещает фишку в вершину \(6\), которая не была посещена и является соседней к \(4\). Также \(6 \oplus 4 = 2 \leq min(6, 4)\). На следующем ходу Eikooc перемещает фишку в вершину \(5\), которая не была посещена и является соседней к \(6\). Также, \(5 \oplus 6 = 3 \leq min(5, 6)\). У Sushi больше нет ходов для игры, поэтому она проигрывает.
Предположим, Eikooc начинает игру, помещая фишку в вершинул \(3\). Sushi перемещает фишку в вершину \(2\), которая не была посещена и является соседней к \(3\). Также \(3 \oplus 2 = 1 \leq min(3, 2)\). Eikooc не может переместить фишку в вершину \(6\), так как \(6 \oplus 2 = 4 \nleq min(6, 2)\). Поскольку у Eikooc нет ходов для игры, она проигрывает.

Перед началом игры Eikooc решает тайком перенумеровать вершины дерева в свою пользу. Формально, перенумерация — это перестановка \(p\) длины \(n\) (последовательность из \(n\) целых чисел, где каждое целое число от \(1\) до \(n\) встречается ровно один раз), где \(p_i\) обозначает новый номер вершины \(i\).

Она хочет максимизировать количество вершин, которые она может выбрать в первый ход, для которых она сможет гарантировать себе победу. Помогите Eikooc найти любую перенумерацию, которая поможет ей в этом.

Входные данные

Первая строка содержит одно целое число \(t~(1 \le t \le 10^5)\)  — количество наборов входных данных. Описание каждого набора входных данных выглядит следующим образом.

Первая строка каждого набора входных данных содержит целое число \(n~(1 \le n \le 2 \cdot 10^5)\)  — количество вершин в дереве.

Следующие \(n-1\) строки содержат по два целых числа \(u\) и \(v\) \((1 \le u, v \le n; u \neq v)\)  — обозначающие ребро между вершинами \(u\) и \(v\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите любую подходящую перестановку  — перестановку длины \(n\), которая максимизирует количество вершин, которые Eikooc может выбрать в первый ход и иметь выиграшную стратегию. Если таких перестановок несколько, вы можете вывести любую из них.

Примечание

В первом наборе входных данных у Eikooc есть только одна вершина. У Sushi не будет ходов после того, как Eikooc выберет эту вершину, и Eikooc выиграет.

Во втором наборе входных данных \(1 \oplus 2 = 3 \nleq min(1, 2)\). Следовательно, после того, как Eikooc выберет любую из вершин, у Sushi не останется ходов, и Eikooc выиграет. И \(\{1, 2\}\), и \(\{2, 1\}\) являются допустимыми перенумерациями.

D. Красно-синяя матрица

Конструктив Перебор реализация сортировки *2400

Дана матрица, состоящая из \(n\) строк и \(m\) столбцов. В \(j\)-й ячейке \(i\)-й строки записано целое число \(a_{ij}\).

Сначала необходимо раскрасить каждую строку матрицы либо в красный, либо в синий цвет, так, чтобы хотя бы одна строка была красная и хотя бы одна строка была синяя.

Затем необходимо выбрать целое число \(k\) (\(1 \le k < m\)) и разрезать матрицу таким образом, что первые \(k\) столбцов становятся отдельной матрицей (левой матрицей) и последние \(m-k\) столбцов становятся отдельной матрицей (правой матрицей).

Раскраска и разрез называются идеальными, если выполняются два условия:

  • в каждой красной ячейке левой матрицы записано число большее, чем в каждой синей ячейке левой матрицы;
  • в каждой синей ячейке правой матрицы записано число большее, чем в каждой красной ячейке правой матрицы.

Найдите любые идеальные раскраску и разрез или скажите, что таких нет.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Затем следуют описания \(t\) наборов входных данных.

В первой строке каждого набора входных данных записаны два целых числа \(n\) и \(m\) (\(2 \le n, m \le 5 \cdot 10^5\); \(n \cdot m \le 10^6\)) — количество строк и столбцов в матрице, соответственно.

В \(i\)-й из следующих \(n\) строк записаны по \(m\) целых чисел \(a_{i1}, a_{i2}, \dots, a_{im}\) (\(1 \le a_{ij} \le 10^6\)).

Сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

На каждый набор входных данных выведите ответ. Если нет идеальных раскраски и разреза, то выведите «NO».

Иначе, сначала выведите «YES». Затем строку, состоящую из \(n\) символов: \(i\)-й символ должен быть 'R', если \(i\)-я строка покрашена в красный и 'B', если в синий. В строке должен быть хотя бы один символ 'R' и хотя бы один символ 'B'. Наконец, выведите целое число \(k\) (\(1 \le k < m\)) — количество столбцов, которые отрезаются слева.

Примечание

Раскраска и разрез для первого набора входных данных:

A. Найдите массив

Конструктив математика *800

Для данного числа \(n\), найдите любой массив \(a_1, a_2, \ldots, a_n\) целых чисел, такой, что выполняются все условия ниже:

  • \(1 \le a_i \le 10^9\) для каждого \(i\) от \(1\) до \(n\).

  • \(a_1 < a_2 < \ldots <a_n\)

  • Для каждого \(i\) от \(2\) до \(n\), \(a_i\) не делится на \(a_{i-1}\).

Можно показать, что при ограничениях задачи такой массив всегда существует.

Входные данные

Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 100\)). Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 1000\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^4\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) — найденный массив. Если существует несколько массивов, удовлетворяющих всем условиям, выведите любой из них.

Примечание

В первом наборе входных данных массив \([1]\) удовлетворяет всем условиям.

Во втором наборе входных данных массив \([2, 3]\) удовлетворяет всем условиям, так как \(2<3\) и \(3\) не делится на \(2\).

В третьем наборе входных данных массив \([111, 1111, 11111, 111111, 1111111, 11111111, 111111111]\) удовлетворяет всем условиям, так как он возрастающий и \(a_i\) не делится на \(a_{i-1}\) для любых \(i\) от \(2\) до \(7\).

B. Постройте перестановку

жадные алгоритмы Конструктив *1200

Вам даны три целых числа \(n, a, b\). Определите, существует ли перестановка \(p_1, p_2, \ldots, p_n\) чисел от \(1\) до \(n\), такая, что:

  • Существует ровно \(a\) индексов \(i\) с \(2 \le i \le n-1\) таких, что \(p_{i-1} < p_i > p_{i+1}\) (другими словами, существует ровно \(a\) локальных максимумов).

  • Существует ровно \(b\) индексов \(i\) с \(2 \le i \le n-1\) таких, что \(p_{i-1} > p_i < p_{i+1}\) (другими словами, существует ровно \(b\) локальных минимумов).

Если такие перестановки существуют, найдите любую такую перестановку.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит три целых числа \(n\), \(a\) и \(b\) (\(2 \leq n \leq 10^5\), \(0 \leq a,b \leq n\)).

Сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных, если не существует перестановки с необходимыми свойствами, выведите \(-1\).

В противном случае выведите найденную перестановку во второй строке. Если таких перестановок несколько, вы можете вывести любую из них.

Примечание

В первом наборе входных данных одним из примеров такой перестановки является \([1, 3, 2, 4]\). В ней \(p_1 < p_2 > p_3\), причем \(2\) — единственный такой индекс, а \(p_2> p_3 < p_4\), причем \(3\) — единственный такой индекс.

Можно показать, что для третьего набора входных данных такой перестановки не существует.

B. Скидки

жадные алгоритмы Конструктив сортировки *1700

Как-то раз Поликарп по пути домой заглянул в супермаркет. Оказалось, что в супермаркете проходит акция по продаже табуреток. Условия акции таковы: если в корзинке с купленными товарами есть хотя бы одна табуретка, то на минимальный по стоимости товар из корзинки предоставляется скидка 50% (то есть он становится дешевле в два раза). Если товаров минимальной стоимости несколько, скидка предоставляется только на один из них!

У Поликарпа есть k корзинок, и он хочет скупить все табуретки и карандаши из супермаркета. Помогите ему распределить табуретки и карандаши по корзинкам так, чтобы суммарная стоимость товаров (с учетом скидок) была как можно меньше.

Поликарп обязан использовать все k корзинок для покупки товаров, ни одна корзинка не должна остаться пустой. В каждой корзинке может быть произвольное количество табуреток и/или карандашей.

Входные данные

В первой строке входных данных записано два целых числа n и k (1 ≤ k ≤ n ≤ 103) — количество товаров в супермаркете и количество корзинок у Поликарпа, соответственно. В следующих n строках заданы описания товаров в виде «ci ti» (без кавычек), где ci (1 ≤ ci ≤ 109) — целое число, обозначающее стоимость i-го товара, ti (1 ≤ ti ≤ 2) — целое число, обозначающее тип i-го товара (1 — табуретка, 2 — карандаш). Числа в строках разделяются одним пробелом.

Выходные данные

В первую строку выведите единственное вещественное число с ровно одним знаком после запятой — минимальную суммарную стоимость товаров с учетом скидок.

В следующих k строках выведите описания товаров в корзинках. В i-й строке выведите описание i-й корзинки в формате «t b1 b2 ... bt» (без кавычек), где t — количество товаров в i-й корзинке, а последовательность b1, b2, ..., bt (1 ≤ bj ≤ n) — номера товаров, которые следует положить в эту корзинку в оптимальном распределении. Все номера товаров во всех корзинках должны быть попарно различны, каждый товар должен находиться ровно в одной корзинке. Товары в корзинках и сами корзинки можно выводить в любом порядке. Товары нумеруются от 1 до n в том порядке, в котором они заданы во входных данных.

Если существует несколько оптимальных распределений, разрешается вывести любое.

Примечание

В первом примере в первую корзинку следует положить 1-ый и 2-ой товар, а во вторую — 3-ий товар. Тогда в каждой корзинке будет табуретка, и на товар минимальной стоимости предоставляется скидка 50%. Суммарная стоимость товаров составит: 2·0.5 + (3 + 3·0.5) = 1 + 4.5 = 5.5.

F. Маштали: космическая одиссея

графы Конструктив поиск в глубину и подобное *3000

Ли планировал приблизиться к сердцу Маштали, чтобы осуществить свой коварный план (о котором мы пока не знаем), поэтому он решил украсить граф Маштали. Но он установил для себя несколько правил. А еще он был слишком занят своими планами, что у него не было времени на такие мелкие дела, поэтому он обратился за помощью к вам.

Граф Маштали — это неориентированный взвешенный граф с \(n\) вершинами и \(m\) ребрами с весами, равными либо \(1\), либо \(2\). Ли хочет направить ребра графа Маштали так, чтобы он был как можно красивее.

Ли считает, что красота направленного взвешенного графа равна количеству его вершин Одиссея. Вершина \(v\) является вершиной Оддисея, если \(|d^+(v) - d^-(v)| = 1\), где \(d^+(v)\) — сумма весов исходящих из \(v\) ребер, а \(d^-(v)\) — сумма весов входящих в \(v\) ребер.

Найдите наибольшую возможную красоту графа, которую Ли может получить, направляя ребра графа Маштали. Кроме того, найдите любой способ ее достижения.

Обратите внимание, что вы должны ориентировать каждое из ребер.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) \((1 \le n \le 10^5;\; 1 \le m \le 10^5)\) — количество вершин и ребер в графе.

В \(i\)-й строке следующих \(m\) строк содержится три целых числа \(u_i\), \(v_i\) и \(w_i\) \(( 1 \le u_i , v_i \le n;\; u_i \neq v_i;\; \bf{w_i \in \{1, 2\}} )\) — концы \(i\)-го ребра и его вес.

Обратите внимание, что граф не обязательно должен быть связным, и он может содержать мультиребра.

Выходные данные

В первой строке выведите одно целое число — максимальную красоту графа, которую может достичь Ли.

Во второй строке выведите строку длины \(m\), состоящую из \(1\) и \(2\) — направления ребер.

Если вы решили направить \(i\)-е ребро из вершины \(u_i\) в вершину \(v_i\), то \(i\)-й символ строки должен быть \(1\). В противном случае он должен быть равен \(2\).

Примечание

Объяснение к первому примеру:

вершины \(2\) и \(5\) — вершины Одиссея.

Объяснение для третьего примера:

вершины \(1\) и \(6\) — вершины Одиссея.

A. Сделай чётное

Конструктив математика *800

У Поликарпа есть целое число \(n\), которое не содержит цифр '0'. С этим числом он может делать следующую операцию несколько (возможно, ноль) раз:

  • Взять префикс длины \(l\) (иными словами, левые \(l\) цифр) числа \(n\) и развернуть его. Так, самая левая цифра меняется местами с \(l\)-й цифрой слева, вторая цифра слева меняется местами с (\(l-1\))-й слева и т.д. Например, если \(n=123456789\) и \(l=5\), то новое значение \(n\) будет равно \(543216789\).

Обратите внимание, что для разных операций значения \(l\) могут быть разными. Допустимо, что число \(l\) равно длине числа \(n\) — в таком случае происходит переворот всего числа \(n\).

Поликарп любит чётные числа. Поэтому он хочет сделать так, чтобы его число было чётным. При этом, Поликарп очень нетерпелив. Он хочет, чтобы было сделано как можно меньшее количество операций.

Помогите Поликарпу. Определите минимальное количество операций, которые ему необходимо совершить с числом \(n\), чтобы сделать его чётным, или определите, что это невозможно.

Вам необходимо ответить на \(t\) независимых наборов входных данных.

Входные данные

В первой строке дано число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В следующих \(t\) строках записано по одному целому числу \(n\) (\(1 \le n < 10^9\)). Гарантируется, что данное число не содержит в своей записи цифр '0'.

Выходные данные

Выведите \(t\) строк. В каждой строке выведите одно целое число — ответ на соответствующий набор входных данных. Если сделать число чётным невозможно, выведите -1.

Примечание

В первом наборе входных данных \(n=3876\), что уже является чётным числом. Поликарпу ничего не нужно делать, поэтому ответ \(0\).

Во втором наборе входных данных \(n=387\). Поликарпу необходимо сделать \(2\) операции:

  1. Выбрать \(l=2\) и развернуть префикс \(\underline{38}7\). Число \(n\) станет равным \(837\). Это число нечётное.
  2. Выбрать \(l=3\) и развернуть префикс \(\underline{837}\). Число \(n\) станет равным \(738\). Это число чётное.

Можно показать, что \(2\) — это минимально возможное количество операций, которое необходимо сделать Поликарпу для того, чтобы его число стало чётным.

В третьем наборе входных данных \(n=4489\). Здесь Поликарп может развернуть всё число целиком (выбрать префикс длины \(l=4\)). Оно станет равным \(9844\) и это чётное число.

В четвёртом тестовом примере \(n=3\). Как бы Поликарп ни старался, но сделать чётное число у него не получится.

B. Составление команд: программисты и математики

Бинарный поиск Конструктив математика *800

Совсем скоро состоится Всеберляндский командный контест по программированию. В этом году к участию допускаются команды из четырёх человек.

В Берляндском государственном университете учится \(a\) программистов и \(b\) математиков. Сколько максимум команд возможно составить, если:

  • в каждой команде должно быть ровно \(4\) человека,
  • команды из \(4\) математиков или \(4\) программистов вряд ли хорошо выступят, поэтому принято решение не составлять такие команды.

Таким образом, в каждой команде должен быть хотя бы один программист и хотя бы один математик.

Выведите искомое максимальное количество команд. Каждый человек может быть членом не более чем одной команды.

Входные данные

В первой строке записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания \(t\) наборов, по одному в строке. Каждый набор задается двумя целыми числами \(a\) и \(b\) (\(0 \le a,b \le 10^9\)).

Выходные данные

Выведите \(t\) строк. Каждая строка должна содержать ответ на соответствующий набор входных данных — искомое максимальное количество команд.

Примечание

В первом наборе входных данных примера максимум две команды могут быть составлены. Один из способов это сделать — две команды из \(2\) программистов и \(2\) математиков.

Во втором наборе входных данных примера можно составить только одну команду (\(3\) программиста и \(1\) математик в команде).

C. Поликарп восстанавливает перестановку

Конструктив *1000

Поликарп выписал на доску массив \(p\) длины \(n\), который являлся перестановкой чисел от \(1\) до \(n\). Иными словами, в массиве \(p\) каждое число от \(1\) до \(n\) встречалось ровно один раз.

Также он подготовил массив-ответ \(a\), который изначально пустой (то есть имеет длину \(0\)).

После этого он сделал ровно \(n\) действий. Каждое действие выглядело так:

  • Посмотрим на самый левый и самый правый элементы \(p\), выберем минимальный из них.
  • Если выбранный элемент крайний левый в \(p\), то допишем его слева в массив \(a\); в противном случае, если выбранный элемент крайний правый в \(p\), то допишем его справа в массив \(a\).
  • Выбранный элемент удаляется из \(p\).

Отметим, что на последнем действии массив \(p\) имеет длину \(1\) и его минимальный элемент является одновременно и крайним левым и крайним правым. В этом случае Поликарп может сам выбрать, какую роль играет минимальный элемент. Иными словами, этот элемент можно дописать в \(a\) как слева, так и справа (на усмотрение Поликарпа).

Рассмотрим пример. Пусть \(n=4\), \(p=[3, 1, 4, 2]\). Изначально \(a=[]\). Тогда:

  • Во время первого действия минимум справа (это значение \(2\)), то есть после этого действия \(p=[3,1,4]\), а массив \(a=[2]\) (в него мы дописали значение \(2\) справа).
  • Во время второго действия минимум слева (это значение \(3\)), то есть после этого действия \(p=[1,4]\), а массив \(a=[3,2]\) (в него мы дописали значение \(3\) слева).
  • Во время третьего действия минимум слева (это значение \(1\)), то есть после этого действия \(p=[4]\), а массив \(a=[1,3,2]\) (в него мы дописали значение \(1\) слева).
  • Во время четвертого действия минимум и слева и справа (это значение \(4\)). Допустим Поликарп выбрал правый вариант. После этого действия \(p=[]\), а массив \(a=[1,3,2,4]\) (в него мы дописали значение \(4\) справа).

Таким образом, возможным значением массива \(a\) после \(n\) действий может быть такое \(a=[1,3,2,4]\).

Вам задано итоговое значение массива \(a\). Найдите любое возможное начальное значение массива \(p\), которое может привести к заданному массиву \(a\), или определите, что решения не существует.

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Каждый набор входных данных состоит из двух строк. В первой из них записано целое число \(n\) (\(1 \le n \le 2\cdot10^5\)) — длина массива \(a\). Во второй записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — элементы массива \(a\). Все элементы массива \(a\) — различные числа.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных в тесте не превосходит \(2\cdot10^5\).

Выходные данные

Выведите \(t\) строк, каждая из строк должна содержать ответ на соответствующий набор входных данных: числа \(p_1, p_2, \dots, p_n\) — любое из возможных начальных значений массива \(p\), которое приведёт к заданному во входных данных значению массива \(a\). Все элементы \(p\) — различные целые числа от \(1\) до \(n\). Таким образом, если существует несколько решений, то выведите любое. Если решения не существует, то в строку выведите -1.

Примечание

Первый набор входных данных примера разобран в основной части условия. Возможны и другие правильные ответы на этот набор входных данных.

Во втором наборе входных данных примера \(n=1\). Таким образом, существует единственная перестановка, которая может быть ответом: \(p=[1]\). В самом деле, это ответ на этот набор входных данных.

В третьем наборе входных данных примера какую бы вы перестановку не взяли в качестве \(p\), после применения \(n\) действий результат будет отличен от \(a=[1, 3, 5, 4, 2]\).

D. Расстановка весов ребер корневого дерева

Деревья Конструктив *1500

Вам задано корневое дерево из \(n\) вершин. Вершины пронумерованы от \(1\) до \(n\). Корнем может быть любая из вершин.

Дерево — это связный неориентированный граф без циклов. Корневое дерево — дерево с выделенной вершиной, которую называют корнем.

Дерево задано массивом предков \(b\), содержащим \(n\) чисeл: \(b_i\) — предок вершины с номером \(i\). Предком вершины \(u\) называется такая вершина, которая является следующей вершиной на простом пути от \(u\) к корню. Например, на простом пути из \(5\) в \(3\) (корень), следующая вершина будет \(1\), таким образом, предком вершины \(5\) является вершина \(1\).

У корня предка нет, для него в качестве \(b_i\) используется значение \(i\) (таким образом, корень — единственная вершина, для которой \(b_i=i\)).

Например, если \(n=5\) и \(b=[3, 1, 3, 3, 1]\), то дерево выглядит следующим образом.

Пример корневого дерева для \(n=5\), корень дерева — вершина \(3\).

Задан массив \(p\) — перестановка вершин дерева. Если это возможно, расставьте целочисленные положительные веса на всех ребрах данного дерева так, чтобы вершины, отсортированные по увеличению расстояния от корня, образовывали заданную перестановку \(p\).

Иными словами, по заданной перестановке вершин \(p\) необходимо подобрать такие положительные веса рёбер, чтобы выполнялось неравенство \(dist[p_i]<dist[p_{i+1}]\) для всех \(i\) от \(1\) до \(n-1\), где \(dist[u]\) — сумма весов рёбер на пути от корня до \(u\). В частности, \(dist[u]=0\), если вершина \(u\) является корнем дерева.

Например, пусть \(p=[3, 1, 2, 5, 4]\). В этом случае следующие веса ребер удовлетворяют этой перестановке:

  • ребро (\(3, 4\)) имеет вес \(102\);
  • ребро (\(3, 1\)) имеет вес \(1\);
  • ребро (\(1, 2\)) имеет вес \(10\);
  • ребро (\(1, 5\)) имеет вес \(100\).

В этом случае массив расстояний от корня имеет вид: \(dist=[1,11,0,102,101]\). Если вершины отсортировать по возрастанию расстояний, то получится заданная перестановка \(p\).

Выведите искомые веса рёбер или определите, что подходящего способа назначить веса не существует. Если решений несколько, то выведите любое из них.

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Каждый набор входных данных состоит из трех строк.

В первой из них записано целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество вершин в дереве.

Во второй записано \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le n\)). Гарантируется, что массив \(b\) кодирует некоторое корневое дерево.

В третьей строке задана перестановка \(p\): \(n\) различных целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных в тесте не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ на отдельной строке.

Если решение существует, то выведите массив из \(n\) целых чисел \(w_1, w_2, \dots, w_n\), где \(w_i\) — вес ребра, которое ведёт из \(b_i\) в \(i\). Для корня такого ребра не существует, поэтому используйте значение \(w_i=0\). Для всех остальных вершин значения \(w_i\) должны удовлетворять неравенству \(1 \le w_i \le 10^9\). Среди значений \(w_i\) могут быть равные числа, но все суммы весов ребер от корня до вершин должны быть различны и удовлетворять заданной перестановке.

Если решений несколько, выведите любое из них.

Если решения не существует, то выведите -1.

Примечание

Первый набор входных данных примера разобран в основной части условия.

Во втором наборе входных данных примера невозможно расставить целочисленные положительные веса так, чтобы получить заданную перестановку вершин.

A. Расстояние

Конструктив Перебор *800

Давайте обозначим манхэттенское расстояние между двумя точками \(p_1\) (с координатами \((x_1, y_1)\)) и \(p_2\) (с координатами \((x_2, y_2)\)) как \(d(p_1, p_2) = |x_1 - x_2| + |y_1 - y_2|\). Например, расстояние между двумя точками с координатами \((1, 3)\) и \((4, 2)\) равно \(|1 - 4| + |3 - 2| = 4\).

Вам заданы две точки \(A\) и \(B\). Точка \(A\) имеет координаты \((0, 0)\), точка \(B\) имеет координаты \((x, y)\).

Ваша цель — найти точку \(C\) такую, что:

  • обе координаты \(C\) являются неотрицательными целыми числами;
  • \(d(A, C) = \dfrac{d(A, B)}{2}\) (без округления);
  • \(d(B, C) = \dfrac{d(A, B)}{2}\) (без округления).

Найдите любую точку \(C\), которая удовлетворяет этим условиям, или сообщите, что такой точки не существует.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 3000\)) — количество наборов входных данных.

Каждый набор состоит из одной строки, содержащей два целых числа \(x\) и \(y\) (\(0 \le x, y \le 50\)) — координаты точки \(B\).

Выходные данные

Для каждого набора входных данных выведите ответ в отдельной строке следующим образом:

  • если невозможно найти точку \(C\), удовлетворяющую всем условиям, выведите «-1 -1» (без кавычек);
  • в противном случае выведите два неотрицательных целых числа, не превышающих \(10^6\) — координаты точки \(C\), удовлетворяющей всем условиям. Если существует несколько ответов, выведите любой из них. Можно показать, что если такая точка существует, то можно найти точку с координатами, не превышающими \(10^6\), которая удовлетворяет условиям.
Примечание

Пояснения к некоторым примерам:

  • В первом примере точка \(B\) имеет координаты \((49, 3)\). Если точка \(C\) имеет координаты \((23, 3)\), то расстояние от \(A\) до \(B\) равно \(|49 - 0| + |3 - 0| = 52\), расстояние от \(A\) до \(C\) равно \(|23 - 0| + |3 - 0| = 26\), и расстояние от \(B\) до \(C\) равно \(|23 - 49| + |3 - 3| = 26\).
  • Во втором примере точка \(B\) имеет координаты \((2, 50)\). Если точка \(C\) имеет координаты \((1, 25)\), то расстояние от \(A\) до \(B\) равно \(|2 - 0| + |50 - 0| = 52\), расстояние от \(A\) до \(C\) равно \(|1 - 0| + |25 - 0| = 26\), и расстояние от \(B\) до \(C\) равно \(|1 - 2| + |25 - 50| = 26\).
  • В третьем и четвертом примерах можно показать, что ни одна точка с целочисленными координатами не соответствует условиям.
  • В пятом примере точка \(B\) имеет координаты \((42, 0)\). Если точка \(C\) имеет координаты \((21, 0)\), то расстояние от \(A\) до \(B\) равно \(|42 - 0| + |0 - 0| = 42\), расстояние от \(A\) до \(C\) равно \(|21 - 0| + |0 - 0| = 21\), и расстояние от \(B\) до \(C\) равно \(|21 - 42| + |0 - 0| = 21\).

B. Особая перестановка

жадные алгоритмы Конструктив *900

Перестановка длины \(n\) — это массив \(p=[p_1,p_2,\dots, p_n]\), в котором каждое целое число от \(1\) до \(n\) (включительно) встречается ровно один раз. Например, \(p=[4, 2, 6, 5, 3, 1]\) — перестановка \(6\).

Вам даны три целых числа \(n\), \(a\) и \(b\), где \(n\) — четное число. Выведите любую перестановку длины \(n\), в которой минимум среди всех элементов левой половины равен \(a\), и максимум среди всех элементов правой половины равен \(b\). Выведите -1, если такой перестановки не существует.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Следующие \(t\) строк содержат сами наборы входных данных.

Каждый набор входных данных — это три числа \(n\), \(a\), \(b\) (\(2 \le n \le 100\); \(1 \le a,b \le n\); \(a \ne b\)), где \(n\) — четное число (т.е. \(n \bmod 2 = 0\)).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую любую подходящую перестановку, или -1, если такой перестановки не существует. Если есть несколько перестановок, подходящих под условия, вы можете вывести любую из них.

G. Массив максимальной суммы

жадные алгоритмы Комбинаторика Конструктив сортировки *2500

Вам задан массив \(c = [c_1, c_2, \dots, c_m]\). Массив \(a = [a_1, a_2, \dots, a_n]\) строится по нему следующим образом: он состоит из чисел \(1, 2, \dots, m\), и для каждого \(i \in [1,m]\), \(i\) встречается в \(a\) строго \(c_i\) раз. Таким образом, количество элементов в \(a\) равно \(\sum\limits_{i=1}^{m} c_i\).

Определим для данного массива \(a\) значение \(f(a)\) как \(\)f(a) = \sum_{\substack{1 \le i < j \le n\\ a_i = a_j}}{j - i}.\(\)

Другими словами, \(f(a)\) — это суммарное расстояние между всеми парами одинаковых чисел.

Ваша задача — определить наибольшее возможное значение \(f(a)\) и количество массивов с данным значением \(f(a)\). Два массива считаются различными, если элементы в какой-то позиции различаются.

Входные данные

В первой строке задано одно целое число \(m\) (\(1 \le m \le 5 \cdot 10^5\)) — размер массива \(c\).

Во второй строке заданы \(m\) целых чисел \(c_1, c_2, \dots, c_m\) (\(1 \le c_i \le 10^6\)) — массив \(c\).

Выходные данные

Выведите два целых числа — максимально возможное \(f(a)\) и количество массивов \(a\) с данным значением. Так как оба ответа могут быть очень большими, выведите их по модулю \(10^9 + 7\).

Примечание

В первом примере, все возможные массивы \(a\) — это перестановки \([1, 2, 3, 4, 5, 6]\). Так как у каждого такого \(a\) значение \(f(a) = 0\), то максимально возможное \(f(a) = 0\) и количество таких массивов равно \(6! = 720\).

Во втором примере, единственный возможный массив состоит из \(10^6\) единиц и его \(f(a) = \sum\limits_{1 \le i < j \le 10^6}{j - i} = 166\,666\,666\,666\,500\,000\) и \(166\,666\,666\,666\,500\,000 \bmod{10^9 + 7} = 499\,833\,345\).

A. Divan и магазин

жадные алгоритмы Конструктив Перебор *800

Бизнесмен по имени Divan обожает шоколад! Сегодня он пришёл в магазин, чтобы закупиться им. Как и любой другой бизнесмен, Divan знает цену деньгам, поэтому он считает, что покупать слишком дорогие плитки шоколада не имеет никакого смысла, несмотря на всю его любовь к шоколаду. С другой же стороны, слишком дешёвый шоколад обычно слишком невкусный и вообще непонятно, зачем его покупать, ведь кроме отвращения он ничего не вызывает.

В магазине, в который он пришёл, есть \(n\) различных плиток шоколада, \(i\)-я из которых имеет цену \(a_i\) долларов. Слишком дорогой плиткой шоколада Divan считает такую, что её цена строго выше \(r\) долларов. Слишком дешёвой плиткой шоколада он считает такую, что её цена строго меньше, чем \(l\) долларов. Диван не будет покупать плитку, если она слишком дешёвая или слишком дорогая.

Кроме того, даже если по отдельности плитки шоколада не столь уж и дорогие, Divan, конечно, не собирается всю свою прибыль тратить на них, поэтому он ограничивает свои траты на шоколад \(k\) долларами.

Ваша задача заключается в том, чтобы определить, какое максимальное число плиток шоколада Divan сможет сегодня купить.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют наборы входных данных.

В первой строке каждого набора заданы четыре целых числа \(n\), \(l\), \(r\) и \(k\) (\(1 \le n \le 100\), \(1 \le l \le r \le 10^9\), \(1 \le k \le 10^9\)) — количество плиток в магазине, самая низкая и самая высокая цены, по которым Divan готов купить шоколадку, и бюджет, рассчитанный на покупку шоколада соответственно.

Во второй строке набора задана последовательность целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — цены плиток шоколада в магазине.

Выходные данные

Для каждого набора входных данных выведите единственное число — максимальное количество плиток шоколада, которые Divan сможет купить.

Примечание

В первом примере Divan сможет купить плитки шоколада под номерами \(1\) и \(3\) и потратит на это \(100\) долларов.

Во втором примере Divan сможет купить плитки шоколада под номерами \(3\) и \(4\) и потратит на это \(7\) долларов.

Во третьем примере Divan сможет купить плитки шоколада под номерами \(3\), \(4\) и \(5\), потратив на это \(12\) долларов.

В четвёртом примере Divan не может купить ни одной плитки шоколада, потому что каждую из них он считает либо слишком дешёвой, либо слишком дорогой.

В пятом примере Divan не может купить ни одной плитки шоколада, потому что первую плитку он считает слишком дешёвой, а на вторую и третью ему не хватит выделенного бюджета.

В шестом примере Divan сможет купить все плитки шоколада, которые есть в магазине.

B. Divan и новый проект

Конструктив сортировки *1000

Компания «Divan's Sofas» хочет построить на координатной прямой \(n + 1\) различное здание так, чтобы:

  • координата каждого здания являлась целым числом;
  • никакие два здания не стоят в одной точке.

Пусть \(x_i\) — координата \(i\)-го здания. Чтобы добраться из \(i\)-го здания в \(j\)-е, Divan будет тратить \(|x_i - x_j|\) минут, где \(|y|\) — модуль числа \(y\).

Все здания, которые Divan построит, будут пронумерованы от \(0\) до \(n\). Бизнесмен будет жить в здании номер \(0\) — новом главном офисе «Divan's Sofas». За первые десять лет после строительства Divan посетит \(i\)-е здание \(a_i\) раз, каждый раз тратя \(2 \cdot |x_0-x_i|\) минут на ходьбу.

Divan просит вас выбрать координаты всех \(n + 1\) зданий так, чтобы за следующие десять лет бизнесмен потратил как можно меньше времени на ходьбу.

Входные данные

Каждый тест содержит несколько наборов входных данных.

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных.

Первая строка каждого набора содержит целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество зданий, которое собирается построить «Divan's Sofas», не считая главного офиса компании.

Вторая строка содержит последовательность целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^6\)), где \(a_i\) — количество посещений \(i\)-го здания.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в первой строке выведите число \(T\) — минимальное количество времени, которое потратит Divan на ходьбу.

Во второй строке выведите последовательность \(x_0, x_1, \ldots, x_n\) из \(n + 1\) целых чисел, где \(x_i\) (\(-10^6 \le x_i \le 10^6\)) — выбранная координата для \(i\)-го здания. Можно показать, что в оптимальном ответе координаты всех зданий можно выбрать так, чтобы их абсолютная величина не превышала \(10^6\).

Если оптимальных ответов несколько, выведите любой из них.

Примечание

Рассмотрим первый пример.

В нём Divan посетит первое здание \(a_1 = 1\) раз, второе \(a_2 = 2\) раз и третье \(a_3 = 3\) раз. Тогда одно из выгодных расположений будет следующим:

  1. \(x_0 = 2\) — координата главного офиса;
  2. \(x_1 = 4\) — всего Divan потратит \(2 \cdot |x_0-x_1| \cdot a_1 = 2 \cdot |2-4| \cdot 1 = 4\) минуты на посещение первого здания;
  3. \(x_2 = 1\) — всего Divan потратит \(2 \cdot |x_0-x_2| \cdot a_2 = 2 \cdot |2-1| \cdot 2 = 4\) минуты на посещение второго здания;
  4. \(x_3 = 3\) — всего Divan потратит \(2 \cdot |x_0-x_3| \cdot a_3 = 2 \cdot |2-3| \cdot 3 = 6\) минут на посещение третьего здания.

Тогда в сумме Divan потратит \(4 + 4 + 6 = 14\) минут. Можно показать, что расположить здания так, чтобы бизнесмен потратил меньше времени, нельзя.

Также правильными ответами в первом примере могли быть \(x = [1, 3, 2, 0]\), \(x = [-5, -3, -6, -4]\) и другие.

C. Divan и битовые операции

битмаски дп Комбинаторика Конструктив математика *1500

Однажды Divan проанализировал последовательность \(a_1, a_2, \ldots, a_n\), состоящую из \(n\) целых неотрицательных чисел, следующим образом. Он рассмотрел все непустые подпоследовательности последовательности \(a\), вычислил побитовое исключающее ИЛИ её элементов, после чего просуммировал все полученные результаты, получив удобство последовательности \(a\).

Напомним, что последовательность \(c\) является подпоследовательностью последовательности \(d\), если \(c\) может быть получена из \(d\) путем удаления нескольких элементов (возможно, ни одного). Например, \([1, \, 2, \, 3, \, 4]\), \([2, \, 4]\) и \([2]\) являются подпоследовательностями \([1, \, 2, \, 3, \, 4]\), а \([4, \, 3]\) и \([0]\) не являются.

Divan очень гордился проведенным анализом, но теперь потерял и последовательность \(a\), и значение ее удобства! Однако Divan помнит значение побитового ИЛИ на \(m\) непрерывных подотрезках последовательности \(a\). Оказалось, что каждый элемент последовательности входит хотя бы в один из этих \(m\) отрезков.

Divan просит вас найти удобство последовательности \(a\), используя информацию, которую он помнит. Если возможны несколько значений удобства, выведите любое.

Так как ответ может быть большим, выведите его по модулю \(10^9 + 7\).

Входные данные

Каждый тест содержит несколько наборов входных данных.

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — количество чисел в последовательности и количество отрезков, значения побитового ИЛИ которых смог запомнить Divan, соответственно.

Далее идут \(m\) строк, в которых содержатся описания отрезков по одному в строке.

Каждый отрезок задаётся тремя целыми числами \(l\), \(r\) и \(x\) (\(1 \le l \le r \le n\), \(0 \le x \le 2^{30} - 1\)) — левая и правая граница отрезка, а также значение побитового ИЛИ элементов \(a_l, a_{l + 1}, \ldots, a_r\), соответственно.

Гарантируется, что каждый элемент последовательности входит хотя бы в один из данных отрезков. Гарантируется, что существует последовательность, которая удовлетворяет всем данным ограничениям.

Гарантируется, что сумма значений \(n\), а также сумма значений \(m\) по всем наборам входных данных не превосходят \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите любое возможное удобство последовательности \(a\) по модулю \(10^9 + 7\).

Примечание

В первом примере одной из последовательностей, которая подходит под ограничения, является \([0, 2]\). Рассмотрим все её непустые подпоследовательности:

  • \([0]\): побитовое исключающее ИЛИ равно \(0\);
  • \([2]\): побитовое исключающее ИЛИ равно \(2\);
  • \([0, 2]\): побитовое исключающее ИЛИ равно \(2\).

Суммируя полученные числа, получаем \(4\), что является ответом.

Во втором примере одной из последовательностей, которая подходит под ограничения, является \([0, \, 5, \, 5]\).

В третьем примере одной из последовательностей, которая подходит под ограничения, является \([5, \, 6, \, 7, \, 0, \, 2]\).

G. Максимизация пар соседей

Конструктив Паросочетания *3300

Вам задан массив \(a\), состоящий из \(n\) неотрицательных целых чисел.

Вам нужно заменить каждый \(0\) в \(a\) на целое число от \(1\) по \(n\). Числа \(0\) в различных позициях можно заменять на различные числа.

Назовем мерой полученного массива количество чисел \(k\) от \(1\) по \(n\), для которых выполняется следующее условие: существует пара соседних элементов, равных \(k\) (т. е. существует некоторый \(i \in [1, n - 1]\) такой, что \(a_i = a_{i + 1} = k\)). Если для какого-то числа \(k\) существует несколько пар соседей, то число все равно учитывается в мере только один раз.

Ваша задача — получить массив с максимально возможной мерой.

Входные данные

В первой строке задано одно целое число \(n\) (\(2 \le n \le 3 \cdot 10^5\)) — количество элементов в массиве.

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le \min(n, 600)\)) — сами элементы массива.

Выходные данные

Выведите \(n\) целых чисел, каждое из которых от \(1\) по \(n\), — массив с максимально возможной мерой.

Если существует несколько ответов, выведите любой из них.

H. Оленьи игры

Бинарный поиск графы Конструктив кратчайшие пути Потоки разделяй и властвуй Структуры данных *3000

На северном полюсе проживают \(n\) оленей, и все они соревнуются за первые позиции в таблице лидеров на главной странице CodeNorses (популярный сайт по спортивным оленьим играм). Довольно примечательно, что лидерство в таблице зависит от вклада и напрямую не связано с уровнем навыков в самих оленьих играх, однако для оленей таблица все равно крайне важна.

На текущий момент, у \(i\)-го оленя вклад равен \(a_i\). Вы хотите повлиять на таблицу лидеров с помощью нескольких операций. За одну операцию вы можете выбрать оленя и либо увеличить, либо уменьшить его вклад на \(1\). Отрицательные вклады разрешены.

При этом у вас есть \(m\) ограничений на получившиеся вклады. Каждое ограничение задается упорядоченной парой \((u, v)\), означающей, что в финальный вклад оленя \(u\) должен быть меньше или равен финального вклада оленя \(v\).

Ваша задача — сделать наименьшее количество операций так, чтобы все ограничения были выполнены.

Входные данные

В первой строке заданы два целых числа \(n\) и \(m\) (\(2\le n\le 1000\); \(1\le m\le 1000\)) — количество оленей и ограничений, соответственно.

Во второй строке заданы \(n\) целых чисел \(a_1,\ldots, a_n\) (\(1\le a_i\le 10^9\)), где \(a_i\) равно первоначальному вкладу \(i\)-го оленя.

В следующих \(m\) строках заданы сами ограничения.

В \(i\)-й строке заданы два целых числа \(u_i\) и \(v_i\) (\(1\le u_i, v_i\le n\); \(u_i\ne v_i\)) — номера оленей в \(i\)-м ограничении.

Выходные данные

Выведите \(n\) целых чисел \(b_1,\ldots, b_n\) (\(-10^{15}\le b_i\le 10^{15}\)), где \(b_i\) будет равно финальному вкладу \(i\)-го оленя после применения всех операций.

Если существует несколько решений с наименьшим количеством операций, выведите любое из них.

Можно доказать, что всегда существует оптимальное решение с \(|b_i|\le 10^{15}\) для всех \(i\).

A. Запрещённая подпоследовательность

жадные алгоритмы Конструктив сортировки Строки *800

Вам даны строки \(S\) и \(T\), состоящие из строчных символов латинского алфавита. Гарантируется, что \(T\) является перестановкой строки abc.

Найдите строку \(S'\), которая является лексикографически минимальной перестановкой \(S\), и при этом \(T\) не является подпоследовательностью \(S'\).

Строка \(a\) является перестановкой строки \(b\), если количество вхождений для всех различных символов одинаковое в обеих строках.

Строка \(a\) является подпоследовательностью строки \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно нуля или всех) символов.

Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\) — префикс \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке содержится единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержится строка \(S\) (\(1 \le |S| \le 100\)), состоящая из строчных символов латинского алфавита.

Во второй строке каждого набора входных данных содержится строка \(T\), которая является перестановкой строки abc. (Следовательно, \(|T| = 3\)).

Заметьте, что нет ограничения на сумму \(|S|\) по всем наборам входных данных.

Выходные данные

Для каждого набора входных данных выведите единственную строку \(S'\), которая является лексикографически минимальной перестановкой \(S\), и при этом \(T\) не является подпоследовательностью \(S'\).

Примечание

В первом наборе входных данных и aaaabbc, и aaaabcb лексикографически меньше, чем aaaacbb, но они содержат abc как подпоследовательность.

Во втором наборе входных данных abccc является лексикографически минимальной перестановкой cccba и не содержит acb как подпоследовательность.

В третьем наборе входных данных bcdis является лексикографически минимальной перестановкой dbsic и не содержит bac как подпоследовательность.

B. Задача про НОД

Конструктив математика Перебор теория чисел *900

Дано целое положительное число \(n\). Найдите три различных целых положительных числа \(a\), \(b\), \(c\) таких, что \(a + b + c = n\) и \(\operatorname{gcd}(a, b) = c\), где \(\operatorname{gcd}(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных содержит единственное целое число \(n\) (\(10 \le n \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите три различных целых положительных числа \(a\), \(b\), \(c\), удовлетворяющих требованиям. Если существует несколько решений, вы можете вывести любое. Мы можем показать, что ответ всегда существует.

Примечание

В первом наборе входных данных \(6 + 9 + 3 = 18\) и \(\operatorname{gcd}(6, 9) = 3\).

Во втором наборе входных данных \(21 + 39 + 3 = 63\) и \(\operatorname{gcd}(21, 39) = 3\).

В третьем наборе входных данных \(29 + 43 + 1 = 73\) и \(\operatorname{gcd}(29, 43) = 1\).

D1. Слишком много предателей (простая версия)

интерактив Конструктив реализация *1800

Это интерактивная задача. Единственным различием между лёгкой и сложной версиями является ограничение на количество запросов.

Есть \(n\) игроков, пронумерованных \(1\) до \(n\). Гарантируется, что \(n\) кратно \(3\).

Среди них присутствуют \(k\) предателей и \(n-k\) друзей. Количество предателей \(k\) вам не дано. Гарантируется, что \(\frac{n}{3} < k < \frac{2n}{3}\).

За один запрос вы можете выбрать три различных числа \(a\), \(b\), \(c\) (\(1 \le a, b, c \le n\)) и спросить: «Среди игроков с номерами \(a\), \(b\) и \(c\) больше предателей или друзей?» В качестве ответа на запрос вам будет дан \(0\), если предателей больше, чем друзей, и \(1\) в противном случае.

Найдите количество предателей \(k\) и номера игроков, которые являются предателями, сделав не более \(2n\) запросов.

Жюри будет отвечать адаптивно, что означает, что индексы предателей не обязательно зафиксированы заранее и могут меняться в зависимости от ваших запросов. Гарантируется, что существует хотя бы один набор предателей, который удовлетворяет ограничениям и ответам на ваши запросы в любой момент времени.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит единственное число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит единственное целое число \(n\) (\(6 \le n < 10^4\), \(n\) кратно \(3\)) — количество игроков.

Гарантируется, что сумма по \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^4\).

Протокол взаимодействия

Взаимодействие начинается со считывания \(n\).

Вам разрешено сделать не более \(2n\) запросов следующим образом:

«? a b c» (\(1 \le a, b, c \le n\), \(a\), \(b\) и \(c\) попарно различны).

После каждого запроса вы должны считать число \(r\), которое равно \(0\), если среди игроков с номерами \(a\), \(b\) и \(c\) больше предателей, чем друзей, и равно \(1\) в противном случае.

Ответ \(-1\) вместо \(0\) или \(1\) означает, что вы сделали некорректный запрос или превысили ограничение на количество запросов. Ваша программа должна немедленно завершиться, после прочтения ответа \(-1\) и вы получите вердикт Неправильный ответ. В противном случае вы можете получить любой вердикт, так как программа продолжит чтение из закрытого потока.

Когда вы нашли номера всех предателей, выведите единственную строку «! » (без кавычек), затем количество предателей \(k\), а затем \(k\) целых чисел, обозначающих номера предателей. Пожалуйста, обратите внимание, что вы должны вывести всю эту информацию на одной строке.

После вывода ответа ваша программа должна продолжить решать оставшиеся наборы входных данных или завершить работу, если все наборы входных данных были решены.

После вывода запросов не забудьте вывести символ перевода строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Вы не можете делать взломы по этой задаче.

Примечание

Пояснение к примеру взаимодействия (обратите внимание, что показанное в примере взаимодействие лишь иллюстрирует формат взаимодействия, и не демонстрирует решение задачи):

Первый набор входных данных:

Запрос «? 1 2 3» возвращает \(0\), так как среди игроков \(1\), \(2\) и \(3\) предателей больше, чем друзей.

Запрос «? 3 4 5» возвращает \(1\), так как среди игроков \(3\), \(4\) и \(5\) друзей больше, чем предателей.

Вывод «! 3 4 1 2» означает, что были найдены все предатели. Всего есть \(k = 3\) предателей. Игроки, являющиеся предателями, имеют номера \(4\), \(1\) и \(2\).

Второй набор входных данных:

Запрос «? 7 1 9» возвращает \(1\), так как среди игроков \(7\), \(1\) и \(9\) друзей больше, чем предателей.

Вывод «! 4 2 3 6 8» означает, что были найдены все предатели. Всего есть \(k = 4\) предателей. Игроки, являющиеся предателями, имеют номера \(2\), \(3\), \(6\) и \(8\).

D2. Слишком много предателей (сложная версия)

интерактив Конструктив математика реализация *2400

Это интерактивная задача. Единственным различием между лёгкой и сложной версиями является ограничение на количество запросов.

Есть \(n\) игроков, пронумерованных \(1\) до \(n\). Гарантируется, что \(n\) кратно \(3\).

Среди них присутствуют \(k\) предателей и \(n-k\) друзей. Количество предателей \(k\) вам не дано. Гарантируется, что \(\frac{n}{3} < k < \frac{2n}{3}\).

За один запрос вы можете выбрать три различных числа \(a\), \(b\), \(c\) (\(1 \le a, b, c \le n\)) и спросить: «Среди игроков с номерами \(a\), \(b\) и \(c\) больше предателей или друзей?» В качестве ответа на запрос вам будет дан \(0\), если предателей больше, чем друзей, и \(1\) в противном случае.

Найдите количество предателей \(k\) и номера игроков, которые являются предателями, сделав не более \(n+6\) запросов.

Жюри будет отвечать адаптивно, что означает, что индексы предателей не обязательно зафиксированы заранее и могут меняться в зависимости от ваших запросов. Гарантируется, что существует хотя бы один набор предателей, который удовлетворяет ограничениям и ответам на ваши запросы в любой момент времени.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит единственное число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит единственное целое число \(n\) (\(6 \le n < 10^4\), \(n\) кратно \(3\)) — количество игроков.

Гарантируется, что сумма по \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^4\).

Протокол взаимодействия

Взаимодействие начинается со считывания \(n\).

Вам разрешено сделать не более \(n+6\) запросов следующим образом:

«? a b c» (\(1 \le a, b, c \le n\), \(a\), \(b\) и \(c\) попарно различны).

После каждого запроса вы должны считать число \(r\), которое равно \(0\), если среди игроков с номерами \(a\), \(b\) и \(c\) больше предателей, чем друзей, и равно \(1\) в противном случае.

Ответ \(-1\) вместо \(0\) или \(1\) означает, что вы сделали некорректный запрос или превысили ограничение на количество запросов. Ваша программа должна немедленно завершиться, после прочтения ответа \(-1\) и вы получите вердикт Неправильный ответ. В противном случае вы можете получить любой вердикт, так как программа продолжит чтение из закрытого потока.

Когда вы нашли номера всех предателей, выведите единственную строку «! » (без кавычек), затем количество предателей \(k\), а затем \(k\) целых чисел, обозначающих номера предателей. Пожалуйста, обратите внимание, что вы должны вывести всю эту информацию на одной строке.

После вывода ответа ваша программа должна продолжить решать оставшиеся наборы входных данных или завершить работу, если все наборы входных данных были решены.

После вывода запросов не забудьте вывести символ перевода строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Вы не можете делать взломы по этой задаче.

Примечание

Пояснение к примеру взаимодействия (обратите внимание, что показанное в примере взаимодействие лишь иллюстрирует формат взаимодействия, и не демонстрирует решение задачи):

Первый набор входных данных:

Запрос «? 1 2 3» возвращает \(0\), так как среди игроков \(1\), \(2\) и \(3\) предателей больше, чем друзей.

Запрос «? 3 4 5» возвращает \(1\), так как среди игроков \(3\), \(4\) и \(5\) друзей больше, чем предателей.

Вывод «! 3 4 1 2» означает, что были найдены все предатели. Всего есть \(k = 3\) предателей. Игроки, являющиеся предателями, имеют номера \(4\), \(1\) и \(2\).

Второй набор входных данных:

Запрос «? 7 1 9» возвращает \(1\), так как среди игроков \(7\), \(1\) и \(9\) друзей больше, чем предателей.

Вывод «! 4 2 3 6 8» означает, что были найдены все предатели. Всего есть \(k = 4\) предателей. Игроки, являющиеся предателями, имеют номера \(2\), \(3\), \(6\) и \(8\).

E. Турне певцов

Конструктив математика *1700

\(n\) городов последовательно расположены на окружности. Города пронумерованы от \(1\) до \(n\) в порядке по часовой стрелке. В \(i\)-м городе живет певец с репертуаром на \(a_i\) минут для каждого \(i \in [1, n]\).

Каждый певец двигался по окружности в порядке по часовой стрелке и дал ровно один концерт в каждом из \(n\) городов, начиная с города, в котором он живет. Также в каждом городе \(i\)-го певца посетило вдохновение, и он придумал новую песню длительностью \(a_i\) минут. Эта песня была добавлена в его репертуар, чтобы он её исполнил в следующих городах.

Таким образом, \(i\)-й певец в \(i\)-м городе устроит концерт на \(a_i\) минут, в \((i + 1)\)-м городе он устроит концерт на \(2 \cdot a_i\) минут, ..., в \(((i + k) \bmod n + 1)\)-м городе — на \((k + 2) \cdot a_i\) минут, ..., в городе \(((i + n - 2) \bmod n + 1)\) — на \(n \cdot a_i\) минут.

Вам дан массив \(b\) из целых чисел, где \(b_i\) — суммарная длительность концертов в \(i\)-м городе. Восстановите любую подходящую последовательность положительных целых чисел \(a\) или скажите, что это невозможно.

Входные данные

В первой строке задано одно целое число \(t\) \((1 \le t \le 10^3\)) — количество наборов входных данных. Затем следуют сами наборы входных данных.

Каждый набор входных данных состоит из двух строк. В первой строке задано единственное целое число \(n\)(\(1 \le n \le 4 \cdot 10^4\)) — количество городов. Во второй строке заданы \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 10^{9}\)) — суммарная длительность концертов в \(i\)-м городе.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ следующим образом:

Если не существует подходящей последовательности \(a\), выведите NO. Иначе, в первой строке выведете YES, в следующей строке выведите последовательность \(a_1, a_2, \dots, a_n\) из \(n\) целых чисел, где \(a_i\) (\(1 \le a_i \le 10^{9}\)) — начальная длительность репертуара \(i\)-го певца. Если ответов несколько — выведите любой из них.

Примечание

Рассмотрим \(1\)-й набор входных данных примера:

  • \(1\)-й певец в \(1\)-м городе даст концерт на \(3\) минуты, во \(2\)-м — на \(6\) минут, в \(3\)-м — на \(9\) минут;
  • \(2\)-й певец в \(1\)-м городе даст концерт на \(3\) минуты, во \(2\)-м — на \(1\) минуту, в \(3\)-м — на \(2\) минуты;
  • \(3\)-й певец в \(1\)-м городе даст концерт на \(6\) минут, во \(2\)-м — на \(9\) минут, в \(3\)-м — на \(3\) минуты.

F. Развороты

битмаски Конструктив математика поиск в глубину и подобное реализация Строки *2000

Вам даны два целых положительных числа \(x\) и \(y\). Вы можете совершать с числом \(x\) следующую операцию: записать его в двоичном виде без ведущих нулей, приписать справа \(0\) или \(1\), затем развернуть двоичную запись и превратить ее в десятичное число, которое окажется новым значением \(x\).

Например:

  • \(34\) можно одной операцией превратить в \(81\): двоичная запись \(34\) — это \(100010\), если приписать справа \(1\), развернуть и убрать ведущие нули, можно получить \(1010001\), что является двоичной записью числа \(81\);
  • \(34\) можно одной операцией превратить в \(17\): двоичная запись \(34\) — это \(100010\), если приписать справа \(0\), развернуть и убрать ведущие нули, можно получить \(10001\), что является двоичной записью числа \(17\);
  • \(81\) можно одной операцией превратить в \(69\): двоичная запись \(81\) — это \(1010001\), если приписать справа \(0\), развернуть и убрать ведущие нули, можно получить \(1000101\), что является двоичной записью числа \(69\);
  • \(34\) можно превратить в \(69\) за две операции: сначала превратить \(34\) в \(81\), а потом превратить \(81\) в \(69\).

Ваша задача — выяснить, можно ли превратить \(x\) в \(y\) за какое-то (возможно, нулевое) число операций.

Входные данные

Единственная строка входных данных содержит два целых числа \(x\) и \(y\) (\(1 \le x, y \le 10^{18}\)).

Выходные данные

Выведите YES, если вы можете сделать \(x\) равным \(y\), или NO, если это невозможно.

Примечание

В первом примере не надо совершать никаких действий.

Четвертый пример разобран в условии задачи.

E. MEX и инкременты

дп жадные алгоритмы Конструктив математика реализация сортировки Структуры данных *1700

У Дмитрия есть массив из \(n\) неотрицательных целых чисел \(a_1, a_2, \dots, a_n\).

За одну операцию он может выбрать произвольный индекс \(j\) (\(1 \le j \le n\)) и увеличить значение элемента \(a_j\) на \(1\). Он может выбирать один и тот же индекс \(j\) многократно.

Для каждого \(i\) от \(0\) до \(n\) определите, сможет ли Дмитрий сделать \(\mathrm{MEX}\) массива равным ровно \(i\). Если сможет, то определите, за какое минимальное количество операций.

\(\mathrm{MEX}\) массива равен минимальному целому неотрицательному числу, которого нет в массиве. Например, \(\mathrm{MEX}\) массива \([3, 1, 0]\) равен \(2\), а массива \([3, 3, 1, 4]\)\(0\).

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину массива \(a\).

Вторая строка описания каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le n\)) — элементы массива \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных в тесте не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n + 1\) целое число — \(i\)-е число равно минимальному числу операций, за которое можно сделать \(\mathrm{MEX}\) массива равным \(i\) (\(0 \le i \le n\)), или -1, если этого сделать нельзя.

Примечание

В первом наборе входных данных примера \(n=3\):

  • чтобы получить \(\mathrm{MEX}=0\), достаточно выполнить один инкремент: \(a_1\)++;
  • чтобы получить \(\mathrm{MEX}=1\), достаточно выполнить один инкремент: \(a_2\)++;
  • \(\mathrm{MEX}=2\) для заданного массива, поэтому выполнять инкременты не надо;
  • получить \(\mathrm{MEX}=3\), выполняя инкременты, невозможно.

F. Сыграем в Шляпу?

жадные алгоритмы Конструктив математика Перебор *2000

Шляпа — игра на скоростное объяснение/отгадывание слов. Это весело. Попробуйте! В этой задаче речь идёт о варианте игры, когда игроки сидят за столом и каждый играет за себя.

\(n\) человек собрались в комнате с \(m\) столами (\(n \ge 2m\)). Они хотят \(k\) раз сыграть в Шляпу. То есть за каждым столом будет сыграно \(k\) игр, каждый игрок примет участие в \(k\) играх.

Для этого на каждую игру они распределяются по столам. Во время каждой игры один игрок играет ровно за одним столом. Разные игры можно играть за разными столами.

Игроки хотят составить наиболее «честное» расписание игр. По этой причине они ищут такое расписание (распределение по столам на каждую игру), что:

  • За любым столом каждый раз играет либо \(\lfloor\frac{n}{m}\rfloor\) человек, либо \(\lceil\frac{n}{m}\rceil\) человек (то есть либо округлённое вниз \(n/m\), либо округлённое вверх \(n/m\)). За одним столом в разные игры может играть разное количество человек.
  • Посчитаем для каждого игрока величину \(b_i\) — количество раз, сколько \(i\)-й игрок сыграл за столом размера \(\lceil\frac{n}{m}\rceil\) (округлённое вверх \(n/m\)). Любые два значения \(b_i\) должны отличаться не более чем на \(1\). Иными словами, для любых двух игроков \(i\) и \(j\) должно быть верно \(|b_i - b_j| \le 1\).

Например, если \(n=5\), \(m=2\) и \(k=2\), то по требованию первого пункта за каждым столом должны играть либо два игрока, либо три игрока. Рассмотрим следующие расписания:

  • Первая игра: за первым столом играют \(1, 2, 3\), а за вторым — \(4, 5\). Вторая игра: за первым столом играют \(5, 1\), а за вторым — \(2, 3, 4\). Это расписание не является «честным», так как \(b_2=2\) (второй игрок два раза играл за большим столом), а \(b_5=0\) (пятый игрок не играл за большим столом).
  • Первая игра: за первым столом играют \(1, 2, 3\), а за вторым — \(4, 5\). Вторая игра: за первым столом играют \(4, 5, 2\), а за вторым — \(1, 3\). Это расписание является «честным», так все \(b=[1,2,1,1,1]\) (любые два значения \(b_i\) отличаются не более чем на \(1\)).

Найдите любое «честное» расписание игр для \(n\) человек, если они играют на \(m\) столах \(k\) игр.

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Каждый набор входных данных состоит из одной строки, которая содержит три целых числа \(n\), \(m\) и \(k\) (\(2 \le n \le 2\cdot10^5\), \(1 \le m \le \lfloor\frac{n}{2}\rfloor\), \(1 \le k \le 10^5\)) — количество человек, столов и игр соответственно.

Гарантируется, что сумма \(nk\) (\(n\) умножить на \(k\)) по всем наборам входных данных теста не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите искомое расписание — последовательность \(k\) блоков по \(m\) строк. Каждый блок соответствует одной игре, строка в блоке — одному столу. В каждую строку выводите количество игроков за столом и номера игроков (числа от \(1\) до \(n\)), кто должен играть за этим столом.

Если искомых расписаний несколько, то выведите любое из них. Можно показать, что искомое решение обязательно существует.

Вы можете выводить дополнительные пустые строки для разделения ответов на разные наборы входных данных.

A. Равно или не равно

Конструктив реализация снм *800

У вас были \(n\) положительных целых чисел \(a_1, a_2, \dots, a_n\), записанных по кругу. Для каждой пары соседних элементов (\(a_1\) и \(a_2\), \(a_2\) и \(a_3\), ..., \(a_{n - 1}\) и \(a_n\), и \(a_n\) и \(a_1\)) вы выписали следующее: равны ли элементы в паре или нет.

К сожалению, вы потеряли бумажку с записанным массивом \(a\). Более того, вы боитесь, что и информация о равенстве соседних элементов могла быть повреждена. А потому вас интересует: существует ли массив \(a\), который согласовывается с вашей информацией о равенстве (или неравенстве) соседних элементов?

Входные данные

В первой строке каждого набора задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой и единственной строке каждого набора задана непустая строка \(s\), состоящая из букв E и/или N. Длина строки \(s\) равна размеру массива \(n\) и \(2 \le n \le 50\). Для каждого \(i\) от \(1\) по \(n\):

  • если \(s_i =\) E, то \(a_i\) равно \(a_{i + 1}\) (\(a_n = a_1\) для \(i = n\));
  • если \(s_i =\) N, то \(a_i\) не равно \(a_{i + 1}\) (\(a_n \neq a_1\) для \(i = n\)).
Выходные данные

Для каждого набора входных данных, выведите YES, если возможно подобрать массив \(a\), который согласуется с вашей информацией из строки \(s\). Иначе, выведите NO.

Можно доказать, что если существует какой-то подходящий массив \(a\), то существует также массив \(a\) из положительных целых чисел меньше или равных \(10^9\).

Примечание

В первом наборе входных данных, вы можете выбрать, например, \(a_1 = a_2 = a_3 = 5\).

Во втором наборе, не существует подходящего массива \(a\), так как, согласно \(s_1\), \(a_1\) равно \(a_2\), но, согласно \(s_2\), \(a_2\) не равно \(a_1\).

В третьем наборе, вы можете, например, выбрать массив \(a = [20, 20, 4, 50, 50, 50, 20]\).

Во четвертом наборе, вы можете, например, выбрать массив \(a = [1, 3, 3, 7]\).

D. Без сдачи

жадные алгоритмы Конструктив Перебор *2000

Однажды, рано утром, вы решили сходить в магазин неподалеку и купить там пачку чипсов. В магазине продаются чипсы \(n\) разных вкусов. Пачка чипсов с \(i\)-м вкусом стоит \(a_i\) бурлей.

В магазине могут закончиться чипсы каких-то вкусов, а потому вы решили выбрать пачку уже после того как придете в магазин. Однако у данного плана есть две серьезные проблемы:

  1. у вас есть только монеты номиналом \(1\), \(2\) и \(3\) бурля;
  2. так как еще утро, в магазине вас попросят заплатить без сдачи, т. е. если вы выберете пачку чипсов с \(i\)-м вкусом, вы должны будете заплатить ровно \(a_i\) бурлей.

Носить много монет тяжело, а потому вам хочется взять наименьшее суммарное количество монет. Соответственно, вас интересует вопрос: какое наименьшее количество монет вам нужно будет взять с собой, чтобы вы могли расплатиться за пачку чипсов любого вкуса без сдачи?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 100\)) — количество вкусов чипсов в магазине.

Во второй строке каждого запроса заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — стоимости пачек с соответствующими вкусами.

Выходные данные

Для каждого набора входных данных выведите одно число — наименьшее количество монет, которое вам понадобится взять с собой, чтобы купить пачку чипсов любого вкуса без сдачи.

Примечание

В первом наборе входных данных, вы можете, например, взять с собой \(445\) монеты с номиналом \(3\) и \(1\) монету номинала \(2\). Таким образом, вы наберете \(1337 = 445 \cdot 3 + 1 \cdot 2\).

Во втором наборе, вы можете, например, взять \(2\) монеты номинала \(3\) и \(2\) монеты номинала \(2\). Так вы сможете заплатить как ровно \(8 = 2 \cdot 3 + 1 \cdot 2\), так и ровно \(10 = 2 \cdot 3 + 2 \cdot 2\).

В третьем наборе, достаточно взять \(1\) монету номинала \(3\) и \(2\) монеты номинала \(1\).

E. Замена чисел

Конструктив реализация снм Структуры данных *1900

У вас есть массив целых чисел (изначально пустой).

Вам предстоит выполнить \(q\) запросов. Каждый запрос имеет один из двух типов:

  • «\(1\) \(x\)» — добавить элемент \(x\) в конец массива;
  • «\(2\) \(x\) \(y\)» — заменить все вхождения \(x\) в массиве на \(y\).

Найдите массив, получившийся после выполнения всех запросов.

Входные данные

Первая строка содержит одно целое число \(q\) (\(1 \le q \le 5 \cdot 10^5\)) — количество запросов.

Следующие \(q\) строк содержат запросы (по одному на строку). Каждый запрос имеет один из двух типов:

  • «\(1\) \(x\)» (\(1 \le x \le 5 \cdot 10^5\));
  • «\(2\) \(x\) \(y\)» (\(1 \le x, y \le 5 \cdot 10^5\)).

Гарантируется, что есть хотя бы один запрос первого типа.

Выходные данные

В единственную строку выведите \(k\) целых чисел — массив, получившийся после выполнения всех запросов, где \(k\) — количество запросов первого типа.

Примечание

В первом примере из условия массив меняется следующим образом:

\([]\) \(\rightarrow\) \([3]\) \(\rightarrow\) \([3, 1]\) \(\rightarrow\) \([3, 2]\) \(\rightarrow\) \([3, 2, 2]\) \(\rightarrow\) \([3, 2, 2, 1]\) \(\rightarrow\) \([3, 2, 2, 1, 2]\) \(\rightarrow\) \([3, 2, 2, 3, 2]\).

Во втором примере из условия массив меняется следующим образом:

\([]\) \(\rightarrow\) \([1]\) \(\rightarrow\) \([1, 2]\) \(\rightarrow\) \([1, 2, 1]\) \(\rightarrow\) \([1, 2, 1]\).

В третьем примере из условия массив меняется следующим образом:

\([]\) \(\rightarrow\) \([]\) \(\rightarrow\) \([1]\) \(\rightarrow\) \([1, 4]\) \(\rightarrow\) \([1, 4, 2]\) \(\rightarrow\) \([1, 4, 4]\) \(\rightarrow\) \([1, 3, 3]\) \(\rightarrow\) \([1, 3, 3, 2]\) \(\rightarrow\) \([1, 3, 3, 7]\).

A. Устойчивая расстановка ладей

Конструктив *800

У Вас есть квадратная клетчатая доска \(n \times n\) и \(k\) ладей. Строки этой доски пронумерованы числами от \(1\) до \(n\) сверху вниз, а столбцы пронумерованы числами от \(1\) до \(n\) слева направо. Клетка \((x, y)\) — это клетка на пересечении строки \(x\) и столбца \(y\) для \(1 \leq x \leq n\) и \(1 \leq y \leq n\).

Назовём расстановку ладей на эту доску хорошей, если никакая ладья не находится под боем другой ладьи.

Напомним, что ладья бьёт всех ладей, которые находятся с ней в одной строке или в одном столбце.

Назовём хорошую расстановку ладей на эту доску устойчивой, если не существует способа передвинуть одну из ладей на одну из соседних по стороне клеток, чтобы расстановка ладей перестала быть хорошей.

Такая расстановка \(3\) ладей на доске \(4 \times 4\) является хорошей, но не является устойчивой: ладью с клетки \((1, 1)\) можно подвинуть на клетку \((2, 1)\) и после этого ладьи на клетках \((2, 1)\) и \((2, 4)\) будут бить друг друга.

Найдите любую устойчивую расстановку \(k\) ладей на доске \(n \times n\) или сообщите, что такой расстановки не существует.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке дано два числа \(n\), \(k\) (\(1 \leq k \leq n \leq 40\)) — длина стороны доски и количество ладей.

Выходные данные

Если устойчивая расстановка \(k\) ладей на доске \(n \times n\) существует, выведите \(n\) строк из символов . и R. \(j\)-й символ \(i\)-й строки должен быть равен R тогда и только тогда, когда в вашей расстановке есть ладья в клетке \((i, j)\).

Если существует несколько решений, Вы можете вывести любое из них.

Если устойчивой расстановки ладей не существует, выведите \(-1\).

Примечание

В первом наборе входных данных Вам надо найти устойчивую расстановку \(2\) ладей на доске \(3 \times 3\). Постановка их в клетки \((3, 1)\) и \((1, 3)\) даёт устойчивую расстановку.

Во втором наборе входных данных можно показать, что нельзя расставить \(3\) ладьи на доске \(3 \times 3\) и получить устойчивую расстановку.

D. Зимний поход

жадные алгоритмы Конструктив математика *2100

Циклическая страна представляет клетчатое поле \(2n \times 2n\). Строки этого поля пронумерованы числами от \(1\) до \(2n\) сверху вниз, а столбцы пронумерованы числами от \(1\) до \(2n\) слева направо. Клетка \((x, y)\) — это клетка на пересечении строки \(x\) и столбца \(y\) для \(1 \leq x \leq 2n\) и \(1 \leq y \leq 2n\).

Сейчас Ваши \(n^2\) друзей находятся в левом верхнем углу этого поля. Иными словами, в каждой клетке \((x, y)\), где \(1 \leq x, y \leq n\) находится ровно один Ваш друг. В некоторых из остальных клеток поля находятся сугробы.

Ваши друзья хотят переместиться в правый нижний угол этого поля. Для этого в каждой клетке \((x, y)\), для которой \(n+1 \leq x, y \leq 2n\) должен оказаться ровно один друг. При этом неважно, в какой клетке окажется каждый друг.

Вы решили помочь своим друзьям совершить поход.

Вы будете давать друзьям инструкции по перемещению одного из следующих видов:

  • Выбрать некоторую строку \(x\). Все друзья, находящиеся в этой строке перемещаются в следующую клетку этой строки. После этой операции друг из клетки \((x, y)\) окажется в клетке \((x, y + 1)\) для \(1 \leq y < 2n\), a друг из клетки \((x, 2n)\) окажется в клетке \((x, 1)\).
  • Выбрать некоторую строку \(x\). Все друзья, находящиеся в этой строке перемещаются в предыдущую клетку этой строки. После этой операции друг из клетки \((x, y)\) окажется в клетке \((x, y - 1)\) для \(1 < y \leq 2n\), а друг из клетки \((x, 1)\) окажется в клетке \((x, 2n)\).
  • Выбрать некоторый столбец \(y\). Все друзья, находящиеся в этом столбце перемещаются в следующую клетку этого столбца. После этой операции друг из клетки \((x, y)\) окажется в клетке \((x + 1, y)\) для \(1 \leq x < 2n\), а друг из клетки \((2n, y)\) окажется в клетке \((1, y)\).
  • Выбрать некоторый столбец \(y\). Все друзья, находящиеся в этом столбце перемещаются в предыдущую клетку этого столбца. После этой операции друг из клетки \((x, y)\) окажется в клетке \((x - 1, y)\) для \(1 < x \leq 2n\), а друг из клетки \((1, y)\) окажется в клетке \((2n, y)\).

Обратите внимание, как ведут себя друзья, находящиеся на границах клетчатого поля в этих инструкциях.

Пример применения третьей операции ко второму столбцу. Здесь разноцветные кружки обозначают Ваших друзей, а синим покрашены клетки с сугробами.

Вы можете давать инструкции любое количество раз. Вы можете давать инструкции разных видов. Если после одной из этих инструкций один из друзей окажется в сугробе, то он замёрзнет.

Чтобы друзья не замёрзли, Вы можете до объявления первой инструкции убрать некоторые сугробы с помощью следующей операции:

  • Выбрать клетку \((x, y)\), в которой сейчас находится сугроб и убрать его за \(c_{x, y}\) монет.

Вы можете делать эту операцию любое количество раз.

Вы хотите потратить как можно меньше монет на уборку сугробов, а затем дать друзьям инструкции таким образом, чтобы они переместились в правый нижний угол поля и никто из них не замёрз.

Определите, сколько монет Вы потратите.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке дано одно число \(n\) (\(1 \leq n \leq 250\)) — половина длины стороны поля.

В следующих \(2n\) строках дано по \(2n\) чисел \(c_{i, 1}, c_{i, 2}, \ldots, c_{i, 2n}\) (\(0 \leq c_{i, j} \leq 10^9\)) — стоимости уборки сугробов в каждой клетке. Если \(c_{i, j} = 0\) для некоторых \(i, j\), то в клетке \((i, j)\) нет сугроба. Иначе в клетке \((i, j)\) есть сугроб.

Гарантируется, что \(c_{i, j} = 0\) для \(1 \leq i, j \leq n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(250\).

Выходные данные

Для каждого набора входных данных выведите одно число — минимальное количество монет, которое Вам нужно потратить.

Примечание

В первом наборе входных данных можно убрать сугробы в клетках \((2, 1)\) и \((2, 2)\) за \(100\) монет. После этого Вы можете дать инструкции

  • Перемещение в предыдущую клетку в первом столбце. После этого друг окажется в клетке \((2, 1)\).
  • Перемещение в следующую клетку во второй строке. После этого друг окажется в клетке \((2, 2)\) и закончит поход.

Во втором наборе входных данных можно убрать все сугробы на клетках столбцов \(3\) и \(4\) за \(22\) монеты. После этого Вы можете дать инструкции

  • Перемещение в следующую клетку в первой строке.
  • Перемещение в следующую клетку в первой строке.
  • Перемещение в следующую клетку во второй строке.
  • Перемещение в следующую клетку во второй строке.
  • Перемещение в следующую клетку в третьем столбце.
  • Перемещение в следующую клетку в третьем столбце.
  • Перемещение в следующую клетку в четвёртом столбце.
  • Перемещение в следующую клетку в четвёртом столбце.

Можно показать, что в результате этих инструкций ни один из друзей не замёрзнет, и что нельзя убрать сугробы меньшей суммарной стоимости.

F. Квадратное множество

Конструктив математика теория чисел хэши *2900

Назовем множество целых положительных чисел \(a_1, a_2, \dots, a_k\) квадратным, если произведение факториалов его элементов является квадратом целого числа, т. е. \(\prod\limits_{i=1}^{k} a_i! = m^2\), для некоторого целого \(m\).

Вам задано положительное целое число \(n\).

Ваша задача — для множества \(1, 2, \dots, n\) найти квадратное подмножество максимального размера. Если оптимальных ответов несколько, выведите любой из них.

Входные данные

Единственная строка содержит одно целое число \(n\) (\(1 \le n \le 10^6\)).

Выходные данные

В первой строке выведите одно целое число — размер максимального подмножества. Во второй строке выведите само подмножество в произвольном порядке.

C. Деление на два и перестановка

жадные алгоритмы Конструктив математика Паросочетания Потоки *1100

Вам дан массив \(a\), состоящий из \(n\) целых положительных чисел. Над ним вы можете совершать операции.

За одну операцию можно заменить любой элемент массива \(a_i\) на \(\lfloor \frac{a_i}{2} \rfloor\), то есть на целую часть от деления \(a_i\) на \(2\) (округление вниз).

Проверьте, можно ли за произвольное количество операций (возможно, \(0\)) сделать так, чтобы массив \(a\) стал перестановкой чисел от \(1\) до \(n\) — то есть содержал все числа от \(1\) до \(n\), каждое по одному разу.

Например, если \(a = [1, 8, 25, 2]\), \(n = 4\), то ответ положительный. Можно поступить так:

  1. Заменим \(8\) на \(\lfloor \frac{8}{2} \rfloor = 4\), тогда \(a = [1, 4, 25, 2]\).
  2. Заменим \(25\) на \(\lfloor \frac{25}{2} \rfloor = 12\), тогда \(a = [1, 4, 12, 2]\).
  3. Заменим \(12\) на \(\lfloor \frac{12}{2} \rfloor = 6\), тогда \(a = [1, 4, 6, 2]\).
  4. Заменим \(6\) на \(\lfloor \frac{6}{2} \rfloor = 3\), тогда \(a = [1, 4, 3, 2]\).
Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Каждый набор входных данных содержит ровно две строки. В первой из них записано целое число \(n\) (\(1 \le n \le 50\)), во второй записаны целые числа \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • YES, если можно сделать так, чтобы массив \(a\) стал перестановкой чисел от \(1\) до \(n\),
  • NO в противном случае.

Вы можете выводить YES и NO в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

Первый тест разобран в тексте условия задачи.

Во втором тесте получить искомый массив невозможно.

E. Маша-забываша

дп Конструктив Перебор реализация Строки хэши *2000

Маша познакомилась с новым другом и узнала его номер телефона — \(s\). Она хочет как можно скорее запомнить его. Номер телефона — это строка длины \(m\), которая состоит из цифр от \(0\) до \(9\). Допустимо, что телефон начинается с 0.

Маша уже знает \(n\) номеров телефонов (все номера имеют одинаковую длину \(m\)). Ей будет проще запомнить новый номер, если строку \(s\) представить как отрезки уже известных ей номеров. Каждый такой отрезок должен быть длины не менее \(2\), иначе отрезков будет слишком много, и Маша запутается.

Например, Маше нужно запомнить номер: \(s = \) «12345678» и она уже знает \(n = 4\) номера: «12340219», «20215601», «56782022», «12300678». Можно представить \(s\) как \(3\) отрезка: «1234» из первого номера, «56» из второго номера и «78» из третьего номера. Есть и другие способы представления \(s\).

Маша обратилась к вам за помощью, она просит вас разбить строку \(s\) на отрезки длины \(2\) или более из уже известных ей номеров. Если существует несколько возможных ответов, выведите любой из них.

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Перед каждым набором в тесте записана пустая строка. Далее идёт строка, которая содержит целые числа \(n\) и \(m\) (\(1 \le n, m \le 10^3\)) — количество номеров, которые знает Маша и количество цифр в каждом номере. Затем следуют \(n\) строк, \(i\)-я из которых описывает \(i\)-й номер, который знает Маша. Следующая строка содержит номер телефона её нового друга \(s\).

Среди заданных \(n+1\) телефонов могут быть дубликаты (одинаковые телефоны).

Гарантируется, что сумма значений \(n \cdot m\) (\(n\) умножить на \(m\)) по всем наборам входных данных в тесте не превосходит \(10^6\).

Выходные данные

Вам нужно вывести ответы на \(t\) запросов. В первой строке ответа должно содержаться одно число \(k\), соответствующее количеству отрезков, на которые вы разбили номер телефона \(s\). Выведите -1, если такого разбиения получить нельзя.

В случае положительного ответа далее должны следовать \(k\) строк, содержащие тройки чисел \(l, r, i\). Такая тройка обозначает, что очередные \(r-l+1\) цифр номера \(s\) равны отрезку (подстроке) с границами \([l, r]\) телефона под номером \(i\). И телефоны и цифры в них нумеруются от \(1\). Обратите внимание, что \(r-l+1 \ge 2\) для всех \(k\) строк.

Примечание

Первый тестовый случай соответствует примеру из условия.

Во втором случае невозможно представить отрезками известных номеров длины 2 или более.

В третьем случае можно получить отрезки «12» и «21» из первого номера телефона.

F. Интеракдивная задача

Бинарный поиск интерактив Конструктив *2000

Это интерактивная задача.

Мы решили сыграть с вами в игру и загадали число \(x\) (\(1 \le x < n\)), где число \(n\) вам известно.

Вы можете делать запросы следующего вида:

  • + c: эта команда осуществляет присвоение \(x = x + c\) (\(1 \le c < n\)), а затем возвращает вам значение \(\lfloor\frac{x}{n}\rfloor\) (\(x\) делить на \(n\) и округлить вниз).

Вы победите, если угадаете текущее число, сделав не больше \(10\) запросов.

Протокол взаимодействия

Взаимодействие начинается с чтения целого числа \(n\) (\(2 < n \le 1000\)), которое записано во входных данных на отдельной строке.

Далее вы можете сделать не более \(10\) запросов. Чтобы сделать запрос выведите в отдельной строке:

  • + c: эта команда выполнит присвоение \(x = x + c\) (\(1 \le c < n\)), а затем в отдельной строке выведет значение \(\lfloor\frac{x}{n}\rfloor\) (\(x\) делить на \(n\) и округлить вниз).

Ответ, как и запросы, выведите в отдельной строке. Вывод ответа не считается запросом при подсчёте их количества. Чтобы вывести его используйте следующий формат:

  • ! x: текущее значение \(x\).

После этого ваша программа должна завершить работу.

После вывода очередного запроса обязательно используйте функции очистки потока, чтобы часть вашего вывода не осталась в каком-нибудь буфере. Например, на С++ надо использовать функцию fflush(stdout), на Java вызов System.out.flush(), на Pascal flush(output) и stdout.flush() для языка Python.

Обратите внимание, что интерактор не является адаптивным.

Чтобы сделать взлом, используйте следующий формат: в единственной строке должны содержаться два числа \(x\) и \(n\), разделённые пробелом.

Примечание

В первом примере изначально \(x = 2\). После первого запроса значение \(x = 3\), а \(\lfloor\frac{x}{n}\rfloor = 1\).

Во втором примере также изначально \(x = 2\). После первого запроса значение \(x = 3\), а \(\lfloor\frac{x}{n}\rfloor = 0\). После второго — \(x = 4\), \(\lfloor\frac{x}{n}\rfloor = 0\). После третьего \(x=5\), \(\lfloor\frac{x}{n}\rfloor = 1\).

A. Равноудаленные буквы

Конструктив сортировки *800

Дана строка \(s\), состоящая из строчных латинских букв. Каждая буква встречается в ней не более двух раз.

Ваша задача — переупорядочить буквы в строке так, чтобы для каждой пары букв, которые встречаются ровно дважды, расстояния между буквами в паре одинаковое. Не разрешается добавлять или удалять буквы.

Можно показать, что ответ всегда существует. Если существует несколько ответов, выведите любой из них.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных.

Каждый набор входных данных содержит одну непустую строку \(s\), состоящую из строчных латинских букв. Каждая буква встречается в строке не более двух раз. Длина строки не превосходит \(52\).

Выходные данные

На каждый набор входных данных выведите одну строке. Каждая буква должна входить в нее столько же раз, сколько и в строку \(s\). Для каждой пары букв, которые встречаются ровно дважды, расстояния между буквами в паре должно быть одинаковое.

Если существует несколько ответов, выведите любой из них.

Примечание

В первом наборе входных данных единственная буква, которая встречается ровно дважды — это буква 'l'. Можно переупорядочить буквы как угодно, потому что расстояния не с чем сравнивать.

Во втором наборе входных данных буквы, которые встречаются ровно дважды — это 'a', 'b' и 'c'. Изначально буквы 'a' находятся на расстоянии \(6\), буквы 'b' находятся на расстоянии \(4\), а буквы 'c' находятся на расстоянии \(2\). Они не одинаковые, поэтому надо буквы переупорядочить. После изменения буквы 'a' находятся на расстоянии \(2\), буквы 'b' находятся на расстоянии \(2\) и буквы 'c' находятся на расстоянии \(2\). Они одинаковые, поэтому ответ корректен.

В третьем наборе входных данных нет букв, которые встречаются ровно дважды. Поэтому любой порядок подходит. В том числе оригинальная строка без изменений.

A. Не красить

Конструктив реализация *800

Вам задана прямоугольная таблица из \(n\) строк и \(m\) столбцов. Некоторые ее клетки покрашены в черный цвет, остальные — белые.

За одну операцию вы выбираете некоторую черную клетку и выполняете ровно один пункт из следующих:

  • красите все клетки в ее строке в черный цвет, или
  • красите все клетки в ее столбце в черный цвет.

Вам заданы два целых числа \(r\) и \(c\). Найдите минимальное количество операций, чтобы сделать клетку в \(r\)-й строке \(c\)-м столбце черной, или определите, что это невозможно.

Входные данные

Входные данные состоят из одного или нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее идут описания наборов.

Первая строка каждого набора входных данных состоит из четырех целых чисел \(n\), \(m\), \(r\) и \(c\) (\(1 \leq n, m \leq 50\); \(1 \leq r \leq n\); \(1 \leq c \leq m\)) — количество строки и столбцов в таблице, номер строки и столбца клетки, которую необходимо сделать черной.

Затем следуют \(n\) строк, каждая содержит \(m\) символов. Каждый из символов равен либо «B», либо «W» в зависимости от того, черная или белая соответствующая клетка поля.

Выходные данные

Для каждого набора входных данных, если невозможно сделать клетку в \(r\)-й строке \(c\)-м столбце черной, выведите \(-1\).

В противном случае выведите одно целое число — минимальное количество операций, необходимое для того, чтобы сделать клетку в строке \(r\) столбце \(c\) черной.

Примечание

Изображение первого набора входных данных представлено ниже.

В первом наборе входных данных мы можем выбрать черную клетку в строке \(1\) столбце \(2\) и сделать все клетки в ее строке черными. Таким образом, клетка в строке \(1\) столбце \(4\) станет черной.

Во втором наборе входных данных примера клетка в строке \(2\) столбце \(1\) уже черная.

В третьем наборе входных данных примера невозможно сделать клетку в строке \(2\) столбце \(2\) чёрной.

Изображение четвертого набора входных данных представлено ниже.

В четвертом наборе входных данных мы можем выбрать черную клетку в строке \(2\) столбце \(2\) и сделать черными все клетки столбца.

После этого мы можем выбрать клетку в строке \(1\) столбце \(2\) и сделать сделать всю ее строку черной.

Таким образом, клетка в строке \(1\) столбце \(1\) станет черной.

C. Не назначать

Деревья Конструктив поиск в глубину и подобное теория чисел *1400

Вам дано дерево из \(n\) вершин, пронумерованных от \(1\) до \(n\), ребра которого пронумерованы от \(1\) до \(n-1\). Деревом называется связный неориентированный граф без циклов. Вам нужно назначить целочисленный вес каждому ребру дереву так, чтобы в результате получилось простое дерево.

Дерево называется простым, если вес каждого пути, состоящего из одного или двух ребер, является простым числом. Рассматриваются только пути, не посещающие никакую вершину дважды. Весом пути называется сумма весов ребер на пути.

Рассмотрим граф ниже. Он является простым деревом, так как вес любого пути из не более чем двух ребер простой. Например, путь из двух ребер \(2 \to 1 \to 3\) имеет вес \(11 + 2 = 13\), который является простым числом. Другой пример, путь из одного ребра \(4 \to 3\) имеет вес \(5\), который является простым числом.

Назначьте веса ребрам любым возможным способом таким, что получившееся дерево будет простым. Если такого способа нет, выведите \(-1\). Можно показать, что если существуют способы сделать дерево простым, то существуют и способ, использующий только веса от \(1\) до \(10^5\).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(2 \leq n \leq 10^5\)) — количество вершин в дереве.

Далее следует \(n-1\) строка. \(i\)-я из этих строк содержит два целых числа \(u\) и \(v\) (\(1 \leq u, v \leq n\)), обозначающие, что \(i\)-е ребро соединяет вершины \(u\) и \(v\). Гарантируется, что данные ребра образуют дерево.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных, если существует способ корректно назначить веса, выведите \(n-1\) целое число \(a_1, a_2, \dots, a_{n-1}\) (\(1 \leq a_i \le 10^5\)), где \(a_i\) обозначает вес, назначенный ребру \(i\). В противном случае выведите \(-1\).

Если существует несколько решений, выведите любое.

Примечание

В первом примере есть только два пути по одному ребру: \(1 \to 2\) и \(2 \to 1\), оба пути имеют вес \(17\) — простое число.

Второй пример описан в условии задачи.

Можно показать, что для третьего примера не существует корректного способа назначить веса.

A. MEX-массив

Бинарный поиск жадные алгоритмы Конструктив математика реализация *1400

Магнус только что узнал о MEX, и он ему так понравился, что он решил сразу его использовать.

Учитывая массив \(a\) из \(n\) неотрицательных целых чисел, Магнус хочет создать новый массив \(b\), который сформирован следующим образом:

Пока массив \(a\) не пуст:

  • Выберите целое число \(k\) (\(1 \leq k \leq |a|\)).
  • Добавьте MEX первых \(k\) чисел массива \(a\) в конец массива \(b\) и удалите эти числа из массива \(a\), сдвинув позиции оставшихся чисел в \(a\).

Магнус любит большие массивы так же сильно, как и MEX, поэтому он хочет, чтобы новый массив \(b\) был лексикографически максимальным. Магнус просит вас сказать ему, какой лексикографически максимальный массив \(b\), он может создать, построив его оптимальным образом.

Массив \(x\) лексикографически больше массива \(y\), если в первой позиции, где \(x\) и \(y\) различаются \(x_i > y_i\), или если \(|x| > |y|\) и \(y\) — это префикс \(x\) (где \(|x|\) обозначает размер массива \(x\)).

MEX набора неотрицательных целых чисел — это минимальное неотрицательное целое число, которого нет в наборе. Например, MEX ({\({1, 2, 3}\)}) \(= 0\) и MEX ({\({0, 1, 2, 4, 5}\)}) \(= 3\).

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 100\)) — количество тестов. Описание тестовых примеров следует ниже.

Первая строка каждого тестового примера содержит единственное целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество элементов в массиве \(a\).

Вторая строка каждого тестового примера содержит \(n\) неотрицательных целых чисел \(a_1, \ldots, a_n\) (\(0 \leq a_i \leq n\)), где \(a_i\) — это \(i\)-е число из массива \(a\).

Гарантируется, что сумма \(n\) по всем тестам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого тестового примера выведите \(m\) — длину лексикографически максимального массива \(b\), который может создать Магнус, за которым следуют \(m\) целых чисел, обозначающие элементы массива \(b\).

Примечание

В первом наборе входных данных лексикографически максимальный массив \(b\) получается выбором \(k=5\), что приводит к \(MEX\) всего массива \(a\). Он лексикографически максимален, так как массив, начинающийся с меньшего числа, чем \(4\), лексикографически меньше, и выбор \(k<5\) приведет к массиву, начинающемуся с числа меньше чем \(4\).

Во втором наборе входных данных есть два способа получить максимальный массив: сначала выбрать \(k=6\), затем \(k=2\) или сначала выбрать \(k=7\), а затем \(k=1\).

C. XOR-сетка

жадные алгоритмы интерактив Конструктив математика реализация *2300

XOR множества \(\{s_1,s_2,\ldots,s_m\}\) определяется как \(s_1 \oplus s_2 \oplus \ldots \oplus s_m\), где \(\oplus\) обозначает побитовую операцию XOR.

Почти выиграв IOI, Виктор купил себе сетку размером \(n\times n\), содержащую целые числа в каждой ячейке. \(n\) — четное число. Целое число в \(i\)-й строке и \(j\)-м столбце равно \(a_{i,j}\).

К сожалению, Mihai украл сетку у Виктора и сказал ему, что вернет ее только с одним условием: Виктор должен сообщить Mihai XOR всех чисел сетки.

Виктор не помнит все элементы сетки, но он помнит некоторую информацию о ней: для каждой ячейки Виктор помнит XOR всех соседних ячеек.

Две клетки считаются соседними, если они имеют общую сторону — другими словами, для некоторых целых чисел \(1 \le i, j, k, l \le n\) ячейка в \(i\)-й строке и \(j\)-м столбце является соседом ячейки в \(k\)-й строке и \(l\)-м столбце, если \(|i - k| = 1\) и \(j = l\), или если \(i = k\) и \(|j - l| = 1\).

Чтобы вернуть свою сетку, Виктор просит вас о помощи. Можете ли вы, используя информацию, которую помнит Виктор, найти XOR всей сетки?

Можно доказать, что ответ определяется однозначно.

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 100\)) — количество тестов. Далее следует описание тестовых случаев.

Первая строка каждого набора входных данных содержит единственное четное целое число \(n\) (\(2 \leq n \leq 1000\)) — размер сетки.

Далее следуют \(n\) строк, каждая из которых содержит \(n\) целых чисел. \(j\)-е число в \(i\)-й строке представляет собой XOR всех чисел, записанных в соседях ячейки в \(i\)-й строке и \(j\)-м столбце.

Гарантируется, что сумма \(n\) по всем тестам не превышает \(1000\) и в исходной сетке \(0 \leq a_{i, j} \leq 2^{30} - 1\).

Формат взлома

Чтобы взломать решение, используйте следующий формат:

Первая строка должна содержать единственное целое число t (\(1 \le t \le 100\)) — количество тестов.

Первая строка каждого набора входных данных должна содержать единственное четное целое число \(n\) (\(2 \leq n \leq 1000\)) — размер сетки.

Далее должны следовать \(n\) строк, каждая из которых содержит \(n\) целых чисел. \(j\)-е целое число в \(i\)-й из этих строк равно \(a_{i,j}\) в исходной сетке Виктора. Значения в сетке должны быть целыми числами в диапазоне \([0, 2^{30}-1]\).

Сумма \(n\) по всем тестам не должна превышать \(1000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — XOR всей сетки.

Примечание

Для первого набора входных данных одна из возможных исходных сеток Виктора:

\(1\)\(3\)
\(2\)\(4\)

Для второго набора входных данных одна из возможных исходных сеток Виктора:

\(3\)\(8\)\(8\)\(5\)
\(9\)\(5\)\(5\)\(1\)
\(5\)\(5\)\(9\)\(9\)
\(8\)\(4\)\(2\)\(9\)

Для третьего набора входных данных одна из возможных исходных сеток Виктора:

\(4\)\(3\)\(2\)\(1\)
\(1\)\(2\)\(3\)\(4\)
\(5\)\(6\)\(7\)\(8\)
\(8\)\(9\)\(9\)\(1\)

A. И-сопоставление

битмаски Конструктив *1500

Дан набор из \(n\) (\(n\) всегда равно степени \(2\)) элементов, содержащих все целые числа \(0, 1, 2, \ldots, n-1\) единожды.

Найдите \(\frac{n}{2}\) пар элементов таких, что:

  • Каждый элемент набора принадлежит ровно одной паре.
  • Сумма по всем парам побитового И элементов пары должна быть в точности равна \(k\). Формально, если \(a_i\) и \(b_i\) — элементы \(i\)-й пары, то должно выполняться \(\)\sum_{i=1}^{n/2}{a_i \& b_i} = k,\(\) где \(\&\) обозначает операцию побитового И.

Если существует несколько решений, найдите любое из них. Если решений не существует, выведите \(-1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка ввода содержит одно целое число \(t\) (\(1 \leq t \leq 400\)) — количество наборов входных данных. Далее следует их описание.

Каждый набор входных данных состоит из одной строки, содержащей два целых числа \(n\) и \(k\) (\(4 \leq n \leq 2^{16}\), \(n\) — степень \(2\), \(0 \leq k \leq n-1\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(2^{16}\). Все наборы в каждом тесте будут различными.

Выходные данные

Для каждого набора входных данных, если решения не существует, выведите одну строку, содержащую \(-1\).

В противном случае выведите \(\frac{n}{2}\) строк, \(i\)-я их них должна содержать \(a_i\) и \(b_i\) — элементы \(i\)-й пары.

Если существует несколько решений, выведите любое. Порядок пар и элементов в парах не имеет значения.

Примечание

В первом наборе входных данных \((0\&3)+(1\&2) = 0\).

Во втором наборе \((0\&2)+(1\&3) = 1\).

В третьем наборе \((0\&1)+(2\&3) = 2\).

В четвертом наборе решения не существует.

B. Отрезок и разбиение

Бинарный поиск жадные алгоритмы Конструктив Структуры данных *1800

Дан массив \(a\), состоящий из \(n\) целых чисел. Найдите отрезок значений \([x, y]\) (\(x \le y\)) и разбейте \(a\) на ровно \(k\) (\(1 \le k \le n\)) подмассивов таких, что:

  • Каждый подмассив состоит из нескольких последовательных элементов \(a\), то есть он равен \(a_l, a_{l+1}, \ldots, a_r\) для некоторых \(l\) и \(r\) (\(1 \leq l \leq r \leq n\)).
  • Каждый элемент \(a\) принадлежит ровно одному подмассиву.
  • Для каждого подмассива количество элементов внутри отрезка \([x, y]\) (включительно) строго больше, чем количество элементов вне этого отрезка. Элемент с индексом \(i\) находится внутри отрезка \([x, y]\), если и только если \(x \le a_i \le y\).

Напечатайте любое решение, минимизирующее \(y - x\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка ввода содержит одно целое число \(t\) (\(1 \leq t \leq 3 \cdot 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n \le 2 \cdot 10^5\)) – длина массива \(a\) и количество подмассивов, на которые нужно разбить изначальный массив.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)), где \(a_i\) равен \(i\)-му элементу массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot10^5\)

Выходные данные

Для каждого набора входных данных выведите \(k+1\) строк.

В первой строке выведите \(x\) и \(y\) — границы найденного отрезка.

Затем выведите \(k\) строк: \(i\)-я строка должна содержать \(l_i\) и \(r_i\) (\(1\leq l_i \leq r_i \leq n\)) — границы \(i\)-го подмассива.

Вы можете выводить подмассивы в любом порядке.

Примечание

В первом наборе входных данных должен быть только один подмассив, который обязан совпадать со всем массивом. Внутри отрезка \([1, 2]\) содержится \(2\) элемента, а вне его – \(0\). Если выбрать отрезок \([1, 1]\), то внутри него будет содержаться \(1\) элемент (\(a_1\)), вне его будет содержаться \(1\) элемент (\(a_2\)), и ответ будет некорректным.

Во втором наборе можно выбрать отрезок \([2, 2]\) и разбить массив на подмассивы \((1, 3)\) и \((4, 4)\). В подмассиве \((1, 3)\) \(2\) элемента содержатся внутри отрезка (\(a_2\) и \(a_3\)) и \(1\) элемент вне его (\(a_1\)). В подмассиве \((4, 4)\) содержится \(1\) элемент (\(a_4\)), лежащий внутри отрезка.

В третьем наборе можно выбрать отрезок \([5, 5]\) и разбить массив на подмассивы \((1, 4)\), \((5, 7)\) и \((8, 11)\). В подмассиве \((1, 4)\) содержится \(3\) элемента, лежащих внутри отрезка, и \(1\) элемент, лежащий вне его. В подмассиве \((5, 7)\) содержится \(2\) элемента, лежащих внутри отрезка, и \(1\) элемент, лежащий вне его. В подмассиве \((8, 11)\) содержится \(3\) элемента, лежащих внутри отрезка, и \(1\) элемент, лежащий вне его.

D. Переверни отрезки

дп жадные алгоритмы Конструктив теория чисел *2400

Дан массив \(a\), состоящий из \(n\) целых чисел, и множество \(B\), состоящее из \(m\) положительных целых чисел таких, что \(1 \leq b_i \leq \lfloor \frac{n}{2} \rfloor\) при \(1\le i\le m\), где \(b_i\)\(i\)-й элемент \(B\).

Вы можете выполнять следующую операцию с \(a\):

  1. Выбрать некоторый \(x\) такой, что \(x\) содержится в \(B\).
  2. Выбрать подмассив \(a\) размера \(x\) и умножить на \(-1\) каждый элемент этого подмассива. Формально, выбрать \(l\) и \(r\) такие, что \(1\leq l\leq r \leq n\) и \(r-l+1=x\), и затем присвоить \(a_i:=-a_i\) для всех \(i\) таких, что \(l\leq i\leq r\).

Рассмотрим пример. Пусть \(a=[0,6,-2,1,-4,5]\) и \(B=\{1,2\}\):

  1. \([0,6,-2,-1,4,5]\) получится, если выбрать размер подмассива \(2\) и \(l=4\), \(r=5\).
  2. \([0,6,2,-1,4,5]\) получится, если после этого выбрать размер подмассива \(1\) и \(l=3\), \(r=3\).

Найдите максимальную сумму \(\sum\limits_{i=1}^n {a_i}\), которую можно получить, применяя данную операцию неограниченное количество раз (возможно ноль).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(2\leq n \leq 10^6\), \(1 \leq m \leq \lfloor \frac{n}{2} \rfloor\)) — количество элементов в \(a\) и \(B\) соответственно.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(-10^9\leq a_i \leq 10^9\)).

Третья строка каждого набора содержит \(m\) различных положительных целых чисел \(b_1,b_2,\ldots,b_m\) (\(1 \leq b_i \leq \lfloor \frac{n}{2} \rfloor\)) — элементы множества \(B\).

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных напечатайте одно целое число — максимальную сумму всех \(a_i\), которую можно получить, применяя описанную операцию неограниченное количество раз.

Примечание

В первом наборе входных данных можно проделать операции с \(x=1\), \(l=3\), \(r=3\) и \(x=1\), \(l=5\), \(r=5\), и получить массив \([0, 6, 2, 1, 4, 5]\)

Во втором наборе можно проделать операцию с \(x=2\), \(l=2\), \(r=3\), получив массив \([1, 1, -1, -1, 1, -1, 1]\), затем проделать операцию с \(x=2\), \(l=3\), \(r=4\), получив массив \([1, 1, 1, 1, 1, -1, 1]\). Не существует способа получить сумму, большую \(5\).

B. Постройка крыши

битмаски Конструктив *1000

В 179-й школе наконец решили построить крышу над полем для игры в футбол. Уже известно, что для строительства потребуется последовательно поставить \(n\) вертикальных опор. При этом директор школы хочет, чтобы высоты всех опор образовывали перестановку \(p\) чисел от \(0\) до \(n - 1\), где \(p_i\) — высота \(i\)-й слева опоры \((1 \le i \le n)\).

Вам, как заведующему строительством, известно, что стоимость постройки последовательности опор определяется как максимальное значение побитового исключающего ИЛИ высот всех пар соседних опор. Иными словами, стоимость постройки равна \(\max\limits_{1 \le i \le n - 1}{p_i \oplus p_{i + 1}}\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Найдите любую последовательность из высот опор \(p\) длины \(n\), стоимость постройки которой минимальна.

Здесь перестановкой является массив, состоящий из \(n\) различных целых чисел от \(0\) до \(n - 1\) в произвольном порядке. Например, \([2,3,1,0,4]\) — перестановка, но \([1,0,1]\) не перестановка (\(1\) встречается в массиве дважды) и \([1,0,3]\) тоже не перестановка (\(n=3\), но в массиве встречается \(3\)).

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка описания каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество опор, необходимое для постройки крыши.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) чисел \(p_1\), \(p_2\), \(\ldots\), \(p_n\) — последовательность из высот опор, стоимость постройки которой минимальна.

Если существует несколько решений, выведите любое из них.

Примечание

Для \(n = 2\) есть \(2\) возможные последовательности высот опор:

  • \([0, 1]\) — цена постройки равна \(0 \oplus 1 = 1\).
  • \([1, 0]\) — цена постройки равна \(1 \oplus 0 = 1\).

Для \(n = 3\) есть \(6\) возможных последовательностей высот опор:

  • \([0, 1, 2]\) — цена постройки равна \(\max(0 \oplus 1, 1 \oplus 2) = \max(1, 3) = 3\).
  • \([0, 2, 1]\) — цена постройки равна \(\max(0 \oplus 2, 2 \oplus 1) = \max(2, 3) = 3\).
  • \([1, 0, 2]\) — цена постройки равна \(\max(1 \oplus 0, 0 \oplus 2) = \max(1, 2) = 2\).
  • \([1, 2, 0]\) — цена постройки равна \(\max(1 \oplus 2, 2 \oplus 0) = \max(3, 2) = 3\).
  • \([2, 0, 1]\) — цена постройки равна \(\max(2 \oplus 0, 0 \oplus 1) = \max(2, 1) = 2\).
  • \([2, 1, 0]\) — цена постройки равна \(\max(2 \oplus 1, 1 \oplus 0) = \max(3, 1) = 3\).

C. ОКЕЯ

Конструктив *1000

People worry that computers will get too smart and take over the world, but the real problem is that they're too stupid and they've already taken over the world.
— Pedro Domingos

Вы работаете в известном универмаге, который использует передовые технологии и машинный труд — а, иначе говоря, роботов!

Отдел, в котором вы работаете, продает \(n \cdot k\) товаров. Первый товар стоит \(1\) доллар, второй — \(2\) доллара, и так далее: \(i\)-й товар стоит \(i\) долларов. Товары расположены на полках и образуют прямоугольную сетку: на каждой из \(n\) полок расположено по \(k\) товаров. Мы будем обозначать цену \(j\)-го товара (считая слева направо) на \(i\)-й полке за \(a_{i,j}\), \(1 \le i \le n, 1 \le j \le k\).

Время от времени роботы задумываются над следующим вопросом: какое среднее арифметическое цен товаров \(a_{i,l}, a_{i,l+1}, \ldots, a_{i,r}\) для некоторой полки \(i\) и индексов \(l \le r\)? К сожалению, старые роботы умеют работать только с целыми числами, и если средняя цена оказывается нецелым числом, они ломаются.

Вы заботитесь о благосостоянии роботов и потому хотите упорядочить товары так, чтобы роботы не могли сломаться. Формально, вы хотите найти такой двумерный массив \(a\), что:

  • Каждое число от \(1\) до \(n \cdot k\) (включительно) встречается в массиве ровно один раз.
  • Для всех \(i, l, r\) средняя цена товаров с \(l\)-го по \(r\)-й на \(i\)-й полке — целое число.

Выясните, возможно ли такое расположение товаров, и если да, приведите любой подходящий пример.

Входные данные

В первой строке дано одно число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных.

Первая и единственная строка каждого набора содержит два числа \(n\) и \(k\) (\(1 \le n, k \le 500\)) — количество полок и длина каждой из них соответственно.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(500\), и сумма \(k\) по всем наборам не превосходит \(500\).

Выходные данные

Выведите ответ для каждого набора входных данных:

Если подходящая расстановка существуют, выведите «YES» в отдельной строке. Далее в \(n\) строках выведите по \(k\) чисел — цены товаров на каждой из полок. Каждое число от \(1\) до \(n \cdot k\) должно встречаться ровно один раз.

Если ответа не существует, то выведите единственное слово «NO» в отдельной строке.

D. В поисках нуля

интерактив Конструктив математика *2000

Это интерактивная задача.

Мы загадали массив \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) и спрятали в нём один ноль! Более формально, среди чисел массива ровно одно значение равно нулю.

Ваша задача — найти, под каким индексом спрятан ноль, то есть найти такое \(i\), что \(a_i = 0\).

Для этого вы можете сделать некоторое количество запросов следующего вида. По трём различным индексам \(i, j, k\) вы можете узнать значение выражения \(\max(a_i, a_j, a_k) - \min(a_i, a_j, a_k)\). Другими словами, мы сообщим вам разность между максимальным и минимальным числом среди \(a_i\), \(a_j\) и \(a_k\).

Вы можете сделать не более \(2 \cdot n - 2\) таких запросов, после чего у вас будет две попытки угадать, под каким индексом спрятан ноль. Формально, вы должны сообщить нам два числа \(i\) и \(j\), и ваш ответ будет считаться правильным, если \(a_i = 0\) или \(a_j = 0\).

Сможете ли вы угадать, где мы спрятали ноль?

Обратите внимание, что в каждом тесте массив фиксирован и не изменяется во время игры. Иными словами, интерактор не адаптивен.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит единственное число \(t\) (\(1 \le t \le 500\)). Далее следует описание наборов.

В первой и единственной строке каждого набора входных данных записано целое число \(n\) (\(4 \le n \le 1000\)) — длина загаданного массива.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(3000\).

Протокол взаимодействия

Взаимодействие начинается со считывания \(n\) в начале каждого набора входных данных.

Чтобы задать запрос, выведите «? \(i\) \(j\) \(k\)» (без кавычек, \(1 \le i, j, k \le n\), индексы должны быть различны). Затем вы должны считать ответ, который будет равен \(\max(a_i, a_j, a_k) - \min(a_i, a_j, a_k)\).

Ответ \(-1\) означает, что ваша программа сделала некорректный запрос. Ваша программа должна немедленно завершиться после прочтения ответа \(-1\), и вы получите вердикт Неправильный ответ. В противном случае вы можете получить любой вердикт, так как программа продолжит чтение из закрытого потока. Обратите внимание, что если запрос корректный, ответ на него никогда не будет равен \(-1\), так как \(\max(a_i, a_j, a_k) - \min(a_i, a_j, a_k) \geq 0\).

Чтобы дать ответ, выведите «! \(i\) \(j\)» (без кавычек). Вывод одного и того же индекса дважды (то есть \(i = j\)) разрешен. Заметьте, что вывод ответа не считается одним из \(2 \cdot n - 2\) запросов. После этого ваша программа должна продолжить обработку следующих наборов входных данных, либо завершиться, если наборов не осталось.

После вывода каждого запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Первая строка должна содержать целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных.

Первая строка каждого набора входных данных должна содержать целое число \(n\) (\(4 \le n \le 1000\)) — длину загаданного массива.

Вторая строка каждого набора должна содержать \(n\) целых чисел, разделенных пробелами — \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)). Также в этом массиве должен быть ровно один ноль.

Сумма \(n\) по всем наборам не должна превосходить \(3000\).

Примечание

Массив из теста из примера: \([1, 2, 0, 3]\).

E. Честный делёж

графы Конструктив Паросочетания поиск в глубину и подобное Структуры данных *2400

Even a cat has things it can do that AI cannot.
— Fei-Fei Li

Вам дано \(m\) массивов целых положительных чисел, длина каждого массива чётна.

От вас требуется составить два равных мультимножества \(L\) и \(R\) так, чтобы каждый элемент каждого массива попал ровно в одно мультимножество. Кроме того, для каждого из \(m\) массивов ровно половина его элементов должна попасть в \(L\), а остальные — в \(R\).

Приведите пример такого разбиения или определите, что такого разбиения не существует.

Входные данные

В первой строке записано целое число \(m\) (\(1 \le m \le 10 ^ 5\)) — количество массивов.

В следующих \(2 \cdot m\) строках даны описания массивов.

В описании каждого массива первая строка содержит чётное число \(n\) (\(2 \le n \le 2 \cdot 10 ^ 5\)) — длина массива. Во второй строке через пробел перечислены \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10 ^ 9\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем массивам не превосходит \(2 \cdot 10^5\).

Выходные данные

В случае если ответ существует выведите «YES», а затем выведите \(m\) строк.

В каждой строке для каждого элемента выведите букву «L» или «R» (обязательно заглавную, без пробелов) — в какое мультимножество должен попасть данный элемент.

Если ответа не существует, в единственной строке выведите «NO».

Примечание

В первом массиве первый элемент мы добавляем в \(R\), а второй в \(L\). Сейчас \(L = \{2\}\), а \(R = \{1\}\).

Во втором массиве первый и третий элемент мы добавляем в \(L\), а остальные в \(R\). Сейчас \(L = \{1, 2, 3\}\) и \(R = \{1, 2, 3\}\).

В третьем массиве элементы 2, 3 и 6 мы добавляем в \(L\), а на остальных — в \(R\). В итоге \(L = R = \{1, 1, 2, 2, 3, 3\}\).

C. Дифференциальная сортировка

жадные алгоритмы Конструктив *1200

Вам дан массив \(a\) из \(n\) элементов.

Вы можете выполнить следующую операцию не более \(n\) раз: выбрать три индекса \(x,y,z\) \((1 \leq x < y < z \leq n)\) и заменить \(a_x\) на \(a_y - a_z\). После операции \(|a_x|\) должно быть меньше \(10^{18}\).

Ваша цель сделать полученный массив неубывающим. Если решений несколько, можно вывести любое. Если это невозможно, вы должны сообщить об этом.

Входные данные

Каждый тест содержит несколько тестовых случаев. Первая строка будет содержать единственное целое число \(t\) \((1 \leq t \leq 10000)\) — количество тестов. Затем следуют \(t\) тестовых случаев.

Первая строка каждого теста содержит одно целое число \(n\) \((3 \leq n \leq 2 \cdot 10^5)\) — размер массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots ,a_n\) \((-10^9 \leq a_i \leq 10^9)\) — элементы \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого теста выведите \(-1\), если решения нет. В противном случае в первой строке выведите единственное целое число \(m\) \((0 \leq m \leq n)\) — количество выполненных вами операций.

Тогда \(i\)-я из следующих \(m\) строк должна содержать три целых числа \(x,y,z\) \((1 \leq x < y < z \leq n)\)— описание \(i\)-й операции.

Если решений несколько, можно вывести любое. Обратите внимание, что вам не нужно минимизировать количество операций в этой задаче.

Примечание

В первом примере массив становится

\([-6,-4,2,-1,2]\) после первой операции,

\([-6,-4,-3,-1,2]\) после второй операции.

Во втором примере невозможно сделать массив отсортированным ни после какой последовательности операций.

В третьем примере массив уже отсортирован, поэтому никаких операций выполнять не нужно.

E. Автомобили

2-sat графы жадные алгоритмы Конструктив поиск в глубину и подобное снм сортировки *2200

На координатной оси \(OX\) стоят \(n\) автомобилей. Каждая машина изначально находится в целочисленной точке, и никакие две машины не находятся в одной и той же точке. Кроме того, каждая машина ориентирована либо влево, либо вправо, и в любой момент они могут двигаться с любой постоянной положительной скоростью в этом направлении.

Более формально мы можем описать \(i\)-й автомобиль буквой и целым числом: его ориентацию \(ori_i\) и его местоположение \(x_i\). Если \(ori_i = L\), то \(x_i\) убывает со временем. Точно так же, если \(ori_i = R\), то \(x_i\) увеличивается со временем.

Мы называем две машины нерелевантными, если они никогда не оказываются в одной и той же точке независимо от их скорости. Другими словами, они не будут иметь одну и ту же координату в любой момент.

Мы называем два автомобиля предназначенными, если они когда-нибудь окажутся в одной и той же точке независимо от их скорости.

К сожалению, мы потеряли всю информацию о наших машинах, но мы помним \(m\) отношений между ними. Существует два типа отношений:

\(1\) \(i\) \(j\)\(i\)-й автомобиль и \(j\)-й автомобиль нерелевантные.

\(2\) \(i\) \(j\)\(i\)-й автомобиль и \(j\)-й автомобиль предназначенные.

Восстановите ориентации и местоположения автомобилей, удовлетворяющих отношениям, или сообщите, что это невозможно. Если решений несколько, можно вывести любое.

Обратите внимание на то, что если два автомобиля окажутся в одной точке, то они продолжат свое движение.

Входные данные

Первая строка содержит два целых числа: \(n\) и \(m\) \((2 \leq n \leq 2 \cdot 10^5; 1 \leq m \leq min(2 \cdot 10^5, \frac{n(n-1)}{2})\) — количество автомобилей и количество отношений соответственно.

Каждая из следующих \(m\) строк содержит три целых числа: \(type\), \(i\) и \(j\) \((1 \leq type \leq 2; 1 \leq i,j \leq n; i≠j)\).

Если \(type\) = \(1\), то \(i\)-й автомобиль и \(j\)-й автомобиль являются нерелевантными. В противном случае \(i\)-й автомобиль и \(j\)-й автомобиль являются предназначенными.

Гарантируется, что для каждой пары автомобилей существует не более \(1\)-го отношения между ними.

Выходные данные

В первой строке выведите «YES», если можно восстановить ориентации и положения автомобилей, удовлетворяющих отношениям, и «NO» в противном случае.

Если ответ «YES», выведите \(n\) строк, каждая из которых содержит символ и целое число: \(ori_i\) и \(x_i\) \((ori_i \in \{L, R\}; -10^9 \leq x_i \leq 10^9)\) — представляет информацию о \(i\)-м автомобиле.

Если ориентация налево, то \(ori_i\) = \(L\). В противном случае \(ori_i\) = \(R\).

\(x_i\) — координата, где находится \(i\)-й автомобиль. Обратите внимание, что все \(x_i\) должны быть различными.

Мы можем доказать, что если существует решение, то должно быть и решение, удовлетворяющее ограничениям на \(x_i\).

F. Вышки

Деревья дп жадные алгоритмы Конструктив поиск в глубину и подобное *2500

Дано дерево с \(n\) вершинами, пронумерованными от \(1\) до \(n\). Для вершины с номером \(i\) известна её высота \(h_i\). Вы можете установить любое количество вышек в вершины, для каждой вышки вы можете выбрать, в какую вершину её поставить, а также выбрать её эффективность. Установка вышки с эффективностью \(e\) стоит \(e\) монет, где \(e > 0\).

Считается, что в вершине \(x\) ловит связь, если для какой-то пары вышек в вершинах \(u\) и \(v\) (\(u \neq v\), но может быть, что \(x = u\) или \(x = v\)) с эффективностями соответственно \(e_u\) и \(e_v\) выполняется, что \(\min(e_u, e_v) \geq h_x\) и \(x\) лежит на пути между \(u\) и \(v\).

Найдите минимальное количество монет, необходимое для установки вышек, чтобы во всех вершинах ловила связь.

Входные данные

В первой строке вводится целое число \(n\) (\(2 \le n \le 200\,000\)) — количество вершин в дереве.

Во второй строке вводятся \(n\) целых чисел \(h_i\) (\(1 \le h_i \le 10^9\)) — высоты вершин.

В следующих \(n - 1\) строках вводятся пары чисел \(v_i, u_i\) (\(1 \le v_i, u_i \le n\)) — ребра в дереве. Гарантируется, что данные ребра образуют дерево.

Выходные данные

Выведите одно целое число — минимальное необходимое количество монет, чтобы во всех вершинах ловила связь.

Примечание

В первом тесте оптимально установить две вышки с эффективностью \(2\) в \(1\) и \(3\) вершины.

Во втором тесте оптимально установить вышку с эффективностью \(1\) в вершину \(1\) и две вышки с эффективностью \(3\) во \(2\) и \(5\) вершины.

В третьем тесте оптимально установить две вышки с эффективностью \(6\) в \(1\) и \(2\) вершины.

G. День рождения

жадные алгоритмы Конструктив математика *3000

Виталий подарил Максиму на \(16\)-й день рождения \(n\) чисел \(1, 2, \ldots, n\). Максиму надоело играть в настольные игры на празднике, поэтому он решил поиграть с этими числами. За один ход Максим может выбрать два числа \(x\) и \(y\) среди тех, которые у него есть, выкинуть их и добавить вместо них два числа \(x + y\) и \(|x - y|\). Он хочет, чтобы после всех ходов все числа были равны, и сумма чисел была минимальна.

Помогите Максиму найти решение. Друзья Максима не хотят долго ждать, поэтому в решении должно быть не более \(20n\) ходов. Гарантируется, что при заданных ограничениях, если решение существует, то существует решение, которое делает все числа равными, минимизирует их сумму и при этом тратит не более \(20n\) ходов.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 25\,000\)) — количество наборов входных данных.

В каждом наборе входных данных вводится единственное число \(n\) (\(2 \le n \le 5 \cdot 10^4\)) — количество чисел, подаренных Максиму.

Гарантируется, что сумма \(n\) не превосходит \(5 \cdot 10^4\).

Выходные данные

Для каждого набора входных данных выведите \(-1\), если невозможно сделать все числа равными.

Иначе выведите одно число \(s\) (\(0 \le s \le 20n\)) — количество ходов. Далее выведите \(s\) строк. \(i\)-я строка должна содержать два числа \(x_i\) и \(y_i\) — числа, которые Максим должен выбрать на \(i\)-м ходу. После всех операций числа должны стать равными.

Не забудьте, что вам не только нужно сделать все числа равными, но и минимизировать их сумму. Гарантируется, что при заданных ограничениях, если решение существует, то существует решение, которое делает все числа равными, минимизирует их сумму и при этом тратит не более \(20n\) ходов.

A. Разворот

жадные алгоритмы Конструктив математика *800

Вам дана перестановка \(p_1, p_2, \ldots, p_n\) длины \(n\). Вам нужно выбрать два целых числа \(l,r\) (\(1 \le l \le r \le n\)) и развернуть подотрезок \([l,r]\) перестановки. Перестановка станет равной \(p_1,p_2, \dots, p_{l-1},p_r,p_{r-1}, \dots, p_l,p_{r+1},p_{r+2}, \dots ,p_n\).

Найдите лексикографически минимальную перестановку, которая может быть получена в результате применения ровно одной операции разворота для начальной перестановки.

Заметьте, что для двух различных перестановок равной длины \(a\) и \(b\), \(a\) лексикографически меньше \(b\), если в первой позиции, где они отличаются, в \(a\) стоит меньший элемент.

Перестановкой называется массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) является перестановкой, но \([1,2,2]\) не является перестановкой (\(2\) встречается дважды в массиве) и \([1,3,4]\) тоже не является перестановкой (\(n=3\), но \(4\) присутствует в массиве).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержится целое число \(n\) (\(1 \le n \le 500\)) — длина перестановки.

Во второй строке каждого набора входных данных содержатся \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\)) — элементы перестановки.

Выходные данные

Для каждого набора входных данных выведите лексикографически минимальную перестановку, которую вы можете получить.

Примечание

В первом наборе входных данных длина перестановки равна \(1\), поэтому единственный возможный отрезок \([1,1]\). Итоговая перестановка равна \([1]\).

Во втором наборе входных данных мы можем получить тождественную перестановку с помощью разворота отрезка \([1,2]\). Итоговая перестановка равна \([1,2,3]\).

В третьем наборе входных данных наилучшим возможным отрезком является \([2,3]\). Итоговая перестановка равна \([1,2,4,3]\).

В четвёртом наборе входных данных не существует меньшей перестановки, поэтому мы можем оставить её, выбрав отрезок \([1,1]\). Итоговая перестановка равна \([1,2,3,4,5]\).

D. Большая кисть

жадные алгоритмы Конструктив реализация Структуры данных *2000

Вы нашли картину на холсте размером \(n \times m\). Холст можно представить в виде сетки с \(n\) строками и \(m\) столбцами. Каждая клетка покрашена в какой-то цвет. Клетка \((i, j)\) имеет цвет \(c_{i,j}\).

Рядом с картиной вы также нашли кисть в форме квадрата \(2 \times 2\), поэтому холст был покрашен следующим образом. Изначально никакая клетка не была покрашена. Затем следующая операция покраски была выполнена некоторое количество раз:

  • Выбрать два целых числа \(i\) и \(j\) (\(1 \le i < n\), \(1 \le j < m\)) и некоторый цвет \(k\) (\(1 \le k \le nm\)).
  • Покрасить клетки \((i, j)\), \((i + 1, j)\), \((i, j + 1)\), \((i + 1, j + 1)\) в цвет \(k\).

Каждая клетка должна быть покрашена хотя бы один раз. Клетка может быть покрашена несколько раз. В этом случае её итоговый цвет будет равен последнему.

Найдите некоторую последовательность из не более \(nm\) операций, позволяющую получить картину, которую вы нашли, или определите, что это невозможно.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(2 \le n, m \le 1000\)) — размеры холста.

В \(i\)-й из следующих \(n\) строк входных данных содержатся \(m\) целых чисел. \(j\)-е из них равно \(a_{i,j}\) (\(1 \le a_{i,j} \le nm\)) — цвет клетки \((i, j)\).

Выходные данные

Если решения не существует, выведите единственное число \(-1\).

Иначе, на первой строке, выведите одно целое число \(q\) (\(1 \le q \le nm\)) — количество операций.

Далее выведите сами операции по порядку. В \(k\)-й из следующих \(q\) строк, выведите три целых числа \(i\), \(j\), \(c\) (\(1 \le i < n\), \(1 \le j < m\), \(1 \le c \le nm\)) — описание \(k\)-й операции.

Если существует несколько решений, выведите любое.

Примечание

В первом наборе входных данных решение не единственно. Здесь представлено одно из них:

Во втором наборе входных данных не существует способа получить данную картину, поэтому ответ \(-1\).

B. Расшифровка повторяшек

Конструктив реализация сортировки *2000

У Оли есть массив целых чисел \(a_1, a_2, \ldots, a_n\). Оля хочет разбить его на тандемные повторы. Так как это не всегда возможно, перед разбиением она хочет несколько (возможно, ноль) раз вставить в произвольное место пару одинаковых чисел. Помогите ей!

Более формально:

  • Тандемным повтором называется любая последовательность \(x\) четной длины \(2k\) такая, что для всех \(1 \le i \le k\) выполнено, что \(x_i = x_{i + k}\).
  • Массив \(a\) разбивается на тандемные повторы, если его можно разбить на несколько частей, каждая из которых является тандемным повтором.
  • Оля может несколько раз выбрать произвольное целое число \(c\) и вставить \([c, c]\) в произвольное место массива (в самом начале, между какими-то двумя числами, или в самом конце).
  • Вам необходимо сделать некоторое количество вставок и затем разбить массив на тандемные повторы, или сообщить, что это невозможно. Обратите внимание, что от вас не требуется минимизировать количество вставок.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 30\,000\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 500\)) — изначальную длину массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — сам массив.

Гарантируется, что сумма значений \(n^2\) по всем наборам входных данных не превосходит \(250\,000\).

Выходные данные

Для каждого набора входных данных выведите ответ в следующем формате.

Если операциями вставки двух равных чисел нельзя превратить массив в конкатенацию тандемных повторов, выведите единственное целое число \(-1\).

Иначе выведите количество вставок \(q\) (\(0 \le q \le 2 \cdot n^2\)) в вашем решении. Далее выведите описание вставок.

В каждой из следующих \(q\) строк выведите два целых числа \(p\) и \(c\) (\(1 \le c \le 10^9\)), которые означают, что после \(p\) чисел с начала массива вставляется число \(c\) два раза подряд. Если перед этим действием длина массива была \(m\), то должно быть выполнено \(0 \le p \le m\).

Далее вам нужно вывести любое разбиение итогового массива на тандемные повторы. Сначала выведите целое число \(d\), а на следующей строке выведите последовательность четных целых чисел \(t_1, t_2, \ldots, t_d\) размера \(d\) (\(d, t_i \ge 1\)). Это длины подотрезков, являющихся тандемными повторами, на которые можно разбить получившийся массив после всех операций.

Заметим, что после всех действий длина массива \(a\) будет равна \(m = n + 2 \cdot q\). Должны выполняться следующие условия:

  • \(m = \sum\limits_{i = 1}^{d}{t_i}\).
  • Для всех целых \(i\) таких, что \(1 \le i \le d\), последовательность \(a_l, a_{l+1}, \ldots, a_r\) является тандемным повтором, где \(l = \sum\limits_{j = 1}^{i - 1}{t_j} + 1\), \(r = l + t_i - 1\).

Можно показать, что если решение существует, то существует решение, которое удовлетворяет заданным ограничениям. Если существует несколько возможных ответов, вы можете вывести любой.

Примечание

В первом наборе входных данных невозможно вставками двух равных чисел подряд массив, который является конкатенацией тандемных повторов.

Во втором наборе входных данных массив уже является тандемным повтором \([5, 5] = \underbrace{([5] + [5])}_{t_1 = 2}\), поэтому мы можем не делать никаких вставок.

В третьем наборе входных данных у нас изначально следующий массив: \(\)[1, 3, 1, 2, 2, 3].\(\) После первого действия вставки с \(p = 1, c = 3\): \(\)[1, \textbf{3, 3}, 3, 1, 2, 2, 3].\(\) После второго действия вставки с \(p = 5, c = 3\): \(\)[1, 3, 3, 3, 1, \textbf{3, 3}, 2, 2, 3].\(\) После третьего действия вставки с \(p = 5, c = 3\): \(\)[1, 3, 3, 3, 1, \textbf{3, 3}, 3, 3, 2, 2, 3].\(\) После четвертого действия вставки с \(p = 10, c = 3\): \(\)[1, 3, 3, 3, 1, 3, 3, 3, 3, 2, \textbf{3, 3}, 2, 3].\(\) Итоговый массив можно представить как конкатенацию двух тандемных повторов: \(\)\underbrace{([1, 3, 3, 3] + [1, 3, 3, 3])}_{t_1 = 8} + \underbrace{([3, 2, 3] + [3, 2, 3])}_{t_2 = 6}.\(\)

В четвёртом наборе входных данных у нас изначально следующий массив: \(\)[3, 2, 1, 1, 2, 3].\(\) После первого действия вставки с \(p = 0, c = 3\): \(\)[\textbf{3, 3}, 3, 2, 1, 1, 2, 3].\(\) После второго действия вставки с \(p = 8, c = 3\): \(\)[3, 3, 3, 2, 1, 1, 2, 3, \textbf{3, 3}].\(\) После третьего действия вставки с \(p = 5, c = 3\) \(\)[3, 3, 3, 2, 1, \textbf{3, 3}, 1, 2, 3, 3, 3].\(\) После четвертого действия вставки с \(p = 6, c = 2\): \(\)[3, 3, 3, 2, 1, 3, \textbf{2, 2}, 3, 1, 2, 3, 3, 3].\(\) После пятого действия вставки с \(p = 7, c = 1\): \(\)[3, 3, 3, 2, 1, 3, 2, \textbf{1, 1}, 2, 3, 1, 2, 3, 3, 3].\(\) Итоговый массив можно представить как конкатенацию тандемных повторов: \(\)\underbrace{([3] + [3])}_{t_1 = 2} + \underbrace{([3, 2, 1] + [3, 2, 1])}_{t_2 = 6} + \underbrace{([1, 2, 3] + [1, 2, 3])}_{t_3 = 6} + \underbrace{([3] + [3])}_{t_4 = 2}.\(\)

B. Антифибоначчиевы перестановки

Конструктив Перебор реализация *800

Назовем перестановку \(p\) длины \(n\) антифибоначчиевой, если для всех \(i\) (\(3 \le i \le n\)) выполняется \(p_{i-2} + p_{i-1} \ne p_i\). Напомним, что перестановкой называется массив длины \(n\), содержащий каждое целое число от \(1\) до \(n\) ровно один раз.

Ваша задача — для заданного числа \(n\) вывести \(n\) различных антифибоначчиевых перестановок длины \(n\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 48\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 50\)).

Выходные данные

Для каждого набора входных данных выведите \(n\) строк. Каждая строка должна содержать антифибоначчиеву перестановку длины \(n\). В каждом наборе входных данных каждая перестановка должна быть выведена не более одного раза.

Если существует несколько ответов, выведите любой из них. Можно показать, что всегда существует способ найти \(n\) различных антифибоначчиевых перестановок длины \(n\), соблюдая ограничения задачи.

B. Качество против количества

жадные алгоритмы Конструктив Перебор сортировки *800

\( \def\myred#1{\color{red}{\underline{\bf{#1}}}} \def\myblue#1{\color{blue}{\overline{\bf{#1}}}} \) \(\def\RED{\myred{\unicode{1050}\unicode{1088}\unicode{1072}\unicode{1089}\unicode{1085}\unicode{1099}\unicode{1081}}} \def\BLUE{\myblue{\unicode{1057}\unicode{1080}\unicode{1085}\unicode{1080}\unicode{1081}}}\)

Вам дана последовательность из \(n\) неотрицательных целых чисел \(a_1, a_2, \ldots, a_n\). Изначально все элементы непокрашены. Вы можете покрасить каждое число в \(\RED\) или \(\BLUE\) (но не в оба) или оставить его непокрашенным.

Обозначим за \(\text{Count}(c)\) количество элементов последовательности, покрашенных в \(c\), а за \(\text{Sum}(c)\) — сумму этих чисел.

Например, если данная последовательность равна \([2, 8, 6, 3, 1]\), и она покрашена следующим образом: \([\myblue{2}, 8, \myred{6}, \myblue{3}, 1]\) (где \(6\) покрашена красным, \(2\) и \(3\) покрашены синим, \(1\) и \(8\) непокрашены), то \(\text{Sum}(\RED)=6\), \(\text{Sum}(\BLUE)=2+3=5\), \(\text{Count}(\RED)=1\) и \(\text{Count}(\BLUE)=2\).

Определите, можно ли покрасить последовательность так, чтобы \(\text{Sum}(\RED) > \text{Sum}(\BLUE)\) и \(\text{Count}(\RED) < \text{Count}(\BLUE)\).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

В первой строка находится одно целое число \(n\) (\(3\le n\le 2\cdot 10^5\)) — длину последовательности.

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(0\le a_i\le 10^9\)) — данная последовательность.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите YES, если возможно раскрасить данную последовательность, удовлетворив заданные ограничения, и NO в противном случае.

Вы можете выводить YES и NO в любом регистре (например, строки yEs, yes, Yes и YES будут считаться положительным ответом).

Примечание

В первом примере нет способа раскрасить элементы заданным образом. Например, если раскрасить последовательность следующим образом: \([\myblue{1},\myblue{2},\myred{3}]\) (где \(3\) покрашена красным, \(1\) и \(2\) покрашены синим), то \(\text{Count}(\RED)=1 < \text{Count}(\BLUE)=2\), но \(\text{Sum}(\RED)=3 \ngtr \text{Sum}(\BLUE)=3\). Поэтому это не является корректным способом раскрасить последовательность.

Во втором примере один из возможных способов раскрасить последовательность показан в условии. Легко видеть, что \(\text{Sum}(\RED)=6 > \text{Sum}(\BLUE)=5\), а также \(\text{Count}(\RED)=1 < \text{Count}(\BLUE)=2\).

В третьем примере можно показать, что нет способа раскрасить последовательность правильным образом. Например, если раскрасить последовательность следующим образом: \([\myred{3},\myred{5},\myblue{4}, \myblue{2}]\) (где \(3\) и \(5\) покрашены красным, \(4\) и \(2\) покрашены синим), то \(\text{Sum}(\RED) = 8 > \text{Sum}(\BLUE) = 6\), но \(\text{Count}(\RED) = 2 \nless \text{Count}(\BLUE) = 2\). Поэтому это не является корректным способом раскрасить последовательность.

В четвертом примере можно показать, что нет способа раскрасить последовательность правильным образом.

C. Факториалы и степени двойки

битмаски дп Конструктив математика Перебор *1500

Число называется сильным, если оно является степенью двойки или факториалом. Другими словами, число \(m\) сильное, если существует неотрицательное целое число \(d\) такое, что \(m=2^d\) или \(m=d!\), где \(d!=1\cdot 2\cdot \ldots \cdot d\) (в частности, \(0! = 1\)). Например, \(1\), \(4\) и \(6\) являются сильными, потому что \(1=1!\), \(4=2^2\), \(6=3!\), а \(7\), \(10\) или \(18\) не являются.

Вам дано положительное число \(n\). Найдите минимальное число \(k\) такое, что \(n\) можно представить в виде суммы \(k\) различных сильных чисел, или определите, что такого \(k\) не существует.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Описание одного набора входных данных содержит одно целое число \(n\) (\(1\le n\le 10^{12}\)).

Выходные данные

Для каждого набора входных данных выведите ответ на отдельной строке.

Если \(n\) не может быть представлено как сумма различных сильных чисел, выведите \(-1\).

Иначе выведите одно положительное число — минимально возможное число \(k\).

Примечание

В первом примере \(7\) может быть представлена как \(7=1+6\), где \(1\) и \(6\) являются сильными. Так как \(7\) не является сильным числом, мы знаем, что минимальное значение \(k\) в этом случае \(k=2\).

Во втором примере один из способов разложить \(11\) в сумму трех сильных чисел такой: \(11=1+4+6\). Можно показать, что нельзя представить \(11\) в виде суммы двух или менее сильных чисел.

В третьем примере \(240\) может быть представлено как \(240=24+32+64+120\). Обратите внимание, что \(240=120+120\) не является корректным представлением, т. к. сильные числа должны быть различны.

В четвертом примере \(17179869184=2^{34}\), поэтому \(17179869184\) является сильным числом, и минимальное \(k\) в этом случае \(k=1\).

D. Взвесьте дерево

Деревья дп Конструктив поиск в глубину и подобное реализация *2000

Вам дано дерево из \(n\) вершин, пронумерованных от \(1\) до \(n\). Деревом называется связный неориентированный граф без циклов.

Для всех \(i=1,2, \ldots, n\) обозначим за \(w_i\) вес \(i\)-й вершины. Вершина называется хорошей, если ее вес равен сумме весов всех ее соседей.

Изначально веса в вершинах не определены. Выберете для каждой вершины положительный целочисленный вес так, чтобы количество хороших вершин в дереве было максимально возможным. Если есть несколько способов сделать это, вам нужно найти такой, который минимизирует сумму весов всех вершин в дереве.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2\le n\le 2\cdot 10^5\)) — количество вершин в дереве.

Далее следует \(n−1\) строка. Каждая из этих строк содержит два целых числа \(u\) и \(v\) (\(1\le u,v\le n\)), обозначающие ребро между вершинами \(u\) и \(v\). Гарантируется, что ребра образуют дерево.

Выходные данные

В первой строке выведите два целых числа: максимальное количество хороших вершин и минимально возможный суммарный вес вершин при этом.

Во второй строке выведите \(n\) целых чисел \(w_1, w_2, \ldots, w_n\) (\(1\le w_i\le 10^9\)) — веса вершин. Можно показать, что существует оптимальное решение, удовлетворяющее данным ограничениям.

Если существует несколько решений, выведите любое из них.

Примечание

Ниже изображено дерево из первого примера:

В этом случае, если вы выберете для каждый вершины вес \(1\), то хорошими вершинами будут вершины (покрашены черным) \(1\), \(3\) и \(4\). Невозможно выбрать такие веса, чтобы все вершины были хорошими. Минимально возможная сумма весов равна \(1+1+1+1=4\), меньшая сумма недостижима, так как вершины обязаны иметь положительный вес.

Ниже изображено дерево из второго примера:

В этом случае, если вы выберете для каждой вершины вес \(1\), то хорошими вершинами будут вершины (покрашены черным) \(2\) и \(3\). Можно показать, что это оптимальное решение.

F. Игра вокруг стола

жадные алгоритмы Конструктив реализация *2900

Вокруг круглого стола сидят \(n\) игроков, пронумерованных от \(1\) до \(n\). Игрок номер \((i+1)\) сидит справа от \(i\)-го игрока для всех \(1 \le i < n\), а \(1\)-й игрок сидит справа от \(n\)-го.

У них есть \(n^2\) карт, на каждой из которых написано одно целое число от \(1\) до \(n\). Для каждого числа от \(1\) до \(n\) есть ровно \(n\) с этим числом.

Изначально все карты некоторым образом распределены между игроками, причем у каждого ровно \(n\) карт. За один шаг каждый игрок выбирает одну из своих карт и передает ее игроку справа. Все игроки выполняют свой шаг одновременно.

Игрок \(i\) называется готовым, если на всех его картах написано число \(i\). Цель игроков — достичь конфигурации, где все игроки готовы. Найдите способ сделать это за не более чем \((n^2-n)\) шагов. Вам не нужно минимизировать число шагов.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2\le n\le 100\)).

Далее следуют \(n\) строк. \(i\)-я из них содержит \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(1\le c_j\le n\)) — начальные карты \(i\)-го игрока.

Гарантируется, что для всех целых \(i\) от \(1\) до \(n\) существуют ровно \(n\) карт с числом \(i\).

Выходные данные

В первой строке выведите целое число \(k\) (\(0\le k\le (n^2-n)\)) — количество шагов в вашем решении.

Далее выведите \(k\) строк. В \(i\)-й из них выведите \(n\) целых чисел \(d_1, d_2, \ldots, d_n\) (\(1\le d_j\le n\)), где \(d_j\) равно числу, написанному на карте, которую \(j\)-й игрок передает на \(i\)-м шаге игроку, сидящему справа от него.

Можно показать, что в данных ограничениях ответ всегда существует. Если существует несколько решений, выведите любое.

Примечание

В первом примере если первый игрок передает карту с числом \(2\), а второй игрок передает карту с числом \(1\), то у первого игрока будет две карты с числом \(1\), а у второго — две карты с числом \(2\). Значит после этого шага оба игрока готовы.

Во втором примере можно также сделать \(0\) шагов. Обратите внимание, что не нужно минимизировать число шагов.

B. Мадока и элегантный подарок

графы Конструктив Перебор реализация *1200

Отец Мадоки достиг отметки в \(1\) миллион подписчиков на Mathub! В честь этого вебсайт решил отправить ему персонализированную награду — Битовую Кнопку Mathub!

Награда представляет из себя таблицу из \(n\) строк и \(m\) столбцов, в каждой клетке которой записано число \(0\) или \(1\). Изучив таблицу, она вывела следующие характеристики:

  • Подпрямоугольник \(A\) лежит в подпрямоугольнике \(B\), если нет клетки, которая лежит внутри \(A\), но при этом не лежит внутри \(B\).
  • Два подпрямоугольника пересекаются, если найдется клетка, лежащая внутри обоих подпрямоугольников.
  • Подпрямоугольник называется чёрным, если в нём нет клетки со значением \(0\).
  • Подпрямоугольник называется красивым, если он чёрный и не лежит в каком-то другом чёрном подпрямоугольнике.
  • Таблица называется элегантной, если никакие два красивых подпрямоугольника не пересекаются.

Например, на первой картинке красный подпрямоугольник является красивым, а на второй нет, так как он лежит внутри фиолетового подпрямоугольника.

Помогите Мадоке определить, является ли таблица элегантной.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 200\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержатся два целых числа \(n, m\) (\(1 \le n, m \le 100\)) — размеры таблицы.

Далее следуют \(n\) строк длины \(m\), состоящих из нулей и единиц — описание таблицы.

Гарантируется, что сумма значений \(n\) и сумма значений \(m\) по всем наборам входных данных не превосходят \(777\).

Выходные данные

Для каждого набора входных данных выведите «YES», если данная таблица является элегантной. Иначе, выведите «NO».

Вы можете выводить каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs» будут распознаны как положительный ответ).

Примечание

Во втором наборе входных данных таблица не элегантная, поскольку красный красивый подпрямоугольник пересекается с фиолетовым.

В четвертом наборе входных данных таблица не элегантная, поскольку красный красивый подпрямоугольник пересекается с фиолетовым.

C. Мадока и детские шалости

жадные алгоритмы Конструктив *1300

Мадока в детстве была крайне капризным ребенком, и одной из её любимых шалостей было рисование на своей стене. По воспоминаниям Мадоки, стена представляла собой таблицу из \(n\) строк и \(m\) столбцов, состоящую только из нулей и единиц. Клетка в \(i\)-й строке и \(j\)-м столбце (\(1 \le i \le n\), \(1 \le j \le m\)) имела координаты \((i, j)\).

Однажды она увидела картину «Девочка-волшебница Мадока» и решила нарисовать её у себя на стене. Изначально таблица Мадоки представляет из себя таблицу размера \(n \times m\), заполненную нулями. Далее она применяет следующую операцию любое количество раз:

Мадока выбирает любой подпрямоугольник таблицы и красит его в шахматную раскраску (при этом левый верхний угол подпрямоугольника всегда имеет цвет \(0\)). Обратите внимание, что некоторые клетки могут быть покрашены несколько раз. В этом случае итоговый цвет клетки равен цвету, полученному при последнем перекрашивании.

Белый цвет обозначает \(0\), чёрный \(1\). Так, например, прямоугольник на первой картинке покрашен в шахматную раскраску, а остальные нет.

Для лучшего понимания условия рекомендуем ознакомиться с пояснениями к первому тесту.

Помогите Мадоке и найдите некоторую последовательность из не более чем \(n \cdot m\) действий, позволяющую получить данную картину, или определите, что такой не существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержатся два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 100\)) — размеры таблицы. Каждая из следующих \(n\) строк содержит строку длины \(m\), состоящую только из \(1\) и \(0\) — описание картины, которую хочет получить Мадока.

Выходные данные

Если данную картину получить невозможно, выведите \(-1\).

Иначе выведите в первой строке единственное целое число \(q\) (\(0 \leq q \leq n \cdot m\)) — количество операций, которое ей нужно, чтобы получить картину. Обратите внимание, что вам не нужно минимизировать количество операций.

Затем выведите для каждой операции (в порядке выполнения) в отдельной строке четыре числа — координаты левого верхнего угла и правого нижнего угла подпрямоугольника.

Примечание

Ниже содержится описание первого набора входных данных.

В третьем наборе входных данных получить нужную картину невозможно.

В четвёртом наборе входных данных исходная таблица уже является нужной картиной.

D. Мадока и лучшая школа России

дп Конструктив математика теория чисел *1900

Мадока собирается поступить в «ЦНУС ПТУ». Но на вступительном экзамене по информатике ей попалась сложная задача:

  • Число называется хорошим, если оно кратно \(d\).
  • Число называется красивым, если оно хорошее и его нельзя представить в виде произведения двух хороших чисел.

Обратите внимание, что красивое число обязано быть хорошим.

Дано хорошее число \(x\). Требуется определить, можно ли его представить хотя бы двумя различными способами в виде произведения нескольких (возможно одного) красивых чисел. Два способа считаются различными, если в них отличаются множества используемых чисел.

Решите эту задачу за Мадоку и помогите ей поступить в лучшую школу России!

Входные данные

В первой строке дано единственное число \(t\) (\(1 \leq t \leq 100\)) — количество тестовых случаев. Ниже идет их описание.

Каждый тестовый случай состоит из двух целых чисел \(x\) и \(d\), записанных через пробел (\(2 \leq x, d \leq 10^9\)). Гарантируется, что \(x\) кратно \(d\).

Выходные данные

Для каждого набора входных данных выведите «NO», если число нельзя представить хотя бы двумя способами. Иначе, выведите «YES».

Вы можете выводить каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs» будут распознаны как положительный ответ).

Примечание

В первом примере \(6\) можно представить в виде \(6\), \(1 \cdot 6\), \(2 \cdot 3\). Но \(3\) и \(1\) не являются хорошими числами, поскольку не делятся на \(2\), поэтому способ только один.

Во втором примере \(12\) можно представить в виде \(6 \cdot 2\), \(12\), \(3 \cdot 4\), или \(3 \cdot 2 \cdot 2\). Первый вариант подходит. Второй — нет, так как \(12\) не является красивым (\(12 = 6 \cdot 2\)). Третий и четвертый также не подходят, поскольку \(3\) не являетcя хорошим.

В третьем примере \(36\) можно представить в виде \(18 \cdot 2\) и \(6 \cdot 6\). Поэтому его можно разложить хотя бы двумя способами.

B. Целостный массив

Конструктив математика Перебор Структуры данных *1800

Дан массив \(a\) из \(n\) целых положительных чисел, пронумерованных от \(1\) до \(n\). Назовём массив целостным, если для любых двух, не обязательно различных, чисел \(x\) и \(y\) из этого массива, для которых \(x \ge y\), число \(\left \lfloor \frac{x}{y} \right \rfloor\) (частное от деления \(x\) на \(y\) с округлением вниз) тоже лежит в этом массиве.

Известно, что в массиве \(a\) все числа не превосходят \(c\). Ваша задача — проверить, является ли данный массив целостным.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(c\) (\(1 \le n \le 10^6\), \(1 \le c \le 10^6\)) — размер массива \(a\) и ограничение на числа в массиве.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(1 \le a_i \le c\)) — элементы массива \(a\).

Пусть \(N\) обозначает сумму значений \(n\) по всем наборам входных данных, а \(C\) — сумму значений \(c\) по всем наборам входных данных. Гарантируется, что \(N \le 10^6\) и \(C \le 10^6\).

Выходные данные

Для каждого набора входных данных выведите Yes, если массив является целостным, и No иначе.

Примечание

В первом наборе входных данных нетрудно заметить, что массив является целостным:

  • \(\left \lfloor \frac{1}{1} \right \rfloor = 1\), \(a_1 = 1\), число встречается в массиве
  • \(\left \lfloor \frac{2}{2} \right \rfloor = 1\)
  • \(\left \lfloor \frac{5}{5} \right \rfloor = 1\)
  • \(\left \lfloor \frac{2}{1} \right \rfloor = 2\), \(a_2 = 2\), число встречается в массиве
  • \(\left \lfloor \frac{5}{1} \right \rfloor = 5\), \(a_3 = 5\), число встречается в массиве
  • \(\left \lfloor \frac{5}{2} \right \rfloor = 2\), \(a_2 = 2\), число встречается в массиве

Таким образом, условие выполнено, массив является целостным.

Во втором наборе входных данных достаточно заметить, что

\(\left \lfloor \frac{7}{3} \right \rfloor = \left \lfloor 2\frac{1}{3} \right \rfloor = 2\), этого числа нет в массиве \(a\), поэтому он не является целостным.

В третьем наборе входных данных \(\left \lfloor \frac{2}{2} \right \rfloor = 1\), но в массиве есть только число \(2\), поэтому он не является целостным.

D. Петя и циклические сдвиги

Конструктив математика Перебор реализация *1300

У Пети изначально был массив \(a\) целых чисел от \(1\) до \(n\), где \(a[i]=i\).

Он последовательно произвёл \(n\) операций. В итоге он получил новое состояние массива \(a\).

На \(i\)-й операции Петя выбирал первые \(i\) элементов массива и произвольное количество раз совершал их циклический сдвиг вправо (элементы с номерами \(i+1\) и больше оставались на своих местах). Один циклический сдвиг вправо — это такое преобразование, что массив \(a=[a_1, a_2, \dots, a_n]\) станет равен \(a = [a_i, a_1, a_2, \dots, a_{i-2}, a_{i-1}, a_{i+1}, a_{i+2}, \dots, a_n]\).

Например, если \(a = [5,4,2,1,3]\) и \(i=3\) (то есть это третья операция), то в результате этой операции он мог получить любой из трёх массивов:

  • \(a = [5,4,2,1,3]\) (делает \(0\) циклических сдвигов или любое количество, которое делится на \(3\));
  • \(a = [2,5,4,1,3]\) (делает \(1\) циклический сдвиг или любое количество, которое имеет остаток \(1\) при делении на \(3\));
  • \(a = [4,2,5,1,3]\) (делает \(2\) циклических сдвига или любое количество, которое имеет остаток \(2\) при делении на \(3\)).

Рассмотрим пример. Пусть \(n=6\), то есть изначально \(a=[1,2,3,4,5,6]\). Возможный вариант развития событий описан ниже.

  • \(i=1\): сколько бы циклических сдвигов Петя не производил, массив \(a\) не изменится.
  • \(i=2\): допустим Петя решил сделать \(1\) циклический сдвиг, тогда массив примет вид \(a = [\textbf{2}, \textbf{1}, 3, 4, 5, 6]\).
  • \(i=3\): допустим Петя решил сделать \(1\) циклический сдвиг, тогда массив примет вид \(a = [\textbf{3}, \textbf{2}, \textbf{1}, 4, 5, 6]\).
  • \(i=4\): допустим Петя решил сделать \(2\) циклических сдвига, тогда массив примет вид \(a = [\textbf{1}, \textbf{4}, \textbf{3}, \textbf{2}, 5, 6]\).
  • \(i=5\): допустим Петя решил сделать \(0\) циклических сдвигов, тогда массив не изменится.
  • \(i=6\): допустим Петя решил сделать \(4\) циклических сдвига, тогда массив примет вид \(a = [\textbf{3}, \textbf{2}, \textbf{5}, \textbf{6}, \textbf{1}, \textbf{4}]\).

Вам задано финальное состояние массива \(a\) после всех \(n\) операций. Определите, существует ли способ выполнения операций, который приведёт к этому результату. В случае положительного ответа найдите количество циклических сдвигов, которое могло быть сделано во время каждой из \(n\) операций.

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

Первая строка описания каждого набора содержит одно целое число \(n\) (\(2 \le n \le 2\cdot10^3\)) — длина массива \(a\).

В следующей строке задано финальное состояние массива \(a\): записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)). Все \(a_i\) — различны.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных теста не превосходит \(2\cdot10^3\).

Выходные данные

Для каждого набора входных данных выведите ответ на отдельной строке.

Выведите -1, если заданное финальное значение \(a\) нельзя получить, производя произвольное количество циклических сдвигов на каждой операции. Иначе выведите \(n\) неотрицательных целых чисел \(d_1, d_2, \dots, d_n\) (\(d_i \ge 0\)), где \(d_i\) обозначает, что во время \(i\)-й операции первые \(i\) элементов массива были циклически сдвинуты вправо \(d_i\) раз.

Если возможных ответов несколько выведите тот, где суммарное количество сдвигов минимально (то есть сумма значений \(d_i\) наименьшая). Если таких ответов несколько, то выведите любой из них.

Примечание

Первый набор входных данных совпадает с примером из условия.

Второй набор входных данных как видно несложный. Заметим, что ответ \([3, 2, 1]\) также даёт ту же перестановку, но так как суммарное количество сдвигов \(3+2+1\) больше \(0+0+1\), то такой ответ не является правильным.

B. Докажи, что он не прав

жадные алгоритмы Конструктив *800

Недавно, ваш друг обнаружил одну интересную операцию над массивом \(a\):

  1. Выберите два индекса \(i\) и \(j\) (\(i \neq j\));
  2. Присвойте \(a_i = a_j = |a_i - a_j|\).

Поиграв с данной операцией некоторое время, он пришел к следующему утверждению:

  • В любом массиве \(a\) из \(n\) целых чисел, в котором \(1 \le a_i \le 10^9\), вы можете найти пару индексов \((i, j)\) такую, что после применения операции выше общая сумма массива \(a\) уменьшится.

Данное утверждение вам кажется крайне сомнительным, а потому вы хотите найти контрпример для заданного \(n\). Сможете ли вы найти такой контрпример и доказать, что он не прав?

Другими словами, найдите массив \(a\), состоящий из \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)), такой, что для любой пары индексов \((i, j)\) применение операции выше не уменьшает общую сумму (сумма либо возрастает, либо не меняется).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой и единственной строке каждого набора задано одно целое число \(n\) (\(2 \le n \le 1000\)) — длина массива \(a\).

Выходные данные

Для каждого набора входных данных, если не существует контрпримера в виде массива \(a\) размера \(n\), выведите NO.

В противном случае выведите YES и сам массив \(a\) (\(1 \le a_i \le 10^9\)). Если существует несколько контрпримеров, выведите любой.

Примечание

В первом наборе входных данных, единственные возможные пары индексов — это \((1, 2)\) и \((2, 1)\).

Если вы примените операцию к паре \((1, 2)\) (или \((2, 1)\)), вы получите \(a_1 = a_2 = |1 - 337| = 336\), или же массив \([336, 336]\). В обоих случаях, общая сумма увеличивается, а потому данный массив \(a\) является контрпримером.

E. Сумма паросочетаний

жадные алгоритмы Комбинаторика Конструктив математика Паросочетания Перебор поиск в глубину и подобное *2600

Обозначим размер максимального паросочетания в графе \(G\) как \(\mathit{MM}(G)\).

Задан двудольный граф. Вершины первой доли пронумерованы от \(1\) до \(n\). Вершины второй доли пронумерованы от \(n+1\) до \(2n\). Степень каждой вершины равна \(2\).

Для четверки целых чисел \((l, r, L, R)\), где \(1 \le l \le r \le n\) и \(n+1 \le L \le R \le 2n\), определим \(G'(l, r, L, R)\) как граф, который состоит из всех вершин заданного графа, которые находятся либо в отрезке \([l, r]\), либо в отрезке \([L, R]\), и всех ребер заданного графа таких, что вершины их концов принадлежат одному из этих отрезков. Другими словами, чтобы получить граф \(G'(l, r, L, R)\) из изначального графа, надо удалить все вершины \(i\) такие, что \(i \notin [l, r]\) и \(i \notin [L, R]\), и все инцидентные им ребра.

Посчитайте сумму \(\mathit{MM}(G(l, r, L, R))\) по всем наборам целых чисел \((l, r, L, R)\) таких, что \(1 \le l \le r \le n\) and \(n+1 \le L \le R \le 2n\).

Входные данные

В первой строке записано одно целое число \(n\) (\(2 \le n \le 1500\)) — количество вершин в каждой доле.

Затем следует \(2n\) строке, в каждой записано ребро графа. В \(i\)-й строке записано два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i \le n\); \(n + 1 \le y_i \le 2n\)) — концы \(i\)-го ребра.

В графе нет кратных ребер, и у каждой вершины ровно два инцидентных ребра.

Выходные данные

Выведите одно целое число — сумму \(\mathit{MM}(G(l, r, L, R))\) по всем наборам целых чисел \((l, r, L, R)\), у которых \(1 \le l \le r \le n\) и \(n+1 \le L \le R \le 2n\).

H. Три минимума

бпф дп Комбинаторика Конструктив математика разделяй и властвуй *3500

Для набора различных чисел мы называем первым минимумом, вторым минимумом и третьим минимумом три наименьших значения (в возрастающем порядке).

Перестановка \(p_1, p_2, \dots, p_n\) называется хорошей, если для всех пар \((l,r)\), удовлетворяющих \(1\le l < l+2 \le r\le n\), выполняется следующее условие.

  • Если \(\{p_l, p_r\}\) являются (не обязательно в таком порядке) первым и вторым минимумами среди \(p_l, p_{l+1}, \dots, p_r\), то третий минимум среди \(p_l, p_{l+1},\dots, p_r\) это либо \(p_{l+1}\), либо \(p_{r-1}\).

Вам дано целое число \(n\) и строка \(s\) длины \(m\), состоящая из символов «<» и «>».

Вычислите количество хороших перестановок \(p_1, p_2,\dots, p_n\) таких, что для всех \(1\le i\le m\),

  • \(p_i < p_{i+1}\), если \(s_i =\) «<»;
  • \(p_i > p_{i+1}\), если \(s_i =\) «>».
Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \leq m \leq \min(100, n-1)\)).

Вторая строка содержит строку \(s\) длины \(m\), состоящую из символов «<» и «>».

Выходные данные

Выведите одно целое число: количество хороших перестановок, удовлетворяющих ограничениям из условия, по модулю \(998\,244\,353\).

Примечание

В первом примере существуют \(5\) хороших перестановок, удовлетворяющих условиям, задаваемым строкой \(s\): \([4, 3, 2, 1, 5]\), \([5, 3, 2, 1, 4]\), \([5, 4, 2, 1, 3]\), \([5, 4, 3, 1, 2]\), \([5, 4, 3, 2, 1]\). Каждая из них

  • хорошая;
  • удовлетворяет \(p_1 > p_2\);
  • удовлетворяет \(p_2 > p_3\);
  • удовлетворяет \(p_3 > p_4\).

Во втором примере существуют \(60\) перестановок таких, что \(p_1 < p_2\). Только \(56\) из них хорошие: перестановки \([1, 4, 3, 5, 2]\), \([1, 5, 3, 4, 2]\), \([2, 4, 3, 5, 1]\), \([2, 5, 3, 4, 1]\) не являются хорошими, потому что необходимое условие не выполнено для \((l, r)\) = \((1, 5)\). Например, для перестановки \([2, 4, 3, 5, 1]\),

  • первый и второй минимумы — это \(p_5\) и \(p_1\) соответственно (то есть \(\{p_l, p_r\}\) с точностью до порядка);
  • третий минимум \(p_3\) (то есть ни \(p_{l+1}\), ни \(p_{r-1}\)).

В третьем примере есть \(23\) хорошие перестановки, удовлетворяющие ограничениям строки \(s\): \([1, 2, 4, 3, 6, 5]\), \([1, 2, 5, 3, 6, 4]\), \([1, 2, 6, 3, 5, 4]\), \([1, 3, 4, 2, 6, 5]\), \([1, 3, 5, 2, 6, 4]\), \([1, 3, 6, 2, 5, 4]\), \([1, 4, 5, 2, 6, 3]\), \([1, 4, 6, 2, 5, 3]\), \([1, 5, 6, 2, 4, 3]\), \([2, 3, 4, 1, 6, 5]\), \([2, 3, 5, 1, 6, 4]\), \([2, 3, 6, 1, 5, 4]\), \([2, 4, 5, 1, 6, 3]\), \([2, 4, 6, 1, 5, 3]\), \([2, 5, 6, 1, 4, 3]\), \([3, 4, 5, 1, 6, 2]\), \([3, 4, 5, 2, 6, 1]\), \([3, 4, 6, 1, 5, 2]\), \([3, 4, 6, 2, 5, 1]\), \([3, 5, 6, 1, 4, 2]\), \([3, 5, 6, 2, 4, 1]\), \([4, 5, 6, 1, 3, 2]\), \([4, 5, 6, 2, 3, 1]\).

H. Три минимума

бпф дп Комбинаторика Конструктив математика разделяй и властвуй *3500

Для набора различных чисел мы называем первым минимумом, вторым минимумом и третьим минимумом три наименьших значения (в возрастающем порядке).

Перестановка \(p_1, p_2, \dots, p_n\) называется хорошей, если для всех пар \((l,r)\), удовлетворяющих \(1\le l < l+2 \le r\le n\), выполняется следующее условие.

  • Если \(\{p_l, p_r\}\) являются (не обязательно в таком порядке) первым и вторым минимумами среди \(p_l, p_{l+1}, \dots, p_r\), то третий минимум среди \(p_l, p_{l+1},\dots, p_r\) это либо \(p_{l+1}\), либо \(p_{r-1}\).

Вам дано целое число \(n\) и строка \(s\) длины \(m\), состоящая из символов «<» и «>».

Вычислите количество хороших перестановок \(p_1, p_2,\dots, p_n\) таких, что для всех \(1\le i\le m\),

  • \(p_i < p_{i+1}\), если \(s_i =\) «<»;
  • \(p_i > p_{i+1}\), если \(s_i =\) «>».
Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \leq m \leq \min(100, n-1)\)).

Вторая строка содержит строку \(s\) длины \(m\), состоящую из символов «<» и «>».

Выходные данные

Выведите одно целое число: количество хороших перестановок, удовлетворяющих ограничениям из условия, по модулю \(998\,244\,353\).

Примечание

В первом примере существуют \(5\) хороших перестановок, удовлетворяющих условиям, задаваемым строкой \(s\): \([4, 3, 2, 1, 5]\), \([5, 3, 2, 1, 4]\), \([5, 4, 2, 1, 3]\), \([5, 4, 3, 1, 2]\), \([5, 4, 3, 2, 1]\). Каждая из них

  • хорошая;
  • удовлетворяет \(p_1 > p_2\);
  • удовлетворяет \(p_2 > p_3\);
  • удовлетворяет \(p_3 > p_4\).

Во втором примере существуют \(60\) перестановок таких, что \(p_1 < p_2\). Только \(56\) из них хорошие: перестановки \([1, 4, 3, 5, 2]\), \([1, 5, 3, 4, 2]\), \([2, 4, 3, 5, 1]\), \([2, 5, 3, 4, 1]\) не являются хорошими, потому что необходимое условие не выполнено для \((l, r)\) = \((1, 5)\). Например, для перестановки \([2, 4, 3, 5, 1]\),

  • первый и второй минимумы — это \(p_5\) и \(p_1\) соответственно (то есть \(\{p_l, p_r\}\) с точностью до порядка);
  • третий минимум \(p_3\) (то есть ни \(p_{l+1}\), ни \(p_{r-1}\)).

В третьем примере есть \(23\) хорошие перестановки, удовлетворяющие ограничениям строки \(s\): \([1, 2, 4, 3, 6, 5]\), \([1, 2, 5, 3, 6, 4]\), \([1, 2, 6, 3, 5, 4]\), \([1, 3, 4, 2, 6, 5]\), \([1, 3, 5, 2, 6, 4]\), \([1, 3, 6, 2, 5, 4]\), \([1, 4, 5, 2, 6, 3]\), \([1, 4, 6, 2, 5, 3]\), \([1, 5, 6, 2, 4, 3]\), \([2, 3, 4, 1, 6, 5]\), \([2, 3, 5, 1, 6, 4]\), \([2, 3, 6, 1, 5, 4]\), \([2, 4, 5, 1, 6, 3]\), \([2, 4, 6, 1, 5, 3]\), \([2, 5, 6, 1, 4, 3]\), \([3, 4, 5, 1, 6, 2]\), \([3, 4, 5, 2, 6, 1]\), \([3, 4, 6, 1, 5, 2]\), \([3, 4, 6, 2, 5, 1]\), \([3, 5, 6, 1, 4, 2]\), \([3, 5, 6, 2, 4, 1]\), \([4, 5, 6, 1, 3, 2]\), \([4, 5, 6, 2, 3, 1]\).

H. Три минимума

бпф дп Комбинаторика Конструктив математика разделяй и властвуй *3500

Для набора различных чисел мы называем первым минимумом, вторым минимумом и третьим минимумом три наименьших значения (в возрастающем порядке).

Перестановка \(p_1, p_2, \dots, p_n\) называется хорошей, если для всех пар \((l,r)\), удовлетворяющих \(1\le l < l+2 \le r\le n\), выполняется следующее условие.

  • Если \(\{p_l, p_r\}\) являются (не обязательно в таком порядке) первым и вторым минимумами среди \(p_l, p_{l+1}, \dots, p_r\), то третий минимум среди \(p_l, p_{l+1},\dots, p_r\) это либо \(p_{l+1}\), либо \(p_{r-1}\).

Вам дано целое число \(n\) и строка \(s\) длины \(m\), состоящая из символов «<» и «>».

Вычислите количество хороших перестановок \(p_1, p_2,\dots, p_n\) таких, что для всех \(1\le i\le m\),

  • \(p_i < p_{i+1}\), если \(s_i =\) «<»;
  • \(p_i > p_{i+1}\), если \(s_i =\) «>».
Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \leq m \leq \min(100, n-1)\)).

Вторая строка содержит строку \(s\) длины \(m\), состоящую из символов «<» и «>».

Выходные данные

Выведите одно целое число: количество хороших перестановок, удовлетворяющих ограничениям из условия, по модулю \(998\,244\,353\).

Примечание

В первом примере существуют \(5\) хороших перестановок, удовлетворяющих условиям, задаваемым строкой \(s\): \([4, 3, 2, 1, 5]\), \([5, 3, 2, 1, 4]\), \([5, 4, 2, 1, 3]\), \([5, 4, 3, 1, 2]\), \([5, 4, 3, 2, 1]\). Каждая из них

  • хорошая;
  • удовлетворяет \(p_1 > p_2\);
  • удовлетворяет \(p_2 > p_3\);
  • удовлетворяет \(p_3 > p_4\).

Во втором примере существуют \(60\) перестановок таких, что \(p_1 < p_2\). Только \(56\) из них хорошие: перестановки \([1, 4, 3, 5, 2]\), \([1, 5, 3, 4, 2]\), \([2, 4, 3, 5, 1]\), \([2, 5, 3, 4, 1]\) не являются хорошими, потому что необходимое условие не выполнено для \((l, r)\) = \((1, 5)\). Например, для перестановки \([2, 4, 3, 5, 1]\),

  • первый и второй минимумы — это \(p_5\) и \(p_1\) соответственно (то есть \(\{p_l, p_r\}\) с точностью до порядка);
  • третий минимум \(p_3\) (то есть ни \(p_{l+1}\), ни \(p_{r-1}\)).

В третьем примере есть \(23\) хорошие перестановки, удовлетворяющие ограничениям строки \(s\): \([1, 2, 4, 3, 6, 5]\), \([1, 2, 5, 3, 6, 4]\), \([1, 2, 6, 3, 5, 4]\), \([1, 3, 4, 2, 6, 5]\), \([1, 3, 5, 2, 6, 4]\), \([1, 3, 6, 2, 5, 4]\), \([1, 4, 5, 2, 6, 3]\), \([1, 4, 6, 2, 5, 3]\), \([1, 5, 6, 2, 4, 3]\), \([2, 3, 4, 1, 6, 5]\), \([2, 3, 5, 1, 6, 4]\), \([2, 3, 6, 1, 5, 4]\), \([2, 4, 5, 1, 6, 3]\), \([2, 4, 6, 1, 5, 3]\), \([2, 5, 6, 1, 4, 3]\), \([3, 4, 5, 1, 6, 2]\), \([3, 4, 5, 2, 6, 1]\), \([3, 4, 6, 1, 5, 2]\), \([3, 4, 6, 2, 5, 1]\), \([3, 5, 6, 1, 4, 2]\), \([3, 5, 6, 2, 4, 1]\), \([4, 5, 6, 1, 3, 2]\), \([4, 5, 6, 2, 3, 1]\).

H. Три минимума

бпф дп Комбинаторика Конструктив математика разделяй и властвуй *3500

Для набора различных чисел мы называем первым минимумом, вторым минимумом и третьим минимумом три наименьших значения (в возрастающем порядке).

Перестановка \(p_1, p_2, \dots, p_n\) называется хорошей, если для всех пар \((l,r)\), удовлетворяющих \(1\le l < l+2 \le r\le n\), выполняется следующее условие.

  • Если \(\{p_l, p_r\}\) являются (не обязательно в таком порядке) первым и вторым минимумами среди \(p_l, p_{l+1}, \dots, p_r\), то третий минимум среди \(p_l, p_{l+1},\dots, p_r\) это либо \(p_{l+1}\), либо \(p_{r-1}\).

Вам дано целое число \(n\) и строка \(s\) длины \(m\), состоящая из символов «<» и «>».

Вычислите количество хороших перестановок \(p_1, p_2,\dots, p_n\) таких, что для всех \(1\le i\le m\),

  • \(p_i < p_{i+1}\), если \(s_i =\) «<»;
  • \(p_i > p_{i+1}\), если \(s_i =\) «>».
Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \leq m \leq \min(100, n-1)\)).

Вторая строка содержит строку \(s\) длины \(m\), состоящую из символов «<» и «>».

Выходные данные

Выведите одно целое число: количество хороших перестановок, удовлетворяющих ограничениям из условия, по модулю \(998\,244\,353\).

Примечание

В первом примере существуют \(5\) хороших перестановок, удовлетворяющих условиям, задаваемым строкой \(s\): \([4, 3, 2, 1, 5]\), \([5, 3, 2, 1, 4]\), \([5, 4, 2, 1, 3]\), \([5, 4, 3, 1, 2]\), \([5, 4, 3, 2, 1]\). Каждая из них

  • хорошая;
  • удовлетворяет \(p_1 > p_2\);
  • удовлетворяет \(p_2 > p_3\);
  • удовлетворяет \(p_3 > p_4\).

Во втором примере существуют \(60\) перестановок таких, что \(p_1 < p_2\). Только \(56\) из них хорошие: перестановки \([1, 4, 3, 5, 2]\), \([1, 5, 3, 4, 2]\), \([2, 4, 3, 5, 1]\), \([2, 5, 3, 4, 1]\) не являются хорошими, потому что необходимое условие не выполнено для \((l, r)\) = \((1, 5)\). Например, для перестановки \([2, 4, 3, 5, 1]\),

  • первый и второй минимумы — это \(p_5\) и \(p_1\) соответственно (то есть \(\{p_l, p_r\}\) с точностью до порядка);
  • третий минимум \(p_3\) (то есть ни \(p_{l+1}\), ни \(p_{r-1}\)).

В третьем примере есть \(23\) хорошие перестановки, удовлетворяющие ограничениям строки \(s\): \([1, 2, 4, 3, 6, 5]\), \([1, 2, 5, 3, 6, 4]\), \([1, 2, 6, 3, 5, 4]\), \([1, 3, 4, 2, 6, 5]\), \([1, 3, 5, 2, 6, 4]\), \([1, 3, 6, 2, 5, 4]\), \([1, 4, 5, 2, 6, 3]\), \([1, 4, 6, 2, 5, 3]\), \([1, 5, 6, 2, 4, 3]\), \([2, 3, 4, 1, 6, 5]\), \([2, 3, 5, 1, 6, 4]\), \([2, 3, 6, 1, 5, 4]\), \([2, 4, 5, 1, 6, 3]\), \([2, 4, 6, 1, 5, 3]\), \([2, 5, 6, 1, 4, 3]\), \([3, 4, 5, 1, 6, 2]\), \([3, 4, 5, 2, 6, 1]\), \([3, 4, 6, 1, 5, 2]\), \([3, 4, 6, 2, 5, 1]\), \([3, 5, 6, 1, 4, 2]\), \([3, 5, 6, 2, 4, 1]\), \([4, 5, 6, 1, 3, 2]\), \([4, 5, 6, 2, 3, 1]\).

H. Три минимума

бпф дп Комбинаторика Конструктив математика разделяй и властвуй *3500

Для набора различных чисел мы называем первым минимумом, вторым минимумом и третьим минимумом три наименьших значения (в возрастающем порядке).

Перестановка \(p_1, p_2, \dots, p_n\) называется хорошей, если для всех пар \((l,r)\), удовлетворяющих \(1\le l < l+2 \le r\le n\), выполняется следующее условие.

  • Если \(\{p_l, p_r\}\) являются (не обязательно в таком порядке) первым и вторым минимумами среди \(p_l, p_{l+1}, \dots, p_r\), то третий минимум среди \(p_l, p_{l+1},\dots, p_r\) это либо \(p_{l+1}\), либо \(p_{r-1}\).

Вам дано целое число \(n\) и строка \(s\) длины \(m\), состоящая из символов «<» и «>».

Вычислите количество хороших перестановок \(p_1, p_2,\dots, p_n\) таких, что для всех \(1\le i\le m\),

  • \(p_i < p_{i+1}\), если \(s_i =\) «<»;
  • \(p_i > p_{i+1}\), если \(s_i =\) «>».
Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \leq m \leq \min(100, n-1)\)).

Вторая строка содержит строку \(s\) длины \(m\), состоящую из символов «<» и «>».

Выходные данные

Выведите одно целое число: количество хороших перестановок, удовлетворяющих ограничениям из условия, по модулю \(998\,244\,353\).

Примечание

В первом примере существуют \(5\) хороших перестановок, удовлетворяющих условиям, задаваемым строкой \(s\): \([4, 3, 2, 1, 5]\), \([5, 3, 2, 1, 4]\), \([5, 4, 2, 1, 3]\), \([5, 4, 3, 1, 2]\), \([5, 4, 3, 2, 1]\). Каждая из них

  • хорошая;
  • удовлетворяет \(p_1 > p_2\);
  • удовлетворяет \(p_2 > p_3\);
  • удовлетворяет \(p_3 > p_4\).

Во втором примере существуют \(60\) перестановок таких, что \(p_1 < p_2\). Только \(56\) из них хорошие: перестановки \([1, 4, 3, 5, 2]\), \([1, 5, 3, 4, 2]\), \([2, 4, 3, 5, 1]\), \([2, 5, 3, 4, 1]\) не являются хорошими, потому что необходимое условие не выполнено для \((l, r)\) = \((1, 5)\). Например, для перестановки \([2, 4, 3, 5, 1]\),

  • первый и второй минимумы — это \(p_5\) и \(p_1\) соответственно (то есть \(\{p_l, p_r\}\) с точностью до порядка);
  • третий минимум \(p_3\) (то есть ни \(p_{l+1}\), ни \(p_{r-1}\)).

В третьем примере есть \(23\) хорошие перестановки, удовлетворяющие ограничениям строки \(s\): \([1, 2, 4, 3, 6, 5]\), \([1, 2, 5, 3, 6, 4]\), \([1, 2, 6, 3, 5, 4]\), \([1, 3, 4, 2, 6, 5]\), \([1, 3, 5, 2, 6, 4]\), \([1, 3, 6, 2, 5, 4]\), \([1, 4, 5, 2, 6, 3]\), \([1, 4, 6, 2, 5, 3]\), \([1, 5, 6, 2, 4, 3]\), \([2, 3, 4, 1, 6, 5]\), \([2, 3, 5, 1, 6, 4]\), \([2, 3, 6, 1, 5, 4]\), \([2, 4, 5, 1, 6, 3]\), \([2, 4, 6, 1, 5, 3]\), \([2, 5, 6, 1, 4, 3]\), \([3, 4, 5, 1, 6, 2]\), \([3, 4, 5, 2, 6, 1]\), \([3, 4, 6, 1, 5, 2]\), \([3, 4, 6, 2, 5, 1]\), \([3, 5, 6, 1, 4, 2]\), \([3, 5, 6, 2, 4, 1]\), \([4, 5, 6, 1, 3, 2]\), \([4, 5, 6, 2, 3, 1]\).

H. Три минимума

бпф дп Комбинаторика Конструктив математика разделяй и властвуй *3500

Для набора различных чисел мы называем первым минимумом, вторым минимумом и третьим минимумом три наименьших значения (в возрастающем порядке).

Перестановка \(p_1, p_2, \dots, p_n\) называется хорошей, если для всех пар \((l,r)\), удовлетворяющих \(1\le l < l+2 \le r\le n\), выполняется следующее условие.

  • Если \(\{p_l, p_r\}\) являются (не обязательно в таком порядке) первым и вторым минимумами среди \(p_l, p_{l+1}, \dots, p_r\), то третий минимум среди \(p_l, p_{l+1},\dots, p_r\) это либо \(p_{l+1}\), либо \(p_{r-1}\).

Вам дано целое число \(n\) и строка \(s\) длины \(m\), состоящая из символов «<» и «>».

Вычислите количество хороших перестановок \(p_1, p_2,\dots, p_n\) таких, что для всех \(1\le i\le m\),

  • \(p_i < p_{i+1}\), если \(s_i =\) «<»;
  • \(p_i > p_{i+1}\), если \(s_i =\) «>».
Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \leq m \leq \min(100, n-1)\)).

Вторая строка содержит строку \(s\) длины \(m\), состоящую из символов «<» и «>».

Выходные данные

Выведите одно целое число: количество хороших перестановок, удовлетворяющих ограничениям из условия, по модулю \(998\,244\,353\).

Примечание

В первом примере существуют \(5\) хороших перестановок, удовлетворяющих условиям, задаваемым строкой \(s\): \([4, 3, 2, 1, 5]\), \([5, 3, 2, 1, 4]\), \([5, 4, 2, 1, 3]\), \([5, 4, 3, 1, 2]\), \([5, 4, 3, 2, 1]\). Каждая из них

  • хорошая;
  • удовлетворяет \(p_1 > p_2\);
  • удовлетворяет \(p_2 > p_3\);
  • удовлетворяет \(p_3 > p_4\).

Во втором примере существуют \(60\) перестановок таких, что \(p_1 < p_2\). Только \(56\) из них хорошие: перестановки \([1, 4, 3, 5, 2]\), \([1, 5, 3, 4, 2]\), \([2, 4, 3, 5, 1]\), \([2, 5, 3, 4, 1]\) не являются хорошими, потому что необходимое условие не выполнено для \((l, r)\) = \((1, 5)\). Например, для перестановки \([2, 4, 3, 5, 1]\),

  • первый и второй минимумы — это \(p_5\) и \(p_1\) соответственно (то есть \(\{p_l, p_r\}\) с точностью до порядка);
  • третий минимум \(p_3\) (то есть ни \(p_{l+1}\), ни \(p_{r-1}\)).

В третьем примере есть \(23\) хорошие перестановки, удовлетворяющие ограничениям строки \(s\): \([1, 2, 4, 3, 6, 5]\), \([1, 2, 5, 3, 6, 4]\), \([1, 2, 6, 3, 5, 4]\), \([1, 3, 4, 2, 6, 5]\), \([1, 3, 5, 2, 6, 4]\), \([1, 3, 6, 2, 5, 4]\), \([1, 4, 5, 2, 6, 3]\), \([1, 4, 6, 2, 5, 3]\), \([1, 5, 6, 2, 4, 3]\), \([2, 3, 4, 1, 6, 5]\), \([2, 3, 5, 1, 6, 4]\), \([2, 3, 6, 1, 5, 4]\), \([2, 4, 5, 1, 6, 3]\), \([2, 4, 6, 1, 5, 3]\), \([2, 5, 6, 1, 4, 3]\), \([3, 4, 5, 1, 6, 2]\), \([3, 4, 5, 2, 6, 1]\), \([3, 4, 6, 1, 5, 2]\), \([3, 4, 6, 2, 5, 1]\), \([3, 5, 6, 1, 4, 2]\), \([3, 5, 6, 2, 4, 1]\), \([4, 5, 6, 1, 3, 2]\), \([4, 5, 6, 2, 3, 1]\).

H. Три минимума

бпф дп Комбинаторика Конструктив математика разделяй и властвуй *3500

Для набора различных чисел мы называем первым минимумом, вторым минимумом и третьим минимумом три наименьших значения (в возрастающем порядке).

Перестановка \(p_1, p_2, \dots, p_n\) называется хорошей, если для всех пар \((l,r)\), удовлетворяющих \(1\le l < l+2 \le r\le n\), выполняется следующее условие.

  • Если \(\{p_l, p_r\}\) являются (не обязательно в таком порядке) первым и вторым минимумами среди \(p_l, p_{l+1}, \dots, p_r\), то третий минимум среди \(p_l, p_{l+1},\dots, p_r\) это либо \(p_{l+1}\), либо \(p_{r-1}\).

Вам дано целое число \(n\) и строка \(s\) длины \(m\), состоящая из символов «<» и «>».

Вычислите количество хороших перестановок \(p_1, p_2,\dots, p_n\) таких, что для всех \(1\le i\le m\),

  • \(p_i < p_{i+1}\), если \(s_i =\) «<»;
  • \(p_i > p_{i+1}\), если \(s_i =\) «>».
Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \leq m \leq \min(100, n-1)\)).

Вторая строка содержит строку \(s\) длины \(m\), состоящую из символов «<» и «>».

Выходные данные

Выведите одно целое число: количество хороших перестановок, удовлетворяющих ограничениям из условия, по модулю \(998\,244\,353\).

Примечание

В первом примере существуют \(5\) хороших перестановок, удовлетворяющих условиям, задаваемым строкой \(s\): \([4, 3, 2, 1, 5]\), \([5, 3, 2, 1, 4]\), \([5, 4, 2, 1, 3]\), \([5, 4, 3, 1, 2]\), \([5, 4, 3, 2, 1]\). Каждая из них

  • хорошая;
  • удовлетворяет \(p_1 > p_2\);
  • удовлетворяет \(p_2 > p_3\);
  • удовлетворяет \(p_3 > p_4\).

Во втором примере существуют \(60\) перестановок таких, что \(p_1 < p_2\). Только \(56\) из них хорошие: перестановки \([1, 4, 3, 5, 2]\), \([1, 5, 3, 4, 2]\), \([2, 4, 3, 5, 1]\), \([2, 5, 3, 4, 1]\) не являются хорошими, потому что необходимое условие не выполнено для \((l, r)\) = \((1, 5)\). Например, для перестановки \([2, 4, 3, 5, 1]\),

  • первый и второй минимумы — это \(p_5\) и \(p_1\) соответственно (то есть \(\{p_l, p_r\}\) с точностью до порядка);
  • третий минимум \(p_3\) (то есть ни \(p_{l+1}\), ни \(p_{r-1}\)).

В третьем примере есть \(23\) хорошие перестановки, удовлетворяющие ограничениям строки \(s\): \([1, 2, 4, 3, 6, 5]\), \([1, 2, 5, 3, 6, 4]\), \([1, 2, 6, 3, 5, 4]\), \([1, 3, 4, 2, 6, 5]\), \([1, 3, 5, 2, 6, 4]\), \([1, 3, 6, 2, 5, 4]\), \([1, 4, 5, 2, 6, 3]\), \([1, 4, 6, 2, 5, 3]\), \([1, 5, 6, 2, 4, 3]\), \([2, 3, 4, 1, 6, 5]\), \([2, 3, 5, 1, 6, 4]\), \([2, 3, 6, 1, 5, 4]\), \([2, 4, 5, 1, 6, 3]\), \([2, 4, 6, 1, 5, 3]\), \([2, 5, 6, 1, 4, 3]\), \([3, 4, 5, 1, 6, 2]\), \([3, 4, 5, 2, 6, 1]\), \([3, 4, 6, 1, 5, 2]\), \([3, 4, 6, 2, 5, 1]\), \([3, 5, 6, 1, 4, 2]\), \([3, 5, 6, 2, 4, 1]\), \([4, 5, 6, 1, 3, 2]\), \([4, 5, 6, 2, 3, 1]\).

H. Три минимума

бпф дп Комбинаторика Конструктив математика разделяй и властвуй *3500

Для набора различных чисел мы называем первым минимумом, вторым минимумом и третьим минимумом три наименьших значения (в возрастающем порядке).

Перестановка \(p_1, p_2, \dots, p_n\) называется хорошей, если для всех пар \((l,r)\), удовлетворяющих \(1\le l < l+2 \le r\le n\), выполняется следующее условие.

  • Если \(\{p_l, p_r\}\) являются (не обязательно в таком порядке) первым и вторым минимумами среди \(p_l, p_{l+1}, \dots, p_r\), то третий минимум среди \(p_l, p_{l+1},\dots, p_r\) это либо \(p_{l+1}\), либо \(p_{r-1}\).

Вам дано целое число \(n\) и строка \(s\) длины \(m\), состоящая из символов «<» и «>».

Вычислите количество хороших перестановок \(p_1, p_2,\dots, p_n\) таких, что для всех \(1\le i\le m\),

  • \(p_i < p_{i+1}\), если \(s_i =\) «<»;
  • \(p_i > p_{i+1}\), если \(s_i =\) «>».
Так как ответ может быть большим, выведите его по модулю \(998\,244\,353\).
Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\), \(1 \leq m \leq \min(100, n-1)\)).

Вторая строка содержит строку \(s\) длины \(m\), состоящую из символов «<» и «>».

Выходные данные

Выведите одно целое число: количество хороших перестановок, удовлетворяющих ограничениям из условия, по модулю \(998\,244\,353\).

Примечание

В первом примере существуют \(5\) хороших перестановок, удовлетворяющих условиям, задаваемым строкой \(s\): \([4, 3, 2, 1, 5]\), \([5, 3, 2, 1, 4]\), \([5, 4, 2, 1, 3]\), \([5, 4, 3, 1, 2]\), \([5, 4, 3, 2, 1]\). Каждая из них

  • хорошая;
  • удовлетворяет \(p_1 > p_2\);
  • удовлетворяет \(p_2 > p_3\);
  • удовлетворяет \(p_3 > p_4\).

Во втором примере существуют \(60\) перестановок таких, что \(p_1 < p_2\). Только \(56\) из них хорошие: перестановки \([1, 4, 3, 5, 2]\), \([1, 5, 3, 4, 2]\), \([2, 4, 3, 5, 1]\), \([2, 5, 3, 4, 1]\) не являются хорошими, потому что необходимое условие не выполнено для \((l, r)\) = \((1, 5)\). Например, для перестановки \([2, 4, 3, 5, 1]\),

  • первый и второй минимумы — это \(p_5\) и \(p_1\) соответственно (то есть \(\{p_l, p_r\}\) с точностью до порядка);
  • третий минимум \(p_3\) (то есть ни \(p_{l+1}\), ни \(p_{r-1}\)).

В третьем примере есть \(23\) хорошие перестановки, удовлетворяющие ограничениям строки \(s\): \([1, 2, 4, 3, 6, 5]\), \([1, 2, 5, 3, 6, 4]\), \([1, 2, 6, 3, 5, 4]\), \([1, 3, 4, 2, 6, 5]\), \([1, 3, 5, 2, 6, 4]\), \([1, 3, 6, 2, 5, 4]\), \([1, 4, 5, 2, 6, 3]\), \([1, 4, 6, 2, 5, 3]\), \([1, 5, 6, 2, 4, 3]\), \([2, 3, 4, 1, 6, 5]\), \([2, 3, 5, 1, 6, 4]\), \([2, 3, 6, 1, 5, 4]\), \([2, 4, 5, 1, 6, 3]\), \([2, 4, 6, 1, 5, 3]\), \([2, 5, 6, 1, 4, 3]\), \([3, 4, 5, 1, 6, 2]\), \([3, 4, 5, 2, 6, 1]\), \([3, 4, 6, 1, 5, 2]\), \([3, 4, 6, 2, 5, 1]\), \([3, 5, 6, 1, 4, 2]\), \([3, 5, 6, 2, 4, 1]\), \([4, 5, 6, 1, 3, 2]\), \([4, 5, 6, 2, 3, 1]\).

C. Сделай равным по модулю

Конструктив математика сортировки теория чисел *1200

Вам дан массив из \(n\) целых неотрицательных чисел \(a_1, a_2, \ldots, a_n\). Можно выполнить следующую операцию: выбрать целое число \(x \geq 2\) и заменить каждое число массива остатком при делении этого числа на \(x\), то есть для всех \(1 \leq i \leq n\) заменить \(a_i\) на \(a_i \bmod x\).

Определите, можно ли сделать все элементы массива равными, применяя операцию ноль или более раз.

Входные данные

Входные данные состоят из нескольких наборов входных данных. В первой строке записано единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 10^5\)) — длину массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^9\)), где \(a_i\)\(i\)-й элемент массива.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого теста выведите строку с «YES», если вы можете сделать все элементы списка равными, применяя операцию. В противном случае выведите «NO».

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных можно применить операцию с \(x = 3\) для получения массива \([2, 2, 0, 2]\), а затем применить операцию с \(x = 2\) для получения \([0, 0, 0, 0]\).

Во втором наборе входных данных все числа уже равны.

В четвертом наборе входных данных операция с \(x = 4\) приводит к массиву \([1, 1, 1, 1]\).

D. K-хорошие

Конструктив математика теория чисел *1900

Мы говорим, что натуральное число \(n\) является \(k\)-хорошим для некоторого положительного целого числа \(k\), если \(n\) можно представить в виде суммы \(k\) целых положительных чисел, которые дают \(k\) различных остатков при делении на \(k\).

По заданному натуральному числу \(n\) найдите такое \(k \geq 2\), что \(n\) является \(k\)-хорошим, или скажите, что такого \(k\) не существует.

Входные данные

Входные данные состоят из нескольких наборов входных данных. В первой строке записано единственное целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки с целым числом \(n\) (\(2 \leq n \leq 10^{18}\)).

Выходные данные

Для каждого набора входных данных выведите строку со значением \(k\) таким, что \(n\) является \(k\)-хорошим (\(k \geq 2\)), или \(-1\), если \(n\) не является \(k\)-хорошим для любых \(k\). Если существует несколько допустимых значений \(k\), вы можете вывести любое из них.

Примечание

\(6\) является \(3\)-хорошим числом, поскольку его можно представить в виде суммы \(3\) чисел, которые дают разные остатки при делении на \(3\): \(6 = 1 + 2 + 3\).

\(15\) также является \(3\)-хорошим числом, поскольку \(15 = 1 + 5 + 9\), а \(1, 5, 9\) дают разные остатки при делении на \(3\).

\(20\) — это \(5\)-хорошее число, поскольку \(20 = 2 + 3 + 4 + 5 + 6\) и \(2,3,4,5,6\) дают разные остатки при делении на \(5\).

E. Одинаковые суммы деревьев

Деревья Конструктив математика поиск в глубину и подобное *2200

Вам дано неориентированное некорневое дерево — связный неориентированный граф без циклов.

Вы должны присвоить каждой вершине ненулевой целочисленный вес так, чтобы выполнялось следующее: если удалить любую вершину дерева, то все оставшиеся компоненты связности имеют одинаковую сумму весов в своих вершинах.

Входные данные

Входные данные состоят из нескольких наборов входных данных. В первой строке записано единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(3 \leq n \leq 10^5\)) — количество вершин дерева.

Следующие \(n-1\) строк каждого случая содержат по два целых числа \(u, v\) (\(1 \leq u,v \leq n\)), обозначающих наличие ребра между вершинами \(u\) и \(v\). Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных необходимо вывести одну строку с \(n\) целыми числами \(a_1, a_2, \ldots, a_n\), разделенными пробелами, где \(a_i\) — вес, присвоенный вершине \(i\). Веса должны удовлетворять \(-10^5 \leq a_i \leq 10^5\) и \(a_i \neq 0\).

Можно показать, что всегда существует решение, удовлетворяющее этим ограничениям. Если возможных решений несколько, выведите любое из них.

Примечание

В первом случае при удалении вершины \(1\) все оставшиеся компоненты связности имеют сумму весов \(5\), а при удалении вершины \(3\) все оставшиеся компоненты связности имеют сумму весов \(2\). При удалении других вершин остается только одна компонента связности, поэтому все оставшиеся компоненты связности имеют одинаковую сумму весов.

F. Параметрическое MST

Бинарный поиск графы жадные алгоритмы Конструктив математика сортировки *2600

Вам дано \(n\) целых чисел \(a_1, a_2, \ldots, a_n\). Для любого вещественного числа \(t\) рассмотрим полный взвешенный граф на \(n\) вершинах \(K_n(t)\) с весом ребра между вершинами \(i\) и \(j\), равным \(w_{ij}(t) = a_i \cdot a_j + t \cdot (a_i + a_j)\).

Пусть \(f(t)\) будет стоимостью минимального остовного дерева для \(K_n(t)\). Определите, ограничена ли \(f(t)\) сверху, и если да, то выведите максимальное значение, которое она достигает.

Входные данные

Входные данные состоят из нескольких наборов входных данных. В первой строке записано одно целое число \(T\) (\(1 \leq T \leq 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — количество вершин графа.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^6 \leq a_i \leq 10^6\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку с максимальным значением \(f(t)\) (можно показать, что это целое число) или «INF», если \(f(t)\) не ограничена сверху.

G. Циклические палиндромы

графы Конструктив математика *3200

Мы говорим, что последовательность из \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) является палиндромом, если для всех \(1 \leq i \leq n\) выполняется \(a_i = a_{n-i+1}\). Вам дана последовательность из \(n\) целых чисел \(a_1, a_2, \ldots, a_n\), и вы должны найти, если она существует, такую циклическую перестановку \(\sigma\), что последовательность \(a_{\sigma(1)}, a_{\sigma(2)}, \ldots, a_{\sigma(n)}\) — палиндром.

Перестановка \(1, 2, \ldots, n\) — это биективная функция из \(\{1, 2, \ldots, n\}\) в \(\{1, 2, \ldots, n\}\). Мы говорим, что перестановка \(\sigma\) является циклической перестановкой, если \(1, \sigma(1), \sigma^2(1), \ldots, \sigma^{n-1}(1)\) — попарно различные числа. Здесь \(\sigma^m(1)\) обозначает \(\underbrace{\sigma(\sigma(\ldots \sigma}_{m \text{ раз}}(1) \ldots))\).

Входные данные

Входные данные состоят из нескольких наборов входных данных. В первой строке записано единственное целое число \(t\) (\(1 \leq t \leq 3 \cdot 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — длину последовательности.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, \ldots, a_n\) (\(1 \leq a_i \leq n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку с «YES», если необходимая циклическая перестановка существует, иначе выведите одну строку с «NO».

Если ответ «YES», выведите еще одну строку с \(n\) целыми числами \(\sigma(1), \sigma(2), \ldots, \sigma(n)\) — перестановкой. Если существует более одной подходящей перестановки, вы можете вывести любую.

I. Упорядочивание соседей

графы Конструктив *3500

Для неориентированного графа \(G\) назовем порядком соседей упорядоченный список всех соседей вершины для каждой из вершин \(G\). Рассмотрим некоторый порядок соседей в графе \(G\) и три вершины \(u\), \(v\) и \(w\) такие, что \(v\) является соседом \(u\) и \(w\). Мы будет использовать запись \(u <_{v} w\), если \(u\) стоит после \(w\) в списке соседей вершины \(v\).

Порядок соседей называется хорошим, если для каждого простого цикла \(v_1, v_2, \ldots, v_c\) графа выполняется одно из следующих условий:

  • \(v_1 <_{v_2} v_3, v_2 <_{v_3} v_4, \ldots, v_{c-2} <_{v_{c-1}} v_c, v_{c-1} <_{v_c} v_1, v_c <_{v_1} v_2\),
  • \(v_1 >_{v_2} v_3, v_2 >_{v_3} v_4, \ldots, v_{c-2} >_{v_{c-1}} v_c, v_{c-1} >_{v_c} v_1, v_c >_{v_1} v_2\).

Для заданного графа \(G\) определите, существует ли для него порядок хороших соседей, и постройте его, если он существует.

Входные данные

Входные данные состоят из нескольких наборов входных данных. В первой строке записано единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 3 \cdot 10^5\), \(1 \leq m \leq 3 \cdot 10^5\)), количество вершин и количество ребер графа.

Следующие \(m\) строк содержат по два целых числа \(u, v\) (\(0 \leq u, v < n\)), обозначающих, что существует ребро, соединяющее вершины \(u\) и \(v\). Гарантируется, что граф связный и в нем нет петель и кратных ребер.

Сумма \(n\) и сумма \(m\) для всех тестовых случаев не превосходят \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку с «YES», если граф допускает хороший порядок соседей, иначе выведите одну строку с «NO». Вы можете печатать каждую букву в любом регистре (верхнем или нижнем).

Если ответ «YES», дополнительно выведите \(n\) строк, описывающих порядок хороших соседей. В \(i\)-й строке выведите соседей вершины \(i\) по порядку.

A. Марин и фотосессия

Конструктив математика реализация *800

Сегодня Марин пришла на фестиваль косплея и готовится к групповому фотоснимку!

Для группового снимка косплееры выстраиваются в горизонтальный ряд. Групповой снимок считается красивым, если на каждом непрерывном отрезке, включающем хотя бы \(2\) косплееров, количество мужчин не превышает количества женщин (очевидно).

Сейчас ряд состоит из \(n\) косплееров и может быть описан бинарной строкой \(s\). \(i\)-й косплеер — мужчина, если \(s_i = 0\), а женщина, если \(s_i = 1\). Чтобы сделать ряд красивым, вы можете предложить дополнительным косплеерам (возможно, нулю) встать в любое место в ряду. Вы не можете исключать косплееров из ряда.

Марин хочет узнать минимальное количество дополнительных косплееров, которых нужно пригласить, чтобы групповой снимок получился красивым. Она не может сделать это сама, поэтому просит у вас помощи. Сможете ей помочь?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое положительное число \(n\) (\(1 \leq n \leq 100\)) — начальное количество косплееров в ряду.

Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длины \(n\) — описание косплееров в ряду. Каждый символ строки это 0, означающий мужчину, или 1, означающий женщину.

Обратите внимание, что ограничений на сумму \(n\) по всем наборам нет.

Выходные данные

Для каждого набора входных данных выведите минимальное количество косплееров, которых нужно добавить в ряд, чтобы фото стало красивым.

Примечание

В первом примере для каждой пары подряд стоящих косплееров вы можете пригласить двух девушек-косплееров для того, чтобы они встали между ними. Тогда \(000 \rightarrow 0110110\).

В третьем наборе вы можете пригласить одну девушку-косплеера, чтобы она встала после второго косплеера. Тогда \(010 \rightarrow 0110\).

C. Синдзю и потерянная перестановка

Конструктив математика *1700

Синдзю очень любит перестановки! Сегодня она взяла перестановку \(p\) у Дзюдзю, чтобы поиграть с ней.

\(i\)-й циклический сдвиг перестановки \(p\) — это такое преобразование, что перестановка \(p = [p_1, p_2, \ldots, p_n] \) становится равной \( p = [p_{n-i+1}, \ldots, p_n, p_1,p_2, \ldots, p_{n-i}]\).

Назовём мощностью перестановки \(p\) количество различных элементов в массиве префиксных максимумов \(b\). Массив префиксных максимумов \(b\) — это массив длины \(n\), в котором \(b_i = \max(p_1, p_2, \ldots, p_i)\). Например, мощность перестановки \([1, 2, 5, 4, 6, 3]\) равна \(4\), так как \(b=[1,2,5,5,6,6]\) и в \(b\) всего \(4\) различных элемента.

К сожалению, Синдзю потеряла перестановку \(p\)! Вся информация, которую она помнит — это массив \(c\), где \(c_i\) равно мощности \((i-1)\)-го циклического сдвига перестановки \(p\). Она не уверена, что запомнила всё правильно, теперь она хочет проверить свою память.

Задан массив \(c\), определите, существует ли такая перестановка \(p\), которая согласуется с заданным массивом \(c\). Вам не нужно находить саму перестановку \(p\).

Перестановка — это массив из \(n\) различных целых чисел от \(1\) до \(n\), которые записаны в произвольном порядке. Например, \([2,3,1,5,4]\) является перестановкой, но \([1,2,2]\) перестановкой не является (\(2\) содержится дважды). Аналогично, \([1,3, 4]\) тоже не является перестановкой (\(n=3\), но массив содержит значение \(4\)).

Входные данные

Входные данные состоят из одного или нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 5 \cdot 10^3\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 10^5\)).

Во второй строке каждого набора входных данных записаны \(n\) целых чисел \(c_1,c_2,\ldots,c_n\) (\(1 \leq c_i \leq n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных выведите «YES», если существует перестановка \(p\), согласующаяся с заданным массивом \(c\). Выведите «NO» в противном случае.

Вы можете использовать любой регистр букв при выводе «YES» и «NO» (например, строки «yEs», «yes», «Yes» и «YES» будут расценены как положительный ответ).

Примечание

В первом наборе входных данных примера перестановка \([1]\) согласуется с заданным массивом \(c\).

Во втором наборе входных данных примера перестановка \([2,1]\) согласуется с заданным массивом \(c\).

В пятом наборе входных данных примера перестановка \([5,1,2,4,6,3]\) согласуется с заданным массивом \(c\), так как:

  • нулевой циклический сдвиг перестановки \(p\) — это \([5, 1, 2, 4, 6, 3]\). Мощность этого сдвига равна \(2\), так как \(b = [5, 5, 5, 5, 6, 6]\), в этом массиве только \(2\) различных элемента: \(5\) и \(6\).
  • первый циклический сдвиг перестановки \(p\) это \([3, 5, 1, 2, 4, 6]\). Мощность этого сдвига равна \(3\), так как \(b=[3,5,5,5,5,6]\).
  • второй циклический сдвиг перестановки \(p\) это \([6, 3, 5, 1, 2, 4]\). Мощность этого сдвига равна \(1\), так как \(b=[6,6,6,6,6,6]\).
  • третий циклический сдвиг перестановки \(p\) это \([4, 6, 3, 5, 1, 2]\). Мощность этого сдвига равна \(2\), так как \(b=[4,6,6,6,6,6]\).
  • четвёртый циклический сдвиг перестановки \(p\) это \([2, 4, 6, 3, 5, 1]\). Мощность этого сдвига равна \(3\), так как \(b = [2, 4, 6, 6, 6, 6]\).
  • пятый циклический сдвиг перестановки \(p\) это \([1, 2, 4, 6, 3, 5]\). Мощность этого сдвига равна \(4\), так как \(b = [1, 2, 4, 6, 6, 6]\).

Таким образом, для этой перестановки \(c = [2, 3, 1, 2, 3, 4]\).

В третьем, четвёртом и шестом наборах входных данных примера можно показать, что искомой перестановки, которая согласуется с \(c\), не существует.

F. Дзюдзю и бинарная строка

жадные алгоритмы Конструктив математика Перебор *2700

Красота бинарной строки — это количество в ней \(\texttt{1}\), делённое на длину строки. Например, красота строки \(\texttt{01101}\) равна \(\frac{3}{5}\).

У Дзюдзю есть бинарная строка \(s\) длины \(n\). Она хочет выбрать некоторые непересекающиеся подотрезки \(s\) так, чтобы их конкатенация имела длину \(m\) и такую же красоту, как и строка \(s\).

Более формально, она хочет найти два массива \(l\) и \(r\) равной длины \(k\) таких, что \(1 \leq l_1 \leq r_1 < l_2 \leq r_2 < \ldots < l_k \leq r_k \leq n\), а также:

  • \(\sum\limits_{i=1}^k (r_i - l_i + 1) = m\);
  • Красота \(s[l_1,r_1]+s[l_2,r_2]+\ldots+s[l_k,r_k]\) в точности равна красоте \(s\), где \(s[x, y]\) обозначает подотрезок \(s_x s_{x+1} \ldots s_y\), а \(+\) обозначает конкатенацию строк.
Дзюдзю не любит разделять строки на много частей, поэтому она также хочет минимизировать значение \(k\). Найдите минимальное значение \(k\) такое, что существуют массивы \(l\) и \(r\), удовлетворяющие ограничениям выше, или определите, что подходящих массивов \(l\) и \(r\) не существует ни при каком \(k\).
Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(1 \leq m \leq n \leq 2 \cdot 10^5\)).

Вторая строка каждого набора содержит бинарную строку \(s\) длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если не существует подходящих \(l\) и \(r\), выведите \(-1\).

Иначе выведите \(k + 1\) строку.

В первой строке выведите число \(k\) (\(1 \leq k \leq m\)) — минимальное количество требуемых подотрезков.

Затем выведите \(k\) строк, \(i\)-я строка должна содержать \(l_i\) и \(r_i\) (\(1 \leq l_i \leq r_i \leq n\)) — границы \(i\)-го подотрезка. Обратите внимание, что вы должны выводить подотрезки так, чтобы выполнялось неравенство \(l_1 \leq r_1 < l_2 \leq r_2 < \ldots < l_k \leq r_k\).

Примечание

В первом примере красота \(\texttt{0011}\) равна красоте \(\texttt{01}\).

Во втором примере красота \(\texttt{11000011}\) равна \(\frac{1}{2}\) и не существует подотрезка длины \(6\) с такой же красотой. Поэтому мы должны использовать \(2\) непересекающихся подотрезка \(\texttt{10}\) и \(\texttt{0011}\).

В третьем примере есть \(8\) способов разбить строку таким образом, что \(\sum\limits_{i=1}^k (r_i - l_i + 1) = 3\), но ни в одном из них конкатенация не будет иметь такую же красоту, как \(\texttt{0101}\).

В последнем примере мы не должны разбивать строку.

A. Красные против синих

жадные алгоритмы Конструктив математика реализация *1000

Команда красных и команда синих соревнуются в одной из игр-шутеров. Их игра транслировалась на весь мир. Всего они сыграли \(n\) матчей.

В конце оказалось, что команда красных выиграла \(r\) раз, а команда синих — \(b\) раз. Команда красных была сильнее, поэтому \(b\) строго меньше \(r\).

Вы пропустили трансляцию, но думаете, что матч был очень интересным, так как его смотрели много людей. Вы представляете строку длины \(n\), где \(i\)-й символ обозначает, кто выиграл \(i\)-й матч: R, если выиграла команда красных, и B, если выиграла команда синих. Вы считаете, что строка была такой, что максимальное число раз, которое какая либо команда выигрывала подряд было минимально возможным. Например, в строке RBBRRRB команда красных выиграла максимум \(3\) матча подряд.

Найдите строку, удовлетворяющую данным критериям. Если есть несколько возможных ответов, выведите любой.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор входных данных описывается одной строкой, содержащей три целых числа \(n\), \(r\) и \(b\) (\(3 \leq n \leq 100\); \(1 \leq b < r \leq n\), \(r+b=n\)).

Выходные данные

Для каждого набора входных данных выведите одну строку, удовлетворяющую данным условиям. Если существует несколько решений, выведите любое из них.

Примечание

Первый пример показывает оптимальный ответ для случая, описанного в в условии. Максимальное количество раз, которое команда выигрывала подряд в RBRBRBR, равно \(1\). Нельзя уменьшить это значение.

Ответ для второго примера RRBRBRBRBR. Максимальное количество раз, которое команда выигрывала подряд, равно \(2\), а именно в RR в начале строки. Можно показать, что нельзя уменьшить это значение.

B. Обращение битов

битмаски жадные алгоритмы Конструктив Строки *1300

Вам дана битовая строка длины \(n\). Вы должны сделать ровно \(k\) ходов. На каждом ходу вы должны выбрать один бит строки. Состояние всех битов кроме выбранного изменятся на противоположное (\(0\) станет \(1\), \(1\) станет \(0\)). Вам нужно вывести лексикографически максимальную строку, которую вы можете получить, используя все \(k\) ходов. Кроме того, для каждого бита выведите, сколько раз вы его выбираете для получения такой строки. Если есть несколько возможных решений, выведите любое из них.

Битовая строка \(a\) лексикографически больше битовой строки \(b\) такой же длины, если и только если выполняется следующее:

  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится \(1\), а в строке \(b\) — \(0\).
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор описывается в двух строках. Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \leq n \leq 2 \cdot 10^5\); \(0 \leq k \leq 10^9\)).

Вторая строка содержит битовую строку длины \(n\), каждый символ которой либо \(0\), либо \(1\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите две строки.

Первая строка должна содержать лексикографически максимальную строку, которую вы можете получить.

Вторая строка должна содержать \(n\) целых чисел \(f_1, f_2, \ldots, f_n\), где \(f_i\) — количество раз, которое вы выбираете \(i\)-й бит. Сумма всех чисел должна быть равна \(k\).

Примечание

Рассмотрим первый пример. Ниже пошагово показано, как изменяется строка после каждого хода.

  • Выбирается бит \(1\): \(\color{red}{\underline{1}00001} \rightarrow \color{red}{\underline{1}}\color{blue}{11110}\).
  • Выбирается бит \(4\): \(\color{red}{111\underline{1}10} \rightarrow \color{blue}{000}\color{red}{\underline{1}}\color{blue}{01}\).
  • Выбирается бит \(4\): \(\color{red}{000\underline{1}01} \rightarrow \color{blue}{111}\color{red}{\underline{1}}\color{blue}{10}\).
Итоговая строка равна \(111110\), это лексикографически максимальная строка, которую можно получить.

D. Обратная сумма сортировки

жадные алгоритмы Конструктив математика реализация Структуры данных *1900

Представим, что у вас был массив \(A\) из \(n\) элементов, каждый из которых это \(0\) или \(1\).

Определим функцию \(f(k,A)\), которая возвращает массив \(B\), который является результатом сортировки первых \(k\) элементов массива \(A\) в неубывающем порядке. Например, \(f(4,[0,1,1,0,0,1,0]) = [0,0,1,1,0,1,0]\). Обратите внимание, что первые \(4\) элемента были отсортированы.

Рассмотрим массивы \(B_1, B_2,\ldots, B_n\), равные \(f(1,A), f(2,A),\ldots,f(n,A)\). Пусть \(C\) — массив, равный поэлементной сумме массивов \(B_1, B_2,\ldots, B_n\).

Например, пусть \(A=[0,1,0,1]\). Тогда \(B_1=[0,1,0,1]\), \(B_2=[0,1,0,1]\), \(B_3=[0,0,1,1]\), \(B_4=[0,0,1,1]\). Тогда \(C=B_1+B_2+B_3+B_4=[0,1,0,1]+[0,1,0,1]+[0,0,1,1]+[0,0,1,1]=[0,2,2,4]\).

Вам дан массив \(C\). Найдите бинарный массив \(A\) такой, что, если его обработать как описано выше, то получится данный массив \(C\). Гарантируется, что такой массив \(A\) существует для данного \(C\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк. Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(0 \leq c_i \leq n\)). Гарантируется, что для данного массива \(C\) существует подходящий массив \(A\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(a_i\) равно \(0\) или \(1\)). Если существуют несколько ответов, выведите любой.

Примечание

Рассмотрим первый пример. Начнем с массива \(A=[1,1,0,1]\) и построим массивы \(B_i\):

  • \(B_1=[\color{blue}{1},1,0,1]\);
  • \(B_2=[\color{blue}{1},\color{blue}{1},0,1]\);
  • \(B_3=[\color{blue}{0},\color{blue}{1},\color{blue}{1},1]\);
  • \(B_4=[\color{blue}{0},\color{blue}{1},\color{blue}{1},\color{blue}{1}]\)
Затем просуммируем каждый столбик и получим \(C=[1+1+0+0,1+1+1+1,0+0+1+1,1+1+1+1]=[2,4,2,4]\).

E. AND-MEX-прогулка

битмаски графы Конструктив Перебор поиск в глубину и подобное снм *2200

Вам дан неориентированный связный граф из \(n\) вершин и \(m\) взвешенных ребер. Прогулкой от вершины \(u\) до вершины \(v\) называется последовательность вершин \(p_1,p_2,\ldots,p_k\) (не обязательно различных), начинающаяся в вершине \(u\) и заканчивающаяся в вершине \(v\), такая что \(p_i\) и \(p_{i+1}\) соединены ребром для всех \(1 \leq i < k\).

Определим длину прогулки следующим образом: выпишем веса ребер в порядке следования в массив. Затем выпишем побитовое И каждого непустого префикса этого массива. Длиной прогулки называется MEX этих значений.

Более формально, пусть веса ребер это \([w_1,w_2,\ldots,w_{k-1}]\), где \(w_i\) — вес ребра между \(p_i\) и \(p_{i+1}\). Тогда длина прогулки равна \(\mathrm{MEX}(\{w_1,\,w_1\& w_2,\,\ldots,\,w_1\& w_2\& \ldots\& w_{k-1}\})\), где \(\&\) обозначает операцию побитового И.

Вы должны обработать \(q\) запросов вида u v. Для каждого запроса найдите минимально возможную длину пути из \(u\) в \(v\).

MEX (минимальное отсутствующее) множества чисел — наименьшее неотрицательное число, отсутствующее в этом множестве. Например:

  • MEX множества \(\{2,1\}\) равен \(0\), т. к. \(0\) отсутствует в множестве.
  • MEX множества \(\{3,1,0\}\) равен \(2\), т. к. \(0\) и \(1\) присутствуют в множестве, а \(2\) — нет.
  • MEX множества \(\{0,3,1,2\}\) равен \(4\), т. к. \(0\), \(1\), \(2\) и \(3\) присутствуют в множестве, а \(4\) отсутствует.
Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 10^5\); \(n-1 \leq m \leq \min{\left(\frac{n(n-1)}{2},10^5\right)}\)).

Каждая из следующих \(m\) строк содержит три целых числа \(a\), \(b\) и \(w\) (\(1 \leq a, b \leq n\), \(a \neq b\); \(0 \leq w < 2^{30}\)), обозначающих неориентированное ребро между вершинами \(a\) и \(b\) веса \(w\). Гарантируется, что не существует петель и кратных ребер, а также что граф связный.

Следующая строка содержит одно целое число \(q\) (\(1 \leq q \leq 10^5\)).

Каждая из следующих \(q\) строк содержит два целых числа \(u\) и \(v\) (\(1 \leq u, v \leq n\), \(u \neq v\)) — описание запроса.

Выходные данные

Для каждого запроса выведите одно целое число — ответ на запрос.

Примечание

Ниже находится пояснение к первому примеру.

Граф из первого примера.

Идна из возможных прогулок в первом запросе:

\(\)1 \overset{5}{\rightarrow} 3 \overset{3}{\rightarrow} 2 \overset{1}{\rightarrow} 1 \overset{5}{\rightarrow} 3 \overset{1}{\rightarrow} 4 \overset{2}{\rightarrow} 5.\(\)

Массив весов равен \(w=[5,3,1,5,1,2]\). Если мы возьмем побитовое И для всех префиксов, мы получим множество \(\{5,1,0\}\). MEX этого множества равен \(2\). Нельзя получить прогулку меньшей длины.

E. Матрица и сдвиги

жадные алгоритмы Конструктив Перебор реализация *1600

Вам задана двоичная матрица \(A\) размера \(n \times n\). Строки пронумерованы сверху вниз от \(1\) до \(n\), столбцы пронумерованы слева направо от \(1\) до \(n\). Ячейка, находящаяся на пересечении строки \(i\) и столбца \(j\) называется \(A_{ij}\). Рассмотрим набор из \(4\) операций:

  1. Циклически сдвинуть все строки вверх. Строка с номером \(i\) будет записана на место строки \(i-1\) (\(2 \le i \le n\)), строка с номером \(1\) будет записана на место строки \(n\).
  2. Циклически сдвинуть все строки вниз. Строка с номером \(i\) будет записана на место строки \(i+1\) (\(1 \le i \le n - 1\)), строка с номером \(n\) будет записана на место строки \(1\).
  3. Циклически сдвинуть все столбцы влево. Столбец с номером \(j\) будет записан на место столбца \(j-1\) (\(2 \le j \le n\)), столбец с номером \(1\) будет записан на место столбца \(n\).
  4. Циклически сдвинуть все столбцы вправо. Столбец с номером \(j\) будет записан на место столбца \(j+1\) (\(1 \le j \le n - 1\)), столбец с номером \(n\) будет записан на место столбца \(1\).
Слева изображена матрица \(3 \times 3\) до применения к ней операции \(3\), справа — после.

Вы можете провести над матрицей произвольное (возможно, нулевое) количество операций, операции можно проводить в любом порядке.

После этого вы можете осуществить произвольное (возможно, нулевое) количество новых xor-операций:

  • Выбрать любую ячейку \(A_{ij}\) и записать в нее значение выражения \(A_{ij} \oplus 1\). Другими словами, в ячейку \(A_{ij}\) необходимо будет записать значение \((A_{ij} + 1) \bmod 2\).

Каждое применение этой xor-операции стоит один бурль. Заметим, что \(4\) операции сдвигов — бесплатные. Эти \(4\) операции можно проводить только до осуществления xor-операций.

Выведите минимальное количество бурлей, сколько придётся заплатить, чтобы сделать матрицу \(A\) единичной. Единичной называется такая матрица, на главной диагонали которой стоят единицы, а остальные её элементы являются нулями (то есть, \(A_{ij} = 1\) при \(i = j\) и \(A_{ij} = 0\) иначе).

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных. Перед каждым набором входных данных во входных данных записана пустая строка.

В первой строке каждого набора входных данных записано единственное число \(n\) (\(1 \le n \le 2000\))

Затем следует \(n\) строк, каждая из которых содержит ровно \(n\) символов и состоит только из нулей и единиц. Эти строки описывают значения в ячейках матрицы.

Гарантируется, что сумма значений \(n^2\) по всем наборам входных данных не превышает \(4 \cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество бурлей, сколько придётся заплатить, чтобы сделать матрицу \(A\) единичной. Иными словами, выведите минимальное количество xor-операций, которое потребуется совершить после применения циклических сдвигов к матрице, для того, чтобы матрица \(A\) стала единичной.

Примечание

В первом наборе входных данных можно действовать следующим образом: сначала циклически сдвинуть все строки вниз, тогда на главной диагонали матрицы будут стоять одни единицы. Затем необходимо будет применить xor-операцию к единственной единице, которая окажется не на главной диагонали.

Во втором наборе входных данных можно получить единичную матрицу, дважды применив к матрице операцию \(2\) — циклический сдвиг строк вверх.

M. Bottle Arrangements

Конструктив

Gabriella has been instructed to organize a renowned wine tasting event which will be attended by \(m\) critics. On display, there will be \(n\) different varieties of wine, each of which can either be a red wine or a white wine.

The wines will come in \(n\) bottles arranged in a line on the table, and, for convenience, each critic will sip from a contiguous interval of bottles: that is, he/she will taste exactly the bottles at position \(a, \, a + 1, \, \dots, \, b\) for some \(1 \le a \le b \le n\). The interval depends on the critic, who will select it on the spot according to their preferences. In fact, the \(i\)-th critic (\(1 \le i \le m\)) has requested that he/she wants to taste exactly \(r_i\) red wines and \(w_i\) white wines.

Gabriella has yet to choose how many bottles of red wine and white wine there will be, and in what order they will appear. Help her find an arrangement (that is, a sequence of \(n\) bottles of either red or white wine) that satisfies the requests of all the critics, or state that no such arrangement exists.

Input

Each test contains multiple test cases. The first line contains an integer \(t\) (\(1\le t\le 100\)) — the number of test cases. The descriptions of the \(t\) test cases follow.

The first line of each test case contains two integers \(n\) and \(m\) (\(1 \le n \le 100\), \(1 \le m \le 100\)) — the number of bottles of wine and the number of critics.

Each of the next \(m\) lines contains two integers \(r_i\) and \(w_i\) (\(0 \le r_i, \, w_i \le 100\), \(r_i + w_i \ge 1\)) — the number of red and white wines that the \(i\)-th critic wants to taste.

Output

For each test case, if at least one solution exists, print a string of length \(n\) made up of the characters R and W, where the \(j\)-th character (\(1 \le j \le n\)) denotes the type of the wine in the \(j\)-th bottle of the arrangement (R for red and W for white). If there are multiple solutions, print any.

If no solution exists, print the string IMPOSSIBLE.

Note

In the first test case, there are \(n = 5\) bottles of wine to be arranged and \(m = 3\) critics. The arrangement RWRRW satisfies the requests of all three critics. Indeed:

  • the first critic can choose the interval \([3, \, 3]\), which contains exactly one bottle of red wine (note that \([1, \, 1]\) and \([4, \, 4]\) are other valid choices);
  • the second critic can choose the interval \([1, \, 5]\), which contains \(3\) bottles of red wine and \(2\) bottles of white wine;
  • the third critic can choose the interval \([2, \, 5]\), which contains \(2\) bottles of red wine and \(2\) bottles of white wine.

G. Six Characters

*особая задача Конструктив Строки

Aenar should go to the string's home.

Input

A string consisting of only \(6\) letters.

Output

A string consisting of only \(6\) characters.

Note

If many answers are possible, the jury will still only accept one!

H. Cross-Language Program

*особая задача Конструктив

Write a program that is compilable simultaneously in two languages: C++ (GCC 10.3.1, -std=c++11) and FreePascal (3.0.4).

It absolutely does not matter what this program does, the only requirement is that it successfully compiles into an executable file in both C++ and Pascal.

Please use the language Text to submit your solution. Just choose Text as a language in the submission form.

The submitted file can't exceed 2048 bytes. It should compile fast on both compilers.

Input

No input.

Output

No output.

A. НОД против НОК

Конструктив математика *800

Дано положительное целое число \(n\). Необходимо найти \(4\) положительных целых числа \(a, b, c, d\) такие, что

  • \(a + b + c + d = n\), а также
  • \(\gcd(a, b) = \operatorname{lcm}(c, d)\).

Из всех возможных вариантов ответа можно вывести любой. Можно показать, что при заданных ограничениях ответ всегда существует.

В данной задаче \(\gcd(a, b)\) обозначает наибольший общий делитель чисел \(a\) и \(b\), а \(\operatorname{lcm}(c, d)\) обозначает наименьшее общее кратное чисел \(c\) и \(d\)

Входные данные

В первой строке входных данных находится единственное целое число \(t\) (\(1 \le t \le 10^4\))  — количество наборов входных данных.

В единственной строке описания каждого набора входных данных находится целое число \(n\) (\(4 \le n \le 10^9\)) — сумма чисел \(a\), \(b\), \(c\), \(d\).

Выходные данные

Для каждого набора входных данных выведите \(4\) положительных целых числа \(a\), \(b\), \(c\), \(d\) такие, что \(a + b + c + d = n\) и \(\gcd(a, b) = \operatorname{lcm}(c, d)\).

Примечание

В первом наборе входных данных \(\gcd(1, 1) = \operatorname{lcm}(1, 1) = 1\), \(1 + 1 + 1 + 1 = 4\).

Во втором наборе входных данных \(\gcd(2, 2) = \operatorname{lcm}(2, 1) = 2\), \(2 + 2 + 2 + 1 = 7\).

В третьем наборе входных данных \(\gcd(2, 2) = \operatorname{lcm}(2, 2) = 2\), \(2 + 2 + 2 + 2 = 8\).

В четвертом наборе входных данных \(\gcd(2, 4) = \operatorname{lcm}(2, 1) = 2\), \(2 + 4 + 2 + 1 = 9\).

В пятом наборе входных данных \(\gcd(3, 5) = \operatorname{lcm}(1, 1) = 1\), \(3 + 5 + 1 + 1 = 10\).

B. Техника массивного клонирования

жадные алгоритмы Конструктив сортировки *900

Дан массив \(a\) из \(n\) целых чисел. У этого массива изначально есть только одна копия, данная вам.

Можно делать два вида действий:

  1. Выбрать любой массив и создать его копию. После это появляется ещё один массив, равный выбранному.
  2. Поменять местами два элемента из любых копий (возможно, в одной копии) на любых позициях.

Вам нужно найти минимальное количество действий, необходимое, чтобы хотя бы в одной копии все элементы были равны.

Входные данные

В первой строке входных данных находится единственное целое число \(t\) (\(1 \le t \le 10^4\))  — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится одно целое число \(n\) (\(1 \le n \le 10^5\)) — размер массива \(a\).

Во второй строке описания каждого набора входных данных находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — исходная копия массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число — минимальное количество действий, которое нужно сделать, чтобы хотя бы в одной копии массива все элементы были равны.

Примечание

В первом наборе входных данных в массиве уже все числа равны, поэтому ответ равен \(0\).

Во втором наборе входных данных сначала можно сделать копию данного массива. Тогда будут два одинаковых массива:

\([ \ 0 \ 1 \ 3 \ 3 \ 7 \ 0 \ ]\) и \([ \ 0 \ 1 \ 3 \ 3 \ 7 \ 0 \ ]\)

После этого можно поменять местами элементы так, чтобы все нули оказались в одном массиве:

\([ \ 0 \ \underline{0} \ \underline{0} \ 3 \ 7 \ 0 \ ]\) и \([ \ \underline{1} \ 1 \ 3 \ 3 \ 7 \ \underline{3} \ ]\)

Теперь создадим копию первого массива:

\([ \ 0 \ 0 \ 0 \ 3 \ 7 \ 0 \ ]\), \([ \ 0 \ 0 \ 0 \ 3 \ 7 \ 0 \ ]\) и \([ \ 1 \ 1 \ 3 \ 3 \ 7 \ 3 \ ]\)

Поменяем местами элементы в первых двух копиях:

\([ \ 0 \ 0 \ 0 \ \underline{0} \ \underline{0} \ 0 \ ]\), \([ \ \underline{3} \ \underline{7} \ 0 \ 3 \ 7 \ 0 \ ]\) и \([ \ 1 \ 1 \ 3 \ 3 \ 7 \ 3 \ ]\).

В итоге за \(6\) действий получили массив, в котором все элементы одинаковые.

Можно доказать, что невозможно получить ответ меньше.

D. НОД-угадайка

битмаски игры интерактив китайская теорема об остатках Конструктив математика теория чисел *2000

Это интерактивная задача.

Загадано некоторое положительное целое число \(1 \le x \le 10^9\).

За один запрос вы можете выбрать два положительных целых числа \(a \neq b\). В качестве ответа на этот запрос вы получите \(\gcd(x + a, x + b)\), где \(\gcd(n, m)\) обозначает наибольший общий делитель чисел \(n\) и \(m\).

Чтобы угадать одно загаданное число \(x\), вы можете совершить не более \(30\) запросов.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Загаданное число \(x\) удовлетворяет следующим ограничениям: (\(1 \le x \le 10^9\)).

Протокол взаимодействия

Загаданное число \(x\) зафиксировано до начала взаимодействия и не зависит от ваших запросов.

Для угадывания каждого \(x\) вы можете сделать не более \(30\) запросов следующего вида:

  • «? a b» (\(1 \le a, b \le 2 \cdot 10^9\), \(a \neq b\)).

В ответ на этот запрос вы получите \(\gcd(x + a, x + b)\).

Когда вы узнаете число \(x\), выведите одну строку следующего формата:

  • «! x» (\(1 \le x \le 10^9\)).

После этого переходите к решению следующего набора входных данных.

Если вы сделаете более \(30\) запросов для одного \(x\), или запросы будут некорректными, взаимодействие будет немедленно прекращено, а ваша программа получит вердикт Неправильный ответ.

После вывода запросов не забудьте выводить символ перевода строки и сбрасывать буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Для взломов используйте следующий формат:

Первая строка должна содержать одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Первая и единственная строка каждого набора входных данных должна содержать единственное целое число \(x\) (\(1 \le x \le 10^9\)) — число \(x\), которое нужно угадать.

Примечание

Первое загаданное число равно \(4\), поэтому ответы на запрос следующие:

«? 1 2» — \(\gcd(4 + 1, 4 + 2) = \gcd(5, 6) = 1\).

«? 12 4» — \(\gcd(4 + 12, 4 + 4) = \gcd(16, 8) = 8\).

Второе загаданное число равно \(10^9\), поэтому ответ на запрос следующий:

«? 2000000000 1999999999» — \(\gcd(3 \cdot 10^9, 3 \cdot 10^9 - 1) = 1\).

Эти запросы показаны только для лучшего понимания протокола взаимодействия, и их недостаточно, чтобы однозначно восстановить \(x\).

C. Покрытие полуферзями

Конструктив математика *2400

Дана доска, состоящая из \(n\) строк и \(n\) столбцов, пронумерованных от \(1\) до \(n\). Пересечение \(a\)-й строки и \(b\)-го столбца обозначим за \((a, b)\).

Полуферзь может атаковать клетки, стоящие в той же строке, том же столбце и на той же диагонали, что и он. Более формально, полуферзь, стоящий в \((a, b)\) может атаковать клетку \((c, d)\), если \(a=c\), или \(b=d\), или \(a-b=c-d\).

Голубые клетки находятся под атакой.

Какое минимальное количество полуферзей нужно разместить на доске, чтобы каждая клетка была атакована хотя бы одним полуферзем?

Выведите оптимальное решение.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — размер доски.

Выходные данные

В первой строке выведите одно целое число \(k\) — минимальное количество полуферзей.

В каждой из следующих \(k\) строках выведите два целых числа \(a_i\), \(b_i\) (\(1 \le a_i, b_i \le n\)) — местоположение \(i\)-го полуферзя.

Если существует несколько решений, выведите любое.

Примечание

Пример \(1\): одного полуферзя достаточно. Заметьте: полуферзь, стоящий в \((1, 1)\), атакует \((1, 1)\).

Пример \(2\): одного полуферзя также достаточно. \((1, 2)\) и \((2, 1)\) — неверные решения, поскольку полуферзь, стоящий в \((1, 2)\), не атакует клетку \((2, 1)\), и наоборот. \((2, 2)\) также верное решение.

Пример \(3\): невозможно покрыть доску одним полуферзем. Существует несколько решений для \(2\)-х полуферзей, вы можете вывести любое из них.

D. Удаление рёбер

Деревья дп Конструктив поиск в глубину и подобное *2900

Дано дерево (связный неориентированный граф без циклов) с \(n\) вершинами. Два ребра считаются смежными, если они имеют ровно один общий конец. За один ход вы можете удалить любое ребро, которое смежно четному количеству оставшихся ребер.

Удалите все ребра или установите, что это невозможно. Если существует несколько решений, выведите любое из них.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин в дереве.

Далее следуют \(n-1\) строка. \(i\)-я из них содержит два целых числа \(u_i\), \(v_i\) (\(1 \le u_i,v_i \le n\)) — концы \(i\)-го ребра. Гарантируется, что описанный граф является деревом.

Также гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «NO», если невозможно удалить все ребра.

В противном случае выведите «YES» и в следующих \(n-1\) строке выведите возможный порядок удаления ребер. Для каждого ребра выведите его концы в любом порядке.

Примечание

Пример \(1\): можно удалить данное ребро, поскольку оно не смежно никакому ребру.

Пример \(2\): оба ребра смежны ровно одному ребру, поэтому невозможно удалить ни одно из них. Таким образом, ответ «NO».

Пример \(3\): ребро \(2-3\) смежно двум другим ребрам, поэтому его можно удалить. После этого также становится возможным удалить оставшиеся ребра.

E. Хемос на дереве

битмаски Деревья Конструктив поиск в глубину и подобное *2200

В последнем региональном соревновании Хемос со своей командой наконец-то отобрались на Финал ICPC, поэтому в честь этого достижения, а также из-за любви к деревьям он предлагает вам эту задачу, одноименную его команде «Hemose 3al shagra» (Хемос на дереве).

Вам дано дерево из \(n\) вершин, где \(n\) — степень \(2\). Вам нужно назначить каждой вершине и каждому ребру целое число из диапазона \([1,2n -1]\) (включительно) так, чтобы все значения были различны.

После назначения вы должны выбрать одну из вершин дерева в качестве корня так, чтобы максимальная стоимость среди всех простых путей от корня до всех вершин или ребер была минимально возможная.

Стоимость пути между двумя вершинами \(u\) и \(v\) или между вершиной \(u\) и ребром \(e\) определяется как побитовое исключающее ИЛИ всех значений вершин и ребер на пути между ними, включая концы (обратите внимание, что в дереве есть только один простой путь между парой вершин или вершиной и ребром).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 5\cdot 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

Первая строка каждого набора содержит одно целое число \(p\) (\(1 \le p \le 17\)), где \(n\) (количество вершин в дереве) равно \(2^p\).

Каждая из следующих \(n−1\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u,v \le n\)), обозначающих ребро между вершинами \(u\) и \(v\) в дереве.

Гарантируется, что данный граф образует дерево.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(3\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в первой строке выбранный корень.

Во второй строке выведите \(n\) целых чисел, где \(i\)-е число обозначает значение, выбранное для \(i\)-й вершине.

В третьей строке выведите \(n-1\) целое число, где \(i\)-е число обозначает значение выбранное для \(i\)-го ребра. Ребра нумеруются в порядке присутствия во входных данных

Если существует несколько решений, выведите любое из них.

Примечание

Дерево в первом наборе входных данных показано ниже.

Стоимости путей следующие:

  • \(3\);
  • \(3\oplus 7=4\);
  • \(3\oplus 7\oplus 6=2\);
  • \(3\oplus 2=1\);
  • \(3\oplus 2\oplus 1=0\);
  • \(3\oplus 2\oplus 1\oplus 4=4\);
  • \(3\oplus 2\oplus 1\oplus 4\oplus 5=1\).

Максимальная стоимость равна \(4\). Можно показать, что не существует способа расставить числа и выбрать корень так, чтобы получилась меньшая максимальная стоимость.

Дерево для второго набора показано ниже:

D. Вставь прогрессию

жадные алгоритмы Конструктив Перебор *1600

Дана последовательность из \(n\) целых чисел \(a_1, a_2, \dots, a_n\). Также даны \(x\) целых чисел \(1, 2, \dots, x\).

Вас просят вставить каждое из этих дополнительных целых чисел в последовательность \(a\). Каждое число можно вставлять в начало последовательности, в конец последовательности или между любыми элементами последовательности.

Счет полученной последовательности \(a'\) равен сумме абсолютных разностей соседних элементов в ней \(\left(\sum \limits_{i=1}^{n+x-1} |a'_i - a'_{i+1}|\right)\).

Какой наименьший счет может быть у последовательности \(a'\)?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записаны два целых числа \(n\) и \(x\) (\(1 \le n, x \le 2 \cdot 10^5\)) — длина последовательности и количество дополнительных чисел.

Во второй строке каждого набора входных данных записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 2 \cdot 10^5\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — наименьшую сумму абсолютных разностей соседних элементов в последовательности после того, как вы вставите в нее дополнительные числа.

Примечание

Здесь представлены последовательности с наименьшим счетом в примере. Подчеркнутые элементы — это дополнительные числа. Обратите внимание, что существуют и другие последовательности с наименьшим счетом.

  • \(\underline{1}, \underline{2}, \underline{3}, \underline{4}, \underline{5}, 10\)
  • \(\underline{7}, 7, \underline{6}, \underline{4}, 2, \underline{2}, \underline{1}, \underline{3}, \underline{5}, \underline{8}, 10\)
  • \(6, \underline{1}, 1, \underline{2}, 5, 7, 3, 3, 9, 10, 10, 1\)
  • \(1, 3, \underline{1}, 1, 2, \underline{2}, \underline{3}, \underline{4}, \underline{5}, \underline{6}, \underline{7}, \underline{8}, \underline{9}, \underline{10}\)

B. Я люблю AAAB

Конструктив реализация *800

Назовем строку хорошей, если ее длина не менее \(2\) и все её символы равны \(\texttt{A}\), кроме последнего символа, который равен \(\texttt{B}\). Таким образом, хорошими строками являются \(\texttt{AB},\texttt{AAB},\texttt{AAAB},\ldots\). Обратите внимание, что \(\texttt{B}\)  — это не хорошая строка.

Вам дана изначально пустая строка \(s_1\).

Вы можете выполнить следующую операцию любое количество раз:

  • Выберите любую позицию \(s_1\) и вставьте в эту позицию хорошую строку.

Вам дана строка \(s_2\). Можно ли после некоторого количества операций превратить \(s_1\) в \(s_2\)?

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственную строку \(s_2\) (\(1 \leq |s_2| \leq 2 \cdot 10^5\)).

Гарантируется, что \(s_2\) состоит только из символов \(\texttt{A}\) и \(\texttt{B}\).

Гарантируется, что сумма \(|s_2|\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если мы можем превратить \(s_1\) в \(s_2\) после некоторого количества операций, и «NO» (без кавычек) в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes» и «Yes» будут засчитаны как положительный ответ).

Примечание

В первом наборе входных данных мы можем преобразовать \(s_1\) следующим образом: \(\varnothing \to \color{red}{\texttt{AAB}} \to \texttt{A}\color{red}{\texttt{AB}}\texttt{AB}\).

В третьем наборе входных данных мы можем преобразовать \(s_1\) следующим образом: \(\varnothing \to \color{red}{\texttt{AAAAAAAAB}}\).

Во втором и четвертом наборах входных данных можно показать, что невозможно превратить \(s_1\) в \(s_2\).

C. Неравный массив

жадные алгоритмы Конструктив реализация *1100

Вам дан массив \(a\) длины \(n\). Определим равность массива как количество индексов \(1 \le i \le n - 1\) таких, что \(a_i = a_{i + 1}\). Мы можем выполнять следующую операцию:

  • Выберите любые два целых числа \(i\) и \(x\) такие, что \(1 \le i \le n - 1\) и \(1 \le x \le 10^9\). После этого, сделайте \(a_i\) и \(a_{i + 1}\) равными \(x\).

Найдите минимальное количество операций, необходимых для того, чтобы равность массива стала меньше или равна \(1\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10 ^ 5\))  — длину массива \(a\).

Вторая строка каждого тестового примера содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\))  — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10 ^ 5\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество необходимых операций.

Примечание

В первом наборе входных данных мы можем выбрать \(i=2\) и \(x=2\), получив \([1, 2, 2, 1, 1]\). Затем мы можем выбрать \(i=3\) и \(x=3\), получив \([1, 2, 3, 3, 1]\).

Во втором наборе входных данных мы можем выбрать \(i=3\) и \(x=100\), получив \([2, 1, 100, 100, 2]\).

D. Циклический сдвиг

жадные алгоритмы Конструктив реализация *1700

Дан массив \(a\) длины \(n\). Вы можете выполнить следующую операцию любое количество раз:

  • Выберите два индекса \(l\) и \(r\) такие, что \(1 \le l < r \le n\) и \(a_l = a_r\). После этого, присвоим \(a[l \ldots r] = [a_{l+1}, a_{l+2}, \ldots, a_r, a_l]\).

Вам также дан другой массив \(b\) длины \(n\), который является перестановкой \(a\). Определите, можно ли преобразовать массив \(a\) в массив \(b\), применив описанную выше операцию некоторое количество раз.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10 ^ 5\))  — длину массивов \(a\) и \(b\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\))  — элементы массива \(a\).

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le n\))  — элементы массива \(b\).

Гарантируется, что \(b\) является перестановкой \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10 ^ 5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если возможно преобразовать массив \(a\) в \(b\), и «NO» (без кавычек) в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes» и «Yes» будут засчитаны как положительный ответ).

Примечание

В первом наборе входных данных мы можем выбрать \(l=2\) и \(r=5\), получив \([1, 3, 3, 2, 2]\).

Во втором наборов входных данных мы можем выбрать \(l=2\) и \(r=4\), получив \([1, 4, 2, 2, 1]\). Затем мы можем выбрать \(l=1\) и \(r=5\), получив \([4, 2, 2, 1, 1]\).

В третьем наборе входных данных можно доказать, что преобразовать массив \(a\) в \(b\) с помощью данных операций невозможно.

E. блокнот.exe

Бинарный поиск жадные алгоритмы интерактив Конструктив *2200

Это интерактивная задача.

В текстовом редакторе есть \(n\) слов. Длина \(i\)-го слова составляет \(l_i\) (\(1 \leq l_i \leq 2000\)). Массив \(l\) скрыт и известен только интерактору.

Текстовый редактор отображает слова в строках, разделяя каждые два слова в строке хотя бы одним пробелом. Обратите внимание, что строка не обязательно должна заканчиваться пробелом. Будем называть высотой текстового редактора количество использованных строк. При данной ширине текстовый редактор будет отображать слова таким образом, чтобы высота была минимальной.

Более формально, предположим, что текстовый редактор имеет ширину \(w\). Пусть \(a\)  — массив длины \(k+1\), где \(1=a_1 < a_2 < \ldots < a_{k+1}=n+1\). \(a\) является допустимым массивом, если для всех \(1 \leq i \leq k\), \(l_{a_i}+1+l_{a_i+1}+1+\ldots+1+l_{a_{i+1}-1} \leq w\). Тогда высота текстового редактора является минимальным \(k\) по всем допустимым массивам.

Обратите внимание, что если \(w < \max(l_i)\), то текстовый редактор не сможет правильно отобразить все слова и завершится аварийно, а высота текстового редактора будет равна \(0\).

Вы можете задать \(n+30\) запросов. В одном запросе вы указываете ширину \(w\). В ответ интерактор вернет высоту \(h_w\) текстового редактора, если его ширина равна \(w\).

Найдите минимальную площадь текстового редактора, которая является минимальным значением \(w \cdot h_w\) по всем \(w\), для которых \(h_w \neq 0\).

Длины зафиксированы заранее. Другими словами, интерактор не является адаптивным.

Входные данные

Первая и единственная строка ввода содержит единственное целое число \(n\) (\(1 \leq n \leq 2000\))  — количество слов в текстовом редакторе.

Гарантируется, что скрытые длины \(l_i\) удовлетворяют \(1 \leq l_i \leq 2000\).

Протокол взаимодействия

Начните взаимодействие с чтения \(n\).

Чтобы сделать запрос, выведите «? \(w\)» (без кавычек, \(1 \leq w \leq 10^9\)). Затем вы должны прочитать ответ из стандартного ввода, то есть высоту \(h_w\).

Если ваша программа сделала некорректный запрос или исчерпала количество попыток, интерактор немедленно завершит работу программы, а ваша программа получит вердикт Неправильный ответ.

Чтобы дать окончательный ответ, выведите «! \(area\)» (без кавычек). Обратите внимание, что этот ответ не учитывается в лимит \(n+30\) запросов.

После вывода каждого запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

    Взломы

    Первая строка ввода должна содержать одно целое число \(n\) (\(1 \leq n \leq 2000\)) — количество слов в текстовом редакторе.

    Вторая строка ввода должна содержать ровно \(n\) разделенных пробелами целых чисел \(l_1,l_2,\ldots,l_n\) (\(1 \leq l_i \leq 2000\)).

Примечание

В первом примере слова  — \(\{\texttt{glory},\texttt{to},\texttt{ukraine},\texttt{and},\texttt{anton},\texttt{trygub}\}\), поэтому \(l=\{5,2,7,3,5,6\}\).

Если \(w=1\), то текстовый редактор не сможет правильно отобразить все слова и завершится аварийно. Высота текстового редактора равна \(h_1=0\), поэтому интерактор вернет \(0\).

Если \(w=9\), то возможный способ отображения слов в текстовом редакторе следующий:

  • \(\texttt{glory__to}\)
  • \(\texttt{ukraine__}\)
  • \(\texttt{and_anton}\)
  • \(\texttt{__trygub_}\)

Высота текстового редактора равна \(h_{9}=4\), поэтому интерактор вернет \(4\).

Если \(w=16\), то возможный способ отображения слов в текстовом редакторе следующий:

  • \(\texttt{glory_to_ukraine}\)
  • \(\texttt{and_anton_trygub}\)

Высота текстового редактора равна \(h_{16}=2\), поэтому интерактор вернет \(2\).

Мы каким-то образом выяснили, что минимальная площадь текстового редактора равна \(32\), поэтому отвечаем её.

F1. Перемешивание массива

графы жадные алгоритмы Конструктив *2000

У oolimry есть массив \(a\) длины \(n\), который ему очень нравится. Сегодня вы изменили его массив на \(b\), перестановку \(a\), чтобы он расстроился.

Поскольку oolimry всего лишь утка, он может выполнять только следующую операцию для восстановления своего массива:

  • Выбрать два целых числа \(i,j\) таких, что \(1 \leq i,j \leq n\).
  • Поменять местами \(b_i\) и \(b_j\).

Печаль массива \(b\)  — это минимальное количество операций, необходимое для преобразования \(b\) в \(a\).

Для данного массива \(a\), найдите любой массив \(b\), который является перестановкой \(a\) и имеет максимальную печаль среди всех перестановок массива \(a\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\))  — длину массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n\))  — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) — описывающих массив \(b\). Если ответов несколько, вы можете вывести любой.

Примечание

В первом наборе входных данных массив \([1,2]\) имеет печаль \(1\). Мы можем преобразовать \([1,2]\) в \([2,1]\) с помощью одной операции с \((i,j)=(1,2)\).

Во втором наборе входных данных массив \([3,3,2,1]\) имеет печаль \(2\). Мы можем преобразовать \([3,3,2,1]\) в \([1,2,3,3]\) с помощью двух операций с \((i,j)=(1,4)\) и \((i,j)=(2,3)\) соответственно.

F2. Чекер для Перемешивания массива

графы Конструктив поиск в глубину и подобное *2800

У oolimry есть массив \(a\) длины \(n\), который ему очень нравится. Сегодня вы изменили его массив на \(b\), перестановку \(a\), чтобы он расстроился.

Поскольку oolimry всего лишь утка, он может выполнять только следующую операцию для восстановления своего массива:

  • Выбрать два целых числа \(i,j\) таких, что \(1 \leq i,j \leq n\).
  • Поменять местами \(b_i\) и \(b_j\).

Печаль массива \(b\)  — это минимальное количество операций, необходимое для преобразования \(b\) в \(a\).

Для данных массивов \(a\) и \(b\), где \(b\)  — перестановка \(a\), определите, имеет ли \(b\) максимальную печаль среди всех перестановок \(a\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\))  — длину массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n\))  — элементы массива \(a\).

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \leq b_i \leq n\))  — элементы массива \(b\).

Гарантируется, что \(b\) является перестановкой \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «AC» (без кавычек), если \(b\) имеет максимальную печаль среди всех перестановок \(a\), и «WA» (без кавычек) в противном случае.

Примечание

В первом наборе входных данных массив \([1,2]\) имеет печаль \(1\). Мы можем преобразовать \([1,2]\) в \([2,1]\) с помощью одной операции с \((i,j)=(1,2)\).

Во втором наборе входных данных массив \([3,3,2,1]\) имеет печаль \(2\). Мы можем преобразовать \([3,3,2,1]\) в \([1,2,3,3]\) с помощью двух операций с \((i,j)=(1,4)\) и \((i,j)=(2,3)\) соответственно.

В третьем наборе входных данных массив \([2,1]\) имеет печаль \(0\).

В четвертом наборе входных данных массив \([3,2,3,1]\) имеет печаль \(1\).

G. Крестовый ксор

графы Конструктив математика матрицы *3200

Дана таблица с \(r\) строк и \(c\) столбцов, где в клетке на пересечении \(i\)-й строки и \(j\)-го столбца записано целое число \(a_{i, j}\). Изначально все элементы равны \(0\). Мы можем выполнять следующую операцию:

  • Выберем индексы \(1 \le i \le r\) и \(1 \le j \le c\), затем заменим все значения в той же строке или столбце, что и \((i, j)\), значением xor \(1\). Другими словами, для всех \(a_{x, y}\), где хотя бы одно из \(x=i\) и \(y=j\) верно, мы заменим \(a_{x, y}\) на \(a_{x, y}\) xor \(1\).

Вы хотите получить таблицу \(b\), проделав вышеописанные операции конечное число раз. Однако, некоторые элементы \(b\) отсутствуют и заменены на '?'.

Пусть \(k\)  — количество символов '?'. Среди всех \(2^k\) способов заполнения таблицы \(b\) путем замены каждого '?' на '0' или '1', подсчитайте количество таблиц, которые могут быть получены путем выполнения этой операции конечное число раз, начиная с таблицы, заполненной \(0\). Поскольку это число может быть большим, выведите его по модулю \(998244353\).

Входные данные

Первая строка содержит два целых числа \(r\) и \(c\) (\(1 \le r, c \le 2000\))  — количество строк и столбцов таблицы соответственно.

\(i\)-я из следующих \(r\) строк содержит \(c\) символов \(b_{i, 1}, b_{i, 2}, \ldots, b_{i, c}\) (\(b_{i, j} \in \{0, 1, ?\}\)).

Выходные данные

Выведите одно целое число, представляющее количество способов заполнения таблицы \(b\) по модулю \(998244353\).

Примечание

В первом примере единственный способ заполнить \(\texttt{?}\)  — это заполнить так:

010
111
010

Этого можно добиться, выполнив одну операцию, выбрав \((i,j)=(2,2)\).

Во втором примере можно показать, что не существует последовательности операций, которые могут создать такую таблицу.

H. Зигзаг

жадные алгоритмы Конструктив Структуры данных *2700

У вас есть бинарная строка \(a\) длины \(n\), состоящая только из цифр \(0\) и \(1\).

Вам даны \(q\) запросов. В \(i\)-м запросе даны два индекса \(l\) и \(r\) такие, что \(1 \le l \le r \le n\).

Пусть \(s=a[l,r]\). Вам разрешено выполнять следующую операцию над \(s\):

  1. Выберите два индекса \(x\) и \(y\) такие, что \(1 \le x \le y \le |s|\). Пусть \(t\)  — подстрока \(t = s[x, y]\). Тогда для всех \(1 \le i \le |t| - 1\) должно выполняться условие \(t_i \neq t_{i+1}\). Заметим, что \(x = y\) всегда является допустимой подстрокой.
  2. Удалите подстроку \(s[x, y]\) из \(s\).

Для каждого из \(q\) запросов найдите минимальное количество операций, необходимое для превращения \(s\) в пустую строку.

Напомним, что для строки \(s\), \(s[l,r]\) обозначает подотрезок \(s_l,s_{l+1},\ldots,s_r\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10 ^ 5\))  — длину бинарной строки \(a\) и количество запросов соответственно.

Вторая строка содержит бинарную строку \(a\) длины \(n\) (\(a_i \in \{0, 1\}\)).

Каждая из следующих \(q\) строк содержит два целых числа \(l\) и \(r\) (\(1 \le l \le r \le n\))  — обозначающие подстроку каждого запроса.

Выходные данные

Выведите \(q\) строк, в \(i\)-й строке выведите минимальное количество операций, необходимых для \(i\)-го запроса.

Примечание

В первом примере,

  1. Подстрока равна \(\texttt{101}\), поэтому мы можем сделать одну операцию, чтобы сделать подстроку пустой.
  2. Подстрока равна \(\texttt{11011}\), поэтому мы можем сделать одну операцию над \(s[2, 4]\), чтобы получить \(\texttt{11}\), а затем использовать еще две операции, чтобы сделать подстроку пустой.
  3. Подстрока  — \(\texttt{011}\), поэтому мы можем сделать одну операцию над \(s[1, 2]\), чтобы получить \(\texttt{1}\), а затем использовать еще одну операцию, чтобы сделать подстроку пустой.

F. Дороги против вора

битмаски жадные алгоритмы интерактив Конструктив математика разделяй и властвуй *2400

Это интерактивная задача.

В городе есть \(n^2\) зданий, разделенных на сетку из \(n\) строк и \(n\) столбцов. Вам нужно построить дорогу произвольной длины \(D(A,B)\) между каждой парой соседних по стороне зданий \(A\) и \(B\). Из-за бюджетных и юридических ограничений длина каждой дороги должна быть положительным целым числом, а общая длина всех дорог не должна превышать \(48\,000\).

В городе есть вор, который начнет с самого верхнего и самого левого здания (в первом ряду и первой колонке) и будет бродить по городу, время от времени крадя артефакты из некоторых зданий. Он может перемещаться из одного здания в другое соседнее здание, путешествуя по дороге, которая их соединяет.

Вы не можете отследить, какие здания он посещает и по какому пути он идет, чтобы добраться до них. Но в городе есть один следящий механизм. Трекер может хранить одно целое число \(x\), которое изначально равно \(0\). Каждый раз, когда вор перемещается из здания \(A\) в соседнее здание \(B\) по дороге длиной \(D(A,B)\), трекер изменяет \(x\) на \(x\oplus D(A,B)\). Каждый раз, когда вор ворует из здания, трекер сообщает значение \(x\), хранящееся в нем, и сбрасывает его обратно на \(0\).

Заранее известно, что вор обворует ровно \(k\) зданий, но значения, возвращаемые трекером, вы узнаете только после того, как кражи действительно произойдут. Ваша задача заключается в том, чтобы выбрать длины дорог таким образом, чтобы независимо от того, какой стратегии или маршрута придерживается вор, вы сможете точно сказать расположение всех зданий, где произошли кражи, по значениям, возвращаемым трекером.

Протокол взаимодействия

Сначала считайте единственную строку, содержащую два целых числа \(n\) \((2\leq n\leq 32)\) and \(k\) \((1\leq k\leq 1024)\) — количество строк и количество краж соответственно.

Давайте обозначим \(j\)-е здание в \(i\)-й строке как \(B_{i,j}\).

Затем выведите \(n\) строк, каждая из которых содержит \(n-1\) целое число. \(j\)-е число в \(i\)-й строке должно быть значением \(D(B_{i,j},B_{i,j+1})\).

Затем выведите \(n-1\) строку, каждая из которых содержит \(n\) целых чисел. \(j\)-е число в \(i\)-й строке должно быть значением \(D(B_{i,j},B_{i+1,j})\).

Помните, что суммарная длина дорог не должна превышать \(48\,000\).

Затем ответьте на \(k\) вопросов. Сначала считайте значение \(x\), возвращаемое трекером. Потом выведите два целых числа, обозначающих номер строки и номер столбца здания, где произошла кража. После этого вы сможете ответить на следующий запрос (если такой есть).

После вывода запросов не забудьте вывести символ перевода строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Вы не можете делать взломы по этой задаче.

Примечание

В примере \(n=2\) and \(k=4\).

Вы выбираете построить дороги следующих длин:

Вор действует следующим образом:

  1. Начать в \(B_{1,1}\).
  2. Переместиться вправо в \(B_{1,2}\).
  3. Переместиться вниз в \(B_{2,2}\).
  4. Переместиться влево в \(B_{2,1}\).
  5. Переместиться вверх в \(B_{1,1}\).
  6. Переместиться вправо в \(B_{1,2}\).
  7. Украсть из \(B_{1,2}\).
  8. Переместиться влево в \(B_{1,1}\).
  9. Украсть из \(B_{1,1}\).
  10. Переместиться вниз в \(B_{2,1}\).
  11. Переместиться вправо в \(B_{2,2}\).
  12. Переместиться вверх в \(B_{1,2}\).
  13. Украсть из \(B_{1,2}\).
  14. Переместиться влево в \(B_{1,1}\).
  15. Переместиться вниз в \(B_{2,1}\).
  16. Украсть из \(B_{2,1}\).

Трекер отвечает следующим образом:

  1. Изначально \(x=0\).
  2. Изменить \(x\) на \(x\oplus 1=0\oplus1=1\).
  3. Изменить \(x\) на \(x\oplus 4=1\oplus4=5\).
  4. Изменить \(x\) на \(x\oplus 8=5\oplus8=13\).
  5. Изменить \(x\) на \(x\oplus 2=13\oplus2=15\).
  6. Изменить \(x\) на \(x\oplus 1=15\oplus1=14\).
  7. Вернуть \(x=14\) и обнулить \(x=0\).
  8. Изменить \(x\) на \(x\oplus 1=0\oplus1=1\).
  9. Вернуть \(x=1\) и обнулить \(x=0\).
  10. Изменить \(x\) на \(x\oplus 2=0\oplus2=2\).
  11. Изменить \(x\) на \(x\oplus 8=2\oplus8=10\).
  12. Изменить \(x\) на \(x\oplus 4=10\oplus4=14\).
  13. Вернуть \(x=14\) и обнулить \(x=0\).
  14. Изменить \(x\) на \(x\oplus 1=0\oplus1=1\).
  15. Изменить \(x\) на \(x\oplus 2=1\oplus2=3\).
  16. Вернуть \(x=3\) и обнулить \(x=0\).

A. Преобразование числа

Конструктив математика *800

Вам даны два целых числа \(x\) и \(y\). Вы хотите выбрать два строго положительных (больших нуля) целых числа \(a\) и \(b\), а затем применить следующую операцию к \(x\) ровно \(a\) раз: заменить \(x\) на \(b \cdot x\).

Вам нужно найти два целых числа \(a\) и \(b\), при которых \(x\) станет равным \(y\) после этого процесса. Если таких пар чисел несколько, выведите одну из них. Если такой пары чисел нет, сообщите об этом.

Например:

  • если \(x = 3\) и \(y = 75\), можно выбрать \(a = 2\) и \(b = 5\), тогда \(x\) станет равным \(3 \cdot 5 \cdot 5 = 75\);
  • если \(x = 100\) и \(y = 100\), можно выбрать \(a = 3\) и \(b = 1\), тогда \(x\) станет равным \(100 \cdot 1 \cdot 1 \cdot 1 = 100\);
  • если \(x = 42\) и \(y = 13\), ответа нет, так как нельзя уменьшить \(x\) заданными операциями.
Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей два целых числа \(x\) и \(y\) (\(1 \le x, y \le 100\)).

Выходные данные

Если можно выбрать пару целых чисел \(a\) и \(b\), при которой \(x\) станет равным \(y\) после описанного процесса, выведите эти два числа. Числа, которые вы выводите, должны быть не меньше \(1\) и не больше \(10^9\) (можно показать, что если ответ существует, то существует пара чисел \(a\) и \(b\), соответствующая этим ограничениям). Если существует несколько таких пар, выведите любую из них.

Если невозможно выбрать такую пару чисел \(a\) и \(b\) так, что \(x\) станет равным \(y\), выведите целое число \(0\) два раза.

D. A-B-C Сортировка

Конструктив реализация сортировки *1200

Вам заданы три массива \(a\), \(b\) и \(c\). Первоначально, массив \(a\) состоит из \(n\) элементов, массивы \(b\) и \(c\) — пустые.

Вы выполняете над ними следующий алгоритм, состоящий из двух шагов:

  • Шаг \(1\): пока \(a\) не пуст, вы забираете из \(a\) последний элемент и перемещаете его в середину массива \(b\). Если \(b\) в данный момент нечетной длины, то вы сами можете выбрать: вставить число из \(a\) слева или справа от центрального элемента в \(b\). В результате \(a\) станет пустым, а \(b\) будет состоять из \(n\) элементов.
  • Шаг \(2\): пока \(b\) не пуст, вы забираете из \(b\) центральный элемент и перемещаете его в конец массива \(c\). Если \(b\) в данный момент четной длины, то вы сами можете выбрать какой из двух центральных элементов забрать. В результате \(b\) станет пустым, а \(c\) теперь состоит из \(n\) элементов.
Обратитесь к Примечанию за примерами.

Можете ли вы получить отсортированный в порядке неубывания массив \(c\)?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов входных данных. Далее следуют \(t\) наборов входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина массива \(a\).

Во второй строке каждого набора заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)) — сам массив \(a\).

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, выведите YES (регистр не важен), если вы можете получить отсортированный по неубыванию массив \(c\). В противном случае выведите NO (регистр не важен).

Примечание

В первом наборе входных данных, мы можем сделать следующие преобразования массива \(a = [3, 1, 5, 3]\):

Шаг \(1\):

\(a\)\([3, 1, 5, 3]\)\(\Rightarrow\)\([3, 1, 5]\)\(\Rightarrow\)\([3, 1]\)\(\Rightarrow\)\([3]\)\(\Rightarrow\)\([]\)
\(b\)\([]\)\([\underline{3}]\)\([3, \underline{5}]\)\([3, \underline{1}, 5]\)\([3, \underline{3}, 1, 5]\)

Шаг \(2\):

\(b\)\([3, 3, \underline{1}, 5]\)\(\Rightarrow\)\([3, \underline{3}, 5]\)\(\Rightarrow\)\([\underline{3}, 5]\)\(\Rightarrow\)\([\underline{5}]\)\(\Rightarrow\)\([]\)
\(c\)\([]\)\([1]\)\([1, 3]\)\([1, 3, 3]\)\([1, 3, 3, 5]\)
В результате массив \(c = [1, 3, 3, 5]\) и он отсортирован.

E. Уничтожение стены

Бинарный поиск жадные алгоритмы Конструктив математика Перебор *2000

Монокарп играет в стратегическую компьютерную игру Rage of Empires II: Definitive Edition. Сейчас он собирается атаковать своего оппонента в игре, но вот незадача — противник успел построить стену, и войска Монокарпа не могут попасть в лагерь противника!

Стена состоит из \(n\) секций, расположенных в ряд и пронумерованных слева направо, начиная с единицы. Прочность \(i\)-й секции изначально равна \(a_i\). Если прочность какой-то секции станет равной \(0\) или станет отрицательной, то эта секция будет считаться разрушенной.

Для успешной атаки Монокарп должен разрушить хотя бы две секции стены (любые две: возможно, соседние, но не обязательно). Для этого собирается использовать специальное осадное орудие — онагр. Когда онагр стреляет по секции стены, он наносит \(2\) единицы урона этой секции и по \(1\) единице урона соседним секциям. Иными словами, если онагр стреляет по секции \(x\), прочность секции \(x\) уменьшается на \(2\), а прочности секций \(x - 1\) и \(x + 1\) (если они существуют) уменьшаются на \(1\) каждая.

Монокарп может стрелять из онагра по любым секциям любое количество раз, в том числе можно стрелять по уже разрушенной секции.

Монокарп хочет посчитать минимальное количество выстрелов онагра, необходимое, чтобы разрушить хотя бы две секции стены. Помогите ему!

Входные данные

В первой строке следует целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество секций в стене.

Во второй строке следует последовательность целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^6\)), где \(a_i\) равно изначальной прочности \(i\)-й секции стены.

Выходные данные

Выведите целое число — минимальное количество выстрелов онагра, необходимое, чтобы разрушить хотя бы две секции стены.

Примечание

В первом примере можно разрушить \(2\)-ю и \(4\)-ю секции стены за \(10\) выстрелов, например, совершив все \(10\) выстрелов в третью секцию. После этого прочности секций будут равны \([20, 0, 10, 0, 20]\). Существует и другой способ. Можно сначала выстрелить \(5\) раз во \(2\)-ю секцию и затем еще \(5\) раз в \(4\)-ю секцию. После этого прочности секций будут равны \([15, 0, 20, 0, 15]\).

Во втором примере достаточно одного выстрела по \(2\)-й секции. После этого \(1\)-я и \(3\)-я секции будут разрушены.

В третьем примере можно, например, выстрелить два раза во \(2\)-ю секцию (после этого прочности секций станут равны \([5, 2, 4, 8, 5, 8]\)), а затем выстрелить два раза в \(3\)-ю секцию (после этого прочности секций станут равны \([5, 0, 0, 6, 5, 8]\)). Таким образом, после четырех выстрелов будут разрушены \(2\)-я и \(3\)-я секции.

C. Tokitsukaze и две красочные ленты

графы жадные алгоритмы Конструктив поиск в глубину и подобное *1900

У Tokitsukaze есть две красочные ленты. Существует \(n\) различных цветов, пронумерованных от \(1\) до \(n\), и каждый цвет появляется ровно один раз на каждой из двух лент. Обозначим цвет \(i\)-й позиции первой ленты как \(ca_i\), а цвет \(i\)-й позиции второй ленты как \(cb_i\).

Теперь Tokitsukaze хочет выбрать для каждого цвета некоторое целочисленное значение от \(1\) до \(n\), различные для всех цветов. После этого она запишет во все позиции на каждой ленте значение соответствующего цвета. Обозначим число, записанное в \(i\)-й позиции первой ленты как \(numa_i\), а число в \(i\)-й позиции второй ленты как \(numb_i\).

В примере на рисунке выше, если предположить, что красный цвет получит значение \(x\) (\(1 \leq x \leq n\)), то так как он появляется на \(1\)-й позиции первой ленты и на \(3\)-й позиции второй ленты, то \(numa_1=numb_3=x\).

Обратите внимание, что все цвета \(i\) от \(1\) до \(n\) будут иметь различные значения, и один и тот же цвет, встречающийся в обеих лентах, будет иметь одинаковое значение.

После выбора значений цветов красота двух лент рассчитывается как \(\)\sum_{i=1}^{n}|numa_i-numb_i|.\(\)

Пожалуйста, помогите Tokitsukaze найти самую высокую возможную красоту лент.

Входные данные

Первая строка содержит единственное положительное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Дальше следует описание наборов входных данных:

Первая строка содержит единственное целое число \(n\) (\(1\leq n \leq 10^5\)) — количество цветов.

Вторая строка содержит \(n\) целых чисел \(ca_1, ca_2, \ldots, ca_n\) (\(1 \leq ca_i \leq n\)) — цвет каждой позиции первой ленты. Гарантируется, что \(ca\) является перестановкой.

Третья строка содержит \(n\) целых чисел \(cb_1, cb_2, \ldots, cb_n\) (\(1 \leq cb_i \leq n\)) — цвет каждой позиции второй ленты. Гарантируется, что \(cb\) является перестановкой.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^{5}\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — наибольшую возможную красоту.

Примечание

Оптимальное решение для первого набора входных данных показано на следующем рисунке:

Красота равна \(\left|4-3 \right|+\left|3-5 \right|+\left|2-4 \right|+\left|5-2 \right|+\left|1-6 \right|+\left|6-1 \right|=18\).

Оптимальное решение для второго набора входных данных показано на следующем рисунке:

Красота равна \(\left|2-2 \right|+\left|1-6 \right|+\left|3-3 \right|+\left|6-1 \right|+\left|4-4 \right|+\left|5-5 \right|=10\).

B. Сортировка с И

битмаски Конструктив сортировки *1100

Вам дана перестановка \(p\) целых чисел от \(0\) до \(n-1\) (каждое из них встречается ровно один раз). Первоначально перестановка не отсортирована (то есть, \(p_i>p_{i+1}\) хотя бы для одного \(1 \le i \le n - 1\)).

Перестановка называется \(X\)-сортируемой для некоторого неотрицательного целого числа \(X\), если можно отсортировать перестановку, выполнив операцию ниже некоторое конечное число раз:

  • Выберите два индекса \(i\) и \(j\) \((1 \le i \lt j \le n)\) такие, что \(p_i \& p_j = X\).
  • Поменяйте местами \(p_i\) и \(p_j\).

Здесь \(\&\) обозначает операцию побитового И.

Найдите максимальное значение \(X\) такое, что \(p\) является \(X\)-сортируемой. Можно показать, что всегда существует некоторое значение \(X\) такое, что \(p\) является \(X\)-сортируемой.

Входные данные

Входные данные состоят из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) \((1 \le t \le 10^4)\)  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) \((2 \le n \le 2 \cdot 10^5)\)  — длину перестановки.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(p_1, p_2, ..., p_n\) (\(0 \le p_i \le n-1\), все \(p_i\) различны)  — элементы \(p\). Гарантируется, что \(p\) не отсортирована.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное значение \(X\) такое, что \(p\) является \(X\)-сортируемой.

Примечание

В первом наборе входных данных единственными \(X\), для которых перестановка является \(X\)-сортируемой, являются \(X = 0\) и \(X = 2\), максимальный из которых равен \(2\).

Сортировка с использованием \(X = 0\):

  • Поменять местами \(p_1\) и \(p_4\), \(p = [2, 1, 3, 0]\).
  • Поменять местами \(p_3\) и \(p_4\), \(p = [2, 1, 0, 3]\).
  • Поменять местами \(p_1\) и \(p_3\), \(p = [0, 1, 2, 3]\).

Сортировка с использованием \(X = 2\):

  • Поменять местами \(p_3\) и \(p_4\), \(p = [0, 1, 2, 3]\).

Во втором наборе входных данных мы должны поменять местами \(p_1\) и \(p_2\), что возможно только при \(X = 0\).

C. LIS или перевернутая LIS?

жадные алгоритмы Конструктив математика реализация *1400

Вам дан массив \(a\) из \(n\) целых положительных чисел.

Пусть \(\text{LIS}(a)\) обозначает длину самой длинной строго возрастающей подпоследовательности \(a\). Например,

  • \(\text{LIS}([2, \underline{1}, 1, \underline{3}])\) = \(2\).
  • \(\text{LIS}([\underline{3}, \underline{5}, \underline{10}, \underline{20}])\) = \(4\).
  • \(\text{LIS}([3, \underline{1}, \underline{2}, \underline{4}])\) = \(3\).

Мы определяем массив \(a'\) как массив, полученный после разворота массива \(a\), т.е. \(a' = [a_n, a_{n-1}, \ldots , a_1]\).

Красота массива \(a\) определяется как \(min(\text{LIS}(a),\text{LIS}(a'))\).

Ваша задача  — определить максимально возможную красоту массива \(a\), если вы можете произвольно переставить местами элементы массива \(a\).

Входные данные

Входные данные состоят из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) \((1 \leq t \leq 10^4)\)  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) \((1 \leq n \leq 2\cdot 10^5)\)  — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2, \ldots ,a_n\) \((1 \leq a_i \leq 10^9)\)  — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число  — максимально возможную красоту \(a\) после перестановки его элементов произвольным способом.

Примечание

В первом наборе входных данных \(a\) = \([6, 6, 6]\) и \(a'\) = \([6, 6, 6]\). \(\text{LIS}(a) = \text{LIS}(a')\) = \(1\). Следовательно, красота равна \(min(1, 1) = 1\).

Во втором наборе входных данных \(a\) может быть перестроено в \([2, 5, 4, 5, 4, 2]\). Тогда \(a'\) = \([2, 4, 5, 4, 5, 2]\). \(\text{LIS}(a) = \text{LIS}(a') = 3\). Следовательно, красота равна \(3\), и можно показать, что это максимально возможная красота.

В третьем наборе входных данных \(a\) может быть перестроено в \([1, 2, 3, 2]\). Тогда \(a'\) = \([2, 3, 2, 1]\). \(\text{LIS}(a) = 3\), \(\text{LIS}(a') = 2\). Следовательно, красота равна \(min(3, 2) = 2\) и можно показать, что \(2\)  — это максимально возможная красота.

D. Остовное дерево на окружности

Деревья Конструктив реализация *2000

Дано \(n\) вершин, расположенных на окружности, пронумерованных от \(1\) до \(n\) по часовой стрелке. Вам также дана бинарная строка \(s\) длины \(n\).

Ваша задача  — построить дерево на заданных \(n\) вершинах, удовлетворяющее двум условиям ниже, или сообщить, что такого дерева не существует:

  • Для каждой вершины \(i\) \((1 \le i \le n)\), степень вершины четная, если \(s_i = 0\) и нечетная, если \(s_i = 1\).
  • Никакие два ребра дерева не пересекаются внутри окружности. Разрешается, чтобы ребра пересекались на окружности.

Обратите внимание, что все ребра рисуются как отрезки прямых линий. Например, ребро \((u, v)\) в дереве рисуется как отрезок прямой, соединяющий \(u\) и \(v\) на окружности.

Дерево с \(n\) вершинами  — это связный граф с \(n - 1\) ребрами.

Входные данные

Входные данные состоят из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) \((1 \leq t \leq 2\cdot 10^4)\)  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) \((2 \leq n \leq 2\cdot 10^5)\)  — количество вершин.

Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если не существует дерева, удовлетворяющего заданным условиям, выведите «NO» (без кавычек), иначе выведите «YES», а затем выведите описание дерева.

Вы можете выводить каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs», «yEs» будут распознаны как положительный ответ).

Если существует дерево, то выведите \(n - 1\) строк, каждая из которых содержит два целых числа \(u\) и \(v\) \((1 \leq u,v \leq n, u \neq v)\), обозначающих ребро между \(u\) и \(v\) в дереве. Если существует несколько возможных ответов, выведите любой из них.

Примечание

В первом наборе входных данных дерево выглядит следующим образом:

Во втором наборе входных данных существует только одно возможное дерево с ребром между \(1\) и \(2\), и оно не удовлетворяет ограничениям на степени.

В третьем наборе входных данных,

Дерево слева удовлетворяет ограничениям на степени, но ребра пересекаются внутри, поэтому оно не является допустимым деревом, в то время как дерево справа является допустимым.

E. Неупорядоченные обмены

графы Деревья жадные алгоритмы Конструктив математика поиск в глубину и подобное сортировки *2700

У Алисы есть перестановка \(p\) чисел от \(1\) до \(n\). Алиса может поменять местами пару \((x, y)\), что означает поменять местами элементы в позициях \(x\) и \(y\) в \(p\) (то есть поменять местами \(p_x\) и \(p_y\)). Алиса недавно изучила свой первый алгоритм сортировки, поэтому она решила отсортировать свою перестановку за минимальное количество возможных обменов. Она записала на листе бумаги все обмены в том порядке, в котором она их выполняла для сортировки перестановки.

Например,

  • \([(2, 3), (1, 3)]\) является правильной последовательностью обменов Алисы для перестановки \(p = [3, 1, 2]\), в то время как \([(1, 3), (2, 3)]\) не является, потому что не сортирует перестановку. Обратите внимание, что мы не можем отсортировать перестановку менее чем за \(2\) обмена.
  • \([(1, 2), (2, 3), (2, 4), (2, 3)]\) не может быть последовательностью обменов Алисы для \(p = [2, 1, 4, 3]\), даже если она сортирует перестановку, потому что \(p\) можно отсортировать за \(2\) обмена, например, используя последовательность \([(4, 3), (1, 2)]\).

К сожалению, Боб переставил местами обмены в последовательности, выписанной Алисой.

Вам дана перестановка Алисы \(p\) и обмены, сделанные Алисой в произвольном порядке. Можете ли вы восстановить правильную последовательность обменов, которая сортирует перестановку \(p\)? Поскольку Алиса написала правильные обмены до того, как Боб их перемешал, гарантируется, что существует некоторый порядок обменов, который сортирует перестановку.

Входные данные

Первая строка содержит \(2\) целых числа \(n\) и \(m\) \((2 \le n \le 2 \cdot 10^5, 1 \le m \le n - 1)\)  — размер перестановки и минимальное количество обменов, необходимое для сортировки перестановки.

Следующая строка содержит \(n\) целых чисел \(p_1, p_2, ..., p_n\) (\(1 \le p_i \le n\), все \(p_i\) различны)  — элементы \(p\). Гарантируется, что \(p\) образует перестановку.

Далее следуют \(m\) строк. В \(i\)-й из следующих \(m\) строк содержатся два целых числа \(x_i\) и \(y_i\)  — обозначающих \(i\)-й обмен \((x_i, y_i)\).

Гарантируется, что можно отсортировать \(p\) с этими \(m\) обменами и что нет способа отсортировать \(p\) с менее чем \(m\) обменами.

Выходные данные

Выведите перестановку \(m\) целых чисел  — правильный порядок обменов, выписанный Алисой, который сортирует перестановку \(p\). Для лучшего понимания обратитесь к объяснению примера.

В случае нескольких возможных ответов выведите любой.

Примечание

В первом примере \(p = [2, 3, 4, 1]\), \(m = 3\) и заданы обмены \([(1, 4), (2, 1), (1, 3)]\).

Существует только один правильный порядок обмена, а именно \([2, 3, 1]\).

  1. Сначала мы выполняем обмен \(2\) из входных данных, т.е. \((2, 1)\), \(p\) становится \([3, 2, 4, 1]\).
  2. Затем мы выполняем обмен \(3\) из входных данных, т.е. \((1, 3)\), \(p\) становится \([4, 2, 3, 1]\).
  3. Наконец, мы выполняем обмен \(1\) из входных данных, т.е. \((1, 4)\) и \(p\) становится \([1, 2, 3, 4]\), что является отсортированным.

Во втором примере \(p = [6, 5, 1, 3, 2, 4]\), \(m = 4\) и заданные обмены \([(3, 1), (2, 5), (6, 3), (6, 4)]\).

Один из возможных правильных порядков обмена  — \([4, 2, 1, 3]\).

  1. Выполните обмен \(4\) из входных данных, т.е. \((6, 4)\), \(p\) становится \([6, 5, 1, 4, 2, 3]\).
  2. Выполните обмен \(2\) из входных данных, т.е. \((2, 5)\), \(p\) становится \([6, 2, 1, 4, 5, 3]\).
  3. Выполните обмен \(1\) из входных данных, т.е. \((3, 1)\), \(p\) становится \([1, 2, 6, 4, 5, 3]\).
  4. Выполните обмен \(3\) из входных данных, т.е. \((6, 3)\) и \(p\) становится \([1, 2, 3, 4, 5, 6]\), что является отсортированным.

Возможны и другие ответы, например, \([1, 2, 4, 3]\).

A. Много цифр

игры Конструктив математика Строки *800

У самых истоков CrowdForces, ещё совсем давно, стояла именно Тётя Люсине. За это время она заработала много денег, даже забыла все цифры и теперь просто платит. Но совершенно неожиданно ей на ревью попалась задача как раз на цифры! Тётя Люсине не может решить даже on-ramp задачу. Помогите ей, ведь судьба вашего аккаунта в её руках!

Дано целое число \(n\) без нулей в десятичной записи. Алиса и Боб играют в игру с этим числом. Алиса начинает первой. Они делают ходы по очереди.

В своем ходу Алиса должна поменять местами любые две цифры в числе, стоящие на разных позициях. Боб в свой ход всегда удаляет последнюю цифру числа. Игра заканчивается, когда остаётся ровно одна цифра.

Вам необходимо найти минимальное число, которое Алиса может получить в результате игры.

Входные данные

В первой строке входных данных находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В единственной строке описания каждого набора входных данных находится одно целое число \(n\) (\(10 \le n \le 10^9\)) — число, с которым ведётся игра. \(n\) не содержит нулей в десятичной записи.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное число, которое Алиса может получить в результате игры.

Примечание

В первом наборе входных данных Алиса должна поменять местами \(1\) и \(2\). После этого Боб удаляет последнюю цифру, т. е. \(1\), поэтому ответ \(2\).

Во втором наборе входных данных Алиса может поменять местами \(3\) и \(1\): \(312\). После этого Боб удаляет последнюю цифру: \(31\). Потом Алиса меняет местами \(3\) и \(1\): \(13\) и Боб удаляет \(3\), поэтому ответ \(1\).

B. Z mod X = C

Конструктив математика *800

Как известно, на CrowdForces можно делать по 10 ревью за одну сданную задачу. Если выполнять все ревью, то можно очень утомиться и принять ZXC культуру. Именно такая участь настигла Тётю Люсине, которая слишком хотела подзаработать. Став ZXC Люсине, она очень увлеклась остатком при делении (не взятием по модулю, это сказка), и придумала задачу, которую вам и предстоит решить.

Она дала вам три целых положительных числа \(a\), \(b\), \(c\) (\(a < b < c\)). Вам нужно найти три положительных целых числа \(x\), \(y\), \(z\) таких, чтобы выполнялись следующие условия:

\(\)x \bmod y = a,\(\) \(\)y \bmod z = b,\(\) \(\)z \bmod x = c.\(\)

Здесь \(p \bmod q\) обозначает остаток при делении числа \(p\) на число \(q\). Можно доказать, что при данных ограничениях ответ всегда существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке содержится единственное целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В единственной строке каждого набора входных содержатся три целых числа \(a\), \(b\), \(c\) (\(1 \le a < b < c \le 10^8\)).

Выходные данные

Для каждого набора входных данных выведите три целых числа \(x\), \(y\), \(z\) (\(1 \le x, y, z \le 10^{18}\)) — такие, что \(x \bmod y = a\), \(y \bmod z = b\), \(z \bmod x = c\).

Вы можете вывести любой из правильных ответов.

Примечание

В первом наборе входных данных

\(\)x \bmod y = 12 \bmod 11 = 1;\(\)

\(\)y \bmod z = 11 \bmod 4 = 3;\(\)

\(\)z \bmod x = 4 \bmod 12 = 4.\(\)

C. Перестановка столбцов

жадные алгоритмы Конструктив Перебор реализация сортировки *1400

Как известно каждому участнику проекта crowdforces, Тётя Люсине — чуть ли не самый активный человек на земле. Её голова всё время забита какими-то новыми on-ramp задачами. Конечно, даже ей не всегда удаётся придумать что-то хорошее, и в этот раз у неё получилась таска со сказкой, а именно — про таблицы. Ни один ревьювер потом не смог решить эту задачу, а вы сможете?

Дана таблица с \(n\) строками и \(m\) столбцами, где в каждой ячейке написано целое положительное число. Назовём таблицу хорошей, если последовательность чисел в каждой строке является отсортированной в порядке неубывания. Иными словами, для каждого \(1 \le i \le n\) и \(2 \le j \le m\) выполняется следующее условие: \(a_{i,j} \ge a_{i, j-1}\).

Необходимо ровно один раз выбрать столбцы с номерами \(i\) и \(j\) (не обязательно различными), \(1 \le i, j \le m\), и поменять их местами.

Необходимо определить, можно ли после этого получить хорошую таблицу, и вывести соответствующие столбцы, если это возможно.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^5\)) — количество строк и столбцов таблицы соответственно.

Каждая из следующих \(n\) строк содержит по \(m\) целых чисел, \(j\)-й элемент \(i\)-й строки равен \(a_{i,j}\) — это число, записанное в \(j\)-й ячейке \(i\)-й строки (\(1 \le a_{i,j} \le 10^9\)).

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Если есть несколько правильных ответов, вы можете вывести любой из них.

Выходные данные

Если после перестановки невозможно получить хорошую таблицу, то выведите одно число \(-1\).

В противном случае выведите \(2\) числа — номера столбцов, которые необходимо переставить, чтобы получить хорошую таблицу.

Если существуют несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных таблица уже является хорошей, поэтому мы можем, например, переставить первый столбец с самим собой.

Во втором наборе входных данных нельзя сделать данную таблицу хорошей.

В третьем наборе входных данных необходимо поменять местами первый и второй столбец, тогда таблица станет хорошей.

D. Ловушки

жадные алгоритмы Конструктив сортировки *1700

Как известно, в мире всегда есть недобросовестные люди. К сожалению, иногда такие люди делают ревью, и самый умный человек на земле (естественно, Тётя Люсине) придумала хитрейший способ с ними бороться: ханипоты! Но Тётя Люсине пошла ещё дальше: она замаскировала все ханипоты под «ловушки»! Теперь вам, как самому лучшему ревьюверу, нужно через них пробраться.

Вам нужно преодолеть \(n\) ловушек, пронумерованных от \(1\) до \(n\). Вы будете проходить через ловушки по очереди. \(i\)-я ловушка наносит вам \(a_i\) базового урона.

Вместо того, чтобы проходить через ловушку, вы можете перепрыгнуть ее. Всего вы можете перепрыгнуть не более \(k\) ловушек. В случае, если вы перепрыгиваете ловушку, вы не получаете от неё урона. Однако если вы перепрыгиваете какую-то ловушку, то это увеличивает урон каждой следующей ловушки на \(1\) (это бонусный урон).

Обратите внимание, что если вы перепрыгиваете ловушку, то вы не получаете от неё урона (ни базовый, ни бонусный), а что также бонусные уроны от прыжков складываются. Например, если вы проходите через \(i\)-ю ловушку с базовым уроном \(a_i\), а до этого вы перепрыгнули \(3\) другие ловушки, то вы получите от неё \((a_i + 3)\) урона.

Определите, какое минимальный суммарный урон вы можете получить, если разрешается перепрыгнуть не больше \(k\) любых ловушек.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le k \le n\)) — количество ловушек и максимальное количество ловушек, которые вы можете перепрыгнуть.

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — базовые уроны ловушек.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышают \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — минимальный суммарный урон, который можно получить, если можно перепрыгнуть не больше \(k\) любых ловушек.

Примечание

В первом наборе входных данных можно перепрыгнуть все ловушки и получить \(0\) урона.

Во втором наборе входных данных есть \(5\) способов перепрыгнуть ловушки:

  1. Не перепрыгивать никакие ловушки.

    Суммарный урон: \(5 + 10 + 11 + 5 = 31\).

  2. Перепрыгнуть \(1\)-ю ловушку.

    Суммарный урон: \(\underline{0} + (10 + 1) + (11 + 1) + (5 + 1) = 29\).

  3. Перепрыгнуть \(2\)-ю ловушку.

    Суммарный урон: \(5 + \underline{0} + (11 + 1) + (5 + 1) = 23\).

  4. Перепрыгнуть \(3\)-ю ловушку.

    Суммарный урон: \(5 + 10 + \underline{0} + (5 + 1) = 21\).

  5. Перепрыгнуть \(4\)-ю ловушку.

    Суммарный урон: \(5 + 10 + 11 + \underline{0} = 26\).

Чтобы получить минимальный урон, необходимо перепрыгнуть \(3\)-ю ловушку, тогда ответ будет \(21\).

В третьем наборе входных данных оптимально перепрыгнуть через ловушки с номерами \(1\), \(3\), \(4\), \(5\), \(7\):

Суммарный урон: \(0 + (2 + 1) + 0 + 0 + 0 + (2 + 4) + 0 = 9\).

E. MEX против DIFF

Бинарный поиск жадные алгоритмы Конструктив Перебор Структуры данных *2100

У Тёти Люсине, как и у всех гениальных людей, имеются свои странности. Сегодня в качестве развлечения она решила посмотреть на противостояние двух могущественных функций. В зависимости от результата она решит, добавлять ли эти функции в CrowdScript.

Дан массив \(a\) из \(n\) неотрицательных целых чисел. За одну операцию вы можете заменить любое число в массиве на любое неотрицательное целое число.

Назовём стоимостью массива \(\operatorname{DIFF}(a) - \operatorname{MEX}(a)\), где \(\operatorname{MEX}\) множества чисел — это минимальное целое неотрицательное число, которого нет в множестве, а \(\operatorname{DIFF}\) — количество различных чисел в массиве.

Например, \(\operatorname{MEX}(\{1, 2, 3\}) = 0\), \(\operatorname{MEX}(\{0, 1, 2, 4, 5\}) = 3\).

Вам необходимо определить, какую минимальную стоимость массива \(a\) можно получить, если разрешено сделать не больше \(k\) операций.

Входные данные

В первой строке входных данных находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке описания каждого набора входных данных находится два целых числа \(n\) и \(k\) (\(1 \le n \le 10^5\), \(0 \le k \le 10^5\)) — размер массива \(a\) и максимальное количество операций, которое можно сделать.

Во второй строке описания каждого набора входных данных находятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — массив \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число — минимальная стоимость, которую можно получить, сделав не больше \(k\) операций.

Примечание

В первом наборе входных данных не требуется делать какие-либо операции, чтобы минимизировать \(\operatorname{DIFF} - \operatorname{MEX}\).

Во втором наборе входных данных можно заменить \(5\) на \(1\). После этого массив \(a\) будет \([0,\, 2,\, 4,\, 1]\), \(\operatorname{DIFF} = 4\), \(\operatorname{MEX} = \operatorname{MEX}(\{0, 1, 2, 4\}) = 3\), поэтому ответ равен \(1\).

В третьем наборе входных данных один из возможных массивов \(a\) будет \([4,\, 13,\, 0,\, 0,\, 13,\, 1,\, 2]\), \(\operatorname{DIFF} = 5\), \(\operatorname{MEX} = 3\).

В четвертом наборе входных данных один из возможных массивов \(a\) будет \([1,\, 2,\, 3,\, 0,\, 0,\, 0]\).

G. Алгоритм Люсине

Конструктив математика Паросочетания Потоки теория чисел *2800

Принято считать, что самый известный алгоритм нахождения наибольшего общего делителя двух чисел придумал Евклид, однако на самом деле этот алгоритм придумала именно Тётя Люсине. Вы, должно быть, уже не удивились, ведь она — величайший ум человечества. И теперь она решила модернизировать этот алгоритм, привнеся в него немного креатива. А в вас есть эта жилка креатива?

Рассмотрим алгоритм Люсине для нахождения наибольшего общего делителя, где \(t\) это некоторый список:


function Euclid(a, b):
if a < b:
swap(a, b)

if b == 0:
return a

r = остаток от деления a на b
if r > 0:
добавить r в конец t

return Euclid(b, r)

Существует массив \(p\) пар положительных целых чисел, каждое из них не больше \(m\). Изначально список \(t\) пустой. Описанная выше функция запускается на каждой паре из массива \(p\). После этого вам даётся перестановка элементов \(t\).

Вам необходимо найти массив \(p\) любого размера не больше \(2 \cdot 10^4\) такой, что по описанному алгоритму из него получится массив \(t\), или сказать, что это невозможно.

Входные данные

В первой строке содержатся два целых числа \(n\), \(m\) (\(1 \le n \le 10^3\), \(1 \le m \le 10^9\)) — длина массива \(t\) и ограничение на числа в парах.

Во второй строке содержатся \(n\) целых чисел \(t_1, t_2, \ldots, t_n\) (\(1 \le t_i \le m\)) — элементы массива \(t\).

Выходные данные
  • Если ответа не существует, выведите \(-1\).
  • Если ответ существует, в первой строке выведите \(k\) (\(1 \le k \le 2 \cdot 10^4\)) — размер массива \(p\), т. е. количество пар в вашем ответе. \(i\)-я из следующих \(k\) строк должна содержать два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le m\)) — \(i\)-я пара массива \(p\).

Если существуют несколько решений, вы можете вывести любой из них.

Примечание

В первом тесте рассмотрим массив \(t\) для каждой из пар:

  • \((19,\, 11)\): \(t = [8, 3, 2, 1]\);
  • \((15,\, 9)\): \(t = [6, 3]\);
  • \((3,\, 7)\): \(t = [1]\).

Тогда в итоге \(t = [8, 3, 2, 1, 6, 3, 1]\), что совпадает с входным массивом \(t\) с точностью до перестановки.

Во втором тесте невозможно найти такой массив пар \(p\), в котором все числа не превосходят \(10\) и \(t = [7, 1]\).

В третьем тесте для пары \((15,\, 8)\) массив \(t\) будет \([7, 1]\).

H. Сложный разрез

Конструктив математика поиск в глубину и подобное разделяй и властвуй *3400

Главный секрет киноиндустрии заключается в том, что известный фильм «Люси» основан на реальных событиях, а в главных ролях была именно Тётя Люсине. Спойлер: в конце фильма Люси(не) превращается в компьютер. Причём компьютер необычный, в нём есть информация про все секреты вселенной, но в виде бинарной строки. Эту бинарную строку вам и нужно расшифровать самым-самым естественным образом.

Дана бинарная строка \(s\). Необходимо разбить её на произвольное количество непересекающихся подстрок так, чтобы сумма двоичных чисел, образованных этими подстроками, была точной степенью двойки, либо сказать, что это невозможно. Каждый символ \(s\) должен принадлежать ровно одной подстроке из разбиения.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В единственной строке каждого набора входных данных вводится бинарная строка \(s\) (\(1 \le |s| \le 10^6\)).

Гарантируется, что сумма \(|s|\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите ответ на задачу следующим образом:

  • Если ответа не существует, выведите \(-1\).
  • Если ответ существует, то сначала выведите число \(k\) — количество подстрок в разбиении. После этого выведите \(k\) непересекающихся подстрок, для \(i\)-й подстроки выведите два целых числа \(l_i, r_i\) (\(1 \le l_i, r_i \le |s|\)) — описание \(i\)-й подстроки.
Если существует несколько возможных разбиений, выведите любое.
Примечание

В первом наборе входных данных невозможно разбить строку так, чтобы получить степень двойки.

Во втором наборе входных данных возможно следующее разбиение:

  • \(011_2 = 3_{10}\),
  • \(0_2 = 0_{10}\),
  • \(1_2 = 1_{10}\),
\(3 + 0 + 1 = 4\), \(4\) является степенью двойки.

A. Циклический локальный минимакс

жадные алгоритмы Конструктив сортировки *1100

Вам дано \(n\) целых чисел \(a_1, a_2, \ldots, a_n\). Можно ли расположить их на окружности так, чтобы каждое число было строго больше обоих своих соседей или строго меньше обоих своих соседей?

Другими словами, определите, существует ли перестановка \(b_1, b_2, \ldots, b_n\) целых чисел \(a_1, a_2, \ldots, a_n\) такая, что для каждого \(i\) от \(1\) до \(n\) выполняется хотя бы одно из следующих условий:

  • \(b_{i-1} < b_i > b_{i+1}\).
  • \(b_{i-1} > b_i < b_{i+1}\)

Чтобы выражения выше имели смысл для \(i=1\) и \(i=n\), мы определяем \(b_0=b_n\) и \(b_{n+1}=b_1\).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 3\cdot 10^4\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 10^5\))  — количество чисел.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)).

Сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если невозможно расположить числа на окружности таким образом, выведите \(\texttt{NO}\).

В противном случае выведите \(\texttt{YES}\). Во второй строке выведите \(n\) целых чисел \(b_1, b_2, \ldots, b_n\), которые являются перестановкой \(a_1, a_2, \ldots, a_n\) и удовлетворяют условиям из утверждения.

Примечание

Можно показать, что для первого и третьего наборов входных данных такой расстановки не существует.

Во втором наборе входных данных подходит расстановка \([1, 8, 4, 9]\), в которой \(1\) и \(4\) меньше своих соседей, а \(8, 9\) больше.

В четвертом наборе входных данных работает расстановка \([1, 11, 1, 111, 1, 1111]\), в которой три элемента, равные \(1\), меньше своих соседей, а остальные элементы больше.

C. Привнеси баланс

жадные алгоритмы Конструктив Перебор *2600

У Алины есть скобочная последовательность \(s\) длины \(2n\), состоящая из \(n\) открывающих скобок '(' и \(n\) закрывающих скобок ')'. Поскольку ей нравится баланс, она хочет превратить эту последовательность скобок в сбалансированную скобочную последовательность.

За одну операцию она может развернуть любую подстроку \(s\).

Какое наименьшее количество операций ей потребуется, чтобы превратить \(s\) в сбалансированную скобочную последовательность? Можно показать, что это всегда можно сделать за не более чем \(n\) операций.

Напомним, что скобочная последовательность называется сбалансированной, если ее можно превратить в правильное математическое выражение, добавив символы + и 1. Например, последовательности (())(), () и (()(())) являются сбалансированными, а )(, (() и (())(  — нет.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)).

Вторая строка каждого набора входных данных содержит строку \(s\) длиной \(2n\), состоящую из \(n\) открывающих и \(n\) закрывающих скобок.

Сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных в первой строке выведите одно целое число \(k\) \((0 \le k \le n)\)  — наименьшее количество необходимых операций.

В \(i\)-й из следующих \(k\) строк должны содержаться два целых числа \(l_i, r_i\) (\(1 \le l_i \le r_i \le 2n\)), указывающие на то, что в \(i\)-й операции Алина развернет подстроку \(s_ls_{l+1} \ldots s_{r-1}s_r\). Здесь нумерация начинается с \(1\).

Если существует несколько последовательностей операций с наименьшей длиной, которые преобразуют последовательность в сбалансированную, вы можете вывести любую из них.

Примечание

В первом наборе входных данных строка уже сбалансирована.

Во втором наборе входных данных строка будет преобразована следующим образом: ())(()))( \(\to\) ()()()())( \(\to\) ()()()()(), где последняя строка сбалансирована.

В третьем наборе входных данных строка будет преобразована в ((()))((())), которая является сбалансированой.

D1. Вес перестановки (простая версия)

Конструктив поиск в глубину и подобное снм *2800

Это простая версия задачи. Разница между простой и сложной версиями в том, что в этой версии вы можете вывести любую перестановку с наименьшим весом.

Вам дана перестановка \(p_1, p_2, \ldots, p_n\) целых чисел от \(1\) до \(n\).

Определим вес перестановки \(q_1, q_2, \ldots, q_n\) целых чисел от \(1\) до \(n\) как \(\)|q_1 - p_{q_{2}}| + |q_2 - p_{q_{3}}| + \ldots + |q_{n-1} - p_{q_{n}}| + |q_n - p_{q_{1}}|\(\)

Вы хотите, чтобы ваша перестановка была настолько легкой, насколько это возможно. Найдите любую перестановку \(q\) с наименьшим возможным весом.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 100\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 200\))  — размер перестановки.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\), все \(p_i\) различны)  — элементы перестановки.

Сумма \(n\) по всем наборам входных данных не превышает \(400\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(q_1, q_2, \ldots, q_n\) (\(1 \le q_i \le n\), все \(q_i\) различны)  — одну из перестановок с наименьшим весом.

Примечание

В первом наборе входных данных есть две перестановки длины \(2\): \((1, 2)\) и \((2, 1)\). Перестановка \((1, 2)\) имеет вес \(|1 - p_2| + |2 - p_1| = 0\), а перестановка \((2, 1)\) имеет тот же вес: \(|2 - p_1| + |1 - p_2| = 0\). В этой версии мы можем вывести любую из этих перестановок.

Во втором наборе входных данных вес перестановки \((1, 3, 4, 2)\) равен \(|1 - p_3| + |3 - p_4| + |4 - p_2| + |2 - p_1| = |1 - 1| + |3 - 4| + |4 - 3| + |2 - 2| = 2\). Перестановок с меньшими весами не существует.

В третьем наборе входных данных вес перестановки \((1, 4, 2, 3, 5)\) равен \(|1 - p_4| + |4 - p_2| + |2 - p_3| + |3 - p_5| + |5 - p_1| = |1 - 2| + |4 - 4| + |2 - 3| + |3 - 1| + |5 - 5| = 4\). Перестановок с меньшими весами не существует.

D2. Вес перестановки (сложная версия)

жадные алгоритмы Конструктив *3500

Это сложная версия задачи. Разница между простой и сложной версиями в том, что в этой версии вы должны вывести лексикографически минимальную перестановку с наименьшим весом.

Вам дана перестановка \(p_1, p_2, \ldots, p_n\) целых чисел от \(1\) до \(n\).

Определим вес перестановки \(q_1, q_2, \ldots, q_n\) целых чисел от \(1\) до \(n\) как \(\)|q_1 - p_{q_{2}}| + |q_2 - p_{q_{3}}| + \ldots + |q_{n-1} - p_{q_{n}}| + |q_n - p_{q_{1}}|\(\)

Вы хотите, чтобы ваша перестановка была как можно легче. Среди перестановок \(q\) с наименьшим возможным весом найдите лексикографически минимальную.

Перестановка \(a_1, a_2, \ldots, a_n\) называется лексикографически меньшей, чем перестановка \(b_1, b_2, \ldots, b_n\), если существует некоторое \(1 \le i \le n\) такое, что \(a_j = b_j\) для всех \(1 \le j < i\) и \(a_i<b_i\).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 100\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 200\))  — размер перестановки.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\), все \(p_i\) различны)  — элементы перестановки.

Сумма \(n\) по всем наборам входных данных не превышает \(400\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(q_1, q_2, \ldots, q_n\) (\(1 \le q_i \le n\), все \(q_i\) различны)  — одну из перестановок с наименьшим весом.

Примечание

В первом наборе входных данных есть две перестановки длины \(2\): \((1, 2)\) и \((2, 1)\). Перестановка \((1, 2)\) имеет вес \(|1 - p_2| + |2 - p_1| = 0\), а перестановка \((2, 1)\) имеет тот же вес: \(|2 - p_1| + |1 - p_2| = 0\). В этой версии мы должны вывести лексикографически меньшую из них  — \((1, 2)\).

Во втором наборе входных данных вес перестановки \((1, 3, 4, 2)\) равен \(|1 - p_3| + |3 - p_4| + |4 - p_2| + |2 - p_1| = |1 - 1| + |3 - 4| + |4 - 3| + |2 - 2| = 2\). Перестановок с меньшими весами не существует.

В третьем наборе входных данных вес перестановки \((1, 3, 4, 2, 5)\) равен \(|1 - p_3| + |3 - p_4| + |4 - p_2| + |2 - p_5| + |5 - p_1| = |1 - 3| + |3 - 2| + |4 - 4| + |2 - 1| + |5 - 5| = 4\). Перестановок с меньшими весами не существует.

B. Железнодорожная система

графы жадные алгоритмы интерактив Конструктив сортировки *1700

Это интерактивная задача.

Под непосредственным наблюдением Kanako и Moriya железнодорожная система Gensokyo наконец-то завершена. GSKR (Gensokyo Railways) состоит из \(n\) станций с \(m\) двунаправленными дорожками, соединяющими их. \(i\)-я дорожка имеет длину \(l_i\) (\(1\le l_i\le 10^6\)). Из-за бюджетных ограничений железнодорожная система может быть не связной, хотя между двумя станциями может быть более одного пути.

Значение железнодорожной системы определяется как общая длина всех ее дорожек. Максимальная (или минимальная) мощность железнодорожной системы определяется как максимальное (или минимальное) значение среди всех полных остовных лесов.

Полный остовный лес графа — это остовный лес с той же связностью, что и данный граф.

У Kanako есть симулятор, способный обрабатывать не более \(2m\) запросов. На вход симулятора подается строка \(s\) длины \(m\), состоящая из символов 0 и/или 1. Симулятор оставит \(i\)-ю дорожку, если \(s_i=\) 1. Затем устройство сообщит Kanako максимальную мощность системы в смоделированном состоянии.

Kanako хочет узнать минимальную мощность системы со всеми дорожками с помощью симулятора.

Структура железнодорожной системы определяется заранее. Другими словами, интерактор не адаптивен.

Входные данные

Первая и единственная строка ввода содержит два целых числа \(n,m\) (\(2 \leq n \leq 200\), \(1\le m \le 500\)) — количество станций и путей.

Протокол взаимодействия

Начните взаимодействие, прочитав \(n,m\).

Чтобы сделать запрос, выведите «? \(s\)» (без кавычек, \(s\) — это строка длины \(m\), состоящая из символов 0 и/или 1 ). Затем вы должны прочитать наш ответ из стандартного ввода — максимальная мощность системы в смоделированном состоянии.

Если ваша программа сделала недопустимый запрос или закончились попытки, интерактор немедленно завершится, и ваша программа получит вердикт Неверный ответ.

Чтобы дать окончательный ответ, выведите «! \(L\)» (без кавычек, \(L\) — это минимальная мощность системы со всеми дорожками). Обратите внимание, что предоставление этого ответа не считается как один из \(2m\) запросов.

После печати запроса не забудьте вывести конец строки и очистить вывод. В противном случае вы получите превышение лимита бездействия. Для этого используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Паскале;
  • stdout.flush() в Python;
  • см. документацию для других языков.

Взломы

Первая строка ввода должна содержать два целых числа \(n,m\) (\(2 \leq n \leq 200\), \(1\le m \le 500\)) — количество станций и путей.

Следующие \(m\) строк должны содержать ровно \(3\) целых чисел через пробел \(u_i\), \(v_i\), \(l_i\) (\(1\le u_i,v_i \le n\), \(u_i\ne v_i\), \(1 \leq l_i \leq 10^6\)) — вершины ребра и длина \(i\)-й дорожки.

Примечание

Пример из условия, в котором \(l_i=i\):

E. Стань больше

жадные алгоритмы Комбинаторика Конструктив математика теория чисел *3500

У Shinmyoumaru есть молоток, который может увеличивать или уменьшать предметы. Она проверяет это на последовательности \(a\) и числе \(v\), начальное значение которого равно \(1\). Она хочет получить \(v = \gcd\limits_{i\ne j}\{a_i\cdot a_j\}\), используя не более \(10^5\) операций (\(\gcd\limits_{i\ne j}\{a_i\cdot a_j\}\)обозначает \(\gcd\) всех произведений двух различных элементов последовательности \(a\)).

В каждой операции она выбирает подпоследовательность \(b\) последовательности \(a\) и выполняет одно из следующих действий.

  • Увеличить: \(v = v \cdot \mathrm{lcm}(b)\)
  • Уменьшить: \(v = \frac{v}{\mathrm{lcm}(b)}\)

Обратите внимание, что ей не нужно гарантировать, чтобы \(v\) являлось целым числом, то есть \(v\) не обязательно должно быть кратным \(\mathrm{lcm}(b)\) при выполнении операции уменьшать.

Кроме того, она хочет гарантировать, чтобы суммарная длина \(b\), выбранных для операций, не превышала \(10^6\). Найдите возможную последовательность действий для нее. Вам не нужно ничего минимизировать.

Входные данные

Первая строка содержит единственное целое число \(n\) (\(2\leq n\leq 10^5\)) — размер последовательности \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\cdots,a_n\) (\(1\leq a_i\leq 10^6\)) — последовательность \(a\).

Можно показать, что ответ существует.

Выходные данные

Первая строка содержит целое неотрицательное число \(k\) (\(0\leq k\leq 10^5\)) — количество операций.

Следующие \(k\) строк содержат несколько целых чисел. В каждой строке первые два целых числа \(f\) (\(f\in\{0,1\}\)) и \(p\) (\(1\le p\le n\)) обозначают выбранный вами вариант (\(0\) для увеличения и \(1\) для уменьшения) и длину \(b\). Остальные целые числа \(p\) в строке \(i_1,i_2,\ldots,i_p\) (\(1\le i_1<i_2<\ldots<i_p\le n\)) представляют собой индексы подпоследовательности. Формально \(b_j=a_{i_j}\).

Примечание

В первом наборе входных данных \(\gcd\limits_{i\ne j}\{a_i\cdot a_j\}=\gcd\{60,90,150\}=30\).

Выполните \(v = v\cdot \operatorname{lcm}\{a_1,a_2,a_3\}=30\).

Во втором наборе входных данных \(\gcd\limits_{i\ne j}\{a_i\cdot a_j\}=8\).

Выполните \(v = v\cdot \operatorname{lcm}\{a_4\}=16\).

Затем выполните \(v = \frac{v}{\operatorname{lcm}\{a_1\}}=8\).

B. Волшебный талисман Patchouli

битмаски жадные алгоритмы Конструктив сортировки *800

Patchouli является магическим талисманом. Изначально у него \(n\) магических жетонов. Их магическая сила может быть представлена положительными целыми числами \(a_1, a_2, \ldots, a_n\).

Patchouli может выполнять следующие две операции с жетонами.

  • Слияние: Patchouli выбирает два жетона, убирает их и создает новый жетон с магической силой, равной сумме двух выбранных жетонов.
  • Сокращение: Patchouli выбирает жетон с четным значением магической силы \(x\), удаляет его и создает новый жетон с магической силой, равной \(\frac{x}{2}\).

Жетоны наиболее эффективны, когда они имеют нечетное значение магической силы. Пожалуйста, помогите Patchouli найти минимальное количество операций, необходимых ему, чтобы все жетоны имели нечетное значение магической силы.

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Для каждого набора входных данных первая строка содержит одно целое число \(n\) (\(1 \leq n\leq 2\cdot 10^5\)) — изначальное количество жетонов.

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \leq a_i \leq 10^9\)) — изначальная магическая сила \(n\) жетонов.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, которое нужно Patchouli, чтобы все жетоны имели нечетное значение магической силы.

Можно показать, что при заданных ограничениях требуемая последовательность операций существует.

Примечание

В первом наборе входных данных \(a\) изначально состоит только из нечетных чисел.

Во втором наборе входных данных выберите жетоны с магической силой \(1\) и \(2\) и выполните слияние. Теперь \(a=[1,3]\), оба нечетные числа.

В третьем наборе входных данных сначала выберите жетоны с магической силой \(2\) и \(8\) и выполните слияние. Теперь \(a=[4,10]\). Дальше выберите жетон с магической силой \(10\) и выполните сокращение. Теперь \(a=[4,5]\). Выберите жетоны с магической силой \(4\) и \(5\) и выполните слияние. Теперь \(a=[9]\), а \(9\) — нечетное число.

Можно показать, что вы не можете получить все магические силы нечетными числами менее чем за \(3\) хода, поэтому ответ равен \(3\).

C. Управление историей

жадные алгоритмы Конструктив Строки *1700

Keine обладает способностью управлять историей.

История Gensokyo представляет собой строку \(s\) начальной длины \(1\). Чтобы исправить хаос, вызванный Yukari, ей нужно выполнить следующие операции \(n\) раз, в \(i\)-й раз:

  • Она выбирает непустую подстроку \(t_{2i-1}\) из \(s\).
  • Она заменяет \(t_{2i-1}\) на непустую строку, \(t_{2i}\). Обратите внимание, что длины строк \(t_{2i-1}\) и \(t_{2i}\) могут различаться.

Обратите внимание, что если \(t_{2i-1}\) встречается более одного раза в \(s\), ровно одно из них будет заменено.

Например, пусть \(s=\)«marisa», \(t_{2i-1}=\)«a» и \(t_{2i}=\)«z». После операции \(s\) становится «mzrisa» или «marisz».

После \(n\) операций Keine получил окончательную строку и последовательность операций \(t\) длины \(2n\). Keine думал, что уже решил задачу, но появился Yukari и перемешал порядок \(t\). Что еще хуже, Keine забыл изначальную историю.

Помогите Keine найти изначальную историю Gensokyo!

Напомним, что подстрока — это последовательность последовательных символов строки. Например, для строки «abc» ее подстроки: «ab», «c», «bc» и некоторые другие . Но следующие строки не являются его подстрокой: «ac», «cba», «acb».

Взломы

Вы не можете делать взломы в этой задаче.

Входные данные

Первая строка содержит единственное целое число \(T\) (\(1 \leq T \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n < 10 ^ 5\)) — количество операций.

Следующие \(2n\) строк содержат одну непустую строку \(t_{i}\)\(i\)-ю строку перетасованной последовательности \(t\).

Следующая строка содержит одну непустую строку \(s\) — итоговую строку.

Гарантируется, что суммарная длина заданных строк (включая \(t_i\) и \(s\)) по всем наборам входных данных не превосходит \(2 \cdot 10 ^ 5\). Все заданные строки состоят только из строчных латинских букв.

Гарантируется, что исходная строка существует. Можно показать, что исходная строка уникальна.

Выходные данные

Для каждого теста выведите исходную строку в одной строке.

Примечание

В первом наборе входных данных изначально \(s\) равно «a».

  • В первой операции Keine выбирает «a» и заменяет его на «ab». \(s\) становится «ab».
  • Во второй операции Keine выбирает «b» и заменяет его на «cd». \(s\) становится «acd».

Таким образом, последняя строка будет «acd», а \(t=[\)«a», «ab», «b» , «cd»\(]\) перед перемешиванием.

Во втором наборе входных данных изначально \(s\) равно «z».

  • В первой операции Keine выбирает «z» и заменяет его на «aa». \(s\) становится «aa».
  • Во второй операции Keine выбирает «a» и заменяет его на «ran». \(s\) становится «aran».
  • В третьей операции Keine выбирает «a» и заменяет его на «yakumo». \(s\) становится «yakumoran».

Таким образом, последняя строка будет «yakumoran», а \(t=[\)«z», «aa», «a» , «ran», «a», «yakumo»\(]\) перед перемешиванием.

E. Бесконечность

битмаски графы Конструктив Перебор поиск в глубину и подобное снм *2500

После окончания университета Влад получил массив \(a_1,a_2,\ldots,a_n\) из \(n\) целых неотрицательных чисел. Он сразу же захотел построить граф, состоящий из \(n\) вершин, пронумерованных \(1, 2,\ldots, n\). Он решил добавлять ребро между \(i\) и \(j\) тогда и только тогда, когда \(a_i \& a_j > 0\), где \(\&\) обозначает операцию побитового И.

Влад также хочет, чтобы такой граф был связным, что, к сожалению, может быть не так. Чтобы удовлетворить свое желание, он может выполнять следующие два типа операций над массивом:

  • Выбрать некоторый элемент \(a_i\) и увеличить его на \(1\).
  • Выбрать некоторый элемент \(a_i\) и уменьшить его на \(1\) (разрешено, только если \(a_i > 0\)).

Можно доказать, что существует конечная последовательность таких операций, при которой граф станет связным. Не могли бы вы помочь Владу найти минимально возможное количество операций для этого, а также предоставить способ, как это сделать?

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

В первой строке каждого набора задано одно целое число \(n\) (\(2\leq n \leq 2000\)).

Во второй строке каждого набора задано \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0\leq a_i < 2^{30}\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2000\).

Выходные данные

Для каждого набора входных данных выведите в первой строке единственное целое число \(m\)  — минимальное количество операций. Во второй строке выведите массив после допустимой последовательности операций, которые были выполнены так, что граф из задачи стал связным.

Если решений несколько, выведите любое.

Примечание

В первом наборе входных данных граф уже связен.

Во втором наборе входных данных мы можем дважды увеличить \(0\) и получить массив \([2,2]\). Поскольку \(2 \& 2 = 2 > 0\), граф связен. Можно показать, что одной операции недостаточно.

В третьем наборе входных данных мы можем один раз уменьшить \(12\) и получить массив \([3,11]\). \(3 \& 11 = 3 > 0\), следовательно, граф связен. Необходимо выполнить одну операцию, так как граф вначале не связен.

A. Выведите пьедестал (логотип Codeforces?)

жадные алгоритмы Конструктив *800

Дано число \(n\) — количество доступных блоков. Необходимо использовать все блоки, чтобы построить пьедестал.

Пьедестал состоит из \(3\)-х платформ для \(2\)-го, \(1\)-го и \(3\)-го мест соответственно. При этом платформа для \(1\)-го места должна быть строго выше, чем для \(2\)-го места, а платформа для \(2\)-го места должна быть строго выше, чем для \(3\)-го. А также, высота каждой платформы должна быть больше нуля (то есть каждая платформа должна содержать хотя бы один блок).

Пример пьедестала из \(n=11\) блоков: высота второго места равна \(4\) блокам, высота первого места равна \(5\) блокам, высота третьего места равна \(2\) блокам.

Среди всех возможных пьедесталов из \(n\) блоков выведите такой, что высота платформы для \(1\)-го места минимальна. Если таких несколько, выведите любой из них.

Входные данные

В первой строке входных данных дано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В каждом наборе входных данных содержится единственное целое число \(n\) (\(6 \le n \le 10^5\)) — суммарное количество блоков для пьедестала. Необходимо использовать все \(n\) блоков.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите \(3\) числа \(h_2, h_1, h_3\) — высоты платформ для \(2\)-го, \(1\)-го и \(3\)-го мест на пьедестале, состоящем из \(n\) блоков (\(h_1+h_2+h_3=n\), \(0 < h_3 < h_2 < h_1\)).

Среди всех возможных пьедесталов выведите тот, для которого значение \(h_1\) минимально. Если таких несколько, выведите любой из них.

Примечание

В первом наборе входных данных мы не можем получить высоту платформы для первого места меньше \(5\), так как если высота платформы для первого места не больше \(4\), то мы можем использовать максимум \(4 + 3 + 2 = 9\) блоков. А должны использовать \(11 = 4 + 5 + 2\) блоков. Поэтому ответ 4 5 2 подходит.

Во втором наборе единственный подходящий ответ: 2 3 1.

B. Обмен обувью

жадные алгоритмы Конструктив реализация *1000

Группе студентов наскучило носить одну и ту же обувь каждый день, поэтому они решили обменяться обувью. В этой задаче пара обуви неразделима и понимается как один объект.

В группе \(n\) студентов, и вам дан массив \(s\) в неубывающем порядке, где \(s_i\) — размер обуви \(i\)-го студента. Обмен обувью называется корректным, если никто не получит свою обувь, и каждый студент получит обувь не меньшего размера, чем его собственная.

Вам нужно вывести перестановку \(p\) целых чисел \(\{1,2,\ldots,n\}\), описывающую корректный обмен обувью: \(i\)-й студент получит обувь \(p_i\)-го студента (\(p_i \ne i\)). Если решения не существует, выведите \(-1\).

Перестановкой называется массив, состоящий из \(n\) различных чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, а \([1,2,2]\) — не перестановка (\(2\) встречается дважды), и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве есть \(4\)).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит целое число \(n\) (\(1\leq n\leq10^5\)) — количество студентов.

Вторая строка содержит \(n\) целых чисел \(s_1, s_2,\ldots,s_n\) (\(1\leq s_i\leq10^9\); для всех \(1\le i<n\) выполняется \(s_i\le s_{i+1}\)) — размеры обуви.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ в следующем формате.

Если корректного обмена не существует, выведите \(-1\).

Если корректный ответ существует, выведите \(n\) целых чисел: перестановку \(p\) чисел \(1,2,\ldots,n\), описывающую корректный обмен обувью, где \(i\)-й студент получит обувь \(p_i\)-го студента. Если существуют несколько решений, выведите любое.

Примечание

В первом примере любая перестановка \(p\) чисел \(1,\ldots,n\), где \(p_i\ne i\), описывает корректный обмен, так как у всех одинаковый размер обуви, и все могут носить обувь любого.

Во втором примере можно показать, что нет корректного обмена обувью.

C. Сумма подстрок

жадные алгоритмы Конструктив математика Перебор Строки *1400

Вам дана бинарная строка \(s\) длины \(n\).

Пусть \(d_i\) — число, в десятичной системе счисления записываемое как \(s_i s_{i+1}\) (возможно, с ведущим нулем). Определим \(f(s)\) как сумму всех корректных значений \(d_i\). Иными словами, \(f(s) = \sum\limits_{i=1}^{n-1} d_i\).

Например, для строки \(s = 1011\):

  • \(d_1 = 10\) (десять);
  • \(d_2 = 01\) (один);
  • \(d_3 = 11\) (одиннадцать);
  • \(f(s) = 10 + 01 + 11 = 22\).

За одну операцию вы можете поменять местами любые два соседних символа строки. Найдите минимально возможное значение \(f(s)\), которое может быть получено после не более чем \(k\) операций.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 10^5\), \(0 \le k \le 10^9\)) — длину строки и максимальное допустимое число операций.

Вторая строка содержит бинарную строку \(s\) длины \(n\), состоящую только из нулей и единиц.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите минимально возможное значение \(f(s)\) после не более чем \(k\) операций.

Примечание
  • В первом примере делать операции нельзя, поэтому оптимальный ответ — сама строка \(s\). \(f(s) = f(1010) = 10 + 01 + 10 = 21\).
  • Во втором примере одно из оптимальных решений — строка «0011000». Для данной строки значение \(f\) равно \(22\).
  • В третьем примере одно из оптимальных решений — строка «00011». Для данной строки значение \(f\) равно \(12\).

D. Максимум не меньше суммы

Бинарный поиск Конструктив разделяй и властвуй реализация Структуры данных *1800

Вам дан массив \(a\) из \(n\) целых чисел. Вам нужно проверить, верно ли, что неравенство \(\)\max(a_i, a_{i + 1}, \ldots, a_{j - 1}, a_{j}) \geq a_i + a_{i + 1} + \dots + a_{j - 1} + a_{j}\(\) выполняется для всех пар индексов \((i, j)\), где \(1 \leq i \leq j \leq n\).

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данныхх содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\))  — размер массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если условие для данного массива выполнено, и «NO» в противном случае. Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

В примерах \(1\) и \(2\) данное неравенство выполняется для всех пар \((i, j)\).

В примере \(3\) неравенство не выполняется для пары \((1, 2)\), так как \(\max(2, 3) < 2 + 3\).

B. Параноидальная строка

жадные алгоритмы Конструктив *1200

Назовем бинарную строку \(T\) длины \(m\), индексированную от \(1\) до \(m\) параноидальной, если мы можем получить строку длины \(1\), выполнив следующие два вида операций \(m-1\) раз в любом порядке:

  • Выберите любую подстроку \(T\), которая равна 01, и замените ее на 1.
  • Выберите любую подстроку \(T\), которая равна 10, а затем замените ее на 0.

    Например, если \(T = \) 001, мы можем выбрать подстроку \([T_2T_3]\) и выполнить первую операцию. Таким образом, мы получим \(T = \) 01 в качестве новой строки.

Вам дана бинарная строка \(S\) длины \(n\), индексированная от \(1\) до \(n\). Найдите количество пар целых чисел \((l, r)\) с \(1 \le l \le r \le n\) таких, что \(S[l \ldots r]\) (подстрока \(S\) от \(l\) до \(r\)) является параноидальной строкой.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину \(S\).

Вторая строка каждого набора входных данных содержит бинарную строку \(S\) из \(n\) символов \(S_1S_2 \ldots S_n\). (\(S_i = \) 0 или \(S_i = \) 1 для каждого \(1 \le i \le n\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите количество пар целых чисел \((l, r)\) с \(1 \le l \le r \le n\) таких, что \(S[l \ldots r]\) (подстрока \(S\) от \(l\) до \(r\)) является параноидальной строкой.

Примечание

В первом примере \(S\) уже имеет длину \(1\) и нет нужды ни в каких операциях.

Во втором примере все подстроки \(S\) являются параноидальными. Для всей строки достаточно выполнить первую операцию.

В третьем примере все подстроки \(S\) являются параноидальными, кроме \([S_2S_3]\), потому что мы не можем выполнить над ней никаких операций, и \([S_1S_2S_3]\) (всей строки).

D1. Запросы в дереве (простая версия)

Деревья дп жадные алгоритмы Конструктив Перебор поиск в глубину и подобное *2200

Единственное отличие этой задачи от D2  — ограничение на размер дерева.

Вам дано некорневое дерево с \(n\) вершинами. В этом дереве есть некоторая скрытая вершина \(x\), которую вы пытаетесь найти.

Для этого вы можете задать \(k\) запросов \(v_1, v_2, \ldots, v_k\), где \(v_i\)  — вершины дерева. После того, как вы закончили задавать все запросы, вам дается \(k\) чисел \(d_1, d_2, \ldots, d_k\), где \(d_i\)  — количество ребер на кратчайшем пути между \(v_i\) и \(x\). Обратите внимание, что вы знаете, какое расстояние соответствует какому запросу.

Найдите минимальное \(k\), при котором существуют некоторые запросы \(v_1, v_2, \ldots, v_k\), позволяющие всегда однозначно определить \(x\) (независимо от того, какой \(x\) выбран).

Обратите внимание, что выводить эти запросы не нужно.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 100\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2000\))  — количество вершин в дереве.

Каждая из следующих \(n-1\) строк содержит два целых числа \(x\) и \(y\) (\(1 \le x, y \le n\)), означающие, что между вершинами \(x\) и \(y\) в дереве есть ребро.

Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2000\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке одно целое неотрицательное число  — минимальное количество запросов, которое вам необходимо.

Примечание

В первом наборе входных данных есть только одна вершина, поэтому никаких запросов не требуется.

Во втором наборе входных данных достаточно задать единственный запрос о вершине \(1\). Тогда, если \(x = 1\), вы получите \(0\), в противном случае  — \(1\).

D2. Запросы в дереве (сложная версия)

Деревья дп жадные алгоритмы Конструктив поиск в глубину и подобное *2300

Единственное отличие этой задачи от D1  — ограничение на размер дерева.

Вам дано некорневое дерево с \(n\) вершинами. В этом дереве есть некоторая скрытая вершина \(x\), которую вы пытаетесь найти.

Для этого вы можете задать \(k\) запросов \(v_1, v_2, \ldots, v_k\), где \(v_i\)  — вершины дерева. После того, как вы закончили задавать все запросы, вам дается \(k\) чисел \(d_1, d_2, \ldots, d_k\), где \(d_i\)  — количество ребер на кратчайшем пути между \(v_i\) и \(x\). Обратите внимание, что вы знаете, какое расстояние соответствует какому запросу.

Найдите минимальное \(k\), при котором существуют некоторые запросы \(v_1, v_2, \ldots, v_k\), позволяющие всегда однозначно определить \(x\) (независимо от того, какой \(x\) выбран).

Обратите внимание, что выводить эти запросы не нужно.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2\cdot10^5\))  — количество вершин в дереве.

Каждая из следующих \(n-1\) строк содержит два целых числа \(x\) и \(y\) (\(1 \le x, y \le n\)), означающие, что между вершинами \(x\) и \(y\) в дереве есть ребро.

Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке одно целое неотрицательное число  — минимальное количество запросов, которое вам необходимо.

Примечание

В первом наборе входных данных есть только одна вершина, поэтому никаких запросов не требуется.

Во втором наборе входных данных достаточно задать единственный запрос о вершине \(1\). Тогда, если \(x = 1\), вы получите \(0\), в противном случае  — \(1\).

E. Неоднозначное домино

графы Конструктив поиск в глубину и подобное *2700

Поликарп и Монокарп решают одну и ту же головоломку с домино. Им дан одинаковый набор из \(n\) доминошек, \(i\)-я из которых содержит два числа \(x_i\) и \(y_i\). Также им обоим дана одинаковая таблица \(m\) на \(k\) с числами \(a_{ij}\) такая, что \(m\cdot k = 2n\).

Задача состоит в том, чтобы разместить \(n\) доминошек на таблице таким образом, чтобы никакие две из них не пересекались, а значения на каждой доминошке совпадали со значениями \(a_{ij}\), которые покрывает доминошка. Домино можно произвольно поворачивать перед размещением на таблице, поэтому домино \((x_i, y_i)\) эквивалентно домино \((y_i, x_i)\).

Они оба решили головоломку и сравнили свои ответы, но заметили, что их решения не только не совпадают, но ни одна из \(n\) доминошек не находится в одном и том же месте в обоих решениях! Формально, если в решении Поликарпа две ячейки были покрыты одной и той же доминошкой, то в решении Монокарпа они были покрыты разными доминошками. На изображении ниже показана одна потенциальная таблица \(a\), а также решения двух игроков.

Поликарп и Монокарп помнят набор домино, с которого они начинали, но они потеряли таблицу \(a\). Помогите им восстановить одну из возможных таблиц \(a\), а также оба их решения, или определите, что такой таблицы не существует.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 3\cdot 10^5\)).

В \(i\)-й из следующих \(n\) строк содержится два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le 2n\)).

Выходные данные

Если решения нет, выведите одно целое число \(-1\).

В противном случае выведите \(m\) и \(k\), высоту и ширину сетки головоломки, в первой строке вывода. Они должны удовлетворять условию \(m\cdot k = 2n\).

В \(i\)-й из следующих \(m\) строк должно быть \(k\) целых чисел, \(j\)-е из которых \(a_{ij}\).

Следующие \(m\) строк описывают решение Поликарпа. Выведите \(m\) строк по \(k\) символов в каждой. Для каждой ячейки, если она покрыт верхней половиной домино в решении Поликарпа, в ней должна стоять буква «U». Аналогично, если она покрыта нижней, левой или правой половиной домино, она должна содержать «D», «L» или «R», соответственно.

Следующие \(m\) строк должны описывать решение Монокарпа в том же формате, что и решение Поликарпа.

Если ответов несколько, выведите любой из них

Примечание

Дополнительные пустые строки добавляются в вывод для наглядности, но не являются обязательными.

Третий пример соответствует изображению из условия.

C. Fishingprince играет с массивом

жадные алгоритмы Конструктив математика реализация *1400

Fishingprince играет с массивом чисел \([a_1,a_2,\dots,a_n]\). Также у него есть волшебное число \(m\).

Он может производить с массивом следующие операции:

  • Выбрать \(1\le i\le n\), такое что \(a_i\) делится на \(m\) (то есть существует такое целое \(t\), что \(m \cdot t = a_i\)). Затем заменить \(a_i\) на \(m\) копий числа \(\frac{a_i}{m}\). Порядок остальных элементов при этом не изменяется. Например, если \(m=2\), \(a=[2,3]\) и \(i=1\), то \(a\) станет равным \([1,1,3]\).
  • Выбрать \(1\le i\le n-m+1\), такое что \(a_i=a_{i+1}=\dots=a_{i+m-1}\). Затем заменить эти \(m\) элементов одним числом \(m \cdot a_i\). Порядок остальных элементов при этом не изменяется. Например, если \(m=2\), \(a=[3,2,2,3]\) и \(i=2\), то \(a\) станет равным \([3,4,3]\).

Обратите внимание, что длина массива может изменяться в процессе выполнения операций. Значение \(n\), используемое выше, всегда определяется как текущая длина массива (и может отличаться от \(n\), заданного во входных данных).

У Fishingprince'а есть ещё один массив, \([b_1,b_2,\dots,b_k]\). Определите, может ли он превратить массив \(a\) в массив \(b\) за несколько (возможно, ноль) операций.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит два целых числа: \(n\) и \(m\) (\(1\le n\le 5\cdot 10^4\), \(2\le m\le 10^9\)).

Вторая строка набора входных данных содержит \(n\) целых чисел: \(a_1,a_2,\ldots,a_n\) (\(1\le a_i\le 10^9\)).

Третья строка набора входных данных содержит одно целое число \(k\) (\(1\le k\le 5\cdot 10^4\)).

Четвёртая строка набора входных данных содержит \(k\) целых чисел: \(b_1,b_2,\ldots,b_k\) (\(1\le b_i\le 10^9\)).

Гарантируется, что сумма значений \(n+k\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите Yes, если существует способ преобразовать \(a\) в \(b\), и No иначе. Вы можете выводить каждый символ в любом регистре (верхнем или нижнем).

Примечание

В первом наборе входных данных можно применить операцию второго типа для \(i=2\): \([1,\color{red}{2,2},4,2]\to [1,\color{red}{4},4,2]\).

Во втором наборе входных данных можно:

  • выполнить операцию второго типа для \(i=2\): \([1,\color{red}{2,2},8,2,2]\to [1,\color{red}{4},8,2,2]\).
  • выполнить операцию второго типа для \(i=4\): \([1,4,8,\color{red}{2,2}]\to [1,4,8,\color{red}{4}]\).
  • выполнить операцию первого типа для \(i=3\): \([1,4,\color{red}{8},4]\to [1,4,\color{red}{4,4},4]\).
  • выполнить операцию второго типа для \(i=2\): \([1,\color{red}{4,4},4,4]\to [1,\color{red}{8},4,4]\).
  • выполнить операцию второго типа для \(i=3\): \([1,8,\color{red}{4,4}]\to [1,8,\color{red}{8}]\).
  • выполнить операцию второго типа для \(i=2\): \([1,\color{red}{8,8}]\to [1,\color{red}{16}]\).

D. Граф перестановки

Бинарный поиск жадные алгоритмы Конструктив кратчайшие пути разделяй и властвуй Структуры данных *1900

Перестановкой является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Дана перестановка \([a_1,a_2,\dots,a_n]\) чисел \(1,2,\dots,n\). Для целых \(i\),\(j\), таких что \(1\le i<j\le n\), определим \(\operatorname{mn}(i,j)\) как \(\min\limits_{k=i}^j a_k\), а \(\operatorname{mx}(i,j)\) как \(\max\limits_{k=i}^j a_k\).

Построим неориентированный граф на \(n\) вершинах, пронумерованных от \(1\) до \(n\). Для каждой пары \(1\le i<j\le n\), если одновременно \(\operatorname{mn}(i,j)=a_i\) и \(\operatorname{mx}(i,j)=a_j\), или одновременно \(\operatorname{mn}(i,j)=a_j\) и \(\operatorname{mx}(i,j)=a_i\), то между вершинами \(i\) и \(j\) проводится неориентированное ребро длины \(1\).

Найдите в этом графе длину кратчайшего пути от вершины \(1\) до вершины \(n\). Можно доказать, что в таком графе вершины \(1\) и \(n\) всегда будут соединены каким-либо путём, так что кратчайший путь всегда существует.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 5\cdot 10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит одно целое число \(n\) (\(1\le n\le 2.5\cdot 10^5\)).

Вторая строка набора входных данных содержит \(n\) целых чисел \(a_1\),\(a_2\),\(\ldots\),\(a_n\) (\(1\le a_i\le n\)). Гарантируется, что \(a\) является перестановкой чисел \(1\),\(2\),\(\dots\),\(n\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(5\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — длину кратчайшего пути от \(1\) до \(n\).

Примечание

Ниже приведены построенные графы, отвечающие наборам входных данных.

граф в наборе 1
граф в наборе 2
граф в наборе 3
граф в наборе 4
граф в наборе 5

F. Восстановление дерева

графы Деревья Конструктив Перебор поиск в глубину и подобное снм *2600

Fishingprince любит деревья. Дерево — это связный неориентированный граф без циклов.

У Fishingprince'а есть дерево на \(n\) вершинах. Его вершины пронумерованы числами от \(1\) до \(n\). Пусть \(d(x,y)\) равно длине кратчайшего расстояния между вершинами \(x\) и \(y\), если считать длину каждого ребра равной \(1\).

К сожалению, Fishingprince потерял своё дерево. Тем не менее какая-то информация о нём сохранилась. А именно, для каждой тройки чисел \(x,y,z\) (\(1\le x<y\le n\), \(1\le z\le n\)) известно, выполнено ли равенство \(d(x,z)=d(y,z)\).

Помогите ему восстановить структуру дерева или сообщите, что дерева, удовлетворяющего всем ограничениям, не существует.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 200\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит целое число \(n\) (\(2\le n\le 100\)) — количество вершин в дереве.

Далее следует \(n-1\) строк. Из этих \(n-1\) строк \(i\)-я строка содержит \(n-i\) последовательностей символов длины \(n\), состоящих из 0 и 1. Если \(k\)-й символ в \(j\)-й последовательности \(i\)-й строки равен 0, то \(d(i,k)\ne d(i+j,k)\); если же \(k\)-й символ в \(j\)-й последовательности \(i\)-й строки равен 1, то \(d(i,k)=d(i+j,k)\).

Гарантируется, что в каждом тесте:

  • есть не более \(2\) наборов входных данных с \(n>50\);
  • есть не более \(5\) наборов входных данных с \(n>20\).
Выходные данные

Для каждого набора входных данных:

  • выведите No, если искомого дерева не существует;
  • иначе в первой строке выведите Yes. Затем выведите \(n-1\) строк. Каждая из них должна содержать два целых числа \(x,y\) (\(1\le x,y\le n\)), означающих ребро между вершинами \(x\) и \(y\) в дереве. Если существуют несколько решений, выведите любое из них.

При выводе Yes и No вы можете выводить каждый символ в любом регистре (верхнем или нижнем).

C. Любимая задача awoo

Бинарный поиск жадные алгоритмы Конструктив реализация Строки Структуры данных *1400

Заданы две строки \(s\) и \(t\), обе длины \(n\). Каждый символ в обеих строках — 'a', 'b' или 'c'.

За один ход разрешается совершить одно из следующих действий:

  • выбрать вхождение «ab» в \(s\) и заменить его на «ba»;
  • выбрать вхождение «bc» в \(s\) и заменить его на «cb».

Разрешается совершить произвольное количество ходов (включая ноль). Можно ли сделать строку \(s\) равной строке \(t\)?

Входные данные

В первой строке записано одно целое число \(q\) (\(1 \le q \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 10^5\)) — длина строк \(s\) и \(t\).

Во второй строке записана строка \(s\) длины \(n\). Каждый символ — 'a', 'b' или 'c'.

В третьей строке записана строка \(t\) длины \(n\). Каждый символ — 'a', 'b' или 'c'.

Сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

На каждый набор входных данных выведите «YES», если возможно сделать строку \(s\) равной строке \(t\), совершив произвольное количество ходов (возможно, ноль). В противном случае выведите «NO».

D. Угадай строку

Бинарный поиск интерактив Конструктив *1900

Это интерактивная задача. Не забывайте о том, что ваша программа должна каждый раз после вывода запроса сбрасывать буфер вывода. Для сброса буфера вывода можно использовать fflush(stdout) в C++, system.out.flush() в Java, stdout.flush() в Python или flush(output) в Pascal. Если вы используете другой язык программирования, посмотрите в его документации, как выполняется эта операция. Также рекомендуем вам прочесть руководство по интерактивным задачам: https://cf.m27.workers.dev/blog/entry/45307.

Жюри выбрало строку \(s\) из \(n\) символов; каждый символ \(s\) — это строчная буква латинского алфавита. Ваша задача — угадать эту строку. Изначально вам известна только длина строки.

Вы можете отправлять запросы двух типов:

  • \(1\) \(i\) — запрос первого типа, в котором \(i\) — целое число от \(1\) до \(n\). В ответ на такой запрос программа жюри выведет символ \(s_i\);
  • \(2\) \(l\) \(r\) — запрос второго типа, в котором \(l\) и \(r\) — целые числа, для которых \(1 \le l \le r \le n\). В ответ на такой запрос программа жюри выведет целое число, равное количеству различных символов среди \(s_l, s_{l+1}, \dots, s_r\).

Вы можете отправить не более \(26\) запросов первого типа и не более \(6000\) запросов второго типа. Ваша задача — восстановить строку \(s\).

В каждом тесте к этой задаче строка \(s\) — фиксированная и не меняется при запуске разных решений на одном и том же тесте. Иными словами, интерактор этой задачи не является адаптивным.

Входные данные

Изначально программа жюри выводит одно целое число \(n\) в отдельной строке — размер строки \(s\) (\(1 \le n \le 1000\)).

Выходные данные

Чтобы дать ответ на задачу, выведите одну строку ! s с символом перевода строки в конце, где \(s\) — загаданная строка. После этого ваша программа должна сбросить буфер вывода и завершиться.

Протокол взаимодействия

Чтобы отправить запрос, выведите строку, содержащую этот запрос, в одном из следующих форматов:

  • ? 1 i — для запроса первого типа (\(1 \le i \le n\));
  • ? 2 l r — для запроса второго типа (\(1 \le l \le r \le n\)).

Не забудьте сбросить буфер вывода после того, как выведете строку-запрос.

Ответ на ваш запрос будет выведен на отдельной строке. Для запроса первого типа ответом будет символ \(s_i\). Для запроса второго типа ответом будет целое число, равное количеству различных символов среди \(s_l, s_{l+1}, \dots, s_r\).

Вы можете отправить не более \(26\) запросов первого типа и не более \(6000\) запросов второго типа.

Если вы зададите слишком много запросов, или же программа жюри не сможет распознать формат запроса, ответом на запрос будет число \(0\). После получения ответа \(0\) ваша программа должна сразу же завершиться — иначе вы можете получить вердикт «Ошибка исполнения», «Превышено ограничение времени» или какой-то другой вместо вердикта «Неправильный ответ».

Примечание

Давайте разберем пример взаимодействия из условия.

Загаданная строка — guess, поэтому изначально программа жюри выводит одно целое число \(5\).

  1. первый запрос — ? 2 1 5, что означает «посчитайте количество различных символов среди \(s_1, s_2, \dots, s_5\)». Ответ на этот запрос — \(4\).
  2. второй запрос — ? 1 2, что означает «выведите символ \(s_2\)». Ответ на этот запрос — u.
  3. третий запрос — ? 2 1 2, что означает «посчитайте количество различных символов среди \(s_1\) и \(s_2\)». Ответ на этот запрос — \(2\).
  4. четвертый запрос — ? 1 1, что означает «выведите символ \(s_1\)». Ответ на этот запрос — g.
  5. пятый запрос — ? 1 3, что означает «выведите символ \(s_3\)». Ответ на этот запрос — e.
  6. шестой запрос — ? 1 4, что означает «выведите символ \(s_4\)». Ответ на этот запрос — s.
  7. седьмой запрос — ? 2 4 5, что означает «посчитайте количество различных символов среди \(s_4\) и \(s_5\)». Ответ на этот запрос — \(1\), и можно догадаться, что \(s_4\) и \(s_5\) — одинаковые символы.

В конце ответ на задачу отправляется в формате ! guess, и он является правильным.

E. Раскраска

геометрия графы дп жадные алгоритмы Комбинаторика Конструктив математика Перебор реализация *2400

Заданы \(n\) точек на плоскости, координаты \(i\)-й из них — \((x_i, y_i)\). Ни у каких двух точек не совпадают координаты.

Расстояние между точками \(i\) и \(j\) определено как \(d(i,j) = |x_i - x_j| + |y_i - y_j|\).

Для каждой точки необходимо выбрать цвет — целое число от \(1\) до \(n\). Для каждой упорядоченной тройки различных точек \((a,b,c)\) должны выполняться следующие условия:

  • если \(a\), \(b\) и \(c\) покрашены в одинаковый цвет, то \(d(a,b) = d(a,c) = d(b,c)\);
  • если \(a\) и \(b\) покрашены в одинаковый цвет, а цвет \(c\) отличен от цвета \(a\), то \(d(a,b) < d(a,c)\) и \(d(a,b) < d(b,c)\).

Посчитайте количество различных способов выбрать цвета, чтобы удовлетворить данные условия.

Входные данные

В первой строке записано одно целое число \(n\) (\(2 \le n \le 100\)) — количество точек.

Затем следуют \(n\) строк. В \(i\)-й из них записаны два целых числа \(x_i\) и \(y_i\) (\(0 \le x_i, y_i \le 10^8\)).

Ни у каких двух точек не совпадают координаты (т. ею если \(i \ne j\), то либо \(x_i \ne x_j\), либо \(y_i \ne y_j\)).

Выходные данные

Выведите одно целое число — количество различных способов выбрать цвета точек. Так как оно может быть довольно велико, выведите его остаток от деления на \(998244353\).

Примечание

В первом тесте подходят следующие способы выбрать цвета:

  • \([1, 1, 1]\);
  • \([2, 2, 2]\);
  • \([3, 3, 3]\);
  • \([1, 2, 3]\);
  • \([1, 3, 2]\);
  • \([2, 1, 3]\);
  • \([2, 3, 1]\);
  • \([3, 1, 2]\);
  • \([3, 2, 1]\).

F. Слишком много ограничений

2-sat графы Конструктив реализация *2800

Ваша задача — построить массив \(a\), состоящий из \(n\) целых чисел, каждый элемент должен быть от \(1\) до \(k\).

Массив должен быть неубывающим (\(a_i \le a_{i+1}\) для всех \(i\) от \(1\) до \(n-1\)).

Также есть дополнительные ограничения на него. Каждое ограничение одного из трех следующих типов:

  • \(1~i~x\): \(a_i\) должно быть не равно \(x\);
  • \(2~i~j~x\): \(a_i + a_j\) должно быть меньше или равно \(x\);
  • \(3~i~j~x\): \(a_i + a_j\) должно быть больше или равно \(x\).

Постройте любой неубывающий массив, который удовлетворяет всем ограничениям, или скажите, что такого массива не существует.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записаны три целых числа \(n, m\) и \(k\) (\(2 \le n \le 2 \cdot 10^4\); \(0 \le m \le 2 \cdot 10^4\); \(2 \le k \le 10\)).

В \(i\)-й из следующих \(m\) строк записано описание ограничения. Каждое ограничение одного из трех следующих типов:

  • \(1~i~x\) (\(1 \le i \le n\); \(1 \le x \le k\)): \(a_i\) должно быть не равно \(x\);
  • \(2~i~j~x\) (\(1 \le i < j \le n\); \(2 \le x \le 2 \cdot k\)): \(a_i + a_j\) должно быть меньше или равно \(x\);
  • \(3~i~j~x\) (\(1 \le i < j \le n\); \(2 \le x \le 2 \cdot k\)): \(a_i + a_j\) должно быть больше или равно \(x\).

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^4\). Сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^4\).

Выходные данные

Для каждого набора входных данных определит, существует ли неубывающий массив, который удовлетворяет всем ограничениям. Если такого не существует, то выведите -1. Иначе выведите валидный массив — \(n\) целых чисел от \(1\) до \(k\).

B. Песочные вершины

жадные алгоритмы Конструктив реализация *800

Перед вами \(n\) кучек песка, и в \(i\)-й кучке ровно \(a_i\) песчинок. Назовем \(i\)-ю кучку слишком высокой, если \(1 < i < n\), и \(a_i > a_{i-1} + a_{i+1}\). Иными словами кучка слишком высокая, если в ней больше песка, чем в двух соседних вместе. (Обратите внимание, что кучки по краям не могут быть слишком высокими.)

Вам дано целое число \(k\). За одну операцию вы можете выбрать \(k\) последовательных кучек и добавить к каждой из них одну песчинку. Формально, выберите \(1 \leq l,r \leq n\) такие, что \(r-l+1=k\). Затем для всех \(l \leq i \leq r\) обновите \(a_i \gets a_i+1\).

Какое максимальное количество кучек одновременно может быть слишком высокими после нескольких (возможно, нуля) операций?

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(3 \leq n \leq 2 \cdot 10^5\); \(1 \leq k \leq n\)) — количество кучек песка и размер операции, соответственно.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — размеры кучек.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество кучек, которые одновременно могут быть слишком высокими после нескольких (возможно, нуля) операций.

Примечание

В первом примере можно выполнить следующие три операции:

  • Добавить одну песчинку в кучки \(1\) и \(2\): \([\color{red}{3}, \color{red}{10}, 2, 4, 1]\).
  • Добавить одну песчинку в кучки \(4\) и \(5\): \([3, 10, 2, \color{red}{5}, \color{red}{2}]\).
  • Добавить одну песчинку в кучки \(3\) и \(4\): \([3, 10, \color{red}{3}, \color{red}{6}, 2]\).
После этого кучки \(2\) и \(4\) слишком высокие, поэтому ответ в данном случае равен \(2\). Можно показать, что нельзя сделать более \(2\) кучек слишком высокими.

Во втором примере любая операция увеличивает все кучки на \(1\), поэтому количество слишком высоких кучек всегда будет \(0\).

В третьем примере можно увеличивать любую кучку на \(1\). Можно показать, что максимальное количество слишком высоких кучек равно \(1\).

D. Угадывание неподвижной точки

Бинарный поиск интерактив Конструктив *1600

Это интерактивная задача.

Изначально у вас есть массив \(a = [1, 2, \ldots, n]\), где \(n\) — нечетное натуральное число. Жюри выбрало \(\frac{n-1}{2}\) непересекающихся пар элементов, и затем поменяло элементы в соответствующих парах местами. Например, если \(a=[1,2,3,4,5]\), и были выбраны пары \(1 \leftrightarrow 4\) и \(3 \leftrightarrow 5\), то получился массив \([4, 2, 5, 1, 3]\).

Можно заметить, что в результате обменов ровно один элемент остался на своем месте. Вы должны найти этот элемент.

Чтобы сделать это, вы можете сделать несколько запросов. В каждом запросе вы выбираете два целых числа \(l\) и \(r\) (\(1 \leq l \leq r \leq n\)). В качестве ответа вы получите элементы подмассива \([a_l, a_{l + 1}, \dots, a_r]\), отсортированные по возрастанию.

Найдите элемент, оставшийся на своем месте. Вы можете сделать не более чем \(\mathbf{15}\) запросов.

Массив \(a\) зафиксирован до начала взаимодействия и не зависит от ваших запросов.

Массив \(b\) является подмассивом \(a\), если \(b\) может быть получен из \(a\) удалением нескольких (возможно, ни одного или всех) элементов из начала и нескольких (возможно, ни одного или всех) элементов из конца.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 500\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \leq n < 10^4\); \(n\) нечетно) — длину массива \(a\).

После считывания первой строки вы должны начать взаимодействие.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^4\).

Протокол взаимодействия

Для каждого набора входных данных начните взаимодействие считыванием числа \(n\).

Чтобы сделать запрос, выведите строку «\(\texttt{?}\;l\;r\)» (\(1 \leq l \leq r \leq n\)) без кавычек. После этого считайте \(r-l+1\) целое число: числа \(a_l, a_{l + 1}, \dots, a_r\) в возрастающем порядке. Вы можете сделать не более \(15\) таких запросов для каждого набора входных данных.

Если вы получили в ответ или вместо числа \(n\) число \(-1\), это означает, что ваша программа сделала некорректный запрос, превысила ограничение на запросы или неправильно решила предыдущий набор входных данных. Ваша программа должна немедленно завершиться после прочтения такого ответа, вы получите вердикт Неправильный ответ. В противном случае вы можете получить любой вердикт, так как программа продолжит чтение из закрытого потока.

Когда вы готовы дать ответ, выведите «\(\texttt{!}\;x\)» (\(1 \leq x \leq n\)) без кавычек — элемент, который остался на своем месте. Вывод ответа не учитывается в ограничении на \(15\) запросов. После этого ваша программа должна продолжить решать оставшиеся наборы входных данных, или завершиться, если это был последний набор.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Чтобы сделать взлом, используйте следующий формат. Первая строка должна содержать целое число \(t\) (\(1 \leq t \leq 500\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных должна содержать одно целое число \(n\) (\(3 \leq n < 10^4\); \(n\) нечетное) — длину массива \(a\).

Вторая строка должна содержать \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — элементы массива \(a\). Массив \(a\) должен быть получен с помощью \(\frac{n-1}{2}\) непересекающихся обменов позиций элементов из массива \([1,2,\dots,n]\).

Примечание

В первом примере взаимодействие происходит следующим образом.

РешениеЖюриПояснение
\(\texttt{2}\)В примере 2 набора входных данных.
\(\texttt{5}\)В первом наборе входных данных загаданный массив \([4,2,5,1,3]\) длины \(5\).
\(\texttt{? 1 4}\)\(\texttt{1 2 4 5}\)Решение запросила подмассив \([4,2,5,1]\) в возрастающем порядке, жюри вернуло \([1,2,4,5]\).
\(\texttt{? 3 5}\)\(\texttt{1 3 5}\)Решение запросило подмассив \([5,1,3]\) в возрастающем порядке, жюри вернуло \([1,3,5]\).
\(\texttt{! 2}\)Решение некоторым образом определило, что \(a_2=2\), и вывело ответ. Так как ответ корректный, взаимодействие продолжается следующим набором входных данных.
\(\texttt{3}\)Во втором наборе входных данных загаданный массив \([1,3,2]\) длины \(3\).
\(\texttt{? 1 1}\)\(\texttt{1}\)Решение запросила подмассив \([1]\), жюри вернуло \([1]\).
\(\texttt{! 1}\)Решение определило, что \(a_1=1\), и вывело ответ. Так как ответ верный и больше нет наборов входных данных, решение завершается.

Обратите внимание, что переводы строк в примере даны для лучшего понимания, и отсутствуют в настоящем взаимодействии.

F. Равный разворот

графы Конструктив математика реализация *2800

У вас есть массив \(a\) длины \(n\). Вы можете выполнять с ним следующую операцию:

  • Выберите два индекса \(l\) и \(r\) такие, что \(1 \le l \le r \le n\) и \(a_l = a_r\). После этого разверните подотрезок с \(l\)-го по \(r\)-й элемент, то есть замените \([a_l, a_{l + 1}, \ldots, a_{r - 1}, a_r]\) на \([a_r, a_{r-1}, \ldots, a_{l+1}, a_l]\).

Вам также дан массив \(b\) длины \(n\), который является перестановкой \(a\). Найдите последовательность из не более чем \(n^2\) операций, которая превращает массив \(a\) в \(b\), или определите, что такого массива не существует.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 500\)) — длину массивов \(a\) и \(b\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — элементы массива \(a\).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le n\)) — элементы массива \(b\).

Гарантируется, что \(b\) является перестановкой \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(500\).

Выходные данные

Для каждого набора входных данных выведите «NO» (без кавычек), если невозможно превратить \(a\) в \(b\), используя не более \(n^2\) операций.

Иначе выведите «YES» (без кавычек). Затем выведите целое число \(k\) (\(0 \leq k \leq n^2\)) — число операций, которое вы сделаете. Обратите внимание, что вам не нужно минимизировать число операций.

Затем выведите \(k\) строк. В \(i\)-й строке выведите два целых числа \(l_i\) и \(r_i\) (\(1 \leq l_i \leq r_i \leq n\)) — индексы для \(i\)-й операции.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes» и «Yes» будут считаться положительным ответом).

Если существуют несколько решений, выведите любое из них.

Примечание

В первом примере можно выполнить следующие операции: \(\)[1,2,4,3,1,2,1,1] \xrightarrow[l=5,\,r=8]{} [1,2,4,3,1,1,2,1] \xrightarrow[l=1,\,r=6]{} [1,1,3,4,2,1,2,1].\(\)

Во втором примере можно выполнить следующие операции: \(\)[1,2,3,1,3,2,3] \xrightarrow[l=1,\,r=4]{} [1,3,2,1,3,2,3] \xrightarrow[l=3,\,r=6]{} [1,3,2,3,1,2,3].\(\)

Можно показать, что в третьем и четвертом примерах нельзя превратить \(a\) в \(b\).

A. Третья задача о трёх числах

Конструктив математика *800

Вам дано целое положительное целое число \(n\). Вам нужно найти любые три целые числа \(a\), \(b\) и \(c\) (\(0 \le a, b, c \le 10^9\)), для которых \((a\oplus b)+(b\oplus c)+(a\oplus c)=n\), или определить, что таких чисел не существует.

Здесь \(a \oplus b\) обозначает побитовое исключающее ИЛИ чисел \(a\) и \(b\). Например, \(2 \oplus 4 = 6\), а \(3 \oplus 1=2\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите любые три целых числа \(a\), \(b\) и \(c\) (\(0 \le a, b, c \le 10^9\)), для которых \((a\oplus b)+(b\oplus c)+(a\oplus c)=n\). Если таких чисел не существует, выведите \(-1\).

Примечание

В первом наборе входных данных \(a=3\), \(b=3\), \(c=1\), поэтому \((3 \oplus 3)+(3 \oplus 1) + (3 \oplus 1)=0+2+2=4\).

Во втором наборе входных данных решения не существует.

В третьем наборе входных данных \((2 \oplus 4)+(4 \oplus 6) + (2 \oplus 6)=6+2+4=12\).

B. Почти троичная матрица

битмаски Конструктив матрицы *900

Вам даны два чётных целых числа \(n\) и \(m\). Вам нужно найти любую бинарную матрицу \(a\) с \(n\) строками и \(m\) столбцами, в которой у каждой клетки \((i,j)\) есть ровно две соседние со значениями, отличными от \(a_{i,j}\).

Две клетки матрицы считаются соседними тогда и только тогда, когда у них есть общая сторона. Более формально, клетка \((x,y)\) является соседней с \((x-1,y)\), \((x,y+1)\), \((x+1,y)\) и \((x,y-1)\).

Можно доказать, что при данных ограничениях ответ всегда существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два чётных целых числа \(n\) и \(m\) (\(2 \le n,m \le 50\)) — высота и ширина двоичной матрицы соответственно.

Выходные данные

Для каждого набора входных данных выведите \(n\) строк, каждая из которых содержит \(m\) чисел, равных \(0\) или \(1\) — бинарную матрицу, описанную в условии.

Можно доказать, что при данных ограничениях ответ всегда существует.

Примечание

Белый цвет обозначает \(0\), чёрный цвет обозначает \(1\).

Бинарная матрица из первого набора входных данныхБинарная матрица из второго набора входных данныхБинарная матрица из третьего набора входных данных

C. Третья задача

Комбинаторика Конструктив математика *1700

Вам дана перестановка \(a_1,a_2,\ldots,a_n\) чисел от \(0\) до \(n - 1\). Вам нужно посчитать количество перестановок \(b_1,b_2,\ldots,b_n\), похожих на перестановку \(a\).

Две перестановки \(a\) и \(b\) размера \(n\) называются похожими, если для всех отрезков \([l,r]\) (\(1 \le l \le r \le n\)) выполняется следующее условие: \(\)\operatorname{MEX}([a_l,a_{l+1},\ldots,a_r])=\operatorname{MEX}([b_l,b_{l+1},\ldots,b_r]),\(\) где \(\operatorname{MEX}\) набора чисел \(c_1,c_2,\ldots,c_k\) определяется как наименьшее неотрицательное целое число \(x\), которое не встречается в наборе чисел \(c\). Например, \(\operatorname{MEX}([1,2,3,4,5])=0\), а \(\operatorname{MEX}([0,1,2,4,5])=3\).

Так как количество таких перестановок может быть очень большим, вам нужно вывести его остаток по модулю \(10^9+7\).

В этой задаче перестановкой размера \(n\) является массив, состоящий из \(n\) различных целых чисел от \(0\) до \(n-1\) в произвольном порядке. Например, \([1,0,2,4,3]\) является перестановкой, а \([0,1,1]\) не является, так как \(1\) встречается в массиве дважды. \([0,1,3]\) также не является перестановкой, так как \(n=3\) и в массиве есть число \(3\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 10^5\)) — размер перестановки \(a\).

Вторая строка каждого набора входных данных содержит \(n\) различных целых чисел \(a_1,a_2,\ldots,a_n\) (\(0 \le a_i \lt n\)) — элементы перестановки \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — количество перестановок, похожих на перестановку \(a\), взятое по модулю \(10^9+7\).

Примечание

В первом наборе входных данных единственными перестановками, похожими на \(a=[4,0,3,2,1]\), являются \([4,0,3,2,1]\) и \([4,0,2,3,1]\).

Во втором и третьем наборах входных данных только данные перестановки похожи на себя.

В четвёртом наборе входных данных есть \(4\) перестановки, похожие на \(a=[1,2,4,0,5,3]\):

  • \([1,2,4,0,5,3]\);
  • \([1,2,5,0,4,3]\);
  • \([1,4,2,0,5,3]\);
  • \([1,5,2,0,4,3]\).

A. Оптимальный путь

жадные алгоритмы Конструктив математика *800

Дана таблица \(a\) размера \(n \times m\). Будем считать, что строки таблицы пронумерованы сверху вниз от \(1\) до \(n\), а столбцы — слева направо от \(1\) до \(m\). Тогда клетку, находящуюся в строке \(i\) и столбце \(j\), будем обозначать \((i, j)\). В клетке \((i, j)\) записано число \((i - 1) \cdot m + j\), то есть \(a_{ij} = (i - 1) \cdot m + j\).

Черепашка изначально находится в клетке \((1, 1)\) и хочет попасть в клетку \((n, m)\). За один шаг из клетки \((i, j)\) она может попасть в клетку \((i + 1, j)\) или \((i, j + 1)\), если она существует. Путь — это набор клеток, такой что для двух соседних клеток в пути верно следующее: из первой клетки можно попасть во вторую за один шаг. Стоимостью пути называется сумма чисел, записанных в клетках пути.

Например, при \(n = 2\) и \(m = 3\) таблица будет выглядеть как на картинке выше. Черепашка может пройти по такому пути: \((1, 1) \rightarrow (1, 2) \rightarrow (1, 3) \rightarrow (2, 3)\). Стоимость такого пути будет равна \(a_{11} + a_{12} + a_{13} + a_{23} = 12\). С другой стороны, пути \((1, 1) \rightarrow (1, 2) \rightarrow (2, 2) \rightarrow (2, 1)\) и \((1, 1) \rightarrow (1, 3)\) являются некорректными, так как в первом случае нельзя сделать переход \((2, 2) \rightarrow (2, 1)\), а во втором случае \((1, 1) \rightarrow (1, 3)\).

Вам нужно сказать черепашке минимальную стоимость пути из клетки \((1, 1)\) в клетку \((n, m)\). Обратите внимание, что клетки \((1, 1)\) и \((n, m)\) являются частью пути.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 10^4\)) — размеры таблицы \(a\).

Выходные данные

Для каждого набора входных данных выведите одно число — минимальную стоимость пути из клетки \((1, 1)\) в клетку \((n, m)\).

Примечание

В первом наборе входных данных единственный возможный путь проходит только по клетке \((1, 1)\).

Путь минимальной стоимости из второго набора выходных данных показан в условии.

В четвертом и пятом наборах входных данных существует единственный путь из \((1, 1)\) в \((n, m)\). Оба пути проходят по всем клеткам таблицы.

A. Оптимальный путь

жадные алгоритмы Конструктив математика *800

Дана таблица \(a\) размера \(n \times m\). Будем считать, что строки таблицы пронумерованы сверху вниз от \(1\) до \(n\), а столбцы — слева направо от \(1\) до \(m\). Тогда клетку, находящуюся в строке \(i\) и столбце \(j\), будем обозначать \((i, j)\). В клетке \((i, j)\) записано число \((i - 1) \cdot m + j\), то есть \(a_{ij} = (i - 1) \cdot m + j\).

Черепашка изначально находится в клетке \((1, 1)\) и хочет попасть в клетку \((n, m)\). За один шаг из клетки \((i, j)\) она может попасть в клетку \((i + 1, j)\) или \((i, j + 1)\), если она существует. Путь — это набор клеток, такой что для двух соседних клеток в пути верно следующее: из первой клетки можно попасть во вторую за один шаг. Стоимостью пути называется сумма чисел, записанных в клетках пути.

Например, при \(n = 2\) и \(m = 3\) таблица будет выглядеть как на картинке выше. Черепашка может пройти по такому пути: \((1, 1) \rightarrow (1, 2) \rightarrow (1, 3) \rightarrow (2, 3)\). Стоимость такого пути будет равна \(a_{11} + a_{12} + a_{13} + a_{23} = 12\). С другой стороны, пути \((1, 1) \rightarrow (1, 2) \rightarrow (2, 2) \rightarrow (2, 1)\) и \((1, 1) \rightarrow (1, 3)\) являются некорректными, так как в первом случае нельзя сделать переход \((2, 2) \rightarrow (2, 1)\), а во втором случае \((1, 1) \rightarrow (1, 3)\).

Вам нужно сказать черепашке минимальную стоимость пути из клетки \((1, 1)\) в клетку \((n, m)\). Обратите внимание, что клетки \((1, 1)\) и \((n, m)\) являются частью пути.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 10^4\)) — размеры таблицы \(a\).

Выходные данные

Для каждого набора входных данных выведите одно число — минимальную стоимость пути из клетки \((1, 1)\) в клетку \((n, m)\).

Примечание

В первом наборе входных данных единственный возможный путь проходит только по клетке \((1, 1)\).

Путь минимальной стоимости из второго набора выходных данных показан в условии.

В четвертом и пятом наборах входных данных существует единственный путь из \((1, 1)\) в \((n, m)\). Оба пути проходят по всем клеткам таблицы.

B. Палиндромные числа

Конструктив математика реализация *1100

Однажды во время прогулки Алина увидела длинное число, которое кто-то написал на асфальте. Алина захотела найти положительное число такой же длины без ведущих нулей, чтобы сумма этих двух чисел была палиндромом.

Число называется палиндромом, если оно читается одинаково справа налево и слева направо. Например, числа \(121, 66, 98989\) являются палиндромами, а \(103, 239, 1241\) — нет.

После некоторых размышлений Алина поняла, что такое число всегда можно найти. Помогите Алине найти подходящее число!

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Затем следуют \(t\) наборов входных данных.

В первой строке каждого набора входных данных вводится одно целое число \(n\) (\(2 \leq n \leq 100\,000\)) — длина числа, которое увидела Алина.

Во второй строке каждого набора входных данных вводится одно положительное целое число длины \(n\). Гарантируется, что оно не содержит ведущих нулей.

Сумма значений \(n\) по всем наборам входных данных не превосходит \(100\,000\).

Выходные данные

Выведите ответ на каждый из \(t\) наборов входных — для каждого набора выведите положительное целое число без ведущих нулей длины \(n\), такое, что его сумма с числом из входных данных будет палиндромом.

Можно показать, что решение всегда существует. Если таких чисел несколько, вы можете вывести любое из них.

Примечание

В первом примере из условия \(99 + 32 = 131\) — палиндром. Число \(12\) также будет являться ответом, так как \(99 + 12 = 111\).

Во втором примере из условия \(1023 + 8646 = 9669\).

В третьем примере из условия \(385 + 604 = 989\).

C. Помогаем природе

жадные алгоритмы Конструктив Структуры данных *1700

Маленький Леон живет в лесу. Недавно он заметил, что некоторые деревья возле его любимой тропинки засыхают, а другие наоборот слишком увлажнены. Леон очень любит свой лес, поэтому решил научиться контролировать уровень влажности почвы, чтобы спасти деревья.

Возле тропинки растут \(n\) деревьев, текущие уровни влажности которых заданы массивом \(a_1, a_2, \dots, a_n\). Леон научился трем способностям, которые помогут ему осушать и поливать почву.

  • Выбрать позицию \(i\) и уменьшить уровень влажности деревьев \(1, 2, \dots, i\) на \(1\).
  • Выбрать позицию \(i\) и уменьшить уровень влажности деревьев \(i, i + 1, \dots, n\) на \(1\).
  • Увеличить уровень влажности всех деревьев на \(1\).

Леон хочет узнать минимальное число действий, которое необходимо совершить, чтобы каждое дерево имело уровень влажности равный \(0\).

Входные данные

Первая строка теста содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\))  — количество наборов входных данных. Затем следуют \(t\) наборов входных данных.

В первой строке каждого набора входных данных вводится одно целое число \(n\) (\(1 \leq n \leq 200\,000\)).

Во второй строке вводятся \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \leq a_i \leq 10^9\)) — изначальные уровни влажности деревьев.

Сумма значений \(n\) по всем наборам тестовых данных не превосходит \(200\,000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное число действий. Можно показать, что ответ всегда существует.

Примечание

В первом наборе входных данных достаточно \(2\) раза применить операцию прибавления \(1\) ко всему массиву.

Во втором наборе входных данных можно \(4\) раза применить операцию вычитания на префиксе длины \(3\) и получить массив \(6, 0, 3\).

После этого \(6\) раз применить операцию вычитания на префиксе длины \(1\) и \(3\) раза операцию вычитания на суффиксе длины \(1\). Итого, количество действий составит \(4 + 6 + 3 = 13\). Можно показать, что меньшим количеством действий обойтись нельзя, поэтому \(13\) — это ответ.

E. Пират Сережа

Конструктив Перебор *2600

Маленький пират Сережа недавно ограбил торговое судно с головоломками разных видов. Среди них ему понравилась лишь одна, самая сложная.

Головоломка представляет из себя таблицу из \(n\) строк и \(m\) столбцов, в клетках которой записаны числа от \(1\) до \(n \cdot m\) по одному разу.

Чтобы решить головоломку, нужно найти последовательность клеток таблицы, в которой любые две последовательные клетки соседние по стороне в таблице. Последовательность может иметь произвольную длину и должна посещать каждую клетку один или более раз. Для клетки со значением \(i\) обозначим за \(t_i\) позицию первого вхождения клетки с этим значением в последовательность. Последовательность решает головоломку, если \(t_1 < t_2 < \dots < t_{nm}\). Другими словами, последовательность должна в первый раз посетить клетку со значением \(x\) до клетки со значением \(x + 1\) для всех \(x\).

Назовем головоломку решаемой, если для нее существует хотя бы одна подходящая последовательность.

За одно действие Сережа может выбрать две произвольных клетки (не обязательно соседние по стороне) и поменять числа, записанные в них. Он хотел бы знать минимальное число действий, необходимое, чтобы сделать головоломку решаемой, но очень нетерпелив. Поэтому найдите, равняется ли минимальное число действий \(0\), \(1\), или же не менее \(2\). В случае, когда потребуется ровно \(1\) действие, найдите также количество подходящих пар клеток для обмена чисел.

Входные данные

В первой строке находятся два целых положительных числа \(n, m\) (\(1 \leq n\cdot m \leq 400\,000\)) — размеры таблицы.

В следующих \(n\) строках находятся по \(m\) целых чисел \(a_{i1}, a_{i2}, \dots, a_{im}\) (\(1 \le a_{ij} \le nm\)).

Гарантируется, что каждое число от \(1\) до \(nm\) встречается ровно один раз.

Выходные данные

Пусть \(a\) — минимальное число действий, после которых головоломка станет решаемой.

Если \(a = 0\), выведите \(0\).

Если \(a = 1\), выведите \(1\), а также количество подходящих пар клеток.

Если \(a \ge 2\), выведите \(2\).

Примечание

В первом примере из условия последовательность клеток \((1, 2), (1, 1), (1, 2), (1, 3), (2, 3), (3, 3)\), \((2, 3), (1, 3), (1, 2), (1, 1), (2, 1), (2, 2), (3, 2), (3, 1)\) решает головоломку, поэтому ответ \(0\).

Головоломка во втором примере из условия не решается, но будет решаться после любого из трех обменов клеток со значениями \((1, 5), (1, 6), (2, 6)\).

В третьем примере из условия потребуется не менее двух обменов, поэтому ответ равен \(2\).

F. Пазл

дп жадные алгоритмы Конструктив *2600

Школьники Алиса и Ибрагим — лучшие друзья. У Ибрагима скоро день рождения, и по этому поводу Алиса решила подарить ему новый пазл. Пазл можно представить в виде матрицы из \(2\) строк и \(n\) столбцов, каждый элемент которой — \(0\), либо \(1\). За один ход можно поменять местами два элемента, стоящие в соседних клетках.

Более формально, будем считать, что строки матриц пронумерованы сверху вниз от \(1\) до \(2\), а столбцы — слева направо от \(1\) до \(n\). Обозначим клетку на пересечении строки \(x\) и столбца \(y\) за \((x, y)\). Будем считать две клетки \((x_1, y_1)\) и \((x_2, y_2)\) соседними, если \(|x_1 - x_2| + |y_1 - y_2| = 1\).

Алисе не нравится, какой рисунок образуют клетки пазла в данный момент. Она придумала свой рисунок, с которым и планирует подарить Ибрагиму новый пазл. Помогите Алисе найти минимальное количество ходов, за которое она может получить свой рисунок, или скажите, что это невозможно.

Входные данные

В первой строке записано число \(n\) (\(1 \leq n \leq 200\,000\)) — количество столбцов в пазле.

Следующие две строки описывают рисунок, образованный пазлом в данный момент. В каждой строке записано \(n\) чисел, каждое из которых равно либо \(0\), либо \(1\).

Следующие две строки описывают желаемый рисунок Алисы в том же формате.

Выходные данные

Если Алиса не ошиблась и её рисунок можно получить — найдите и выведите минимальное необходимое количество ходов, иначе выведите \(-1\).

Примечание

В первом примере из условия подойдет следующая последовательность обменов:

  • \((2, 1), (1, 1)\),
  • \((1, 2), (1, 3)\),
  • \((2, 2), (2, 3)\),
  • \((1, 4), (1, 5)\),
  • \((2, 5), (2, 4)\).

Можно показать, что меньшим числом обменов обойтись нельзя, поэтому ответ равен \(5\).

Во втором примере из условия никакая последовательность ходов не приводит пазл к нужному виду. Следовательно, ответ \(-1\).

A. Округли цену

Конструктив *800

В магазине продавцы хотят сделать все цены круглыми.

В этой задаче круглым числом назовем такое число, которое является степенью \(10\). Например, числа \(10^0 = 1\), \(10^1 = 10\), \(10^2 = 100\) являются круглыми, но \(20\), \(110\) и \(256\) круглыми числами не являются.

Таким образом, если товар стоит \(m\) бурлей (стоимость товара не превышает \(10^9\)), то продавцы хотят изменить его стоимость до ближайшего круглого числа, не большего \(m\). Они спрашивают у вас: на сколько бурлей нужно уменьшить стоимость товара, чтобы он стоил ровно \(10^k\) бурлей, где значение \(k\) — максимально возможно (\(k\) — любое неотрицательное целое число).

Например, пусть товар имеет стоимость \(178\) бурлей. Тогда новая цена товара будет \(100\), и ответ будет равен \(178-100=78\).

Входные данные

В первой строке входных данных задано единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных является строкой, содержащей единственное целое число \(m\) (\(1 \le m \le 10^9\)) — стоимость товара.

Выходные данные

Для каждого набора входных данных выведите в отдельной строке единственное целое число \(d\) (\(0 \le d < m\)) такое, что если уменьшить стоимость товара на \(d\) бурлей, стоимость товара окажется максимально возможным круглым числом. Более формально: \(m - d = 10^k\), где \(k\) — максимально возможное неотрицательное целое число.

Примечание

В примере:

  • \(1 - 0 = 10^0\),
  • \(2 - 1 = 10^0\),
  • \(178 - 78 = 10^2\),
  • \(20 - 10 = 10^1\),
  • \(999999999 - 899999999 = 10^8\),
  • \(9000 - 8000 = 10^3\),
  • \(987654321 - 887654321 = 10^8\).

Обратите внимание, что в каждом наборе входных данных мы получаем максимально возможное круглое число.

F. Уравняй мультимножества

жадные алгоритмы Конструктив математика Структуры данных теория чисел *1700

Мультимножество — это такой набор чисел, в котором могут быть равные элементы, а порядок чисел не имеет значение. Два мультимножества равны, когда каждое значение встречается в них одинаковое количество раз. Например, мультимножества \(\{2,2,4\}\) и \(\{2,4,2\}\) равны, но мультимножества \(\{1,2,2\}\) и \(\{1,1,2\}\) — нет.

Вам даны два мультимножества \(a\) и \(b\), каждое состоит из \(n\) целых чисел.

За одну операцию можно любой элемент мультимножества \(b\) увеличить в два раза или уменьшить в два раза (с округлением вниз). Другими словами, вам доступна одна из следующих операций для элемента \(x\) из мультимножества \(b\):

  • либо заменить \(x\) на \(x \cdot 2\),
  • либо заменить \(x\) на \(\lfloor \frac{x}{2} \rfloor\) (округление вниз).

Обратите внимание, что изменять элементы мультимножества \(a\) нельзя.

Проверьте, можно ли за произвольное количество операций (возможно, \(0\)) сделать так, чтобы мультимножество \(b\) стало равно мультимножеству \(a\).

Например, если \(n = 4\), \(a = \{4, 24, 5, 2\}\), \(b = \{4, 1, 6, 11\}\), то ответ положительный. Можно действовать следующим образом:

  • Заменим \(1\) на \(1 \cdot 2 = 2\). Получим \(b = \{4, 2, 6, 11\}\).
  • Заменим \(11\) на \(\lfloor \frac{11}{2} \rfloor = 5\). Получим \(b = \{4, 2, 6, 5\}\).
  • Заменим \(6\) на \(6 \cdot 2 = 12\). Получим \(b = \{4, 2, 12, 5\}\).
  • Заменим \(12\) на \(12 \cdot 2 = 24\). Получим \(b = \{4, 2, 24, 5\}\).
  • получили равные мультимножества \(a = \{4, 24, 5, 2\}\) и \(b = \{4, 2, 24, 5\}\).
Входные данные

В первой строке входных данных задано единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из трех строк.

В первой строке набора задано целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество элементов в мультимножествах \(a\) и \(b\).

Во второй строке даны \(n\) целых чисел: \(a_1, a_2, \dots, a_n\) (\(1 \le a_1 \le a_2 \le \dots \le a_n \le 10^9\)) — элементы набора \(a\). Обратите внимание, что среди элементов могут быть равные.

В третьей строке даны \(n\) целых чисел: \(b_1, b_2, \dots, b_n\) (\(1 \le b_1 \le b_2 \le \dots \le b_n \le 10^9\)) — элементы набора \(b\). Обратите внимание, что среди элементов могут быть равные.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • YES, если можно сделать так, чтобы мультимножество \(b\) стало равно \(a\),
  • NO в противном случае.

Вы можете выводить YES и NO в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание

Первый пример разобран в условии.

Во втором примере невозможно получить значение \(31\) из чисел мультимножества \(b\) доступными операциями.

В третьем примере можно действовать следующим образом:

  • Заменим \(2\) на \(2 \cdot 2 = 4\). Получим \(b = \{4, 14, 14, 26, 42\}\).
  • Заменим \(14\) на \(\lfloor \frac{14}{2} \rfloor = 7\). Получим \(b = \{4, 7, 14, 26, 42\}\).
  • Заменим \(26\) на \(\lfloor \frac{26}{2} \rfloor = 13\). Получим \(b = \{4, 7, 14, 13, 42\}\).
  • Заменим \(42\) на \(\lfloor \frac{42}{2} \rfloor = 21\). Получим \(b = \{4, 7, 14, 13, 21\}\).
  • Заменим \(21\) на \(\lfloor \frac{21}{2} \rfloor = 10\). Получим \(b = \{4, 7, 14, 13, 10\}\).
  • получили равные мультимножества \(a = \{4, 7, 10, 13, 14\}\) и \(b = \{4, 7, 14, 13, 10\}\).

A. Две 0-1 последовательности

жадные алгоритмы Конструктив *800

У AquaMoon есть две бинарные последовательности \(a\) и \(b\), содержащие только \(0\) и/или \(1\). Она может выполнить две следующие операции любое количество раз (\(a_1\) — первый элемент \(a\), \(a_2\) — второй элемент \(a\) и т. д.):

  • Операция 1: если \(a\) содержит хотя бы два элемента, замените \(a_2\) на \(\operatorname{min}(a_1,a_2)\) и удалите первый элемент \(a\).
  • Операция 2: если \(a\) содержит хотя бы два элемента, замените \(a_2\) на \(\operatorname{max}(a_1,a_2)\) и удалите первый элемент \(a\).

Обратите внимание, что после удаления первого элемента \(a\) бывший \(a_2\) становится первым элементом \(a\), бывший \(a_3\) становится вторым элементом \(a\) и так далее, а длина \(a\) уменьшается на единицу.

Определите, может ли AquaMoon сделать \(a\) равным \(b\) с помощью этих операций.

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 2\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\), \(m\) (\(1 \leq n,m \leq 50\), \(m \leq n\)) — длины \(a\) и \(b\) соответственно.

Вторая строка каждого набора входных данных содержит строку \(a\) длины \(n\), состоящую только из символов \(0\) и \(1\).

Третья строка каждого набора входных данных содержит строку \(b\) длины \(m\), состоящую только из символов \(0\) и \(1\).

Выходные данные

Выведите «YES», если AquaMoon может изменить \(a\) на \(b\), используя эти операции; в противном случае выведите «NO».

Вы можете печатать каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs» будут распознаны как правильный ответ).

Примечание

В первом наборе входных данных вы можете использовать Операцию 2 четыре раза, чтобы сделать \(a\) равным \(b\).

Во втором наборе входных данных вы можете использовать Операцию 1 четыре раза, чтобы сделать \(a\) равным \(b\).

В третьем наборе входных данных можно доказать, что как бы мы ни использовали операции, невозможно сделать \(a\) равным \(b\).

В четвертом наборе входных данных можно доказать, что как бы мы ни использовали операции, невозможно сделать \(a\) равным \(b\).

В пятом наборе входных данных вы можете использовать Операцию 2 три раза, чтобы \(a\) стало равным \(10101\), поэтому первый элемент \(a\) станет равен первому элементу \(b\), но можно доказать, что независимо от того, как действовать, элементы \(a\) со второго по пятый не могут быть такими же как в \(b\).

D. Специальный массив

Конструктив математика реализация хэши *1900

У Эрика есть массив \(b\) длины \(m\), затем он генерирует \(n\) дополнительных массивов \(c_1, c_2, \dots, c_n\), каждый длиной \(m\), из массива \(b\), следующим образом:

Изначально \(c_i = b\) для каждого \(1 \le i \le n\). Эрик тайно выбирает целое число \(k\) \((1 \le k \le n)\) и выбирает \(c_k\) в качестве специального массива.

Есть две операции, которые Эрик может выполнять над массивом \(c_t\):

  • Операция 1: Выберите два целых числа \(i\) и \(j\) (\(2 \leq i < j \leq m-1\)), вычтите \(1\) из \(c_t[i]\) и \(c_t[j]\) и добавьте \(1\) к \(c_t[i-1]\) и \(c_t[j+1]\). Эту операцию можно использовать только с неспециальным массивом, то есть когда \(t \neq k\).;
  • Операция 2: Выберите два целых числа \(i\) и \(j\) (\(2 \leq i < j \leq m-2\)), вычтите \(1\) из \(c_t[i]\) и \(c_t[j]\) и добавьте \(1\) к \(c_t[i-1]\) и \(c_t[j+2]\). Эту операцию можно использовать только для специального массива, то есть когда \(t = k\).

    Обратите внимание, что Эрик не может выполнить операцию, если какой-либо элемент массива после этой операции станет меньше \(0\).

Теперь Эрик делает следующее:

  • Для каждого неспециального массива \(c_i\) (\(i \neq k\)) Эрик использует только операцию 1 над ним по крайней мере один раз.
  • Для специального массива \(c_k\) Эрик использует над ним только операцию 2 по крайней мере один раз.

Наконец, Эрик отбрасывает массив \(b\).

По заданным массивам \(c_1, c_2, \dots, c_n\) ваша задача найти специальный массив, т.е. значение \(k\). Кроме того, вам нужно найти, сколько раз на нем использовалась операция \(2\).

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(3 \leq n \leq 10^5\), \(7 \leq m \leq 3 \cdot 10^5\)) — количество массивов данных вам, и длина каждого массива.

Следующие \(n\) строк содержат по \(m\) целых чисел, \(c_{i,1}, c_{i,2}, \dots , c_{i,m}\).

Гарантируется, что каждый элемент изначального массива \(b\) находится в диапазоне \([0,10^6]\), поэтому \(0 \leq c_{i,j} \leq 3 \cdot 10^{11}\) для всех возможных пар \((i,j)\).

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(10^6\).

Гарантируется, что входные данные генерируется в соответствии с описанной выше процедурой.

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую два целых числа — индекс специального массива и количество раз, которое над ним выполнялась Операция 2. Можно показать, что при заданных в задаче ограничениях это значение уникально и не превышает \(10^{18}\), поэтому его можно представить в виде \(64\)-битного целого числа. Также можно показать, что индекс специального массива определяется однозначно.

В этой задаче взломы отключены.

Примечание

В первом наборе входных данных секретный массив \(b\) равен \([0, 1, 1, 1, 1, 1, 1, 1, 0]\). Массив \(c_1\) и массив \(c_2\) генерируются с использованием операции 1. Массив \(c_3\) генерируется с использованием операции 2.

Для массива \(c_1\) вы можете выбрать \(i=4\) и \(j=5\) и выполнить Операцию 1 один раз, чтобы сгенерировать его. Для массива \(c_2\) вы можете выбрать \(i=6\) и \(j=7\) и выполнить Операцию 1 один раз, чтобы сгенерировать его. Для массива \(c_3\) вы можете выбрать \(i=4\) и \(j=5\) и выполнить Операцию 2 один раз, чтобы сгенерировать его.

Во втором наборе входных данных секретный массив \(b\) равен \([20, 20, 20, 20, 20, 20, 20]\). Вы также можете обнаружить, что массив \(c_1\) и массив \(c_2\) генерируются с помощью Операции 1. Массив \(c_3\) создается с помощью Операции 2.

В третьем наборе входных данных секретный массив \(b\) равен \([20, 20, 20, 20, 20, 20, 20, 20, 20]\). Вы также можете обнаружить, что массив \(c_1\) и массив \(c_2\) генерируются с помощью Операции 1. Массив \(c_3\) создается с помощью Операции 2.

E. Посчитать секунды

графы дп Конструктив математика Перебор реализация *2200

У Cirno есть ориентированный ациклический граф с \(n\) вершинами и \(m\) ребрами. В графе ровно одна вершина, не имеющая исходящих ребер. На \(i\)-й вершине написано целое число \(a_i\).

Каждую секунду происходит следующее:

  • Пусть \(S\) — множество вершин \(x\), у которых \(a_x > 0\).
  • Для всех \(x \in S\) из \(a_x\) вычитается \(1\), а затем для каждой вершины \(y\) такой, что существует ребро из \(x\) в \(y\), \(1\) прибавляется к \(a_y\).

Найдите первый момент времени, когда все \(a_i\) станут равны \(0\). Так как ответ может быть очень большим, выведите его по модулю \(998\,244\,353\).

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит два целых числа \(n, m\) (\(1 \leq n, m \leq 1000\)) — количество вершин и ребер в графе.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^9\)) — числа, записанные в вершинах.

Следующие \(m\) строк содержит два целых числа \(x, y\) (\(1 \leq x, y \leq n\)), обозначающих ориентированное ребро из \(x\) в \(y\). Гарантируется, что граф является ориентированным ациклическим, без кратных ребер, и ровно одна вершина не имеет исходящих ребер.

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных меньше или равны \(10\,000\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите целое число — первый момент времени, когда все \(a_i\) станут \(0\), по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных:

  • В момент времени \(0\) значения узлов равны \([1, 1, 1]\).
  • В момент времени \(1\) значения узлов равны \([0, 1, 1]\).
  • В момент времени \(2\) значения узлов равны \([0, 0, 1]\).
  • В момент времени \(3\) значения узлов равны \([0, 0, 0]\).
Так что ответ равен \(3\).

Во втором наборе входных данных:

  • В момент времени \(0\) значения узлов равны \([1, 0, 0, 0, 0]\).
  • В момент времени \(1\) значения узлов равны \([0, 1, 0, 0, 1]\).
  • В момент времени \(2\) значения узлов равны \([0, 0, 1, 0, 0]\).
  • В момент времени \(3\) значения узлов равны \([0, 0, 0, 1, 0]\).
  • В момент времени \(4\) значения узлов равны \([0, 0, 0, 0, 1]\).
  • В момент времени \(5\) значения узлов равны \([0, 0, 0, 0, 0]\).
Итак, ответ равен \(5\).

В третьем наборе входных данных:

Первый момент времени, когда все \(a_i\) становятся \(0\), равен \(6\cdot 998244353 + 4\).

F. Игра-раскраска

дп игры Конструктив *2600

Алиса и Боб играют в игру. В строке \(n\) ячеек. Изначально каждая ячейка либо красная, либо синяя. Алиса ходит первой.

На каждом ходу Алиса выбирает две соседние клетки, в которых есть хотя бы одна красная клетка, и окрашивает эти две клетки в белый цвет. Затем Боб выбирает две соседние клетки, содержащие хотя бы одну синюю клетку, и окрашивает эти две клетки в белый цвет. Игрок, который не может сделать ход, проигрывает.

Определите победителя, если и Алиса, и Боб играют оптимально.

Обратите внимание, что выбранная ячейка может быть белой, если другая ячейка удовлетворяет ограничениям.

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Для каждого набора входных данных первая строка содержит целое число \(n\) (\(2 \leq n \leq 5 \cdot 10^5\)) — количество ячеек.

Вторая строка содержит строку \(s\) длины \(n\) — начальное состояние ячеек. \(i\)-я ячейка красная, если \(s_i = \)R, и синяя, если \(s_i = \)B.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите имя победителя в отдельной строке.

Примечание

В первом наборе входных данных у Алисы есть два варианта: закрасить первую и вторую клетки или закрасить вторую и третью клетки. Какой бы выбор ни сделала Алиса, после хода Алисы останется ровно одна синяя клетка. Бобу нужно просто закрасить синюю клетку и ее соседнюю, тогда каждая клетка будет белой и Алиса не сможет сделать ход. Итак, Боб — победитель.

Во втором наборе входных данных независимо от того, что выберет Алиса, Боб может закрасить четвертую и пятую клетки за \(2\) хода.

В третьем наборе входных данных сначала Алиса красит третью и четвертую клетки. Неважно, закрашивает ли Боб первую и вторую клетки или пятую и шестую, Алиса может закрасить две другие клетки.

В четвертом наборе входных данных сначала Алиса красит вторую и третью клетки. Если Боб закрашивает пятую и шестую клетки или четвертую и пятую клетки, то Алиса закрашивает седьмую и восьмую клетки. Если Боб закрашивает седьмую и восьмую клетки, то Алиса закрашивает пятую и шестую клетки.

В пятом наборе входных данных Алиса сначала выбирает две средние клетки, затем у Боба, очевидно, есть только два варианта, какой бы вариант он ни выбрал, Алиса может выбрать другой и выиграть.

В восьмом наборе входных данных независимо от того, что выберет Алиса, Боб может выбрать две другие симметричные ячейки.

G. Mio и счастливый массив

бпф Конструктив математика Строки *3500

У Mio есть массив \(a\), состоящий из \(n\) целых чисел, и массив \(b\), состоящий из \(m\) целых чисел.

Mio может выполнить следующую операцию над \(a\):

  • Выберите целое число \(i\) (\(1 \leq i \leq n\)), которое не было выбрано ранее, затем прибавьте \(1\) к \(a_i\), вычтите \(2\) из \(a_{i+1}\) , добавьте \(3\) к \(a_{i+2}\) и так далее. Формально операция состоит в добавлении \((-1)^{j-i} \cdot (j-i+1) \) к \(a_j\) для \(i \leq j \leq n\).

Mio хочет преобразовать \(a\) так, чтобы он содержал \(b\) как подмассив. Не могли бы вы ответить на ее вопрос и указать последовательность операций для этого, если это возможно?

Массив \(b\) является подмассивом массива \(a\), если \(b\) получается из \(a\) удалением нескольких (возможно, нуля или всех) элементов с начала и нескольких (возможно, нуля или всех) элементов с конца.

Входные данные

Входные данные состоят из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — количество элементов в \(a\).

Вторая строка набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \cdots, a_n\) (\(-10^5 \leq a_i \leq 10^5\)), где \(a_i\)\(i\)-й элемент \(a\).

Третья строка набора входных данных содержит одно целое число \(m\) (\(2 \leq m \leq n\)) — количество элементов в \(b\).

Четвертая строка набора входных данных содержит \(m\) целых чисел \(b_1, b_2, \cdots, b_m\) (\(-10^{12} \leq b_i \leq 10^{12}\)), где \(b_i\)\(i\)-й элемент \(b\).

Гарантируется, что сумма \(n\) по всем тестам не превышает \(2 \cdot 10^5\).

Выходные данные

Если невозможно преобразовать \(a\) так, чтобы он содержал \(b\) в качестве подмассива, выведите \(-1\).

В противном случае первая строка вывода должна содержать целое число \(k\) (\(0 \leq k \leq n\)), количество операций, которые необходимо выполнить.

Вторая строка должна содержать \(k\) различных целых чисел, представляющих операции, выполняемые по порядку.

Если решений несколько, можно вывести любое.

Обратите внимание, что вам не нужно минимизировать количество операций.

Примечание

В первом наборе входных данных последовательность \(a\) = \([1,2,3,4,5]\). Одним из возможных решений является выполнение одной операции при \(i = 1\) (прибавьте \(1\) к \(a_1\), вычтите \(2\) из \(a_2\), прибавьте \(3\) к \(a_3\), вычтите \(4\) из \(a_4\), прибавьте \(5\) до \(a_5\)). Затем массив \(a\) преобразуется в \(a\) = \([2,0,6,0,10]\), который содержит \(b\) = \([2, 0, 6, 0, 10]\) в качестве подмассива.

Во втором наборе входных данных последовательность \(a\) = \([1,2,3,4,5]\). Одно из возможных решений — сделать одну операцию при \(i = 4\) (прибавить \(1\) к \(a_4\), вычесть \(2\) из \(a_5\)). Затем массив \(a\) преобразуется в \(a\) = \([1,2,3,5,3]\), который содержит \(b\) = \([3,5,3]\) в качестве подмассива.

В третьем наборе входных данных последовательность \(a\) = \([-3, 2, -3, -4, 4, 0, 1, -2]\). Одним из возможных решений является следующее.

  • Выберите целое число \(i=8\) для выполнения операции. Затем массив \(a\) преобразуется в \(a\) = \([-3, 2, -3, -4, 4, 0, 1, -1]\).
  • Выберите целое число \(i=6\), чтобы выполнить операцию. Затем массив \(a\) преобразуется в \(a\) = \([-3, 2, -3, -4, 4, 1, -1, 2]\).
  • Выберите целое число \(i=4\) для выполнения операции. Затем массив \(a\) преобразуется в \(a\) = \([-3, 2, -3, -3, 2, 4, -5, 7]\).
  • Выберите целое число \(i=3\) для выполнения операции. Затем массив \(a\) преобразуется в \(a\) = \([-3, 2, -2, -5, 5, 0, 0, 1]\).
  • Выберите целое число \(i=1\) для выполнения операции. Затем массив \(a\) преобразуется в \(a\) = \([-2, 0, 1, -9, 10, -6, 7, -7]\).

В результате \(a\) равно \([-2, 0, 1, -9, 10, -6, 7, -7]\), что содержит \(b\) = \([10, -6, 7, -7]\) в качестве подмассива.

В четвертом наборе входных данных невозможно преобразовать \(a\) так, чтобы он содержал \(b\) в качестве подмассива.

В пятом наборе входных данных невозможно преобразовать \(a\) так, чтобы он содержал \(b\) в качестве подмассива.

H1. Игра ИИ (простая версия)

бпф дп Комбинаторика Конструктив математика *3200

Это упрощенная версия задачи. Разница между легкой и сложной версиями заключается в ограничении на \(k\) и ограничении по времени. Кроме того, в этой версии задачи вам нужно вычислить ответ только при \(n=k\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Cirno играет в военный симулятор с \(n\) башнями (пронумерованными от \(1\) до \(n\)) и \(n\) ботами (пронумерованными от \(1\) до \(n\)). Первоначально \(i\)-я башня занята \(i\)-м ботом для всех \(1 \le i \le n\).

Перед игрой Cirno сначала выбирает перестановку \(p = [p_1, p_2, \ldots, p_n]\) длины \(n\) (перестановкой длины \(n\) называется массив длины \(n\), где каждое целое число между \(1\) и \(n\) встречаются ровно один раз). После этого она может выбрать последовательность \(a = [a_1, a_2, \ldots, a_n]\) (\(1 \le a_i \le n\) и \(a_i \ne i\) для всех \(1 \le i \le n\) ).

В игре есть \(n\) раундов-атак. В \(i\)-м раунде, если \(p_i\)-й бот все еще находится в игре, он начнет свою атаку, в результате чего \(a_{p_i}\)-я башня будет занята \(p_i\)-м ботом; бот, который ранее занимал \(a_{p_i}\)-ю башню, больше не будет ее занимать. Если \(p_i\)-го бота нет в игре, в этом раунде ничего не произойдет.

После каждого раунда, если бот не занимает ни одной башни, он будет уничтожен и покинет игру. Обратите внимание, что ни одна башня не может быть занята более чем одним ботом, но один бот может занимать более одной башни во время игры.

В конце игры Cirno запишет результат в виде последовательности \(b = [b_1, b_2, \ldots, b_n]\), где \(b_i\) — номер бота, занимающего \(i\)-ю башня в конце игры.

Однако, как мастер математики, она хочет, чтобы вы решили следующую задачу на счет вместо того, чтобы играть в игры:

Подсчитайте количество различных пар последовательностей \(a\) и \(b\), которые могут получиться из всех возможных выборов последовательности \(a\) и перестановки \(p\).

Так как это число может быть большим, выведите его по модулю \(M\).

Входные данные

Единственная строка содержит два натуральных числа \(k\) и \(M\) (\(1\le k\le 5000\), \(2\le M\le 10^9\) ). Гарантируется, что \(2^{18}\) — делитель \(M-1\), а \(M\) — простое число.

Вам нужно вывести ответ для \(n=k\).

Выходные данные

Выведите одно целое число — количество различных пар последовательностей для \(n=k\) по модулю \(M\).

Примечание

Для \(n=1\) допустимой последовательности \(a\) не существует. Мы рассматриваем ответ как \(0\).

При \(n=2\) возможен только один массив \(a\): \([2, 1]\).

  • Для массива \(a\) равного \([2, 1]\) и перестановки \(p\) равной \([1, 2]\), последовательность \(b\) будет \([1, 1]\) после всех раундов. Детали для каждого раунда:
    • В первом раунде первый бот начнет атаку и успешно захватит башню \(2\). После этого раунда второй бот будет уничтожен и покинет игру, так как все его башни заняты другими ботами.
    • Во втором раунде второго бота нет в игре.
  • Для массива \(a\) равного \([2, 1]\) и перестановки \(p\) равной \([2, 1]\), последовательность \(b\) будет \([2, 2]\) после всех раундов. Детали для каждого раунда:
    • В первом раунде второй бот начнет атаку и успешно захватит башню \(1\). После этого раунда первый бот будет уничтожен и покинет игру, так как все его башни заняты другими ботами.
    • Во втором раунде первого бота нет в игре.

Таким образом, количество различных пар последовательностей \((a,b)\) равно \(2\) (\([2, 1]\), \([1, 1]\) и \([2, 1]\), \([2, 2]\)) при \(n=2\).

B. Марк-уборщик

жадные алгоритмы Конструктив реализация *900

Марк убирает ряд из \(n\) комнат, \(i\)-я комната имеет неотрицательный уровень запыленности \(a_i\). У него есть волшебная чистящая машина, которая может выполнять следующую трехэтапную операцию:

  • Марк выбирает два таких индекса \(i<j\), что уровни пыли \(a_i\), \(a_{i+1}\), \(\dots\), \(a_{j-1}\) строго больше \(0\).
  • Машина изменяет \(a_i\) на новое значение \(a_i-1\).
  • Машина изменяет \(a_j\) на новое значение \(a_j+1\).

Цель Марка — сделать \(a_1 = a_2 = \ldots = a_{n-1} = 0\), тогда он сможет перейти к уборке комнаты \(n\). Требуется определить минимальное количество операций, необходимых для достижения его цели.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1\leq t\leq 10^4\)) — количество наборов входных данных в тесте.

Первая строка каждого набора содержит одно целое число \(n\) (\(2\leq n\leq 2\cdot 10^5\)) — количество комнат.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1\), \(a_2\), ..., \(a_n\) (\(0\leq a_i\leq 10^9\)) — уровень пыли в каждой из комнат.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите строку, содержащую одно целое число — минимальное количество операций. Можно доказать, что существует последовательность операций, удовлетворяющая требованию задачи.

Примечание

В первом наборе входных данных примера возможна следующая последовательность операций:

  • выбрать \(i=1\) и \(j=2\), получить массив \([1,1,0]\);
  • выбрать \(i=1\) и \(j=3\), получить массив \([0,1,1]\);
  • выбрать \(i=2\) и \(j=3\), получить массив \([0,0,2]\).

После этого \(a_1=a_2=0\).

Во втором наборе входных данных примера возможна следующая последовательность операций:

  • выбрать \(i=4\) и \(j=5\), получить массив \([0,2,0,1,1]\).
  • выбрать \(i=2\) и \(j=3\), получить массив \([0,1,1,1,1]\).
  • выбрать \(i=2\) и \(j=5\), получить массив \([0,0,1,1,2]\).
  • выбрать \(i=3\) и \(j=5\), получить массив \([0,0,0,1,3]\).
  • выбрать \(i=4\) и \(j=5\), получить массив \([0,0,0,0,4]\).

После пятой операции массив удовлетворяет требованиям задачи.

D. Марк и лампочки

жадные алгоритмы Комбинаторика Конструктив математика сортировки *1800

Марк только что купил светильник из \(n\) лампочек. Состояние лампочек можно описать бинарной строкой \(s = s_1s_2\dots s_n\), где \(s_i=\texttt{1}\) означает, что \(i\)-я лампочка включена, а \(s_i=\texttt{0}\) означает, что \(i\)-я лампочка выключена.

К сожалению, лампочки сломаны, и Марк может выполнять единственную операцию, чтобы изменять состояние лампочек:

  • выбрать индекс \(i\) из чисел \(2,3,\dots,n-1\) такой, что \(s_{i-1}\ne s_{i+1}\);
  • переключить \(s_i\): если \(s_i\) равно \(\texttt{0}\), установить для \(s_i\) значение \(\texttt{1}\), и наоборот.

Марк хочет, чтобы состояние лампочек описывалось другой бинарной строкой \(t\). Помогите Марку определить минимальное количество операций, чтобы достичь это состояние.

Входные данные

Первая строка входных данных содержит одно целое число \(q\) (\(1\leq q\leq 10^4\)) — количество наборов входных данных в тесте.

Первая строка каждого набора содержит одно целое число \(n\) (\(3\leq n\leq 2\cdot 10^5\)) — количество лампочек.

Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длины \(n\) — начальное состояние лампочек.

Третья строка каждого набора входных данных содержит бинарную строку \(t\) длины \(n\) — итоговое состояние лампочек.

Гарантируется, что сумма \(n\) по всем наборам входных данных теста не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите строку, содержащую минимальное количество операций, которые должен выполнить Марк, чтобы преобразовать состояние лампочек из \(s\) в \(t\). Если такой последовательности операций не существует, выведите \(-1\).

Примечание

В первом наборе входных данных примера одна из последовательностей операций, обеспечивающая минимальное количество операций, следующая:

  • выбрать \(i=3\), заменив \(\texttt{01}\color{red}{\texttt{0}}\texttt{0}\) на \(\texttt{01}\color{red}{\texttt{1}}\texttt{0}\);
  • выбрать \(i=2\), заменив \(\texttt{0}\color{red}{\texttt{1}}\texttt{10}\) на \(\texttt{0}\color{red}{\texttt{0}}\texttt{10}\).

Во втором наборе входных данных искомой последовательности операций не существует, потому что нельзя изменить ни первый, ни последний символ \(s\).

В третьем наборе входных данных, хотя первые символы \(s\) и \(t\) совпадают и последние символы \(s\) и \(t\) одинаковы, можно показать, что не существует последовательности операций, которая удовлетворяет условию.

В четвертом наборе входных данных одна из последовательностей, обеспечивающая минимальное количество операций, выглядит следующим образом:

  • выбрать \(i=3\), заменив \(\texttt{00}\color{red}{\texttt{0}}\texttt{101}\) на \(\texttt{00}\color{red}{\texttt{1}}\texttt{101}\);
  • выбрать \(i=2\), заменив \(\texttt{0}\color{red}{\texttt{0}}\texttt{1101}\) на \(\texttt{0}\color{red}{\texttt{1}}\texttt{1101}\);
  • выбрать \(i=4\), заменив \(\texttt{011}\color{red}{\texttt{1}}\texttt{01}\) на \(\texttt{011}\color{red}{\texttt{0}}\texttt{01}\);
  • выбрать \(i=5\), заменив \(\texttt{0110}\color{red}{\texttt{0}}\texttt{1}\) на \(\texttt{0110}\color{red}{\texttt{1}}\texttt{1}\);
  • выбрать \(i=3\), заменив \(\texttt{01}\color{red}{\texttt{1}}\texttt{011}\) на \(\texttt{01}\color{red}{\texttt{0}}\texttt{011}\).

F. Марк и онлайн-экзамен

битмаски интерактив Конструктив Теория вероятностей *2900

Марк администрирует онлайн-экзамен, состоящий из \(n\) вопросов с ответами «да» или «нет». Однако он потерял список правильных ответов. Ему необходим способ восстановить ответы до того, как его клиент придет в ярость.

К счастью, у него есть доступ к системе оценки. Так, за один запрос вы можете ввести ответы ко всем \(n\) вопросам из экзамена и система оценки ответит, сколько введенных ответов верны.

У Марка есть не так много времени, поэтому он может использовать систему оценки не более \(675\) раз. Помогите Марку определить правильные ответы ко всем вопросам экзамена.

Обратите внимание, что правильные ответы к вопросам фиксированы и не будут меняться в зависимости от ваших запросов.

Входные данные

Первая строка входных данных содержит целое число \(n\) (\(1\leq n\leq 1000\)) — количество вопросов на экзамене.

Протокол взаимодействия

После чтения \(n\) вы можете начинать делать запросы к системе оценки. Чтобы сделать запрос, выведите строку \(s\) длины \(n\), состоящую только из букв «T» и «F».

  • \(s_i = \)T означает, что предполагаемый ответ на \(i\)-й вопрос — «да».
  • \(s_i = \)F означает, что предполагаемый ответ на \(i\)-й вопрос — «нет».

После успешного запроса вы должны прочитать целое число \(k\) (\(0\leq k\leq n\)) — количество верных ответов. Если вы прочитали \(n\), то вы нашли все ответы, и ваша программа должна завершиться.

Если ваше решение прочитало \(k = -1\) вместо ответа системы оценки, это значит, что вы совершили некорректный запрос или достигли ограничения на количество запросов. Ваша программа должна немедленно завершиться после прочтения ответа \(-1\), вы получите вердикт Неправильный ответ. В противном случае вы можете получить любой вердикт, так как программа продолжит чтение из закрытого потока.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Для взлома используйте следующий формат.

Первая строка содержит целое число \(n\) (\(1\leq n\leq 1000\)) — количество вопросов.

Вторая строка содержит строку \(s\) длины \(n\), состоящую только из букв «T» и «F» — правильные ответы на экзамене.

Примечание

Пустые строки в примерах нужны только для того, чтобы вы лучше понимали процесс взаимодействия. От вас не требуется их выводить.

В первом примере экзамен состоит из \(3\) вопросов, ответы на которые «да», «да» и «нет» соответственно.

  • В первом запросе предполагаются ответы «нет», «да» и «да» соответственно. Верно угадан только один ответ — на \(2\)-й вопрос.
  • Затем, во втором запросе, программа верно угадала все ответы.

Во втором примере экзамен состоит из \(4\) вопросов, ответы на которые «да», «нет», «да» и «да» соответственно.

  • В первом запросе нет верно угаданных ответов, поэтому ответ от программы жюри \(0\).
  • Во втором запросе верно угаданы \(1\)-й, \(3\)-й, и \(4\)-й ответы, поэтому ответ системы \(3\).
  • В третьем запросе программа верно угадала все ответы.

A. Очередная задача на минимизацию строки

2-sat жадные алгоритмы Конструктив Строки строковые суфф. структуры *800

У вас есть последовательность \(a_1, a_2, \ldots, a_n\) длины \(n\), состоящая из целых чисел от \(1\) до \(m\). Также у вас есть строка \(s\), состоящая из \(m\) латинских букв «B».

Вы примените \(n\) операций к этой строке.

  • На \(i\)-й (\(1 \le i \le n\)) операции вы можете заменить \(a_i\)либо \((m + 1 - a_i)\)-й символ строки \(s\) на «A». Можно заменять символ на одной и той же позиции несколько раз.

Найдите лексикографически минимальную строку, которую Вы можете получить после выполнения всех операций.

Строка \(x\) лексикографически меньше строки \(y\) такой же длины, если и только если в первой позиции, где \(x\) и \(y\) различны, в строке \(x\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(y\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 2000\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке дано два числа \(n\) и \(m\) (\(1 \le n, m \le 50\)) — длина последовательности \(a\) и длина строки \(s\).

Во второй строке даны \(n\) чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le m\)) — последовательность \(a\).

Выходные данные

Для каждого набора входных данных выведите строку длины \(m\) — лексикографически минимальную строку, которую можно получить. Каждый символ строки должен быть заглавной латинской буквой «A» или заглавной латинской буквой «B».

Примечание

В первом наборе входных данных последовательность \(a = [1, 1, 3, 1]\). Одно из возможных решений следующее.

  • На \(1\)-й операции вы можете заменить \(1\)-й символ строки \(s\) на A. После этого \(s\) становится равной ABBBB.
  • На \(2\)-й операции вы можете заменить \(5\)-й символ строки \(s\) на A (так как \(m+1-a_2=5\)). После этого \(s\) становится равной ABBBA.
  • На \(3\)-й операции вы можете заменить \(3\)-й символ строки \(s\) на A. После этого \(s\) становится равной ABABA.
  • На \(4\)-й операции вы можете заменить \(1\)-й символ строки \(s\) на A. После этого \(s\) остаётся равной ABABA.
Вы получите строку ABABA. Можно показать, что нельзя получить лексикографически меньшую строку.

Во втором наборе входных данных вы сделаете только одну операцию. Вы можете заменить \(2\)-й либо \(4\)-й символ строки \(s\) на A. Вы можете получить строки BABBB и BBBAB после операции. Строка BABBB является лексикографически наименьшей из этих строк.

В третьем наборе входных данных вы можете получить только строку A.

В четвёртом наборе входных данных вы можете заменить \(1\)-й и \(2\)-й символы строки \(s\) на A, чтобы получить строку AABB.

В пятом наборе входных данных вы можете заменить \(1\)-й и \(3\)-й символы строки \(s\) на A, чтобы получить строку ABABBBB.

D1. Нарезка морковки (простая версия)

Бинарный поиск жадные алгоритмы Конструктив Перебор теория чисел *1700

Это простая версия задачи. Единственное отличие между простой и сложной версиями — ограничения на \(n\), \(k\), \(a_i\) и сумму \(n\) по всем наборам входных данных. Вы можете делать взломы, только если обе версии задачи решены.

Обратите внимание на нестандартное ограничение по памяти.

Вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\) длины \(n\) и целое число \(k\).

Стоимость массива целых чисел \(p_1, p_2, \ldots, p_n\) длины \(n\) равна \(\)\max\limits_{1 \le i \le n}\left(\left \lfloor \frac{a_i}{p_i} \right \rfloor \right) - \min\limits_{1 \le i \le n}\left(\left \lfloor \frac{a_i}{p_i} \right \rfloor \right).\(\)

Здесь \(\lfloor \frac{x}{y} \rfloor\) обозначает целую часть от деления \(x\) на \(y\). Найдите минимальную возможную стоимость массива \(p\) такого, что \(1 \le p_i \le k\) для всех \(1 \le i \le n\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке даны два числа \(n\) и \(k\) (\(1 \le n, k \le 3000\)).

Во второй строке даны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_1 \le a_2 \le \ldots \le a_n \le 3000\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3000\).

Выходные данные

Для каждого набора входных данных выведите одно число: минимальную возможную стоимость массива \(p\), удовлетворяющего условию выше.

Примечание

В первом наборе входных данных оптимальный массив \(p = [1, 1, 1, 2, 2]\). Массив значений \(\lfloor \frac{a_i}{p_i} \rfloor\) для данного массива равен \([4, 5, 6, 4, 5]\). Стоимость \(p\) равна \(\max\limits_{1 \le i \le n}(\lfloor \frac{a_i}{p_i} \rfloor) - \min\limits_{1 \le i \le n}(\lfloor \frac{a_i}{p_i} \rfloor) = 6 - 4 = 2\). Можно показать, что не существует массива (удовлетворяющего требованию из условия) с меньшей стоимостью.

Во втором наборе входных данных один из оптимальных массивов \(p = [12, 12, 12, 12, 12]\). Все значения \(\lfloor \frac{a_i}{p_i} \rfloor\) для данного массива равны \(0\).

В третьем наборе входных данных единственный возможный массив \(p = [1, 1, 1]\).

D2. Нарезка морковки (cложная версия)

дп жадные алгоритмы Конструктив математика Перебор Структуры данных теория чисел *2400

Это сложная версия задачи. Единственное отличие между простой и сложной версиями — ограничения на \(n\), \(k\), \(a_i\) и сумму \(n\) по всем наборам входных данных. Вы можете делать взломы, только если обе версии задачи решены.

Обратите внимание на нестандартное ограничение по памяти.

Вам дан массив целых чисел \(a_1, a_2, \ldots, a_n\) длины \(n\) и целое число \(k\).

Стоимость массива целых чисел \(p_1, p_2, \ldots, p_n\) длины \(n\) равна \(\)\max\limits_{1 \le i \le n}\left(\left \lfloor \frac{a_i}{p_i} \right \rfloor \right) - \min\limits_{1 \le i \le n}\left(\left \lfloor \frac{a_i}{p_i} \right \rfloor \right).\(\)

Здесь \(\lfloor \frac{x}{y} \rfloor\) обозначает целую часть от деления \(x\) на \(y\). Найдите минимальную возможную стоимость массива \(p\), такого что \(1 \le p_i \le k\) для всех \(1 \le i \le n\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке даны два числа \(n\) и \(k\) (\(1 \le n, k \le 10^5\)).

Во второй строке даны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_1 \le a_2 \le \ldots \le a_n \le 10^5\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число: минимальную возможную стоимость массива \(p\), удовлетворяющего требованию выше.

Примечание

В первом наборе входных данных оптимальный массив \(p = [1, 1, 1, 2, 2]\). Массив значений \(\lfloor \frac{a_i}{p_i} \rfloor\) для данного массива равен \([4, 5, 6, 4, 5]\). Стоимость \(p\) равна \(\max\limits_{1 \le i \le n}(\lfloor \frac{a_i}{p_i} \rfloor) - \min\limits_{1 \le i \le n}(\lfloor \frac{a_i}{p_i} \rfloor) = 6 - 4 = 2\). Можно показать, что не существует массива (удовлетворяющего требованию из условия) с меньшей стоимостью.

Во втором наборе входных данных один из оптимальных массивов \(p = [12, 12, 12, 12, 12]\). Все значения \(\lfloor \frac{a_i}{p_i} \rfloor\) для данного массива равны \(0\).

В третьем наборе входных данных единственный возможный массив \(p = [1, 1, 1]\).

A. Дореми и её IQ

Бинарный поиск жадные алгоритмы Конструктив реализация *1600

Дореми попросили протестировать \(n\) контестов. Контест \(i\) может быть протестирован только в день \(i\). Сложность контеста \(i\) равна \(a_i\). В начале показатель IQ Дореми равен \(q\). В день \(i\) Дореми решает, протестирует ли она контест \(i\) или нет. Она может протестировать контест только в случае, если её текущий показатель IQ строго больше \(0\).

Если Дореми решает протестировать контест \(i\) в день \(i\), то происходит следующее:

  • если \(a_i>q\), то Дореми чувствует себя недостаточно умной, поэтому \(q\) уменьшается на \(1\);
  • иначе ничего не изменяется.
При решении не тестировать контест ничего не происходит.

Дореми хочет протестировать как можно больше контестов. Помогите Дореми найти оптимальное решение.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных в тесте. Далее следует описание наборов.

Первая строка каждого набора содержит целые числа \(n\) и \(q\) (\(1 \le n \le 10^5\), \(1 \le q \le 10^9\)) — число контестов и показатель IQ Дореми в начале.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1,a_2,\cdots,a_n\) (\(1 \le a_i \le 10^9\)) — сложность каждого контеста.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора выведите бинарную строку \(s\), где \(s_i=1\) если Дореми должна протестировать контест \(i\), и \(s_i=0\) иначе. Число единиц в строке должно быть максимально возможным, и при этом она не должна тестировать контест, когда её показатель IQ меньше либо равен нулю.

Если существуют несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных Дореми тестирует единственный имеющийся контест. Её показатель IQ не уменьшается.

Во втором наборе входных данных Дореми тестирует оба имеющихся контеста. Её показатель IQ уменьшается на \(1\) после тестирования контеста \(2\).

В третьем наборе входных данных Дореми тестирует контесты \(1\) и \(2\). Её показатель IQ уменьшается до \(0\) после тестирования контеста \(2\), поэтому она не может протестировать контест \(3\).

F. Бугабу

битмаски дп Конструктив теория чисел *3500

Трансформация массива положительных целых чисел \(a_1,a_2,\dots,a_n\) определена как замена \(a\) на массив \(b_1,b_2,\dots,b_n\), получающийся операцией \(b_i=a_i\oplus a_{(i\bmod n)+1}\), где \(\oplus\) обозначает операцию побитового XOR (исключающего ИЛИ).

Вам даны целые числа \(n\), \(t\) и \(w\). Мы считаем, что массив \(c_1,c_2,\dots,c_n\) (\(0 \le c_i \le 2^w-1\)) является бугабу тогда и только тогда, когда существует массив \(a_1,a_2,\dots,a_n\) такой, что после трансформации массива \(a\) ровно \(t\) раз массив \(a\) превращается в \(c\).

Например, если \(n=6\), \(t=2\), \(w=2\), то массив \([3,2,1,0,2,2]\) — бугабу, потому что его можно получить, трансформировав массив \([2,3,1,1,0,1]\) \(2\) раза: \(\) [2,3,1,1,0,1]\to [2\oplus 3,3\oplus 1,1\oplus 1,1\oplus 0,0\oplus 1,1\oplus 2]=[1,2,0,1,1,3]; \\ [1,2,0,1,1,3]\to [1\oplus 2,2\oplus 0,0\oplus 1,1\oplus 1,1\oplus 3,3\oplus 1]=[3,2,1,0,2,2]. \(\)

Массив \([4,4,4,4,0,0]\) не бугабу, потому что \(4 > 2^2 - 1\). Массив \([2,3,3,3,3,3]\) не бугабу, потому что он не может быть получен трансформацией одного массива \(2\) раза.

Вам дан массив \(c\), значения на некоторых позициях которого неизвестны (вначале только \(m\) элементов известны, остальные — нет). Также есть \(q\) модификаций, где каждая модификация меняет какой-либо элемент \(c\). Модификация может изменить, известен ли элемент на какой-либо позиции или нет, а так же, возможно, переопределить элемент на позиции, которая уже известна.

Вам нужно посчитать, сколько возможных массивов \(c\) (с произвольными элементами на неизвестных позициях) являются бугабу после каждой модификации. Выведите \(i\)-й ответ по модулю \(p_i\) (\(p_i\) — заданный массив из \(q\) элементов).

Входные данные

Первая строка содержит четыре целых числа \(n\), \(m\), \(t\) и \(w\) (\(2\le n\le 10^7\), \(0\le m\le \min(n, 10^5)\), \(1\le t\le 10^9\), \(1\le w\le 30\)).

Затем следуют \(m\) строк, \(i\)-я из которых содержит два целых числа \(d_i\) и \(e_i\) (\(1\le d_i\le n\), \(0\le e_i< 2^w\)), означающие, что позиция \(d_i\) массива \(c\) известна и \(c_{d_i}=e_i\). Гарантируется, что \(1\le d_1<d_2<\ldots<d_m\le n\).

Следующая строка содержит одно число \(q\) (\(1\le q\le 10^5\)) — количество модификаций.

Затем следуют \(q\) строк, \(i\)-я из которых содержит три целых числа \(f_i\), \(g_i\), \(p_i\) (\(1\le f_i\le n\), \(-1\le g_i< 2^w\), \(11\le p_i\le 10^9+7\)). Значение \(g_i=-1\) означает пометку позиции \(f_i\) массива \(c\) как неизвестной, иначе пометку позиции \(f_i\) массива \(c\) как известной, причем \(c_{f_i}=g_i\). Значение \(p_i\) означает, что вы должны вывести \(i\)-й ответ по модулю \(p_i\).

Выходные данные

Выведите \(q\) строк — ваши ответы.

Примечание

В первом примере \(n=3\), \(t=1\) и \(w=1\). Пусть \(?\) обозначает неизвестную позицию в массиве \(c\).

В первом запросе \(c=[1,0,1]\). Единственный возможный массив \([1,0,1]\) — бугабу, потому что он может быть получен одной трансформацией из \([0,1,1]\). Поэтому ответ \(1\bmod 123\,456\,789 = 1\).

Во втором запросе \(c=[1,1,1]\). Единственный возможный массив \([1,1,1]\) — не бугабу. Поэтому ответ \(0\bmod 111\,111\,111 = 0\).

В третьем запросе \(c=[?,1,1]\). Есть два возможных массива: \([1,1,1]\) и \([0,1,1]\). Из них только \([0,1,1]\) является бугабу, потому что может быть получен одной трансформацией из \([1,1,0]\). Поэтому ответ \(1\bmod 987\,654\,321=1\).

В четвертом запросе \(c=[?,1,?]\). Есть четыре возможных массива, из них \([0,1,1]\) и \([1,1,0]\) являются бугабу. \([1,1,0]\) может быть получен из \([1,0,1]\) одной трансформацией. Поэтому ответ \(2\bmod 555\,555\,555=2\).

B. Различие НОДов

Конструктив математика *1100

Даны три целых числа \(n\), \(l\), и \(r\). Необходимо построить массив \(a_1,a_2,\dots,a_n\) (\(l\le a_i\le r\)) такой, что значения \(\gcd(i,a_i)\) все различны, либо сообщить, что решения не существует.

Здесь \(\gcd(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных в тесте. Далее следует описание наборов.

Первая строка каждого набора содержит три целых числа \(n\), \(l\), \(r\) (\(1 \le n \le 10^5\), \(1\le l\le r\le 10^9\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора выведите «NO» (без кавычек), если решения не существует. Вы можете выводить буквы в любом регистре (верхнем или нижнем).

В противном случае выведите «YES» (без кавычек). В следующей строке выведите \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) — построенный вами массив.

Если существуют несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных, \(\gcd(1,a_1),\gcd(2,a_2),\ldots,\gcd(5,a_5)\) равны \(1\), \(2\), \(3\), \(4\), \(5\) соответственно.

C. Восстанови ПСП

жадные алгоритмы Конструктив реализация Строки *1800

Скобочная последовательность — это строка, содержащая только символы «(» и «)». Правильная скобочная последовательность (или, коротко говоря, ПСП) — это скобочная последовательность, которая может быть преобразована в правильное арифметическое выражение путем вставки символов «1» и «+» между исходными символами последовательности. Например:

  • скобочные последовательности «()()» и «(())» являются правильными (возможные выражения: «(1)+(1)» и «((1+1)+1)»);
  • скобочные последовательности «)(», «(» и «)» не являются правильными.

В начале была некоторая ПСП. Некоторые скобки заменили на знаки вопроса. Верно ли, что существует единственный способ заменить знаки вопроса на скобки так, чтобы получилась ПСП?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^4\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных записана ПСП с некоторыми скобками замененными на знаки вопроса. Каждый символ — это '(', ')' или '?'. Из данной последовательности можно восстановить хотя бы одну ПСП.

Суммарная длина последовательностей по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите «YES», если способ заменить знаки вопроса на скобки так, чтобы получилась ПСП, единственный. Если существует больше одного способа, то выведите «NO».

Примечание

В первом наборе входных данных единственная возможная оригинальная ПСП — это «(())».

Во втором наборе существует несколько способов восстановить ПСП.

В третьем и четвертом наборах единственная возможная ПСП — это «()».

В пятом наборе оригинальная ПСП может быть «((()()))» или «(())()()».

A. Загадочные числа - 1

*особая задача Конструктив *1200

Входные данные

Входные данные содержат два целых числа a1, a2 (0 ≤ ai ≤ 109), разделенных пробелом.

Выходные данные

Выведите ответ — единственное целое число.

A. Покраска рисунка

жадные алгоритмы Конструктив математика *1500

Рисунок можно представить в виде таблицы \(n\times m\) (\(n\) строк, \(m\) столбцов), при этом каждая из \(n \cdot m\) клеток будет покрашена в один из цветов. У вас есть \(k\) красок различных цветов. Количество каждой краски ограниченно, а именно, вы можете покрасить не более \(a_i\) клеток в \(i\)-й цвет.

Рисунок называется красивым, если у каждой клетки не менее \(3\) тороидных соседних клеток имеют такой же цвет.

Две клетки являются тороидными соседями, если они имеют общую сторону на торе. Другими словами, для некоторых целых чисел \(1 \leq x_1,x_2 \leq n\) и \(1 \leq y_1,y_2 \leq m\) клетка в \(x_1\)-й строке \(y_1\)-м столбце является тороидным соседом клетки в \(x_2\)-й строке и \(y_2\)-м столбце, если выполняется одно из следующих двух условий:

  • \(x_1-x_2 \equiv \pm1 \pmod{n}\) и \(y_1=y_2\), или
  • \(y_1-y_2 \equiv \pm1 \pmod{m}\) и \(x_1=x_2\).

Обратите внимание, что у каждой клетки ровно \(4\) тороидных соседа. Например, если \(n=3\), а \(m=4\), то тороидными соседями клетки \((1, 2)\) (клетки в первой строке втором столбце) являются клетки \((3, 2)\), \((2, 2)\), \((1, 3)\), \((1, 1)\). Они выделены серым на рисунке ниже:

Серым выделены тороидные соседи клетки \((1, 2)\).

Можно ли покрасить все клетки таблицы имеющимися красками и получить красивый рисунок?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n\), \(m\) и \(k\) (\(3 \leq n,m \leq 10^9\), \(1 \leq k \leq 10^5\)) — количество строк и столбцов, а также количество красок.

Вторая строка содержит \(k\) целых чисел \(a_1,a_2,\dots, a_k\) (\(1 \leq a_i \leq 10^9\)), где \(a_i\) — максимальное количество клеток, которое можно покрасить в \(i\)-й цвет.

Гарантируется, что сумма значений \(k\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «Yes» (без кавычек), если можно создать красивый рисунок. Иначе выведите «No» (без кавычек).

Примечание

В первом примере одно из возможных решений следующее:

В третьем примере можно покрасить все клетки в \(1\)-й цвет.

C. XOR-треугольники

битмаски дп жадные алгоритмы Конструктив математика Перебор *2500

Вам дано целое положительно число \(n\). Так как \(n\) может быть большим, вам дано его представление в двоичной системе счисления.

Вычислите количество троек целых чисел \((a,b,c)\) таких, что \(0 \leq a,b,c \leq n\), и значение \(a \oplus b\), \(b \oplus c\) и \(a \oplus c\) образуют стороны невырожденного треугольника.

Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Выведите ответ по модулю \(998\,244\,353\).

Три положительных числа \(x\), \(y\) и \(z\) образуют стороны невырожденного треугольника, если и только если \(x+y>z\), \(x+z>y\) и \(y+z>x\).

Входные данные

Единственная строка содержит представление числа \(n\) (\(0 < n < 2^{200\,000}\)) в двоичной системе счисления без ведущих нулей.

Например, строка 10 является представлением числа \(2\) в двоичной системе счисления, а строка 1010 представляет число \(10\).

Выходные данные

Выведите одно число — количество троек \((a,b,c)\), удовлетворяющих условию, по модулю \(998\,244\,353\).

Примечание

В первом примере \(101_2=5\).

  • Тройка \((a, b, c) = (0, 3, 5)\) подходит, потому что \((a\oplus b, b\oplus c, c\oplus a) = (3, 6, 5)\) образуют стороны невырожденного треугольника.
  • Тройка \((a, b, c) = (1, 2, 4)\) подходит, потому что \((a\oplus b, b\oplus c, c\oplus a) = (3, 6, 5)\) образуют стороны невырожденного треугольника.

\(6\) перестановок каждой из этих двух троек тоже подходят, поэтому ответ \(12\).

В третьем примере \(11\,011\,111\,101\,010\,010_2=114\,514\). Полный ответ (без взятия по модулю) равен \(1\,466\,408\,118\,808\,164\).

D. Восстановление дерева

Деревья Конструктив *3400

У Родокса есть дерево из \(n\) вершин, но он не помнит его структуру. Вершины дерева пронумерованы от \(1\) до \(n\).

Отрезок \([l,r]\) (\(1 \leq l \leq r \leq n\)) называется хорошим, если вершины \(l\), \(l + 1\), ..., \(r\) образуют связную компоненту в дереве Родокса. Иначе отрезок называется плохим.

Например, для дерева на рисунке ниже только отрезок \([3,4]\) является плохим, а все остальные отрезки хорошие.

Для каждого из \(\frac{n(n+1)}{2}\) отрезков Родокс помнит, хорошим является этот отрезок, или плохим. Можете помочь ему восстановить дерево? Если существуют несколько решений, выведите любое из них.

Гарантируется, что существует хотя бы одно дерево, подходящее под описание Родокса.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 2000\)) — количество вершин.

Далее следуют \(n\) строк. \(i\)-я из этих строк содержит строку \(good_i\) длины \(n+1-i\), состоящую из цифр 0 и 1. Если отрезок \([i,i+j-1]\) является хорошим, то \(j\)-й символ строки \(good_i\) равен 1, иначе \(j\)-й символ строки \(good_i\) равен 0.

Гарантируется, что существует хотя бы одно дерево, подходящее под данное описание. .

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2000\).

Выходные данные

Для каждого набора входных данных выведите \(n-1\) строку, описывающую ваше дерево.

В \(i\)-й из этих строк выведите два целых числа \(u_i\) и \(v_i\) (\(1 \leq u_i,v_i \leq n\)), означающие, что в дереве есть ребро между вершинами \(u_i\) и \(v_i\).

Если существуют несколько решений, выведите любое из них.

Примечание

Первый пример объяснен в условии.

Во втором примере одно из возможных деревьев следующее:

В третьем примере одно из возможных деревьев следующее:

A. Совершенная перестановка

Конструктив *800

Вам дано целое положительное число \(n\).

Весом перестановки \(p_1, p_2, \ldots, p_n\) называется количество индексов \(1\le i\le n\) таких, что индекс \(i\) делит значение \(p_i\). Найдите перестановку \(p_1,p_2,\dots, p_n\) с минимальным возможным весом (среди всех перестановок длины \(n\)).

Перестановкой называется массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) является перестановкой, а \([1,2,2]\) не является (\(2\) встречается дважды), и \([1,3,4]\) тоже не является перестановкой (\(n=3\), но в массиве есть \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — длину перестановки.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите строку, содержащую \(n\) целых чисел \(p_1, p_2,\dots, p_n\); перестановка \(p\) должна иметь минимальный возможный вес.

Если существуют несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных единственная подходящая перестановка \(p=[1]\). Ее вес равен \(1\).

Во втором наборе один из возможных ответов это перестановка \(p=[2,1,4,3]\). Можно показать, что \(1\) делит \(p_1\), но ни один индекс \(i\) не делит \(p_i\) для \(i=2,3,4\), поэтому вес этой перестановки \(1\). Не существует перестановки длины \(4\) с меньшим весом.

B. Жалкая перестановка

жадные алгоритмы Конструктив теория чисел *800

I wonder, does the falling rain
Forever yearn for it's disdain?
Effluvium of the Mind

Вам дано целое положительное число \(n\).

Найдите любую перестановку \(p\) длины \(n\) такую, что сумма \(\operatorname{lcm}(1,p_1) + \operatorname{lcm}(2, p_2) + \ldots + \operatorname{lcm}(n, p_n)\) максимальна.

Здесь \(\operatorname{lcm}(x, y)\) означает наименьшее общее кратное (НОК) двух чисел \(x\) и \(y\).

Перестановкой является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит натуральное число \(n\) (\(1 \le n \le 10^5\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) чисел \(p_1\), \(p_2\), \(\ldots\), \(p_n\) — перестановку с максимально возможным значением \(\operatorname{lcm}(1,p_1) + \operatorname{lcm}(2, p_2) + \ldots + \operatorname{lcm}(n, p_n)\).

Если существуют несколько решений, выведите любое из них.

Примечание

Для \(n = 1\), существует только одна перестановка, поэтому ответ — \([1]\).

Для \(n = 2\), существует две перестановки:

  • \([1, 2]\) — сумма равна \(\operatorname{lcm}(1,1) + \operatorname{lcm}(2, 2) = 1 + 2 = 3\).
  • \([2, 1]\) — сумма равна \(\operatorname{lcm}(1,2) + \operatorname{lcm}(2, 1) = 2 + 2 = 4\).

D. Пустой граф

Бинарный поиск жадные алгоритмы Конструктив кратчайшие пути Структуры данных *2000

 — Do you have a wish?
 — I want people to stop gifting each other arrays.
O_o and Another Young Boy

Массив из \(n\) целых положительных чисел \(a_1,a_2,\ldots,a_n\) упал на вас с небес вместе с целым положительным числом \(k \le n\).

Вы можете применить следующую операцию не более \(k\) раз:

  • Выбрать индекс \(1 \le i \le n\) и целое число \(1 \le x \le 10^9\). Затем выполнить \(a_i := x\) (присвоить \(x\) значению \(a_i\)).

Затем вы строите полный неориентированный взвешенный граф с \(n\) вершинами, пронумерованными целыми числами от \(1\) до \(n\), где ребро \((l, r)\) (\(1 \le l < r \le n\)) имеет вес \(\min(a_{l},a_{l+1},\ldots,a_{r})\).

Вам необходимо найти максимально возможный диаметр итогового графа после применения не более \(k\) операций.

Диаметр неориентированного взвешенного графа равен \(\max\limits_{1 \le u < v \le n}{\operatorname{d}(u, v)}\), где \(\operatorname{d}(u, v)\) является длиной кратчайшего пути между вершинами \(u\) и \(v\) данного графа.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 10^5\), \(1 \le k \le n\)).

Вторая строка каждого набора входных данных содержит \(n\) целых положительных чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — максимально возможный диаметр итогового графа после применения не более \(k\) операций.

Примечание

В первом наборе входных данных один из оптимальных итоговых массивов — \([2,4,5]\).

Граф, полученный из данного массива:

\(\operatorname{d}(1, 2) = \operatorname{d}(1, 3) = 2\) и \(\operatorname{d}(2, 3) = 4\), поэтому диаметр графа равен \(\max(2,2,4) = 4\).

B. Оптимальное уменьшение

Конструктив сортировки *1000

У вас есть массив \(a\) из \(n\) положительных чисел.

Вы можете выполнять следующую операцию:

  • выберите два индекса \(l\) и \(r\) (\(1 \leq l \leq r \leq n\)), затем
  • уменьшите элементы \(a_l, a_{l + 1}, \dots, a_r\) на \(1\) каждый.

Пусть \(f(a)\) равно минимальному числу операций, необходимому, чтобы превратить массив \(a\) в массив из \(n\) нулей.

Определите, верно ли, что для всех перестановок\(^\dagger\) \(b\) массива \(a\) выполняется \(f(a) \leq f(b)\).

\(^\dagger\) Массив \(b\) является перестановкой массива \(a\), если \(b\) состоит из элементов массива \(a\) в произвольном порядке. Например, \([4,2,3,4]\) является перестановкой \([3,2,4,4]\), а \([1,2,2]\) не является перестановкой \([1,2,3]\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — длину массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — описание массива \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если для всех перестановок \(b\) массива \(a\) выполняется \(f(a) \leq f(b)\), и «NO» (без кавычек) иначе.

Вы можете выводить буквы в «YES» и «NO» в любом регистре (например, строки «yEs», «yes» и «Yes» будут приняты как положительный ответ).

Примечание

В первом примере можно превратить все элементы в \(0\) за \(5\) операций. Можно показать, что не существует перестановки массива \([2, 3, 5, 4]\) такой, что все ее элементы можно превратить в \(0\) меньше чем за \(5\).

В третьем примере необходимо \(5\) операций, чтобы превратить все элементы в \(0\), а перестановка, равная \([2, 3, 3, 1]\), требует только \(3\) операции.

C. Постройте перестановку

дп Конструктив математика *1200

Массив \(a\) длины \(n\), пронумерованный с \(\mathbf{0}\), называется хорошим, если для всех корректных индексов \(i\) (\(0 \le i \le n-1\)) значение \(a_i + i\) является полным квадратом\(^\dagger\).

Дано целое число \(n\). Найдите перестановку\(^\ddagger\) \(p\) массива \([0,1,2,\ldots,n-1]\), являющуюся хорошим массивом, или определите, что такой перестановки не существует.

\(^\dagger\) Целое число \(x\) называется полным квадратом, если существует целое число \(y\) такое, что \(x = y^2\).

\(^\ddagger\) Массив \(b\) является перестановкой массива \(a\), если \(b\) состоит из элементов массива \(a\) в произвольном порядке. Например, \([4,2,3,4]\) является перестановкой \([3,2,4,4]\), а \([1,2,2]\) не является перестановкой \([1,2,3]\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — длину перестановки \(p\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) различных чисел \(p_0, p_1, \dots, p_{n-1}\) (\(0 \le p_i \le n-1\)) — перестановку \(p\) — если ответ существует, и \(-1\) иначе.

Примечание

В первом наборе входных данных \(n=3\). Массив \(p = [1, 0, 2]\) хороший, т. к. \(1 + 0 = 1^2\), \(0 + 1 = 1^2\) и \(2 + 2 = 2^2\)

Во втором наборе \(n=4\). Массив \(p = [0, 3, 2, 1]\) хороший, т. к. \(0 + 0 = 0^2\), \(3 + 1 = 2^2\), \(2+2 = 2^2\) и \(1+3 = 2^2\).

D. Отсчет турнира

жадные алгоритмы интерактив Конструктив Теория вероятностей теория чисел *1800

Это интерактивная задача.

Недавно состоялся турнир с \(2^n\) участниками. Сначала \(1\)-й участник соревновался со \(2\)-м, \(3\)-й с \(4\)-м и так далее. После этого победитель первого матча соревновался с победителем второго и так далее. Турнир завершился, когда остался только один участник, этот участник стал победителем. Такая схема проведения турнира называется «олимпийской системой».

Вы не знаете результатов, но хотите определить победителя турнира. За один запрос вы можете выбрать два целых числа \(a\) и \(b\) — номера двух участников. Жюри ответит \(1\), если \(a\) выиграл больше матчей, чем \(b\); \(2\), если \(b\) выиграл больше матчей, чем \(a\); или \(0\), если они выиграли поровну матчей.

Найдите победителя турнира за не более чем \(\left \lceil \frac{1}{3} \cdot 2^{n + 1} \right \rceil\) запросов. Здесь \(\lceil x \rceil\) обозначает значение \(x\), округленное вверх до ближайшего целого числа.

Обратите внимание, что турнир уже прошел, а значит результаты уже зафиксированы и не зависят от ваших запросов.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 2^{14}\)) — количество наборов входных данных.

Каждый набор входных данных начинается с целого числа \(n\) (\(1 \leq n \leq 17\)).

Гарантируется, что сумма значений \(2^n\) по всем наборам входных данных не превосходит \(2^{17}\).

Протокол взаимодействия

Взаимодействие в каждом наборе входных данных начинается со считывания целого числа \(n\).

Чтобы сделать запрос, выведите «? a b» (\(1 \leq a, b \leq 2^n\)) без кавычек. После этого считайте одно целое число — ответ на запрос. Вы можете сделать не более \(\left \lceil \frac{1}{3} \cdot 2^{n + 1} \right \rceil\) таких запросов в каждом наборе входных данных.

Если вы считали \(-1\) вместо корректного ответа на запрос или вместо корректного значения \(n\), это означает, что ваша программа сделала некорректный запрос, превысила число запросов или неправильно решила предыдущий набор входных данных. В таком случае ваша программа должна немедленно завершиться, вы получите вердикт Неправильный ответ. В противном случае вы можете получить любой вердикт, так как программа продолжит чтение из закрытого потока.

Когда вы готовы дать ответ, выведите «! x» (\(1 \leq x \leq 2^n\)) без кавычек — номер победителя турнира. Вывод этого ответа не учитывается в ограничении на количество запросов. После этого ваша программа должна сразу перейти к решению следующего набора входных данных. После решения всех наборов входных данных ваша программа должна завершиться.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Hacks

Чтобы сделать взлом, используйте следующий формат теста.

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 2^{14}\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 17\)).

Вторая строка каждого набора входных данных содержит \(2^n\) целых чисел на одной строке — количество выигранных матчей для каждого участника. Количество выигранных матчей должно соответствовать некоторому корректному турниру.

Сумма значений \(2^n\) не должна превышать \(2^{17}\).

Примечание

Турнир в первом примере показан ниже. Количество выигранных матчей равно \([1,0,0,2,0,1,3,0]\).

В этом примере победителем является \(7\)-й участник.

F. Потерянный массив

битмаски дп Комбинаторика Конструктив математика *2900

Мои orz-дети, мы можем оптимизировать эту задачу с \(O(S^3)\) до \(O\left(T^\frac{5}{9}\right)\)!
— Spyofgame, основатель религии Orz

Давным-давно Spyofgame изобрел известный массив \(a\) (элементы которого нумеруются с \(1\)) длины \(n\), который содержал знания о мире и о жизни. После этого он превратил его в матрицу \(b\) (элементы которой нумеруются с \(0\)) размера \((n + 1) \times (n + 1)\), которая содержала знания о мире, о жизни, и о том, что за их пределами.

Spyofgame превратил \(a\) в \(b\) по следующим правилам.

  • \(b_{i,0} = 0\) при \(0 \leq i \leq n\);
  • \(b_{0,i} = a_{i}\) при \(1 \leq i \leq n\);
  • \(b_{i,j} = b_{i,j-1} \oplus b_{i-1,j}\) при \(1 \leq i, j \leq n\).

Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

В наши дни археологи нашли знаменитую матрицу \(b\). Однако многие ее элементы утеряны. Удалось прочесть лишь значения \(b_{i,n}\) для всех \(1 \leq i \leq n\) (обратите внимание, это некоторые элементы последнего столбца, а не строки).

Археологи хотят восстановить возможный массив \(a\). Можете помочь им найти любой массив, который может быть массивом \(a\)?

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 5 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(b_{1,n}, b_{2,n}, \ldots, b_{n,n}\) (\(0 \leq b_{i,n} < 2^{30}\)).

Выходные данные

Если какой-то массив \(a\) подходит под данную информацию, выведите строку, содержащую \(n\) целых чисел \(a_1, a_2, \ldots, a_n\). Если существуют несколько решений, выведите любое из них.

Если решения не существует, выведите одно целое число \(-1\).

Примечание

Если \(a = [1,2,3]\), то \(b\) будет следующей:

\(\bf{0}\)\(\bf{1}\)\(\bf{2}\)\(\bf{3}\)
\(\bf{0}\)\(1\)\(3\)\(0\)
\(\bf{0}\)\(1\)\(2\)\(2\)
\(\bf{0}\)\(1\)\(3\)\(1\)

Значения \(b_{1,n}, b_{2,n}, \ldots, b_{n,n}\) равны \([0,2,1]\), что соответствует найденной археологами информации.

F. Построй дерево и точка

Деревья Конструктив реализация *1900

Деревом называется связный неориентированный граф без циклов. Обратите внимание, что в этой задаче речь идёт о некорневых деревьях.

Заданы четыре положительных целых числа \(n, d_{12}, d_{23}\) и \(d_{31}\). Постройте такое дерево, что:

  • оно содержит \(n\) вершин, пронумерованных от \(1\) до \(n\),
  • расстояние (длина кратчайшего пути) от вершины \(1\) до вершины \(2\) равно \(d_{12}\),
  • расстояние от вершины \(2\) до вершины \(3\) равно \(d_{23}\),
  • расстояние от вершины \(3\) до вершины \(1\) равно \(d_{31}\).

Выведите любое дерево, которое удовлетворяет всем требованиям выше, или определите, что такого дерева не существует.

Входные данные

В первой строке входных данных записано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют \(t\) наборов входных данных, каждый записан в отдельной строке.

Каждый набор состоит из четырёх положительных целых чисел \(n, d_{12}, d_{23}\) и \(d_{31}\) (\(3 \le n \le 2\cdot10^5; 1 \le d_{12}, d_{23}, d_{31} \le n-1\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных теста не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите YES, если искомое дерево существует, и NO в противном случае. В случае положительного ответа выведите ещё \(n-1\) строку, каждая содержит описание ребра дерева — пару положительных целых чисел \(x_i, y_i\), которая обозначает, что \(i\)-е ребро соединяет вершины \(x_i\) и \(y_i\). Ребра и вершины ребер можно выводить в произвольном порядке. Если искомых деревьев несколько, выведите любое из них.

A. Хмурогруз

жадные алгоритмы Конструктив математика *800

Сережа пошел с Марго в магазин «Хмурогруз», который можно представить как матрицу из \(n\) рядов и \(m\) столбцов.

За \(1\) единицу энергии Сережа и Марго могут перейти в соседнюю по стороне клетку. Для ускорения процесса Марго захватила с собой порталы, и в каждой клетке, через которую она проходит, она оставляет один портал (если его там еще нет). Если кто-либо (Сережа или Марго) находится в клетке с порталом, то за \(1\) единицу энергии он может телепортироваться в любую другую клетку с порталом, включая ту, из которой Марго начала.

Они решили разделиться: Сереже надо попасть из верхней левой клетки (клетка с координатами \((1, 1)\)) в нижнюю правую (клетка с координатами \((n, m)\)), а Марго из нижней левой (клетка с координатами \((n, 1)\)) в верхнюю правую (клетка с координатами \((1, m)\)).

За какое минимальное суммарное количество энергии у них это получится сделать?

Обратите внимание, что они могут выбирать время для своих движений. Время не влияет на энергию.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Единственная строка набора входных данных содержит два целых числа: \(n\) и \(m\) (\(1 \le n, m \le 10^5\)).

Выходные данные

Для каждого набора входных данных выведите одно целое число — ответ на задачу.

Примечание

В первом наборе входных данных они могут придерживаться следующего плана:

  1. Марго (красный кружок) идет в клетку \((7, 3)\). Затем она направляется в клетку \((1, 3)\), и Сережа (синий кружок) тоже идет туда.
  2. Сережа пользуется порталом в этой клетке (клетки с порталами отмечены серым) и попадает в клетку \((7, 3)\). Затем он идет в свой пункт назначения — клетку \((7, 5)\).
  3. Марго также направляется к концу своего маршрута и попадает в клетку \((1, 5)\).

Суммарная затраченная энергия \((2 + 6) + (2 + 1 + 2) + (2)= 15\), что является ответом.

B. Красивый массив

жадные алгоритмы Конструктив математика *1000

Сережа называет красотой массива \(a\) длины \(n\), состоящего из целых неотрицательных чисел, следующее: \(\)\sum\limits_{i = 1}^{n} \left \lfloor \frac{a_{i}}{k} \right \rfloor,\(\) что означает, что мы делим каждое число нацело на \(k\), округляем вниз и складываем полученные значения.

Сережа сказал Марго число \(k\) и попросил ее найти такой массив \(a\) длины \(n\), состоящий из целых неотрицательных чисел, что его красота равна \(b\) и сумма его элементов равна \(s\). Помогите Марго — найдите любой массив, который подходит под эти условия.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка набора входных данных содержит четыре целых числа \(n\), \(k\), \(b\), \(s\) (\(1 \leq n \leq 10^{5}\), \(1 \leq k \leq 10^{9}\), \(0 \leq b \leq 10^{9}\), \(0 \leq s \leq 10^{18}\)).

Гарантируется, что сумма \(n\) по всем тестовым случаям не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(-1\), если такого массива \(a\) не существует. Иначе выведите \(n\) целых неотрицательных чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_{i} \leq 10^{18}\)) — ответ на задачу.

Примечание

В первом, втором, пятом и шестом наборах входных данных можно показать, что ответа не существует.

В третьем наборе входных данных подходит массив \(a = [0, 0, 19]\). Сумма элементов в нем равна 19, а его красота равна \(\left ( \left \lfloor \frac{0}{6} \right \rfloor + \left \lfloor \frac{0}{6} \right \rfloor + \left \lfloor \frac{19}{6} \right \rfloor \right ) = (0 + 0 + 3) = 3\).

В четвертом наборе входных данных подходит массив \(a = [0, 3, 3, 3, 29]\). Сумма элементов в нем равна \(38\), а его красота равна \((0 + 0 + 0 + 0 + 7) = 7\).

F. Квадраты на полях

геометрия интерактив Конструктив математика *2700

Это интерактивная задача.

Фермер Сережа выращивает кукурузу на прямоугольном поле \( n \times m \) метров c углами в точках с координатами \((0, 0)\), \((0, m)\), \((n, 0)\), \((n, m)\). В этом году урожай был обилен и кукуруза покрыла все поле.

Но в ночь перед сбором урожая прилетели инопланетяне и отравили кукурузу на поле в одном квадрате \(1 \times 1\) метр со сторонами, параллельными границам поля. Кукурузу, попавшую внутрь квадрата, ни в коем случае нельзя есть, но отличить ее от обычной невооруженным взглядом невозможно. Можно только собрать пробу кукурузы с любого многоугольника и отдать в лабораторию, где ее проанализируют и скажут, сколько кукурузы было отравлено. Так как урожай скоро испортится, можно провести такое исследование не более \(5\) раз.

Более формально, разрешено сделать не более \(5\) запросов, каждым из которых можно узнать площадь пересечения любого выбранного многоугольника с инопланетянами квадратом. Необходимо узнать координаты левого нижнего угла квадрата отравленной кукурузы (вершину квадрата с наименьшими \(x\) и \(y\) координатами).

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 100\)) — размеры поля.

Протокол взаимодействия

Для того, чтобы узнать площадь пересечения многоугольника с \(k\) (\(3 \le k \le 1000\)) вершинами в точках с координатами \((x_1, y_1),\; \dots ,\;(x_k, y_k)\) с квадратом отравленной кукурузы выведите \(k+1\) строку. В первой из этих строк выведите «? k». В \(i\)-й из следующих \(k\) строк выведите два вещественных числа \(x_i\) и \(y_i\) (\(|x_i|, |y_i| \le 10^4\)) с не более \(15\) знаками после запятой.

Многоугольник должен иметь строго положительную площадь и не иметь самопересечений.

В ответ на данный запрос вы получите действительное число \(s\) (\(0 \le s \le 1\)) с \(15\) знаками после запятой — площадь пересечения квадрата с заданным многоугольником. Если многоугольник некорректен, корректный ответ не гарантируется.

Когда вы определили отравленный квадрат, выведите в отдельной строке «! x y», где \(x\) и \(y\) — вещественные числа с не более \(15\) знаками после запятой, описывающие координаты его левого нижнего угла (\(0 \le x \le n - 1\), \(0 \le y \le m - 1\)) , и после этого ваша программа должна немедленно завершиться.

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка по обеим координатам не превосходит \(10^{-6}\). Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если \(\frac{|a-b|}{max(1,|b|)} \le 10^{-6}\).

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт «Решение зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в С++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Для взлома задачи используйте следующий формат теста.

В первой строке входных данных должны содержаться два целых числа \(n\) и \(m\) (\(1 \le n,m \le 100\)) — размеры поля.

Во второй строке должны содержаться два вещественных числа \(x\) и \(y\) (\(0 \le x \le n - 1\), \(0 \le y \le m - 1\)) — координаты левого нижнего угла отравленного квадрата.

Примечание

В первом тесте из условия инопланетяне отравили квадрат с вершинами в точках с координатами \((1.5, 0.5)\), \((1.5, 1.5)\), \((2.5, 1.5)\), \((2.5, 0.5)\). На картинке он отмечен красным цветом, многоугольник, выбранный в запросе — синим, а их пересечение — зелёным.

Картинка к первому запросу:

Картинка ко второму запросу:

B. Цепочка перестановок

Конструктив математика *800

Перестановка длины \(n\) — это последовательность целых чисел от \(1\) до \(n\) такая, что каждое число встречается в ней ровно один раз.

Назовем неподвижностью перестановки \(p\) количество неподвижных точек в ней — количество позиций \(j\) таких, что \(p_j = j\), где \(p_j\)\(j\)-й элемент перестановки \(p\).

От вас требуется построить последовательность перестановок \(a_1, a_2, \dots\), начав с тождественной перестановки (перестановки \(a_1 = [1, 2, \dots, n]\)). Назовем это цепочкой перестановок. Таким образом, каждое \(a_i\)\(i\)-я перестановка длины \(n\).

Для каждого \(i\) от \(2\) и дальше перестановка \(a_i\) должна быть получена из перестановки \(a_{i-1}\) обменом двух элементов местами (не обязательно соседних). Неподвижность перестановки \(a_i\) должна быть строго меньше неподвижности перестановки \(a_{i-1}\).

Рассмотрим некоторые цепочки для \(n = 3\):

  • \(a_1 = [1, 2, 3]\), \(a_2 = [1, 3, 2]\) — это валидная цепочка длины \(2\). От \(a_1\) к \(a_2\) элементы на позициях \(2\) и \(3\) меняются местами, неподвижность уменьшается с \(3\) до \(1\).
  • \(a_1 = [2, 1, 3]\), \(a_2 = [3, 1, 2]\) — это не валидная цепочка. Первая перестановка всегда должна быть \([1, 2, 3]\) для \(n = 3\).
  • \(a_1 = [1, 2, 3]\), \(a_2 = [1, 3, 2]\), \(a_3 = [1, 2, 3]\) — это не валидная цепочка. От \(a_2\) к \(a_3\) элементы на позициях \(2\) и \(3\) меняются местами, но неподвижность увеличивается с \(1\) до \(3\).
  • \(a_1 = [1, 2, 3]\), \(a_2 = [3, 2, 1]\), \(a_3 = [3, 1, 2]\) — это валидная цепочка длины \(3\). От \(a_1\) к \(a_2\) элементы на позициях \(1\) и \(3\) меняются местами, неподвижность уменьшается с \(3\) до \(1\). От \(a_2\) к \(a_3\) элементы на позициях \(2\) и \(3\) меняются местами, неподвижность уменьшается с \(1\) до \(0\).

Найдите самую длинную цепочку перестановок. Если есть несколько самых длинных ответов, то выведите любой из них.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 99\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных записано одно целое число \(n\) (\(2 \le n \le 100\)) — необходимая длина перестановок в цепочке.

Выходные данные

На каждый набор входных данных сначала выведите длину цепочки перестановок \(k\).

Затем выведите \(k\) перестановок \(a_1, a_2, \dots, a_k\). \(a_1\) должна быть тождественной перестановкой длины \(n\) (\([1, 2, \dots, n]\)). Для каждого \(i\) от \(2\) до \(k\), \(a_i\) должно быть получено обменом двух элементов в \(a_{i-1}\) местами и должно иметь строго меньшее значение, чем \(a_{i-1}\).

B. Мадока и подпольные соревнования

Конструктив реализация *1100

Мадока решила участвовать в подпольном соревновании по спортивному программированию. И в нем была ровно одна задача:

Квадратная таблица размера \(n \times n\), где \(n\) кратно \(k\), называется хорошей, если в ней записаны только символы '.' и 'X', а также в любой подтаблице размера \(1 \times k\) или \(k \times 1\) есть хотя бы один символ 'X'. Иными словами, среди любых \(k\) подряд идущих по вертикали или по горизонтали клеток должна быть хотя бы одна, в которой записан символ 'X'.

Нужно вывести любую хорошую таблицу, в которой минимально возможное количество символов 'X', а также в клетке \((r, c)\) записан символ 'X'. Строки нумеруются от \(1\) до \(n\) сверху вниз, столбцы нумеруются от \(1\) до \(n\) слева направо.

Входные данные

В первой строке входных данных находится единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В единственной строке каждого набора входных данных содержатся четыре целых числа \(n\), \(k\), \(r\), \(c\) (\(1 \le n \le 500, 1 \le k \le n, 1 \le r, c \le n\)) — размер таблицы, число \(k\) и координаты клетки, которой обязательно должен быть записан символ 'X'. Гарантируется, что \(n\) кратно \(k\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(500\).

Выходные данные

Для каждого набора входных данных выведите \(n\) строк, каждая из которых состоит из \(n\) символов '.' и 'X', — искомую таблицу. Если ответов несколько, то можете вывести любой.

Примечание

Разберём первый набор входных данных.

В качестве правильного ответа можно вывести следующие таблицы:

X..
..X
.X.
или
..X
X..
.X.
Можно показать, что меньше \(3\) символов 'X' в ответе быть не может.

Обратите внимание, что следующая таблица не подходит, потому что в клетке \((3, 2)\) не записан символ 'X':

X..
.X.
..X

Во втором наборе входных данных единственной подходящей таблицей является:

XX
XX
В каждой подтаблице размера \(1 \times 1\) должен быть символ 'X', поэтому все символы в таблице должны быть равны 'X'.

D. Мадока и коррупционная схема

жадные алгоритмы Комбинаторика Конструктив математика *1900

Мадоке решили доверить организацию крупного турнира по компьютерной игре «OSU»!

В данном турнире матчи проходят по «олимпийской системе». Другими словами, в турнире участвуют \(2^n\) участников, пронумерованных целыми числами от \(1\) до \(2^n\). Всего в турнире происходит \(n\) раундов. В \(i\)-м раунде проходят \(2^{n - i}\) матчей между двумя игроками (один из которых правый, другой левый), после которых победители проходят дальше по турнирной сетке, а проигравшие участники выбывают из турнира. При этом относительный порядок в следующем раунде не меняется. А победитель в турнире — последний оставшийся участник.

Но чем меньше номер участника, тем больше он заплатит Мадоке в случае победы, поэтому Мадока хочет, чтобы победил участник с наименьшим номером. Для этого она может как угодно расставить участников в первом раунде, а также для каждого матча определить кто победит — участник слева или справа.

Но Мадока знает, что спонсоры турнира могут не более \(k\) раз поменять победителя в матчах. (То есть если до изменения побеждал участник слева, то после изменения будет побеждать участник справа, а если побеждал участник справа, то после изменения будет побеждать участник слева).

Так, на первом изображении показана турнирная сетка, которую сделала Мадока, где красные линии показывают, кто должен победить в матче. А на втором показана турнирная сетка, после одного измения исхода матча спонсорами (матч между игроками \(1\) и \(3\)).

Выведите минимально возможный номер победителя в турнире, который Мадока может гарантированно получить вне зависимости от изменений спонсоров. Но так как ответ может быть очень большим выведите его по модулю \(10^9 + 7\). Обратите внимание, нам нужно минимизировать ответ, а только потом взять его по модулю.

Входные данные

В первой и единственной строке заданы два целых числа \(n\) и \(k\) (\(1 \le n \le 10^5, 1 \le k \le \min(2^n - 1, 10^9)\)) — количество раундов в турнире и количество исходов, которые спонсоры могут изменить.

Выходные данные

Выведите ровно одно целое число — минимальный номер победителя по модулю \(10^9 + 7\)

Примечание

В первом примере проходит всего один матч между игроками \(1\) и \(2\), поэтому спонсоры всегда смогут сделать так, чтобы выигрывал игрок \(2\).

Схема турнира из второго примера изображена на картинке в условии.

F. Мадока и первая сессия

графы Конструктив Паросочетания Потоки реализация *2500

О нет, на первой же сессии Мадоке попался билет со следующей сложной задачей:

Дано число \(n\) и \(m\) пар чисел (\(v_i, u_i\)). А также есть массив \(b_1, b_2, \ldots, b_n\), изначально заполненный нулями.

Затем для каждого индекса \(i\), где \(1 \leq i \leq m\), выполняется либо \(b_{v_i} := b_{v_i} - 1\) и \(b_{u_i} := b_{u_i} + 1\), либо \(b_{v_i} := b_{v_i} + 1\) и \(b_{u_i} := b_{u_i} - 1\). Обратите внимание, что ровно одна из этих операций должна быть выполнена для каждого \(i\).

Также дан массив \(s\) размера \(n\), состоящий только из \(0\) и \(1\). И массив \(a_1, a_2, \ldots, a_n\), где гарантируется, что если \(s_i = 0\), то \(a_i = 0\).

Помогите Мадоке и определите, можно ли выполнить операции выше таким образом, чтобы для каждого \(i\), где \(s_i = 1\), выполнялось \(a_i = b_i\). И если возможно, то как это сделать.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 10000, 1 \leq m \leq 10000\)) — длина массива \(a\) и количество пар чисел.

Вторая строка содержит \(n\) целых чисел \(s_1, s_2, \ldots s_n\) (\(0 \le s_i \le 1\)) — элементы массива \(s\).

Третья строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(|a_i| \leq m\)) — элементы массива \(a\). Гарантируется, что если \(s_i = 0\), то \(a_i = 0\).

\(i\)-я из следующих \(m\) строк содержат два целых числа \(v_i\) и \(u_i\) (\(1 \leq v_i, u_i \leq n, v_i \ne u_i\)) — индексы элементов массива \(b\), к которым применяется операция. Также гарантируется, что не существует таких двух индексов \(i\) и \(j\), где \(1 \le i < j \le m\), что \((v_i, u_i) = (v_j, u_j)\) или \((v_i, u_i) = (u_j, v_j)\).

Выходные данные

Выведите в первой строке «YES», если можно выполнить операции нужным образом, и «NO» в противном случае.

Вы можете выводить каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs» будут распознаны как положительный ответ).

В случае, если вы вывели «YES», выведите \(m\) пар целых чисел. Если для пары \((v_i, u_i)\) нужно выполнить \(b_{v_i} := b_{v_i} - 1\) и \(b_{u_i} := b_{u_i} + 1\), выведите \((v_i, u_i)\). Иначе выведите \((u_i, v_i)\). Если существует несколько способов получить правильный ответ, можно вывести любой из них.

Пары можно выводить в любом порядке.

Примечание

В первом примере массив \(b\) будет меняться следующим образом: \([0,0,0,0,0] \rightarrow [-1,0,0,1,0] \rightarrow [-2,0,0,1,1] \rightarrow [-2,0,1,0,1] \rightarrow [-2,0,2,0,0] \rightarrow [-2,0,2,1,-1]\). \(a_i = b_i\) для всех индексов \(i\) от \(1\) до \(5\).

Во втором примере нам достаточно, чтобы в конце \(b_2 = 1\), поскольку только \(s_2 = 1\).

В третьем примере входных данных нельзя выполнить операции нужным образом.

E. Импрессионизм

графы Конструктив математика реализация *3500

У Бурёнки есть две картины \(a\) и \(b\), представляющие собой таблицы одинакового размера \(n \times m\). Каждая клетка каждой картины имеет цвет — число от \(0\) до \(2 \cdot 10^5\), при этом ни в какой строке и никаком столбце каждой из двух картин нет повторяющихся цветов, за исключением цвета \(0\).

Бурёнка хочет получить из картины \(a\) картину \(b\). Для достижения своей цели Бурёнка может сделать одну из \(2\) операций: поменять местами две любые строки картины \(a\) или любые два её столбца. Сообщите Бурёнке, может ли она исполнить желаемое и если да, то подскажите ей последовательность действий.

Нумерация строк — от \(1\) до \(n\) сверху вниз, столбцов — от \(1\) до \(m\) слева направо.

Входные данные

В первой строке содержатся два целых числа \(n\) и \(m\) (\(1 \leq n \cdot m \leq 2 \cdot 10^5\)) — размеры картин.

В \(i\)-й из следующих \(n\) строк записаны \(m\) целых чисел \(a_{i, 1}, a_{i, 2}, \ldots, a_{i, m}\) (\(0 \leq a_{i,j} \leq 2 \cdot 10^5\)) — цвета в \(i\)-й строке рисунка \(a\). Гарантируется, что нет одинаковых чисел в одной строке или одном столбце, за исключением числа \(0\).

В \(i\)-й из следующих \(n\) строк записаны \(m\) целых чисел \(b_{i, 1}, b_{i, 2}, \ldots, b_{i, m}\) (\(0 \leq b_{i,j} \leq 2 \cdot 10^5\)) — цвета в \(i\)-й строке рисунка \(b\). Гарантируется, что нет одинаковых чисел в одной строке или одном столбце, за исключением числа \(0\).

Выходные данные

В первой строке выведите число \(-1\), если добиться желаемого невозможно, иначе выведите число действий в вашем решении \(k\) (\(0 \le k \le 2 \cdot 10^5\)). Можно доказать, что если решение существует, то существует решение, где \(k \le 2 \cdot 10^5\).

В следующих \(k\) строках выведите операции. Сначала выведите тип операции (\(1\) — поменять местами строки, \(2\) — столбцы), а потом два номера строк или столбцов, к которым применяется операция.

Обратите внимание, что вам не нужно минимизировать число операций.

B. Математический цирк

Конструктив математика *800

В Бурятии появилось новое развлечение — математический цирк! Фокусник показывает зрителям два числа — \(n\) и \(k\), где \(n\) — чётное. Далее он берёт все числа от \(1\) до \(n\) и разбивает их все на пары \((a, b)\) (каждое число должно оказаться ровно в одной паре) так, чтобы для каждой пары число \((a + k) \cdot b\) делилось на \(4\) (обратите внимание, что порядок чисел в паре имеет значение), или сообщает, что, к сожалению для зрителей, такое разбиение невозможно.

Бурёнке очень нравятся такие представления, поэтому она попросила своего друга Тоню побыть фокусником, а также дала ему числа \(n\) и \(k\).

Тоня — волк, а как известно, волки в цирке не выступают, даже в математическом. Поэтому он просит вас помочь ему. Сообщите, возможно ли подходящее разбиение на пары, и если возможно, то сообщите его.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \leq n \leq 2 \cdot 10^5\), \(0 \leq k \leq 10^9\), \(n\) — чётное) — количество чисел и прибавляемое число \(k\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных сначала выведите строку «YES», если разбиение на пары существует, и «NO», если его нет.

Если разбиение существует, то в следующих \(\frac{n}{2}\) строках выведите пары разбиения, в каждой строке по \(2\) числа — сначала очередное число \(a\), потом число \(b\).

Примечание

В первом наборе входных данных разбиение на пары \((1, 2)\) и \((3, 4)\) подходит, как и разбиение \((1, 4)\) и \((3, 2)\).

Во втором наборе входных данных \((1 + 0) \cdot 2 = 1 \cdot (2 + 0) = 2\) не делится на \(4\), поэтому разбиения нет.

E. Миша и раскраски

жадные алгоритмы Конструктив математика реализация Структуры данных *2700

Недавно Миша нашел квадратную матрицу \(n \times n\), где в клетке на пересечении строки \(i\) и столбца \(j\) записано число \(a_{i, j}\). После этого Миша решил немного изменить матрицу, чтобы количество различных чисел в ней стало ровно \(k\). Для этого он может любое число раз (возможно, ноль) применить следующую операцию:

  1. выбрать любую квадратную подматрицу (выбираются \((x_1,y_1)\), \((x_2,y_2)\), такие что \(x_1 \leq x_2\), \(y_1 \leq y_2\), \(x_2 - x_1 = y_2 - y_1\), тогда подматрицей называется множество клеток с координатами \((x, y)\), такими что \(x_1 \leq x \leq x_2\), \(y_1 \leq y \leq y_2\)),
  2. выбрать число \(k\), где \(1 \leq k \leq n^2\),
  3. заменить все числа в выбранной подматрице на \(k\).

Пожалуйста, найдите минимальное количество операций, которые нужны, чтобы Миша достиг своей цели.

Входные данные

В первой строке находятся числа \(n\) и \(k\) (\(1 \leq n \leq 500, 1 \leq k \leq n^2\))— размер матрицы и требуемое количество различных чисел .

Далее следуют \(n\) строк. \(i\)-я из них содержит \(n\) целых чисел \(a_{i, 1}, a_{i, 2}, \ldots, a_{i, n}\) (\(1 \leq a_{i,j} \leq n^2\)) — элементы \(i\)-й строки матрицы.

Выходные данные

Выведите одно число — искомое минимальное число операций.

Примечание

В первом примере ответ \(1\), так как можно заменить число в правом нижнем углу таблички на \(1\). Получится такая матрица:

111
112
341

Во втором примере ответ \(2\). Можно сначала заменить все значения матрицы на \(1\), а потом заменить число в любой клетке на \(2\). Получится такая матрица:

111
111
112

F. Уменьшение паросочетания

графы интерактив Конструктив Паросочетания Перебор поиск в глубину и подобное Потоки *2800

Дан двудольный граф с \(n_1\) вершинами в первой доле, \(n_2\) вершинами во второй доле и \(m\) ребрами. Максимальное паросочетание в таком графе — максимальный по размеру набор ребер, такой, что ни одна вершина не инцидентна более чем одному выбранному ребру.

Вам нужно обрабатывать запросы двух видов к этому графу:

  • \(1\) — удалить минимально возможное количество вершин так, чтобы размер максимального паросочетания уменьшился ровно на \(1\), и вывести список удаленных вершин. Затем найти любое максимальное паросочетание в полученном графе и вывести сумму номеров ребер, входящих в это паросочетание;
  • \(2\) — запрос этого типа может быть задан только после запроса типа \(1\). В качестве ответа на этот запрос вы должны вывести список номеров ребер, входящих в выбранное в предыдущем запросе паросочетание.

Обратите внимание, что вы должны решить эту задачу в режиме online. Это означает, что вы не можете считать все входные данные сразу. Вы можете считать каждый запрос только после вывода ответа на последний запрос. Используйте функции fflush в C++ и BufferedWriter.flush в Java после каждого вывода в вашей программе.

Входные данные

В первой строке заданы четыре целых числа \(n_1\), \(n_2\), \(m\) и \(q\) (\(1 \le n_1, n_2 \le 2 \cdot 10^5\); \(1 \le m \le \min(n_1 \cdot n_2, 2 \cdot 10^5)\); \(1 \le q \le 2 \cdot 10^5\)).

Затем следуют \(m\) строк. В \(i\)-й из них заданы два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i \le n_1\); \(1 \le y_i \le n_2\)), обозначающих, что \(i\)-е ребро соединяет вершину \(x_i\) в первой доле с вершиной \(y_i\) во второй доле. Ни одна пара вершин не соединена более чем одним ребром.

Затем следуют \(q\) строк. В \(i\)-й из них задано одно целое число — \(1\) или \(2\) — обозначающее \(i\)-й запрос. Дополнительные ограничения на запросы:

  • количество запросов типа \(1\) не превысит размер максимального паросочетания в исходном графе;
  • количество запросов типа \(2\) не превысит \(3\);
  • каждому запросу типа \(2\) предшествует запрос типа \(1\);
  • ваше решение может считать \(i\)-й запрос только после того, как выведет ответ на запрос \((i-1)\) и сбросит буфер вывода.
Выходные данные

Для запроса типа \(1\) выведите три строки:

  • в первой строке выведите количество удаляемых вершин;
  • во второй строке выведите список вершин, которые вы удаляете, следующим образом: если вы удаляете вершину \(x\) из первой доли, выведите \(x\); если вы удаляете вершину \(y\) из второй доли, выведите \(-y\) (номер со знаком минус);
  • в третьей строке выведите сумму номеров ребер, которые принадлежат некоторому максимальному паросочетанию. Ребра нумеруются от \(1\) до \(m\).

Для запроса типа \(2\) выведите две строки:

  • в первой строке выведите одно число — размер максимального паросочетания;
  • во второй строке выведите номера ребер, формирующих максимальное паросочетание. Обратите внимание, что сумма этих номеров должна быть равна числу, которое вы вывели в конце предыдущего запроса типа \(1\);

После вывода ответа на запрос не забудьте сбросить буфер вывода.

Протокол взаимодействия

В этой задаче вы можете получить вердикт «Решение зависло», так как ее нужно решать в режиме online. Если это случилось, то либо вы не следуете формату вывода, либо нарушаете какое-то из ограничений задачи. Вы можете считать, что это эквивалентно вердикту «Неправильный ответ».

Для вашего удобства в примере из условия вывод для запросов разделен строкой ===. Ваше решение не должно выводить эту строку; она добавлена только для того, чтобы было проще понять, где ответ на какой запрос.

G. Чётный-нечётный XOR

битмаски жадные алгоритмы Конструктив *1500

Дано целое число \(n\), найдите любой массив \(a\), состоящий из \(n\) различных неотрицательных целых чисел, меньших \(2^{31}\), такой, что побитовый XOR элементов на нечетных позициях равен побитовому XOR элементов на четных позициях.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 629\)) — количество наборов входных данных.

Затем следуют \(t\) строк, каждая содержит одно целое число \(n\) \((3 \leq n \leq 2\cdot10^5)\) — длина массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую \(n\) различных целых чисел, которые удовлетворяют условиям.

Если ответов несколько, выведите любой.

Примечание

В первом наборе входных данных XOR на нечетных позициях равен \(4 \oplus 1 \oplus 0 \oplus 7 = 2\) и XOR на четных позициях \(2 \oplus 5 \oplus 6 \oplus 3= 2\).

H. Hot Black Hot White

Конструктив математика *1800

One day, you are accepted as being Dr. Chanek's assistant. The first task given by Dr. Chanek to you is to take care and store his magical stones.

Dr. Chanek has \(N\) magical stones with \(N\) being an even number. Those magical stones are numbered from \(1\) to \(N\). Magical stone \(i\) has a strength of \(A_i\). A magical stone can be painted with two colours, namely the colour black or the colour white. You are tasked to paint the magical stones with the colour black or white and store the magical stones into a magic box with a magic coefficient \(Z\) (\(0 \leq Z \leq 2\)). The painting of the magical stones must be done in a way such that there are \(\frac{N}{2}\) black magical stones and \(\frac{N}{2}\) white magical stones.

Define \(\text{concat}(x, y)\) for two integers \(x\) and \(y\) as the result of concatenating the digits of \(x\) to the left of \(y\) in their decimal representation without changing the order. As an example, \(\text{concat}(10, 24)\) will result in \(1024\).

For a magic box with a magic coefficient \(Z\), magical stone \(i\) will react with magical stone \(j\) if the colours of both stones are different and \(\text{concat}(A_i, A_j) \times \text{concat}(A_j, A_i) + A_i \times A_j \equiv Z \mod 3\). A magical stone that is reacting will be very hot and dangerous. Because of that, you must colour the magical stones and determine the magic coefficient \(Z\) of the magic box in a way such that there is no magical stone that reacts, or report if it is impossible.

Input

The first line contains a single even integer \(N\) (\(2 \le N \le 10^5\)) — the number of magical stones Dr. Chanek has.

The second line contains \(N\) integer \(A_1, A_2, \ldots, A_N\) (\(1 \leq A_i \leq 10^9\)) — the strengths of all magical stones.

Output

If it is not possible to satisfy the condition of the problem, output \(-1\).

Otherwise, output two lines. The first line contains an integer \(Z\) denoting the magic coefficient of the magic box. The second line contains a string \(S\) of length \(N\). \(S_i\) is \(0\) if magical stone \(i\) is coloured black or \(1\) if magical stone \(i\) is coloured white. If there are more than one possibilities of colouring and choosing the magic coefficient \(Z\), output any of them.

Note

By giving the above colouring, it can be seen that:

  • \(i=1, j=2 \longrightarrow \text{concat}(4, 10) \times \text{concat}(10, 4) + 10 \times 4 = 410 \times 104 + 40 = 42680 \equiv 2 \mod 3\)
  • \(i=1, j=3 \longrightarrow \text{concat}(4, 9) \times \text{concat}(9, 4) + 4 \times 9 = 49 \times 94 + 36 = 4642 \equiv 1 \mod 3\)
  • \(i=4, j=2 \longrightarrow \text{concat}(14, 10) \times \text{concat}(10, 14) + 10 \times 14 = 1410 \times 1014 + 140 = 1429880 \equiv 2 \mod 3\)
  • \(i=4, j=3 \longrightarrow \text{concat}(14, 9) \times \text{concat}(9, 14) + 14 \times 9 = 149 \times 914 + 126 = 136312 \equiv 1 \mod 3\)

Because of that, by choosing \(Z = 0\), it can be guaranteed that there is no magical stone that reacts.

B. Mainak и интересная последовательность

битмаски Конструктив математика *1100

У Mainak есть два положительных целых числа \(n\) и \(m\).

Mainak считает, что последовательность \(a_1, a_2, \ldots, a_n\) из \(n\) положительных целых чисел интересная, если для всех целых \(i\) (\(1 \le i \le n\)), побитовое исключающее ИЛИ всех элементов в \(a\), которые строго меньше \(a_i\), равно \(0\). Формально, \(p_i\) равно побитовому исключающему ИЛИ всех элементов в \(a\), которые строго меньше \(a_i\), тогда \(a\) является интересной последовательностью, если \(p_1 = p_2 = \ldots = p_n = 0\).

Например, последовательность \([1,3,2,3,1,2,3]\), \([4,4,4,4]\), \([25]\) являются интересными, тогда как \([1,2,3,4]\) (\(p_2 = 1 \ne 0\)), \([4,1,1,2,4]\) (\(p_1 = 1 \oplus 1 \oplus 2 = 2 \ne 0\)), \([29,30,30]\) (\(p_2 = 29 \ne 0\)) не являются интересными.

Здесь \(a \oplus b\) обозначает побитовое исключающее ИЛИ чисел \(a\) и \(b\).

Найдите любую интересную последовательность \(a_1, a_2, \ldots, a_n\) такую, что сумма элементов в последовательности \(a\) равна \(m\), т.е. \(a_1 + a_2 \ldots + a_n = m\), или же сообщите, что не существует такой последовательности

Заметьте, что побитовое исключающее ИЛИ пустой последовательности считается равным \(0\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 10^5\), \(1 \le m \le 10^9\)) — длину последовательности и сумму её элементов.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных, если существует некоторая интересная последовательность, выведите «Yes» в первой строке, иначе выведите «No». Вы можете выводить каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs» будут распознаны как положительный ответ).

Если ответ «Yes», выведите \(n\) положительных целых чисел \(a_1, a_2, \ldots, a_n\) (\(a_i \ge 1\)), образующих интересную последовательность такую, что \(a_1 + a_2 \ldots + a_n = m\). Если существует несколько решений, выведите любое.

Примечание
  • В первом наборе входных данных \([3]\) является единственной интересной последовательностью длины \(1\), имеющей сумму \(3\).
  • В третьем наборе входных данных не существует последовательности длины \(2\), имеющей сумму элементов \(1\), поэтому такой интересной последовательности тоже не существует.
  • В четвёртом наборе входных данных \(p_1 = p_2 = p_3 = 0\), потому что побитовое исключающее ИЛИ пустой последовательности равно \(0\).

D. Разделение рёбер

графы Деревья Конструктив Перебор поиск в глубину и подобное снм Теория вероятностей *2000

Вам дан связный, неориентированный и невзвешенный граф с \(n\) вершинами и \(m\) рёбрами. Обратите внимание на ограничение на количество рёбер: \(m \le n + 2\).

Давайте скажем, что мы красим некоторые рёбра в красный и оставшиеся рёбра в синий. Теперь рассмотрим только красные рёбра и посчитаем количество компонент связности в графе. Пусть это значение равно \(c_1\). Аналогично, рассмотрим только синие рёбра и посчитаем количество компонент связности в графе. Пусть это значение равно \(c_2\).

Найдите распределение цветов по рёбрам такое, что величина \(c_1+c_2\) минимальна.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5\); \(n-1 \leq m \leq \min{\left(n+2,\frac{n \cdot (n-1)}{2}\right)}\)) — количество вершин и рёбер в графе соответственно.

Затем следуют \(m\) строк. \(i\)-я строка содержит два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i,v_i \le n\), \(u_i \ne v_i\)) обозначающая, что \(i\)-е ребро соединяет вершины \(u_i\) и \(v_i\). Гарантируется, что в графе нет петель и кратных рёбер. Также гарантируется, что граф связен.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\). Гарантируется, что сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите бинарную строку длины \(m\). \(i\)-й символ строки должен быть 1, если \(i\)-е ребро должно иметь красный цвет, и 0, если оно должно иметь синий цвет. Если существует несколько способов распределить цвета, чтобы получить минимальную величину, вы можете вывести любой.

Примечание
  • Граф в первом наборе входных данных следующий:

    \(c_1 + c_2 = 1 + 2 = 3\)

  • Граф во втором наборе входных данных следующий:

    \(c_1 + c_2 = 2 + 2 = 4\)

B. Лучшая перестановка

жадные алгоритмы Конструктив *800

Определим значение перестановки \(p\) состоящей из \(n\) чисел \(1\), \(2\), ..., \(n\) (перестановка — это массив, в котором каждый элемент от \(1\) до \(n\) встречается ровно один раз) следующим образом:

  • изначально переменная \(x\) равна \(0\);
  • если \(x < p_1\), то прибавить \(p_1\) к \(x\) (присвоить \(x = x + p_1\)), в противном случае присвоить \(x\) равным \(0\);
  • если \(x < p_2\), то прибавить \(p_2\) к \(x\) (присвоить \(x = x + p_2\)), в противном случае присвоить \(x\) равным \(0\);
  • ...
  • если \(x < p_n\), то прибавить \(p_n\) к \(x\) (присвоить \(x = x + p_n\)), в противном случае присвоить \(x\) равным \(0\);
  • значение перестановки равно \(x\) в конце этого процесса.

Например, для \(p = [4, 5, 1, 2, 3, 6]\), значение \(x\) меняется следующим образом: \(0, 4, 9, 0, 2, 5, 11\), таким образом, значение перестановки равно \(11\).

Вам дано целое число \(n\). Найдите перестановку \(p\) размера \(n\) с максимально возможным значением среди всех перестановок размера \(n\). Если таких перестановок несколько, выведите любую из них.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 97\)) — количество наборов входных данных.

Единственная строка каждого набора содержит одно целое число \(n\) (\(4 \le n \le 100\)).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел — перестановку \(p\) размера \(n\) с максимально возможным значением среди всех перестановок размера \(n\).

D. Выбор букв

дп игры Конструктив *1800

Алиса и Боб играют в игру. Изначально им дана непустая строка \(s\), состоящая из строчных латинских букв. Длина строки четная. У каждого игрока также есть своя строка, изначально пустая.

Алиса начинает, затем они ходят по очереди. За один ход игрок берет либо первую, либо последнюю букву из строки \(s\), удаляет ее из \(s\) и приписывает ее в начало своей строки.

Игра заканчивается, когда строка \(s\) становится пустой. Побеждает игрок, у которого строка лексикографически меньше. Если строки у игроков одинаковые, то это ничья.

Строка \(a\) лексикографически меньше строки \(b\), если существует такая позиция \(i\), что \(a_j = b_j\) для всех \(j < i\) и \(a_i < b_i\).

С каким результатом закончится игра, если оба игрока играют оптимально (т. е. оба игрока стараются выиграть; если они не могут, то стараются сыграть вничью)?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки — непустой строки \(s\), состоящей из строчных латинских букв. Длина строки \(s\) четная.

Суммарная длина строк по всем наборам входных данных не превосходит \(2000\).

Выходные данные

На каждый набор входных данных выведите результат игры, если оба игрока играют оптимально. Если Алиса выиграет, то выведите «Alice». Если Боб выиграет, то выведите «Bob». Если игра закончится вничью, то выведите «Draw».

Примечание

Одна из возможных игр, которую могут сыграть Алиса и Боб в первом наборе входных данных:

  1. Алиса выбирает первую букву в \(s\): \(s=\)«orces», \(a=\)«f», \(b=\)«»;
  2. Боб выбирает последнюю букву в \(s\): \(s=\)«orce», \(a=\)«f», \(b=\)«s»;
  3. Алиса выбирает последнюю букву в \(s\): \(s=\)«orc», \(a=\)«ef», \(b=\)«s»;
  4. Боб выбирает первую букву в \(s\): \(s=\)«rc», \(a=\)«ef», \(b=\)«os»;
  5. Алиса выбирает последнюю букву в \(s\): \(s=\)«r», \(a=\)«cef», \(b=\)«os»;
  6. Боб выбирает оставшуюся букву в \(s\): \(s=\)«», \(a=\)«cef», \(b=\)«ros».

Алиса выигрывает, потому что «cef» < «ros». Ни один из игроков не следует никакой стратегии в конкретно этой игре, поэтому она не показывает, что Алиса выигрывает, если игроки играют оптимально.

C. Прыжки по плиткам

Конструктив Строки *1100

Поликарпу дали ряд из плиток. На каждой плитке находится по одной строчной букве латинского алфавита. Вся последовательность из плиток образует строку \(s\).

Иными словами, вам задана строка \(s\), состоящая из строчных букв латинского алфавита.

Изначально Поликарп находится на первой плитке ряда и хочет попасть на последнюю, прыгая по плиткам. Прыжок от плитки \(i\) к плитке \(j\) имеет стоимость равную \(|index(s_i) - index(s_j)|\), где \(index(c)\) означает индекс буквы \(c\) в алфавите (например, \(index(\)'a'\()=1\), \(index(\)'b'\()=2\), ..., \(index(\)'z'\()=26\)).

Поликарп хочет добраться до \(n\)-й плитки за минимальную суммарную стоимость, но при этом сделать максимальное количество прыжков.

Иными словами, среди всех возможных способов добраться до последней плитки за минимальную суммарную стоимость, он выберет такой, в котором количество прыжков максимально.

Поликарп может посетить каждую плитку не более одного раза.

Поликарп просит вас помочь — выведите последовательность индексов строки \(s\), по которым он должен прыгать.

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Каждый набор данных задаётся строкой \(s\) (\(2 \le |s| \le 2 \cdot 10^5\)), где \(|s|\) — длина строки \(s\). Строка \(s\) состоит из строчных букв латинского алфавита.

Гарантируется, что сумма длин строк \(s\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Ответ на каждый набор входных данных состоит из двух строк.

В первой строке выведите два целых числа \(cost\), \(m\), где \(cost\) — минимальная суммарная стоимость пути, а \(m\) — максимальное количество плиток, которые Поликарп может посетить, чтобы добраться до \(n\)-й плитки за минимальную суммарную стоимость \(cost\) (т.е. количество прыжков равно \(m-1\)).

В следующей строке выведите \(m\) различных чисел \(j_1, j_2, \dots, j_m\) (\(1 \le j_i \le |s|\)) — последовательность индексов плиток по которым будет прыгать Поликарп. Первым числом последовательности должна быть \(1\) (то есть \(j_1=1\)), а последним числом должно быть значение \(|s|\) (то есть \(j_m=|s|\)).

Если вариантов ответа несколько, выведите любой из них.

Примечание

В первом наборе входных данных примера искомый путь соответствует картинке:

В данном случае достигается минимальная возможная суммарная стоимость пути. Так как \(index(\)'l'\()=12\), \(index(\)'o'\()=15\), \(index(\)'g'\()=7\), \(index(\)'i'\()=9\), \(index(\)'c'\()=3\), то суммарная стоимость пути равна \(|12-9|+|9-7|+|7-3|=3+2+4=9\).

D. Наместничество

графы жадные алгоритмы Конструктив реализация *2500

В Троичном королевстве ровно n = 3k городов. Все они расположены на побережье реки Триссисипи, которая протекает через все королевство. Некоторые из городов расположены по одну сторону реки, а все остальные — по другую.

Между некоторыми городами построены мосты. Каждый мост соединяет два города, расположенные по разные стороны реки. Между любыми двумя городами имеется не более одного моста.

Недавно взошедший на престол король Тристан Третий занят распределением своих наместников между городами. Всего имеется k наместников и король хочет поручить каждому из них управлять ровно тремя городами. Однако никакому из наместников нельзя поручать управление городами, которые соединены мостом — ради своей выгоды наместник может установить слишком высокую пошлину на проезд по мосту, что плохо скажется на репутации короля.

Помогите королю Тристану Третьему распределить наместников между городами, если это возможно.

Входные данные

В первой строке даны два целых числа n и m — количество городов и мостов (3 ≤ n < 105, n = 3k, 0 ≤ m ≤ 105). В следующих m строках описаны мосты. i-ая строка содержит два целых числа ai и bi — номера городов, которые соединяет i-ый мост (1 ≤ ai, bi ≤ n, ai ≠ bi, 1 ≤ i ≤ m).

Гарантируется, что никакой мост не соединяет город сам с собой, а также, что между любыми двумя городами не более одного моста.

Выходные данные

Если нужным образом распределить наместников нельзя, то в единственной строке выведите «NO» (без кавычек).

Иначе в первой строке выведите «YES» (без кавычек), а во второй — какой наместник должен управлять каждым из городов. i-ое число должно означать номер наместника (от 1 до k), который должен управлять i-ым городом из входных данных — всего n чисел.

Если возможных решений несколько — выведите любое.

D. Префиксы и суффиксы

Конструктив Строки *2200

У вас есть две строки \(s_1\) и \(s_2\) длины \(n\), состоящие из строчных латинских букв. Вы можете выполнить следующую операцию любое (возможно, нулевое) количество раз:

  • Выберите положительное целое число \(1 \leq k \leq n\).
  • Поменяйте местами префикс строки \(s_1\) и суффикс строки \(s_2\) длины \(k\).

Можно ли вы сделать эти две строки равными с помощью описанных операций?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Затем следуют описания наборов входных данных.

Каждый набор входных данных описывается в трех строках.

Первая строка содержит единственное целое число \(n\) (\(1 \le n \le 10^5\)) — длина строк \(s_1\) и \(s_2\).

Вторая строка содержит строку \(s_1\) длины \(n\), содержащую только строчные буквы латинского алфавита.

Третья строка содержит строку \(s_2\) длины \(n\), содержащую только строчные буквы латинского алфавита.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если можно сделать строки равными, и «NO» (без кавычек), иначе.

Примечание

В первом наборе входных данных:

  • Изначально \(s_1 = \mathtt{cbc}\), \(s_2 = \mathtt{aba}\).
  • Сделаем операцию с \(k = 1\), в результате получим строки \(s_1 = \mathtt{abc}\), \(s_2 = \mathtt{abc}\).

Во втором наборе входных данных:

  • \(s_1 = \mathtt{abcaa}\), \(s_2 = \mathtt{cbabb}\).
  • Сделаем операцию с \(k = 2\), в результате получим строки \(s_1 = \mathtt{bbcaa}\), \(s_2 = \mathtt{cbaab}\).
  • Сделаем операцию с \(k = 3\), в результате получим строки \(s_1 = \mathtt{aabaa}\), \(s_2 = \mathtt{cbbbc}\).
  • Сделаем операцию с \(k = 1\), в результате получим строки \(s_1 = \mathtt{cabaa}\), \(s_2 = \mathtt{cbbba}\).
  • Сделаем операцию с \(k = 2\), в результате получим строки \(s_1 = \mathtt{babaa}\), \(s_2 = \mathtt{cbbca}\).
  • Сделаем операцию с \(k = 1\), в результате получим строки \(s_1 = \mathtt{aabaa}\), \(s_2 = \mathtt{cbbcb}\).
  • Сделаем операцию с \(k = 2\), в результате получим строки \(s_1 = \mathtt{cbbaa}\), \(s_2 = \mathtt{cbbaa}\).

В третьем наборе входных данных невозможно сделать строки равными.

A. Bestie

Комбинаторика Конструктив математика Перебор реализация теория чисел *1000

Вам дан массив \(a\), состоящий из \(n\) целых чисел \(a_1, a_2, \ldots, a_n\). Друзья попросили вас сделать наибольший общий делитель (НОД) всех элементов массива равным \(1\). За одну операцию вы можете сделать следующее:

  • Выбрать произвольный индекс в массиве \(1 \leq i \leq n\);
  • Сделать \(a_i = \gcd(a_i, i)\), где \(\gcd(x, y)\) обозначает НОД чисел \(x\) и \(y\). Стоимость такой операции равна \(n - i + 1\).

Вам нужно найти минимальную суммарную стоимость операций, которые нужно сделать, чтобы НОД всех элементов массива стал равен \(1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 5\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \leq n \leq 20\)) — длину массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — элементы массива.

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальную суммарную стоимость операций, которые нужно сделать, чтобы НОД всех элементов массива стал равен \(1\).

Можно показать, что это всегда можно сделать.

Примечание

В первом наборе входных данных НОД всего массива уже равен \(1\), поэтому операции применять не нужно.

Во втором наборе входных данных можно выбрать \(i = 1\). После этой операции \(a_1 = \gcd(2, 1) = 1\). Стоимость этой операции равна \(1\).

В третьем наборе входных данных можно выбрать \(i = 1\), после этого массив \(a\) будет равен \([1, 4]\). НОД этого массива равен \(1\), а суммарная стоимость равна \(2\).

В четвертом наборе входных данных можно выбрать \(i = 2\), после этого массив \(a\) будет равен \([3, 2, 9]\). НОД этого массива равен \(1\), а суммарная стоимость равна \(2\).

В шестом наборе входных данных можно выбрать \(i = 4\) и \(i = 5\), после этого массив \(a\) будет равен \([120, 60, 80, 4, 5]\). НОД этого массива равен \(1\), а суммарная стоимость равна \(3\).

B. Правило лиги

Конструктив математика *900

Есть чемпионат по бадминтону, в котором принимают участие \(n\) игроков. Игроки пронумерованы от \(1\) до \(n\).

Чемпионата проходит следующим образом: игрок \(1\) и игрок \(2\) играют игру, потом победитель и игрок \(3\) играют игру, потом победитель и игрок \(4\) играют игру и так далее. В итоге будет сыграно \(n-1\) игр, и победитель последней игры становится чемпионом. В играх нет ничьих.

Вы хотите узнать результат чемпионата. В настоящее время вы знаете только следующую информацию:

  • Каждый игрок выиграл \(x\) игр или \(y\) игр в чемпионате.

По данным \(n\), \(x\) и \(y\), выясните, есть ли результат, соответствующий этой информации.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит три целых числа \(n\), \(x\), \(y\) (\(2 \le n \le 10^5\), \(0 \le x, y < n\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите ответ для каждого набора входных данных, по одному в строке. Если нет результата, соответствующего заданной информации о \(n\), \(x\), \(y\), выведите \(-1\). В противном случае выведите \(n-1\) целое число через пробел, где \(i\)-е число означает номер игрока победителя \(i\)-й игры.

Если допустимых результатов несколько, выведите любой.

Примечание

В первом примере игрок \(1\) и игрок \(4\) выиграли \(x\) раз, игрок \(2\) и игрок \(3\) выиграли \(y\) раз.

Во втором, третьем и пятый примерах не существует допустимого результата.

C. Сортировка четностью

Конструктив сортировки *1300

Вам дан массив \(a\) из \(n\) неотрицательных целых чисел. Вы можете применять на нём следующую операцию.

  • Выберите два индекса \(l\) и \(r\) (\(1 \le l < r \le n\)).
  • Если \(a_l + a_r\) нечетно, то выполните \(a_r := a_l\). Если \(a_l + a_r\) четно, то выполните \(a_l := a_r\).

Найдите любую последовательность из не более чем \(n\) операций, которая делает массив \(a\) неубывающим. Можно доказать, что она всегда существует. Обратите внимание, что вам не нужно минимизировать количество операций.

Массив \(a_1, a_2, \ldots, a_n\) неубывающий тогда и только тогда, когда \(a_1 \le a_2 \le \ldots \le a_n\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк. Первая строка каждого теста содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — длина массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — сам массив.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите в первой строке одно целое число \(m\) (\(0 \le m \le n\)) — количество операций.

Затем выведите \(m\) строк. Каждая строка должна содержать два целых числа \(l_i, r_i\), которые являются индексами, выбранными вами в \(i\)-й операции (\(1 \le l_i < r_i \le n\)).

Если решений несколько, выведите любое из них.

Примечание

Во втором примере \(a\) изменяется следующим образом:

  • Выберите индексы \(3\) и \(4\). \(a_3 + a_4 = 3\) нечетно, поэтому надо выполнить \(a_4 := a_3\). После этого \(a = [1, 1000000000, 3, 3, 5]\).
  • Выберите индексы \(1\) и \(2\). \(a_1 + a_2 = 1000000001\) нечетно, поэтому надо выполнить \(a_2 := a_1\). Теперь \(a = [1, 1, 3, 3, 5]\) и массив неубывающий.

В первом и третьем примерах \(a\) уже неубывающий.

D1. Ноль-один (простая версия)

жадные алгоритмы Конструктив математика *1400

Это простая версия задачи. В этой версии выполняется \(n \le 3000\), \(x \ge y\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Вам даны две бинарные строки \(a\), \(b\) длины \(n\). Вы можете выполнить следующую операцию любое количество раз (возможно, ноль).

  • Выберите два индекса \(l\) и \(r\) (\(l < r\)).
  • Замените \(a_l\) на \((1 - a_l)\) и \(a_r\) на \((1 - a_r)\).
  • Если \(l + 1 = r\), стоимость операции равна \(x\). В противном случае стоимость равна \(y\).

Вы должны найти минимально необходимую стоимость для превращения \(a\) в \(b\), или сказать, что это невозможно сделать.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 600\)) — количество наборов входных данных.

Каждый набор входных данных состоит из трех строк. Первая строка каждого набора входных данных содержит три целых числа \(n\), \(x\) и \(y\) (\(5 \le n \le 3000\), \(1 \le y \le x \le 10^9\)) — длину строк и стоимость операций.

Вторая строка каждого набора входных данных содержит строку \(a\) длины \(n\). Строка состоит только из цифр \(0\) и \(1\).

Третья строка каждого набора входных данных содержит строку \(b\) длины \(n\). Строка состоит только из цифр \(0\) и \(1\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3000\).

Выходные данные

Для каждого набора входных данных, если нет способа сделать \(a\) равным \(b\), выведите \(-1\). В противном случае выведите минимальную стоимость, чтобы \(a\) равнялось \(b\).

Примечание

В первом примере можно выбрать индексы \(2\) и \(3\), стоимость операции будет равна \(8\).

Во втором примере невозможно сделать \(a\) равным \(b\) при помощи этой операции.

В третьем примере мы можем выполнить следующие операции.

  • Выберите индексы \(3\) и \(6\). Это стоит \(3\), и после этого \(a\) равно 0101011.
  • Выберите индексы \(4\) и \(6\). Это стоит \(3\), и после этого \(a\) равно 0100001.

Общая стоимость \(6\).

В четвертом примере строки изначально равны, поэтому оптимально не выполнять никаких операции.

E. Конвейер

дп Конструктив математика *2700

Есть конвейер со \(120\) строками и \(120\) столбцами. Каждая строка и столбец пронумерованы от \(0\) до \(119\), а ячейка в \(i\)-й строке и \(j\)-й столбце обозначена как \((i, j)\). Самая верхняя левая ячейка обозначается \((0, 0)\). Каждая ячейка имеет маленькую конвейерную ленту, и изначально лента в каждой ячейке направлена вправо.

Изначально в ячейке \((0, 0)\) находится слайм, а остальные ячейки пусты. Каждую секунду состояние конвейера меняется следующим образом.

  • Все шарики слизи на конвейере одновременно перемещаются на одну клетку в направлении ленты конвейера в текущей ячейке. Если новая позиция находится снаружи конвейера, слайм выпадает с конвейера, а если два слайма перемещаются в одну и ту же ячейку, они сливаются в один.
  • Все клетки, в которых в предыдущую секунды были слаймы, меняю направление конвейерной ленты: ленты, обращенные вправо, становятся обращенными вниз, и наоборот.
  • На ячейку \((0, 0)\) помещается новый слайм.

Даны \(q\) запросов, каждый состоит из трех целых чисел \(t\), \(x\) и \(y\). Вы должны определить, есть ли слайм в клетке \((x, y)\) спустя \(t\) секунд после начала. Сможете ли вы сделать это?

Входные данные

Первая строка содержит одно целое число \(q\) (\(1 \le q \le 10^4\)) — количество запросов.

Единственная строка каждого запроса содержит три целых числа \(t\), \(x\) и \(y\) (\(0 \le t \le 10^{18}\), \(0 \le x, y < 120\)).

Выходные данные

Выведите ответ для каждого запроса по одному в строке. Если в ячейке \((x, y)\) через \(t\) секунд после исходного состояния находится слайм, выведите «YES». В противном случае выведите «NO».

Примечание

Состояние конвейера при \(t = 0\). Красная стрелка представляет направление каждой ленты, а синие отметки показывают положения слаймов.

Состояние конвейера при \(t = 1\).

Состояние конвейера при \(t = 2\).

B. Яркая, красивая, блистательная

Конструктив *800

У вас есть пирамида, состоящая из \(n\) этажей. Этажи пронумерованы сверху вниз. Так как это пирамида, то на \(i\)-м этаже \(i\) комнат.

Будем обозначать \(j\)-ю комнату на \(i\)-м этаже как \((i,j)\). Для всех положительных чисел \(i\) и \(j\) таких, что \(1 \le j \le i < n\), существуют \(2\) односторонние лестницы, ведущие из комнаты \((i,j)\) в \((i+1,j)\), а также из комнаты \((i,j)\) в \((i+1,j+1)\) соответственно.

Вы выбираете для каждой комнаты, разместить там факел или оставить комнату пустой. Определим яркость комнаты \((i, j)\) как количество комнат с факелами, из которых можно попасть в комнату \((i, j)\), используя неотрицательное число лестниц.

Например, если \(n=5\) и факелы расположены в комнатах \((1,1)\), \((2,1)\), \((3,2)\), \((4,1)\), \((4,3)\) и \((5,3)\), то пирамида выглядит следующим образом:

На рисунке выше комнаты с факелами отмечены желтым, пустые — белым. Синие числа в правом нижнем углу показывают яркость комнат.

Комната \((4,2)\) (отмечена звездой на рисунке ниже) имеет яркость \(3\). Комнаты, из которых вы можете попасть в комнату \((4,2)\), имеют красную границу. Яркость равна \(3\), так как в этих комнатах три факела.

Пирамида называется красивой, если и только если для каждого этажа все комнаты на этом этаже имеют одинаковую яркость.

Определим блистательность красивой пирамиды как сумму значений яркости в комнатах \((1,1)\), \((2,1)\), \((3,1)\), ..., \((n,1)\).

Расположите факелы в пирамиде таким образом, чтобы пирамида оказалась красивой, а ее блистательность была максимально возможной.

Можно показать, что ответ всегда существует. Если существуют несколько решений, выведите любое из них.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 500\)) — количество этажей в пирамиде.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(500\).

Выходные данные

Для каждого набора входных данных выведите \(n\) строк — расположение факелов в пирамиде.

В \(i\)-й строке выведите \(i\) чисел, разделенных пробелами. \(j\)-е число в \(i\)-й строке должно быть равно \(1\), если в комнате \((i,j)\) есть факел, и \(0\) иначе.

Можно показать, что ответ всегда существует. Если существуют несколько решений, выведите любое из них.

Примечание

В третьем наборе входных данных факелы размещены в комнатах \((1,1)\), \((2,1)\), \((2,2)\), \((3,1)\) и \((3,3)\).

Пирамида красивая, так как на каждом этаже все комнаты имеют одинаковую яркость. Например, все комнаты на третьем этаже имеют яркость \(3\).

Блистательность пирамиды равна \(1+2+3 = 6\). Можно показать, что не существует расположения факелов для \(n=3\) с большей блистетельностью.

E. Прямоугольная конгруэнтность

Конструктив теория чисел *2100

У вас есть простое число \(n\) и массив из \(n\) целых чисел \(b_1,b_2,\ldots, b_n\), где \(0 \leq b_i < n\) для всех \(1 \le i \leq n\).

Вы должны найти матрицу \(a\) размера \(n \times n\) такую, что выполняются все следующие условия:

  • \(0 \le a_{i,j} < n\) для всех \(1 \le i, j \le n\).

  • \(a_{r_1, c_1} + a_{r_2, c_2} \not\equiv a_{r_1, c_2} + a_{r_2, c_1} \pmod n\) для всех положительных чисел \(r_1\), \(r_2\), \(c_1\), \(c_2\) таких, что \(1 \le r_1 < r_2 \le n\) и \(1 \le c_1 < c_2 \le n\).
  • \(a_{i,i} = b_i\) для всех \(1 \le i \leq n\).

Здесь \(x \not \equiv y \pmod m\) означает, что \(x\) и \(y\) дают разные остатки от деления на \(m\).

Если существуют несколько решений, выведите любое из них. Можно показать, что такая матрица всегда существует при данных ограничениях.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n < 350\)).

Вторая строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(0 \le b_i < n\)) — необходимые значения на главной диагонали матрицы.

Гарантируется, что \(n\) простое.

Выходные данные

Выведите \(n\) строк. На \(i\)-й строке выведите \(n\) целых чисел \(a_{i, 1}, a_{i, 2}, \ldots, a_{i, n}\).

Если существуют несколько решений, выведите любое из них.

Примечание

В первом примере ответ корректный, так как все элементы являются неотрицательными числами меньшими \(n = 2\), и \(a_{1,1}+a_{2,2} \not\equiv a_{1,2}+a_{2,1} \pmod 2\) (потому что \(a_{1,1}+a_{2,2} = 0 + 0 \equiv 0 \pmod 2\), а \(a_{1,2}+a_{2,1} = 1 + 0 \equiv 1 \pmod 2 \)). Кроме того, значения на главной диагонали равны \(0,0\), как и требовалось.

Во втором примере ответ корректный, так как все элементы являются неотрицательными числами меньшими \(n = 3\), и второе условие выполнено для всех четверок \((r_1, r_2, c_1, c_2)\). Например,

  • при \(r_1=1\), \(r_2=2\), \(c_1=1\) и \(c_2=2\), \(a_{1,1}+a_{2,2} \not\equiv a_{1,2}+a_{2,1} \pmod 3\), так как \(a_{1,1}+a_{2,2} = 1 + 1 \equiv 2 \pmod 3\), а \(a_{1,2}+a_{2,1} = 2 + 1 \equiv 0 \pmod 3 \);
  • при \(r_1=2\), \(r_2=3\), \(c_1=1\) и \(c_2=3\), \(a_{2,1}+a_{3,3} \not\equiv a_{2,3}+a_{3,1} \pmod 3\), так как \(a_{2,1}+a_{3,3} = 1 + 1 \equiv 2 \pmod 3\), а \(a_{2,3}+a_{3,1} = 0 + 1 \equiv 1 \pmod 3 \).
Кроме того, значения на главной диагонали равны \(1,1,1\), как и требовалось.

A. Рабочая неделя

жадные алгоритмы Конструктив математика *800

Ваша рабочая неделя состоит из \(n\) дней, пронумерованных от \(1\) до \(n\), после дня \(n\) снова идет день \(1\). И \(3\) из этих дней — выходные, одним из которых является последний день, день \(n\). Когда будут два остальных дня — вам предстоит выбрать.

Выбирая дни отдыха, вы преследуете две цели:

  • Никакие два выходных дня не должны идти друг за другом. Обратите внимание, что вы не можете сделать день \(1\) выходным, потому что он следует за днем \(n\).
  • Рабочие отрезки, оказавшиеся между выходными должны быть наименее похожи друг на друга. Более конкретно, если отрезки имеют длину \(l_1\), \(l_2\) и \(l_3\) дней, вы хотите максимизировать \(\min(|l_1 - l_2|, |l_2 - l_3|, |l_3 - l_1|)\).

Выведите максимальное значение выражения \(\min(|l_1 - l_2|, |l_2 - l_3|, |l_3 - l_1|)\), которое может быть получено.

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Описание наборов входных данных следует ниже.

Единственная строка каждого набора содержит одно целое число \(n\) (\(6 \le n \le 10^9\)).

Выходные данные

Для каждого набора входных данных выведите одно число — максимальное значение, которое может быть получено.

Примечание

На изображении ниже можно видеть решения из примера для первых двух наборов данных. Выбранные выходные изображены фиолетовым. Рабочие отрезки подчеркнуты зеленым.

В \(1\) наборе данных единственными вариантами для выходных являются дни \(2\), \(3\) и \(4\) (потому что дни \(1\) и \(5\) соседние с днем \(n\)). Поэтому единственная возможность расположить их, чтобы они не стали соседями — это выбрать дни \(2\) и \(4\). Таким образом \(l_1 = l_2 = l_3 = 1\), а ответ \(\min(|l_1 - l_2|, |l_2 - l_3|, |l_3 - l_1|) = 0\).

Для \(2\) набора данных изображен один из способов выбора выходных. Рабочие отрезки имеют длины \(2\), \(1\) и \(4\) дней. Таким образом, минимальной разницей является \(1 = \min(1, 3, 2) = \min(|2 - 1|, |1 - 4|, |4 - 2|)\). Можно показать, что нет возможности сделать это число больше.

E. Планирование дома

жадные алгоритмы Конструктив Паросочетания Структуры данных *2400

В вашем городке есть \(n\) домов, расположенных на числовой прямой в точках \(h_1, h_2, \ldots, h_n\). Вы хотите построить себе новый дом и рассматриваете два варианта, где его разместить: точки \(p_1\) и \(p_2\).

Так как вы любите ходить в гости, вы заблаговременно вычислили для обеих точек расстояния до уже существующих домов. Более формально, вы вычислили два массива \(d_1\), \(d_2\): \(d_{i, j} = \left|p_i - h_j\right|\), где \(|x|\) обозначает модуль числа \(x\).

Спустя долгое время бездействия вы забыли расположение домов \(h\) и планируемые точки \(p_1\), \(p_2\). Но в вашем дневнике нашлись два массива — \(d_1\), \(d_2\), в подлинности которых вы сомневаетесь. Также значения внутри каждого из массивов могли перемешаться, поэтому значения на одинаковых позициях массивов \(d_1\) и \(d_2\) могут соответствовать разным домам. Обратите внимание, что значения из одного массива не могли попасть в другой, иными словами, все значения в массиве \(d_1\) соответствуют расстоянию от \(p_1\) до домов, а в массиве \(d_2\) — от \(p_2\) до домов.

Обратите внимание, что расположения домов \(h_i\) и рассматриваемых вариантов \(p_j\) могли совпадать. Например, корректными являются расположения \(h = \{1, 0, 3, 3\}\), \(p = \{1, 1\}\), которым могли соответствовать уже перемешанные \(d_1 = \{0, 2, 1, 2\}\), \(d_2 = \{2, 2, 1, 0\}\).

Проверьте, существуют ли расположение домов \(h\) и планируемые точки \(p_1\), \(p_2\), для которых бы найденные массивы расстояний были корректными. Если такое возможно, найдите подходящее расположение домов и мест строительства.

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Описание наборов входных данных следует ниже.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^3\)) — длину массивов \(d_1\), \(d_2\).

Следующие две строки содержат по \(n\) целых чисел: массивы \(d_1\) и \(d_2\) (\(0 \le d_{i, j} \le 10^9\)) соответственно.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^3\).

Выходные данные

Для каждого набора входных данных выведите одну строку «NO», если ответа не существует.

Иначе выведите три строки. Первая строка должна содержать «YES». Вторая строка должна содержать \(n\) целых чисел \(h_1, h_2, \ldots, h_n\). Третья строка должна содержать два целых числа \(p_1\), \(p_2\).

Должно выполняться \(0 \le h_i, p_1, p_2 \le 2 \cdot 10^9\). Можно показать, что если существует ответ, то он существует и при заданных ограничениях.

Если решений несколько, выведите любое.

Примечание

На изображении ниже можно видеть решения из примера. Планируемые дома изображены яркими цветами: розовым и фиолетовым. Существующие дома - тусклыми.

В \(1\) наборе данных первый планируемый дом расположен в точке \(0\), второй - в точке \(10\). Существующий дом расположен в точке \(5\) и находится на расстоянии \(5\) от обеих планируемых домов.

Можно показать, что не существует решения для \(2\) набора данных.

В \(3\) наборе данных планируемые дома расположены в точках \(33\) и \(69\).

Обратите внимание, что в \(4\) тесте оба плана расположены в точке \(1\), где в то же время находится и один из существующих домов, что является корректным расположением.

D. Одинаковые бинарные подпоследовательности

геометрия жадные алгоритмы Конструктив реализация Строки *2200

У Эврула есть бинарная строка \(s\) длины \(2n\). Бинарная строка — это строка, состоящая только из символов \(0\) и \(1\). Он хочет разбить \(s\) на две непересекающиеся одинаковые подпоследовательности. Для этого ему нужна ваша помощь.

Вы можете выполнить следующую операцию один раз.

  • Выберите любую подпоследовательность (возможно пустую) символов \(s\) и циклически сдвиньте ее направо на одну позицию.

Другими словами, выберите последовательность индексов \(b_1, b_2, \ldots, b_m\), где \(1 \le b_1 < b_2 < \ldots < b_m \le 2n\). После этого одновременно присвойте \(\)s_{b_1} := s_{b_m},\(\) \(\)s_{b_2} := s_{b_1},\(\) \(\)\ldots,\(\) \(\)s_{b_m} := s_{b_{m-1}}.\(\)

Можете ли вы разбить \(s\) на две непересекающиеся одинаковые подпоследовательности после того, как выполните указанную операцию ровно один раз?

Разбиением \(s\) на две непересекающиеся одинаковые подпоследовательности \(s^p\) и \(s^q\) называются два возрастающих массива индексов \(p_1, p_2, \ldots, p_n\) и \(q_1, q_2, \ldots, q_n\) такие, что каждое целое число от \(1\) до \(2n\) встречается \(p\) и \(q\) ровно один раз, при этом \(s^p = s_{p_1} s_{p_2} \ldots s_{p_n}\), \(s^q = s_{q_1} s_{q_2} \ldots s_{q_n}\), и \(s^p = s^q\).

Если невозможно выполнить операцию и разбиение, выведите \(-1\). Если можно выполнить операцию и разбить \(s\) на две непересекающиеся подпоследовательности \(s^p\) и \(s^q\) так, чтобы \(s^p = s^q\), выведите индексы подпоследовательности \(b\) и индексы \(s^p\), т. е. значения \(p_1, p_2, \ldots, p_n\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)), где \(2n\) — длина строки.

Вторая строка содержит бинарную строку \(s\) длины \(2n\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных следуйте следующему формату.

Если решения не существует, выведите \(-1\).

Иначе:

  • В первой строке выведите целое число \(m\) (\(0 \leq m \leq 2n\)) и затем \(m\) различных индексов в возрастающем порядке \(b_1\), \(b_2\), ..., \(b_m\).
  • Во второй строке выведите \(n\) различных индексов в возрастающем порядке \(p_1\), \(p_2\), ..., \(p_n\).

Если существуют несколько решений, выведите любое из них.

Примечание

В первом примере \(b\) пустая, поэтому строка \(s\) не меняется. Выберем \(s^p = s_1 s_2 = \mathtt{10}\), тогда \(s^q = s_3s_4 = \mathtt{10}\).

Во втором примере \(b=[3,5]\). Изначально \(s_3=\mathtt{0}\), и \(s_5=\mathtt{1}\). После выполнения операции мы одновременно присваиваем \(s_3=\mathtt{1}\) и \(s_5=\mathtt{0}\).

Поэтому \(s\) становится 101000 после выполнения операции.

Возьмем символы на позициях \([1,2,5]\) в \(s^p\), получим \(s_1=\mathtt{100}\). Символы на позициях \([3,4,6]\) будут в \(s^q\), получим \(s^q=100\). Это решение, потому что \(s^p=s^q\).

В четвертом примере можно показать, что невозможно выполнить разбиение строки после любой операции.

C. Эла и сверчки

игры Конструктив математика реализация *1500

Эла очень любит шахматы. Во время перерывов на работе она обычно вызывает своего коллегу по DTL на шахматные дуэли. Она не эксперт в классических шахматах, но ее очень интересуют разные нестандартные варианты шахмат, где нужно адаптироваться к новым правилам и проверить свое тактическое мышление, чтобы выиграть партию.

Задача, которая включает в себя нестандартный тип шахматных фигур, описанный ниже, гласит: даны \(3\) белых сверчка на доске \(n \cdot n\), расположенных в форме буквы «L» рядом друг с другом. Других фигур на доске нет. Эла хочет знать, может ли она за конечное количество ходов поставить какого-либо белого сверчка на клетку на горизонтали \(x\) и на вертикали \(y\)?

Расположение фигур в форме буквы «L» может быть только одним из следующих:

Для простоты опишем правила для сверчков на доске, где находятся только три белых сверчка. Он может перемещаться по горизонтали, вертикали или диагонали, но только перепрыгнув через ровно одного другого сверчка на клетку сразу за ним. Если поле сразу за сверчком, через которого он перепрыгивает, не занято, сверчок займет это поле. В противном случае (когда оно уже занято другим сверчком или отсутствует) сверчок не может сделать такой ход.

Для лучшего понимания, смотрите примеры ходов сверчка в описании к примеру.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(4 \le n \le 10^5\)) — размер шахматной доски.

Вторая строка каждого набора входных данных содержит шесть чисел: \(r_1\), \(c_1\), \(r_2\), \(c_2\), \(r_3\), \(c_3\) (\(1 \le r_1, c_1, r_2, c_2, r_3, c_3 \le n\)) — координаты сверчков. Ввод гарантирует, что три сверчка расположены в форме буквы «L», одним из способов, которые показаны в условии.

Третья строка каждого набора входных данных содержит 2 числа: \(x\), \(y\) (\(1 \le x, y \le n\)) — координаты клетки, куда надо поставить сверчка.

Выходные данные

Для каждого набора входных данных выведите «YES», если Эла может поставить сверчка на требуемую клетку, и «NO» иначе

Примечание

Решение для первого примера. Сверчка нужно поставить в красную клетку. Обратите внимание, что в шахматах горизонтали нумеруются снизу вверх, как и на этой картинке.

F. Эла и GCD и простые числа

Конструктив математика теория чисел *3300

После долгого, тяжелого, но плодотворного дня в DTL Эла счастливая возвращается домой. Она отдыхает, решая задачи по соревновательному программированию. Сейчас она предпочитает короткие условия, потому что на работе уже прочитала слишком много кода и документации.

Вам дано целое число \(c\). Предположим, что \(c\) имеет \(n\) делителей. Вам нужно найти последовательность из \(n - 1\) целого числа \([a_1, a_2, ... a_{n - 1}]\), удовлетворяющую следующим условиям:

  • Каждый элемент последовательности строго больше \(1\).
  • Каждый элемент последовательности является делителем \(c\).
  • Все элементы последовательности различны.
  • Для всех \(1 \le i < n - 1\) \(\gcd(a_i, a_{i + 1})\) является простым числом.

В этой задаче, так как число \(c\) может быть слишком большим, задано не само число \(c\), а его факторизация.

\(\gcd(x, y)\) обозначает наибольший общий делитель (НОД) целых чисел \(x\) и \(y\), а простое число — это натуральное число, имеющее ровно \(2\) делителя.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Каждый набор входных данных состоит из двух строк. В первой строке каждого набора входных данных дано одно целое число \(m\) (\(1 \le m \le 16\)) — количество простых множителей \(c\).

Вторая строка каждого набора входных данных содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(1 \le b_i < 2^{20}\))  — показатели степени входящих в \(c\) простых чисел, так что \(c = p_1^{b_1} \cdot p_2^{b_2} \cdot \ldots \cdot p_m^{b_m}\) и \(n = (b_1 + 1)(b_2 + 1) \ldots (b_m + 1)\). \(p_i\)\(i\)-е наименьшее простое число.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(2^{20}\).

Выходные данные

Выведите ответ для каждого теста, по одному в строке. Если искомой последовательности для данного \(c\) не существует, выведите \(-1\).

В противном случае, выведите \(n - 1\) строк. В \(i\)-й строке выведите через пробел \(m\) целых чисел. \(j\)-е целое число \(i\)-й строки равно показателю степени \(j\)-го простого числа для \(a_i\).

Если ответов несколько, выведите любой из них.

Примечание

В наборах входных данных значения \(c\) равны \(6\), \(2\), \(30\), \(16\) и \(12\) в указанном порядке.

В первом наборе входных данных \(1\), \(2\), \(3\), \(6\) являются делителями числа \(6\). Подходящие последовательности — \([2, 6, 3]\) и \([3, 6, 2]\). Например, перестановка \([3, 2, 6]\) не подходит, поскольку \(\gcd(a_1, a_2) = 1\) не является простым числом.

В четвертом наборе входных данных \(1\), \(2\), \(4\), \(8\), \(16\) являются делителями числа \(16\). Среди перестановок последовательности \([2, 4, 8, 16]\) не существует ответа.

B. Упоротые префиксные суммы

жадные алгоритмы Конструктив математика сортировки *1200

Пусть \(a_1, a_2, \dots, a_n\) - отсортированная последовательность целых чисел длины \(n\) такая, что \(a_1 \leq a_2 \leq \dots \leq a_n\).

Для каждого \(1 \leq i \leq n\), префиксная сумма \(s_i\) первых \(i\) элементов \(a_1, a_2, \dots, a_i\) определяется как \(\) s_i = \sum_{k=1}^i a_k = a_1 + a_2 + \dots + a_i. \(\)

Вам заданы последние \(k\) элементов префиксных сумм, а именно \(s_{n-k+1}, \dots, s_{n-1}, s_{n}\). Ваша задача определить, возможно ли это.

Формально, дано \(k\) целых чисел \(s_{n-k+1}, \dots, s_{n-1}, s_{n}\), задача состоит в том, чтобы проверить, есть ли последовательность целых чисел \(a_1, a_2, \dots, a_n\) такая, что

  1. \(a_1 \leq a_2 \leq \dots \leq a_n\), и
  2. \(s_i = a_1 + a_2 + \dots + a_i\) для всех \(n-k+1 \leq i \leq n\).
Входные данные

В первой строке содержится целое число \(t\) (\(1 \leq t \leq 10^5\)) — Количество наборов входных данных. Затем следуют сами наборы входных данных.

В первой строке набора входных данных задано два целых числа \(n\) (\(1 \leq n \leq 10^5\)) и \(k\) (\(1 \leq k \leq n\)), означающие длину последовательности \(a\) и число данных элементов префиксных сумм.

Во второй строке набора входных данных задано \(k\) целых чисел \(s_{n-k+1}, \dots, s_{n-1}, s_{n}\) (\(-10^9 \leq s_i \leq 10^9\) для каждого \(n-k+1 \leq i \leq n\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек) если это возможно и «NO» (без кавычек) в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes» и «Yes» будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных подходит только \(a = [1, 1, 1, 1, 1]\).

Во втором наборе входных данных мы можем выбрать \(a = [-3, -2, -1, 0, 1, 2, 3]\).

В третьем наборе входных данных подходит только \(a = [2, 1, 1]\), но это не отсортированная последовательность.

В четвертом наборе входных данных может быть показано, что такой последовательности не существует.

D. Упоротые перестановки

графы Деревья Конструктив поиск в глубину и подобное снм Структуры данных *1900

Дана перестановка \(a_1, a_2, \dots, a_n\) целых чисел от \(1\) до \(n\), и пороговое значение \(k\) такое, что \(0 \leq k \leq n\), по ним вычисляется последовательность \(b_1, b_2, \dots, b_n\) следующим образом.

Для всех \(1 \leq i \leq n\) в порядке возрастания положим \(x = a_i\).

  • Если \(x \leq k\), приравняем \(b_{x}\) последнему элементу \(a_j\) (\(1 \leq j < i\)) такому, что \(a_j > k\). Если такого элемента \(a_j\) не существует, положим \(b_{x} = n+1\).
  • Если \(x > k\), приравняем \(b_{x}\) последнему элементу \(a_j\) (\(1 \leq j < i\)) такому, что \(a_j \leq k\). Если такого элемента \(a_j\) не существует, положим \(b_{x} = 0\).

К сожалению, после построения последовательности \(b_1, b_2, \dots, b_n\), перестановка \(a_1, a_2, \dots, a_n\) и пороговое значение \(k\) потерялись.

Теперь у вас есть только последовательность \(b_1, b_2, \dots, b_n\). Ваша задача найти любую подходящую перестановку \(a_1, a_2, \dots, a_n\) и пороговое значение \(k\) которые порождают последовательность \(b_1, b_2, \dots, b_n\). Гарантируется, что существует хотя бы одна пара перестановки \(a_1, a_2, \dots, a_n\) и порогового значения \(k\), что порождают \(b_1, b_2, \dots, b_n\).

Перестановкой чисел от \(1\) до \(n\) называется последовательность длины \(n\) которая содержит все целые числа от \(1\) до \(n\) ровно один раз.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Затем следуют описания наборов входных данных.

В первой строке набора входных данных содержится целое число \(n\) (\(1 \leq n \leq 10^5\)), означающее длину перестановки \(a\).

Во второй строке содержится \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(0 \leq b_i \leq n+1\)), означающие элементы последовательности \(b\).

Гарантируется, что существует хотя бы одна пара перестановки \(a_1, a_2, \dots, a_n\) и порогового значения \(k\), что порождают \(b_1, b_2, \dots, b_n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите пороговое значение \(k\) (\(0 \leq k \leq n\)) в первой строке, и затем выведите перестановку \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq n\)) во второй строке так, что перестановку \(a_1, a_2, \dots, a_n\) и пороговое значение \(k\) порождают последовательность \(b_1, b_2, \dots, b_n\). Если существуют несколько решений, выведите любое из них.

Примечание

В первом примере перестановка \(a = [1,3,2,4]\) и пороговое значение \(k = 2\) породят \(b\) следующим образом.

  • Когда \(i = 1\), \(x = a_i = 1 \leq k\), нет такого \(a_j\) (\(1 \leq j < i\)) что \(a_j > k\). Значит, \(b_1 = n + 1 = 5\).
  • Когда \(i = 2\), \(x = a_i = 3 > k\), последний элемент \(a_j\) такой, что \(a_j \leq k\) это \(a_1\). Значит, \(b_3 = a_1 = 1\).
  • Когда \(i = 3\), \(x = a_i = 2 \leq k\), последний элемент \(a_j\) такой, что \(a_j > k\) это \(a_2\). Значит, \(b_2 = a_2 = 3\).
  • Когда \(i = 4\), \(x = a_i = 4 > k\), последний элемент \(a_j\) такой, что \(a_j \leq k\) это \(a_3\). Значит, \(b_4 = a_3 = 2\).
Получается последовательность \(b = [5,3,1,2]\).

Для второго примера перестановка \(a = [1,2,3,4,5,6]\) и пороговое значение \(k = 3\) породят \(b\) следующим образом.

  • Когда \(i = 1, 2, 3\), \(a_i \leq k\), нет такого \(a_j\) (\(1 \leq j < i\)) что \(a_j > k\). Значит, \(b_1 = b_2 = b_3 = n + 1 = 7\).
  • Когда \(i = 4, 5, 6\), \(a_i > k\), последний элемент \(a_j\) такой, что \(a_j \leq k\) это \(a_3\). Значит, \(b_4 = b_5 = b_6 = a_3 = 3\).
Получается последовательность \(b = [7,7,7,3,3,3]\).

Для третьего примера перестановка \(a = [6,5,4,3,2,1]\) и пороговое значение \(k = 3\) породят \(b\) следующим образом.

  • Когда \(i = 1, 2, 3\), \(a_i > k\), нет такого \(a_j\) (\(1 \leq j < i\)) что \(a_j \leq k\). Значит, \(b_4 = b_5 = b_6 = 0\).
  • Когда \(i = 4, 5, 6\), \(a_i \leq k\), последний элемент \(a_j\) такой, что \(a_j > k\) это \(a_3\). Значит, \(b_1 = b_2 = b_3 = a_3 = 4\).
Получается последовательность \(b = [4,4,4,0,0,0]\).

F. Упоротая связность

графы Деревья жадные алгоритмы интерактив Конструктив кратчайшие пути снм *2400

Это интерактивная задача.

Дан простой неориентированный граф с \(n\) вершинами пронумерованными от \(1\) до \(n\), ваша задача состоит в том, чтобы покрасить все вершины так, чтобы для каждого цвета \(c\), выполнялись следующие условия:

  1. Множество вершин цвета \(c\) является связным;
  2. \(s_c \leq n_c^2\), где \(n_c\) число вершин цвета \(c\), и \(s_c\) сумма степеней вершин цвета \(c\).
Можно показать, что всегда существует раскраска такая, что условия выполняются.

Исходно вам дано только \(n\) - число вершин и степень каждой вершины.

Каждым запросом вы можете выбрать вершину \(u\). В ответ вы получите \(k\)-е ребро, исходящее из \(u\), если это \(k\)-й запрос к вершине \(u\).

Вы можете сделать максимум \(n\) запросов.

Неориентированный граф называется простым, если он не содержит кратных ребер и петель.

Степень вершины это число ребер, исходящих из нее.

Множество вершин \(S\) называется связным если для любых двух различных вершин \(u, v \in S\), существует путь, который проходит только по вершинам множества \(S\), и соединяет \(u\) и \(v\). Формально, существует последовательность ребер \((u_1, v_1), (u_2, v_2), \dots, (u_k, v_k)\) с \(k \geq 1\) такая, что

  1. \(u_1 = u\), \(v_k = v\), и \(v_i = u_{i+1}\) для любого \(1 \leq i < k\); и
  2. \(u_k \in S\) и \(v_k \in S\) для любого \(1 \leq i \leq k\).
Множество содержащее одну вершину является связным.
Протокол взаимодействия

Каждый тест состоит из нескольких наборов входных данных. В первой строке содержится целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Следующие строки содержат описание и интерактивную часть каждого набора входных данных.

Для каждого набора входных данных вы начинаете взаимодействие с итерактором с чтения целого числа \(n\) (\(1\le n \le 1000\)) в первой строке, означающего число вершин в графе.

Вторая строка содержит \(n\) целых чисел \(d_1, d_2, \dots, d_n\) (\(0 \leq d_i \leq n - 1\)), где \(d_i\) это степень вершины \(i\).

Чтобы совершить запрос к вершине \(u\) (\(1 \leq u \leq n\)), вы должны вывести

  • «? \(u\)»
В отдельной строке. Если это \(k\)-й запрос к вершине \(u\), вершина \(e_{u, k}\) будет выведена на следующей отдельной строке, где \(\left(u, e_{u, k}\right)\) это \(k\)-е ребро, исходящее из вершины \(u\). В случае если \(k > d_u\), положим \(e_{u, k} = -1\). Вы должны сделать не более \(n\) «?» запросов.

Чтобы дать ответ вы должны вывести

  • «! \(c_1\) \(c_2\) \(\dots\) \(c_n\)»
в отдельной строке, где \(c_i\) (\(1 \leq c_i \leq n\)) это цвет вершины \(i\). После этого ваша программа должны продолжить работать со следующим набором входных данных или завершиться, если это был последний.

Гарантируется, что дан простой неориентированный граф.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(1000\).

В случае, если формат запроса неверный, или вы сделали более \(n\) «?» запросов, вы получите вердикт Неправильный Ответ.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Формат взломов

Первая строка взлома должна содержать целое число \(t\) (\(1 \leq t \leq 1000\)), означающее число наборов входных данных. Следующие строки содержат описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 1000\)), означающее число вершин в графе.

Затем следуют \(n\) строк. В \(i\)-й строке содержится целое число \(d_i\) (\(0 \leq d_i \leq n - 1\)), означающее степень вершины \(i\), и затем \(d_i\) различных целых чисел \(e_{i,1}, e_{i,2}, \dots, e_{i,d_i}\) (\(1 \leq e_{i, j} \leq n\) и \(e_{i,j} \neq i\)), где \(\left(i, e_{i,j}\right)\) это \(j\)-е ребро, исходящее из вершины \(i\).

Вы должны гарантировать, что граф является простым и неориентированным.

Вы должны гарантировать, что сумма \(n\) по всем наборам входных данных не превосходит \(1000\).

Примечание

В примере только один набор входных данных.

В нем \(n = 5\) вершин, из которых \(1, 2, 3, 4\) имеют степень \(2\) и вершина \(5\) имеет степень \(0\). Это означает, что вершина \(5\) изолированная - не соединена ни с одной другой вершиной.

Возможное взаимодействие с итерактором показано во вводе и выводе примера, использовано \(4\) «?» запроса. Из них два к вершине \(1\) и два к вершине \(3\). Исходя из результатов этих запросов мы знаем, что вершины \(1\) и \(3\) соединены с вершинами \(2\) и \(4\).

Возможное решение показано, вершины \(1\) и \(2\) покрашены в цвет \(1\), вершины \(3\) и \(4\) покрашены в цвет \(2\), и вершина \(5\) покрашена в цвет \(3\). Легко заметить, что решение удовлетворяет условиям.

  • Для цвета \(c = 1\), вершины \(1\) и \(2\) связны. Также, \(n_1 = 2\) и \(s_1 = d_1 + d_2 = 2 + 2 = 4 \leq n_1^2 = 2^2 = 4\);
  • Для цвета \(c = 2\), вершины \(3\) и \(4\) связны. Также, \(n_2 = 2\) и \(s_2 = d_3 + d_4 = 2 + 2 = 4 \leq n_2^2 = 2^2 = 4\);
  • Для цвета \(c = 3\), есть только одна вершина (вершина \(5\)) покрашенная в цвет \(3\). Также, \(n_3 = 1\) и \(s_3 = d_5 = 0 \leq n_3^2 = 1^2 = 1\).

G. Упоротое противодействие увеличению

дп жадные алгоритмы Конструктив математика *2900

Вам дана таблица \(n \times n\).

Обозначим за \((i, j)\) клетку из \(i\)-й строки и \(j\)-го столбца. Для каждой клетки известно, можно ее удалить или нет.

Дано целое число \(k\), вам необходимо удалить ровно \((n-k+1)^2\) клеток из таблицы так, чтобы выполнялось следующее условие.

  • Нельзя найти \(k\) неудаленных клеток \((x_1, y_1), (x_2, y_2), \dots, (x_k, y_k)\) которые строго возрастают, т.е. \(x_i < x_{i+1}\) и \(y_i < y_{i+1}\) для всех \(1 \leq i < k\).
Ваша задача найти любое решение, или сказать, что его нет.
Входные данные

В первой строк содержится целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборо входных данных.

Первая строка набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \leq k \leq n \leq 1000\)).

Далее следуют \(n\) строк. \(i\)-я строка содержит бинарную строку \(s_i\) длины \(n\). \(j\)-й символ \(s_i\) это 1 если вы можете удалить клетку \((i, j)\), и 0 в противном случае.

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных, если не существует способа удалить ровно \((n-k+1)^2\) клеток, чтобы выполнить условие, выведите «NO» (без кавычек).

В противном случае выведите «YES» (без кавычек). Затем, выведите \(n\) строк. \(i\)-я строка должна содержать бинарную строку \(t_i\) длины \(n\). \(j\)-й символ \(t_i\) это 0 если клетка \((i, j)\) удалена, и 1 в противном случае.

Если существуют несколько решений, выведите любое из них.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes» и «Yes» будут распознаны как положительный ответ).

Примечание

В первом примере достаточно удалить клетку \((1, 1)\).

Во втором примере можно выбрать для удаления клетки \((1,1)\), \((1,2)\), \((4,3)\) и \((4,4)\).

Для третьего примера нет решения, потому что клетки по диагонали всегда будут образовывать строго возрастающую последовательность длины \(5\).

B. Восстановление массива

жадные алгоритмы Конструктив математика *1100

Для массива целых неотрицательных чисел \(a\) размера \(n\) выписали массив \(d\), где \(d_1 = a_1\), \(d_i = |a_i - a_{i - 1}|\) для \(2 \le i \le n\).

Ваша задача — по заданному массиву \(d\) восстановить массив \(a\), или сообщить, что подходящих массивов несколько.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 100\)) — размер массивов \(a\) и \(d\).

Вторая строка содержит \(n\) целых чисел \(d_1, d_2, \dots, d_n\) (\(0 \le d_i \le 100\)) — элементы массива \(d\).

Можно показать, что при таких ограничениях всегда существует хотя бы один подходящий массив \(a\).

Выходные данные

Для каждого набора входных данных выведите элементы массива \(a\), если подходящий массив \(a\) — единственный. В противном случае выведите число \(-1\).

Примечание

Во втором примере есть два подходящих массива: \([2, 8, 5]\) и \([2, 8, 11]\).

C. Карточная игра

дп игры Комбинаторика Конструктив *1500

Рассмотрим игру с \(n\) картами (\(n\) четное). На каждой карте написано число от \(1\) до \(n\). Числа на всех картах различны. Скажем, что карта с числом \(x\) сильнее карты с числом \(y\), если \(x > y\).

Два игрока, Алексей и Борис играют в эту игру. В начале каждый из них получает ровно по \(\frac{n}{2}\) карт, так что каждая карта находится ровно у одного игрока. Затем они ходят по очереди. Сначала ходит Алексей, затем Борис, затем снова Алексей и так далее.

На своем ходу игрок должен сыграть ровно одну из своих карт. Затем, если у соперника нет карт сильнее сыгранной карты, то соперник проигрывает, и игра заканчивается. Иначе соперник должен сыграть карту сильнее сыгранной (тоже ровно одну). Эти две карты удаляются из игры, и ход заканчивается. Если карт больше нет, то игра заканчивается вничью; иначе ход переходит к сопернику.

Рассмотрим все способы распределить карты между двумя игроками так, чтобы у каждого была ровно половина всех карт. Вам надо посчитать три величины:

  • количество способов раздать карты так, чтобы выиграл Алексей;
  • количество способов раздать карты так, чтобы выиграл Борис;
  • количество способов раздать карты так, чтобы игра закончилась вничью.

Полагаем, что оба игрока играют оптимально (т. е. если игрок может выиграть вне зависимости от действий его соперника, то он выигрывает). Два способа раздать карты считаются различными, если есть хотя бы одна такая карта, что в одном из способов она у Алексея, а в другом — у Бориса.

Например, пусть \(n = 4\), Алексей получает карты \([2, 3]\), а Борис получает карты \([1, 4]\). Игра может пойти следующим образом:

  • если Алексей играет карту \(2\), Борис должен ответить картой \(4\). Ход Алексея заканчивается, и начинается ход Бориса. У Бориса осталась только карта \(1\); он играет ее, и Алексей отвечает картой \(3\). Игра заканчивается ничьей;
  • если Алексей играет карту \(3\), Борис должен ответить картой \(4\). Ход Алексея заканчивается, и начинается ход Бориса. У Бориса осталась только карта \(1\); он играет ее, и Алексей отвечает картой \(2\). Игра заканчивается ничьей.

Таким образом, в этом случае игра заканчивается вничью.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 30\)) — количество наборов входных данных.

Затем следуют \(t\) строк. В \(i\)-й строке записано одно четное число \(n\) (\(2 \le n \le 60\)).

Выходные данные

На каждый набор входных данных выведите три числа:

  • количество способов раздать карты так, чтобы выиграл Алексей;
  • количество способов раздать карты так, чтобы выиграл Борис;
  • количество способов раздать карты так, чтобы игра закончилась вничью.

Так как ответ может быть достаточно большим, выведите его по модулю \(998244353\).

Примечание

В первом наборе входных данных Алексей выигрывает, если он получает карту \(2\) (он ее играет, а Борис не может ответить). Если Алексей получает карту \(1\), то игра заканчивается вничью.

Во втором наборе входных данных:

  • Алексей выигрывает, если он получает карты \([3, 4]\), \([2, 4]\) или \([1, 4]\);
  • Борис выигрывает, если Алексей получает карты \([1, 2]\) или \([1, 3]\);
  • игра заканчивается вничью, если Алексей получает карты \([2, 3]\).

A. Факторизуйте N+M

Конструктив теория чисел *800

У Пака Чанека есть простое число\(^\dagger\) \(n\). Найдите простое число \(m\) такое, что \(n + m\) не является простым.

\(^\dagger\)Простое число — это число с ровно \(2\) множителями. Первые несколько простых чисел: \(2,3,5,7,11,13,\ldots\). В частности, \(1\) не является простым числом.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Следующие строки содержат описания наборов.

Единственная строка каждого набора входных данных содержит простое число \(n\) (\(2 \leq n \leq 10^5\)).

Выходные данные

Для каждого набора входных данных выведите строку, содержащую простое число \(m\) (\(2 \leq m \leq 10^5\)) такое, что \(n + m\) не является простым. Можно доказать, что при ограничениях задачи такие \(m\) всегда существуют.

Если решений несколько, можно вывести любое из них.

Примечание

В первом наборе входных данных \(m = 2\) — простое число, а \(n + m = 7 + 2 = 9\) — не простое.

Во втором наборе входных данных \(m = 7\) — простое число, а \(n + m = 2 + 7 = 9\) — не простое.

В третьем наборе входных данных \(m = 47837\) — простое число, а \(n + m = 75619 + 47837 = 123456\) — не простое.

C. Кубики и мешки

жадные алгоритмы игры Конструктив сортировки *1400

Есть \(n\) кубиков, пронумерованных от \(1\) до \(n\). Кубик \(i\) имеет вес \(a_i\).

У Пака Чанека есть \(3\) мешка с номерами от \(1\) до \(3\), которые изначально пусты. Каждый кубик Пак Чанек должен положить в один из мешков. После этого в каждом мешке должен оказаться хотя бы один кубик.

После того, как Пак Чанек разложит кубики, Бу Денгклек возьмет ровно по одному кубику из каждого мешка. Пусть \(w_j\) — вес кубика, который Бу Денгклек берет из мешка \(j\). Результатом всех действий назовем число \(|w_1 - w_2| + |w_2 - w_3|\), где \(|x|\) — модуль числа \(x\).

Известно, что Денгклек будет брать кубики таким образом, чтобы минимизировать результат. Чему равен максимально возможный результат, если Пак Чанек раскладывает кубики оптимально?

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^4\)) — количество наборов. Следующие строки содержат описание каждого набора.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(3 \leq n \leq 2 \cdot 10^5\)) — количество кубиков.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — веса кубиков.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого теста выведите строку, содержащую целое число, представляющее максимально возможный результат, если Пак Чанек оптимально разложит кубики.

Примечание

В первом наборе входных данные, один из вариантов получить итоговый результат, равный \(6\), выглядит следующим образом:

  • Положить кубики \(1\), \(4\), и \(5\) в мешок \(1\).
  • Положить кубик \(3\) в мешок \(2\).
  • Положить кубик \(2\) в мешок \(3\).

Если Пак Чанек разложит кубики таким образом, то Денгклек может взять кубики следующим образом:

  • Взять кубик \(5\) из мешка \(1\).
  • Взять кубик \(3\) из мешка \(2\).
  • Взять кубик \(2\) из мешка \(3\).

Результат равен \(|a_5 - a_3| + |a_3 - a_2| = |3 - 5| + |5 - 1| = 6\). Можно показать, что Бу Денгклек не может получить меньший результат при таком распределении кубиков.

Можно показать, что нет другого распределения кубиков, которое дает результат больший, чем \(6\).

D. Карты знаний

Конструктив Структуры данных *1500

Пак Чанек, известный ученый, изобрел карточную головоломку, используя свои знания. В головоломке вам дается поле с \(n\) строками и \(m\) столбцами. Пусть \((r, c)\) обозначает ячейку в \(r\)-й строке и \(c\)-м столбце.

Изначально в ячейке \((1, 1)\) стопкой лежат \(k\) карт. На каждой карте написано целое число от \(1\) до \(k\). А именно, на \(i\)сверху карте в стопке в ячейке \((1, 1)\) написано число \(a_i\). Известно, что не существует двух карт с одинаковыми числами. Другими словами, числа, написанные на картах, представляют собой перестановку целых чисел от \(1\) до \(k\). Все остальные ячейки пусты.

Вам нужно переместить все \(k\) карт в ячейку \((n, m)\), чтобы составить другую стопку карт. Пусть \(b_i\) — число, написанное на \(i\)сверху карте в стопке в ячейке \((n, m)\). Вы должны составить стопку в ячейке \((n, m)\) таким образом, чтобы \(b_i = i\) для всех \(1 \leq i \leq k\).

За один ход вы можете взять верхнюю карту из любой ячейки и положить ее на соседнюю ячейку (ячейку, имеющую общую сторону). Если ячейка, в которую вы собираетесь положить карту, уже содержит одну или несколько карт, вы кладете свою карту на вершину стопки. Вы должны выполнять каждую операцию, соблюдая следующие ограничения:

  • Каждая ячейка, отличная от \((1,1)\) и \((n,m)\), должна всегда содержать не более одной карты.
  • Вы не можете перемещать карту в ячейку \((1,1)\).
  • Вы не можете перемещать карту из ячейки \((n,m)\).

По заданным значениям \(n\), \(m\), \(k\) и массиву \(a\), определите, разрешима ли головоломка.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^4\)) — количество наборов входных данных. Следующие строки содержат описание наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n\), \(m\) и \(k\) (\(3 \leq n, m \leq 10^6\), \(nm \leq 10^6\), \(1 \leq k \leq 10^5\)) — размеры поля и количество карт.

Вторая строка набора содержит \(k\) целых чисел \(a_1, a_2, \ldots, a_k\) — массив \(a\), содержащий числа, написанные на картах. Значения \(a\) представляют собой перестановку целых чисел от \(1\) до \(k\).

Гарантируется, что сумма \(nm\) и сумма \(k\) по всем наборам входных данных не превышают \(10^6\) и \(10^5\) соответственно.

Выходные данные

Для каждого набора входных данных выведите «YA» (без кавычек), если головоломка имеет решение, и «TIDAK» (без кавычек) иначе, что означает «да» и «нет» соответственно в индонезийском языке.

Вы можете выводить «YA» и «TIDAK» в любом регистре (например, строки «tiDAk», «tidak» и «Tidak» будут восприняты как отрицательный ответ).

Примечание

В первом наборе входных данных головоломка может быть решена следующим образом:

  • Переместить карту с написанной на ней \(3\) из ячейки \((1, 1)\) в ячейку \((1, 2)\), затем в \((1, 3)\).
  • Переместить карту с написанной на ней \(6\) из ячейки \((1, 1)\) в ячейку \((2, 1)\), затем в \((3, 1)\), затем в \((3, 2)\), затем в \((3, 3)\).
  • Переместить карту с написанной на ней \(4\) из ячейки \((1, 1)\) в ячейку \((1, 2)\).
  • Переместить карту с написанной на ней \(1\) из ячейки \((1, 1)\) в ячейку \((2, 1)\), затем в \((2, 2)\), затем в \((2, 3)\).
  • Переместить карту с написанной на ней \(2\) из ячейки \((1, 1)\) в ячейку \((2, 1)\), затем в \((2, 2)\).
  • Переместить карту с написанной на ней \(5\) из ячейки \((1, 1)\) в ячейку \((2, 1)\), затем в \((3, 1)\), затем в \((3, 2)\), затем в \((3, 3)\).
  • Переместить карту с написанной на ней \(2\) из ячейки \((2, 2)\) в ячейку \((2, 1)\).
  • Переместить карту с написанной на ней \(4\) из ячейки \((1, 2)\) в ячейку \((2, 2)\), затем в \((3, 2)\), затем в \((3, 3)\).
  • Переместить карту с написанной на ней \(3\) из ячейки \((1, 3)\) в ячейку \((1, 2)\), затем в \((2, 2)\), затем в \((3, 2)\), затем в \((3, 3)\).
  • Переместить карту с написанной на ней \(2\) из ячейки \((2, 1)\) в ячейку \((3, 1)\), затем в \((3, 2)\), затем в \((3, 3)\).
  • Переместить карту с написанной на ней \(1\) из ячейки \((2, 3)\) в ячейку \((3, 3)\).

Анимированная иллюстрация процесса, описанного выше, выглядит следующим образом:

E. Подвешенные сердца

Деревья дп жадные алгоритмы Конструктив поиск в глубину и подобное Структуры данных *1800

У Пака Чанека есть \(n\) пустых карточек в форме сердца. Карточка \(1\) прикреплена непосредственно к стене, остальные же карточки подвешены ровно к одной другой карточке верёвочкой. А именно, карточка \(i\) (\(i > 1\)) подвешена к карточке \(p_i\) (\(p_i < i\)).

Пак Чанек должен написать на каждой карточке одно целое число. Для этого он выберет произвольную перестановку \(a\) чисел \([1, 2, \dots, n]\), и на карточке \(i\) запишет число \(a_i\).

После этого Пак Чанек должен выполнить следующую операцию \(n\) раз, поддерживая при этом последовательность \(s\) (изначально пустую):

  1. Выбрать такую карточку \(x\), что к ней не подвешена ни одна другая карточка.
  2. Добавить число, записанное на карте \(x\), в конец последовательности \(s\).
  3. Если \(x \neq 1\) и число на карточке \(p_x\) больше, чем число на карточке \(x\), заменить число на карточке \(p_x\) на число на карточке \(x\).
  4. Удалить карточку \(x\).

После этого у Пака Чанека будет последовательность \(s\) из \(n\) элементов. Какова максимальная длина наибольшей неубывающей подпоследовательности\(^\dagger\) \(s\) в конце, если Пак Чанек выполняет все шаги оптимально?

\(^\dagger\) Последовательность \(b\) называется подпоследовательностью последовательности \(c\) если \(b\) может быть получена из \(c\) удалением некоторого (возможно нулевого) количества элементов. Например, \([3,1]\) — подпоследовательность \([3,2,1]\), \([4,3,1]\) и \([3,1]\), но не \([1,3,3,7]\) и не \([3,10,4]\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 10^5\)) — количество карточек.

Вторая строка содержит \(n - 1\) целое число \(p_2, p_3, \dots, p_n\) (\(1 \le p_i < i\)) описывающая, к какой карточке подвешена каждая карточка.

Выходные данные

Выведите одно целое число — максимальную длину наибольшей неубывающей подпоследовательности \(s\) в конце, если Пак Чанек сделает все шаги оптимально.

Примечание

Ниже представлена структура карточек в первом примере.

Пак Чанек может выбрать перестановку \(a = [1, 5, 4, 3, 2, 6]\).

Пусть \(w_i\) — число на карточке \(i\). Изначально \(w_i = a_i\).

Пак Чанек может выполнять следующие операции по порядку:

  1. Выбрать карточку \(5\). Добавить \(w_5 = 2\) в конец \(s\). Так как \(w_4 > w_5\), значение \(w_4\) становится равным \(2\). Удаляем карточку \(5\). После этой операции \(s = [2]\).
  2. Выбрать карточку \(6\). Добавить \(w_6 = 6\) в конец \(s\). Так как \(w_2 \leq w_6\), значение \(w_2\) остается неизменным. Удаляем карточку \(6\). После этой операции \(s = [2, 6]\).
  3. Выбрать карточку \(4\). Добавить \(w_4 = 2\) в конец \(s\). Так как \(w_1 \leq w_4\), значение \(w_1\) остается неизменным. Удаляем карточку \(4\). После этой операции \(s = [2, 6, 2]\).
  4. Выбрать карточку \(3\). Добавить \(w_3 = 4\) в конец \(s\). Так как \(w_2 > w_3\), значение \(w_2\) становится равным \(4\). Удаляем карточку \(3\). После этой операции \(s = [2, 6, 2, 4]\).
  5. Выбрать карточку \(2\). Добавить \(w_2 = 4\) в конец \(s\). Так как \(w_1 \leq w_2\), значение \(w_1\) is left unchanged. Удаляем карточку \(2\). После этой операции \(s = [2, 6, 2, 4, 4]\).
  6. Выбрать карточку \(1\). Добавить \(w_1 = 1\) в конец \(s\). Удаляем карточку \(1\). После этой операции \(s = [2, 6, 2, 4, 4, 1]\).

Одна из наибольших неубывающих подпоследовательностей \(s = [2, 6, 2, 4, 4, 1]\) это \([2, 2, 4, 4]\). Таким образом, длина наибольшей неубывающей подпоследовательности \(s\) равна \(4\). Можно доказать, что это действительно максимально возможная длина.

G. Опасные лазеры

Конструктив снм сортировки *3100

У Пака Чанека есть сетка из порталов размера \(n \times m\). Портал в \(i\)-й строке и \(j\)-м столбце обозначается как портал \((i,j)\). Порталы \((1,1)\) и \((n,m)\) находятся в северо-западном и юго-восточном углах сетки соответственно.

Портал \((i,j)\) имеет две настройки:

  • Тип \(t_{i,j}\), который может быть \(0\) или \(1\).
  • Сила \(s_{i,j}\), являющаяся целым числом от \(1\) до \(10^9\) включительно.
Каждый портал имеет \(4\) грани, помеченные целыми числами \(0,1,2,3\), которые соответствуют направлениям на север, восток, юг и запад соответственно.

Когда лазерный луч входит в грань \(k\) портала \((i, j)\) со скоростью \(x_\text{in}\), он покидает портал из грани \((k+2+t_{i,j}) \bmod 4\) со скоростью \(x_\text{out} = \max(x_\text{in},s_{i,j})\). Портал при этом потребляет \(x_\text{out} - x_\text{in}\) единиц энергии.

Паку Чанеку сегодня очень скучно. Он собирается запустить \(4nm\) лазерных лучей с начальной скоростью \(1\), по одному в каждую грань каждого портала. Каждый луч будет перемещаться по этой сетке порталов, пока не выйдет за пределы сетки или не пройдет через \(10^{100}\) порталов.

Пак Чанек считает, что портал хороший тогда и только тогда, когда суммарная энергия, потребленная этим порталом по модулю \(2\), равна его типу. Учитывая настройки силы всех порталов, найдите способ назначить настройки типа каждого портала таким образом, чтобы количество хороших порталов было максимально возможным.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 1000\)) — количество строк и столбцов в сетке.

В \(i\)-й из следующих \(n\) строк содержатся \(m\) целых чисел, \(j\)-е целое число — значение \(s_{i,j}\) (\(1 \leq s_{i,j} \leq 10^9\)), сила портала \((i, j)\).

Выходные данные

Выведите \(n\) строк, каждая их которых состоит из \(m\) символов \(0\) или \(1\), обозначающих тип портала, где \(j\)-й символ в \(i\)-й строке это настройка типа портала \((i, j)\).

Если решений несколько, выведите любое из них.

Примечание

В первом примере рассмотрим лазерный луч, который Пак Чанек запускает в грань \(1\) портала \((2, 2)\). Луч перемещается следующим образом:

  1. Луч входит в грань \(1\) портала \((2, 2)\) со скоростью \(1\). Он покидает портал из грани \(3\) со скоростью \(5\). Портал \((2, 2)\) потребляет \(4\) единиц энергии.
  2. Луч входит в грань \(1\) портала \((2, 1)\) со скоростью \(5\). Он покидает портал из грани \(0\) со скоростью \(6\). Портал \((2, 1)\) потребляет \(1\) единиц энергии.
  3. Луч входит в грань \(2\) портала \((1, 1)\) со скоростью \(6\). Он покидает портал из грани \(1\) со скоростью \(8\). Портал \((1, 1)\) потребляет \(2\) единиц энергии.
  4. Луч входит в грань \(3\) портала \((1, 2)\) со скоростью \(8\). Он покидает портал из грани \(2\) со скоростью \(8\). Портал \((1, 2)\) потребляет \(0\) единиц энергии.
  5. Луч входит в грань \(0\) портала \((2, 2)\) со скоростью \(8\). Он покидает портал из грани \(2\) со скоростью \(8\). Портал \((2, 2)\) потребляет \(0\) единиц энергии.

Иллюстрация перемещений луча, описанных выше, выглядит следующим образом.

Для примера рассмотрим портал \((2, 3)\). Мы можем подсчитать, что суммарная энергия, потребляемая этим порталом, к концу процесса составит \(32\). Так как \(32 \bmod 2 = 0\) и \(t_{2,3} = 0\), этот портал будет считаться хорошим.

B. Смешная перестановка

Конструктив математика *800

Последовательность из \(n\) чисел называется перестановкой, если она содержит в себе все числа от \(1\) до \(n\) ровно по одному разу. Например, последовательности \([3, 1, 4, 2]\), [\(1\)] и \([2,1]\) являются перестановками, а \([1,2,1]\), \([0,1]\) и \([1,3,4]\) — нет.

Для заданного числа \(n\) вам необходимо составить перестановку \(p\) такую, что одновременно выполняются два требования:

  • Для каждого элемента \(p_i\) хотя бы один его сосед имеет значение, которое отличается от значения \(p_i\) на единицу. То есть, для каждого элемента \(p_i\) (\(1 \le i \le n\)) хотя бы один из его соседних элементов (стоящих справа или слева от \(p_i\)) должен быть равен \(p_i + 1\), либо \(p_i - 1\).
  • Перестановка не должна иметь неподвижных точек. То есть, для каждого \(i\) (\(1 \le i \le n\)) должно быть выполнено \(p_i \neq i\).

Назовем перестановку, удовлетворяющую данным требованиям, смешной.

Например, пусть \(n = 4\). Тогда смешная перестановка может иметь вид [\(4, 3, 1, 2\)], так как:

  • справа от \(p_1=4\) расположено значение \(p_2=p_1-1=4-1=3\);
  • слева от \(p_2=3\) расположено значение \(p_1=p_2+1=3+1=4\);
  • справа от \(p_3=1\) расположено значение \(p_4=p_3+1=1+1=2\);
  • слева от числа \(p_4=2\) расположено значение \(p_3=p_4-1=2-1=1\).
  • для всех \(i\) выполняется \(p_i \ne i\).

Для заданного положительного целого числа \(n\) выведите любую смешную перестановку длины \(n\), либо выведите -1, если смешной перестановки длины \(n\) не существует.

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

В единственной строке каждого набора входных данных записано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке:

  • любую смешную перестановку \(p\) длины \(n\);
  • или число -1, если искомой перестановки не существует.
Примечание

Первый набор входных данных разобран в условии задачи.

Во втором наборе входных данных составить искомую перестановку невозможно: перестановки \([1, 2, 3]\), \([1, 3, 2]\), \([2, 1, 3]\), \([3, 2, 1]\) имеют неподвижные точки, а в \([2, 3, 1]\) и \([3, 1, 2]\) не для всех позиций выполняется первое условие.

F. Меньше

жадные алгоритмы Конструктив Строки *1500

У Альперена есть две строки, \(s\) и \(t\), которые обе изначально равны «a».

Он выполнит \(q\) операций двух видов над данными строками:

  • \(1 \;\; k \;\; x\) — Добавить строку \(x\) ровно \(k\) раз в конец строки \(s\). Другими словами, \(s := s + \underbrace{x + \dots + x}_{k \text{ times}}\).
  • \(2 \;\; k \;\; x\) — Добавить строку \(x\) ровно \(k\) раз в конец строки \(t\). Другими словами, \(t := t + \underbrace{x + \dots + x}_{k \text{ times}}\).

После каждой операции определите, можно ли переставить символы \(s\) и \(t\) так, чтобы \(s\) была лексикографически меньше \(^{\dagger}\), чем \(t\).

Обратите внимание, что строки изменяются после выполнения каждой операции и не возвращаются в исходное состояние.

\(^{\dagger}\) Проще говоря, лексикографический порядок - это порядок, в котором слова перечислены в словаре. Формальное определение таково: строка \(p\) лексикографически меньше строки \(q\), если существует позиция \(i\) такая, что \(p_i < q_i\), и для всех \(j < i\), \(p_j = q_j\). Если такой позиции \(i\) не существует, то \(p\) лексикографически меньше \(q\), если длина \(p\) меньше длины \(q\). Например, \(\texttt{abdc} < \texttt{abe}\) и \(\texttt{abc} < \texttt{abcd}\), где мы пишем \(p < q\), если \(p\) лексикографически меньше \(q\).

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит целое число \(q\) \((1 \leq q \leq 10^5)\) — количество операций, которые будет выполнять Alperen.

Затем следуют \(q\) строк, каждая из которых содержит два положительных целых числа \(d\) и \(k\) (\(1 \leq d \leq 2\); \(1 \leq k \leq 10^5\)) и непустую строку \(x\), состоящую из строчных английских букв — тип операции, количество раз, которое мы будем добавлять к строке \(x\) и строку, которую нужно добавить соответственно.

Гарантируется, что сумма \(q\) по всем наборам не превышает \(10^5\) и что сумма длин всех строк \(x\) из входных данных не превышает \(5 \cdot 10^5\).

Выходные данные

Для каждой операции выведите «YES», если возможно расположить элементы в обеих строках таким образом, что \(s\) будет лексикографически меньше \(t\) и «NO» в противном случае.

Примечание

В первом примере строки изначально являются \(s = \) «a» и \(t = \) «a».

После первой операции строка \(t\) становится «aaa». Поскольку «a» уже лексикографически меньше, чем «aaa», ответом на эту операцию должно быть «YES».

После второй операции строка \(s\) становится «aaa», а поскольку \(t\) также равна «aaa», мы не можем переставить символы \(s\) так, чтобы она была лексикографически меньше \(t\), поэтому ответ «NO».

После третьей операции строка \(t\) становится «aaaaaa», а \(s\) уже лексикографически меньше нее, поэтому ответом будет «YES».

После четвертой операции \(s\) становится «aaabb» и нет способа сделать ее лексикографически меньше, чем «aaaaaa», поэтому ответ «NO».

После пятой операции строка \(t\) становится «aaaaaaabcaabcaabca», и мы можем переставить символы в строках так: «bbaaa» и «caaaaaabcaabcaabaa», так что \(s\) будет лексикографически меньше \(t\), поэтому мы должны ответить «YES».

B. Стоимость перестановки

жадные алгоритмы Конструктив *800

Вам дано целое число \(n\). Вы должны построить перестановку размера \(n\).

Перестановка — это массив, в котором каждое число от \(1\) до \(s\) (где \(s\) — размер перестановки) встречается ровно один раз. Например, \([2, 1, 4, 3]\) — перестановка размера \(4\); \([1, 2, 4, 5, 3]\) — перестановка размера \(5\); \([1, 4, 3]\) — не перестановка (число \(2\) отсутствует), \([2, 1, 3, 1]\) — не перестановка (число \(1\) встречается дважды).

Подотрезок перестановки — это непрерывная подпоследовательность перестановки. Например, у перестановки \([2, 1, 4, 3]\) \(10\) подотрезков: \([2]\), \([2, 1]\), \([2, 1, 4]\), \([2, 1, 4, 3]\), \([1]\), \([1, 4]\), \([1, 4, 3]\), \([4]\), \([4, 3]\) и \([3]\).

Стоимость перестановки — это количество ее подотрезков, которые также являются перестановками. Например, стоимость перестановки \([2, 1, 4, 3]\) равна \(3\), так как подотрезки \([2, 1]\), \([1]\) и \([2, 1, 4, 3]\) являются перестановками.

Вы должны вывести перестановку размера \(n\) с минимально возможной стоимостью среди всех перестановок размера \(n\).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 48\)) — количество наборов входных данных.

Затем следуют \(t\) строк. В \(i\)-й из них задано одно целое число \(n\) (\(3 \le n \le 50\)), обозначающее \(i\)-й набор входных данных.

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел — перестановку размера \(n\) с минимально возможной стоимостью. Если существует несколько таких перестановок, выведите любую из них.

Примечание

В первом примере перестановка \([1, 4, 3, 5, 2]\) — один из возможных ответов; ее стоимость равна \(2\).

Во втором примере перестановка \([4, 1, 6, 2, 5, 3]\) — один из возможных ответов; ее стоимость равна \(2\).

C. Журналы Монокарпа

дп жадные алгоритмы Конструктив *1100

Монокарп очень долго коллекционировал разные журналы и теперь решил их продать. Для этого он выставил в ряд \(n\) коробок с журналами, причем в \(i\)-й коробке находится \(a_i\) журналов. Некоторые из коробок он накрыл крышками.

Внезапно пошел дождь, и Монокарпу нужно спасти от дождя как можно большее количество журналов. Для этого он может сделать следующее: если коробка \(i\) изначально была накрыта крышкой, он может либо переместить крышку с коробки \(i\) на коробку \((i-1)\) (если она есть), либо оставить крышку на коробке \(i\). Считайте, что все перемещения крышек Монокарп выполнит мгновенно, и каждая крышка будет перемещена не более одного раза. Журналы, которые после перемещения будут находиться в коробках с крышками, будут спасены от дождя; все остальные журналы намокнут.

Перед вами стоит задача определить максимальное количество журналов, которые Монокарп может спасти от дождя.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество коробок с журналами.

Во второй строке записана строка, состоящая из \(n\) символов 0 и/или 1. Если \(i\)-й символ строки равен 1, то изначально \(i\)-я коробка накрыта крышкой. Если \(i\)-й символ строки равен 0, то изначально \(i\)-я коробка не накрыта крышкой.

В третьей строке записана последовательность целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^4\)), где \(a_i\) равно количеству журналов в \(i\)-й коробке.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите максимальное количество журналов, которые Монокарп может спасти от дождя.

Примечание

В первом наборе входных данных в примере нужно переместить крышку со второй коробки влево на первую коробку. Тогда коробки \(1\), \(3\) и \(4\) будут накрыты крышками, и \(10 + 8 + 9 = 27\) журналов будут спасены от дождя.

Во втором наборе входных данных нужно переместить крышку со второй коробки на первую коробку, крышку с третьей коробки на вторую коробку, крышку с пятой коробки на четвертую коробку, крышку с шестой коробки на пятую коробку. Тогда коробки \(1\), \(2\), \(4\) и \(5\) будут накрыты крышками, и \(20 + 10 + 30 + 20 = 80\) журналов будут спасены от дождя.

В третьем наборе входных данных нет ни одной крышки, поэтому ни один из журналов нельзя спасти от дождя.

G. Антифибоначчиевый разрез

битмаски дп Комбинаторика Конструктив математика Структуры данных хэши *3000

Обратите внимание на нестандартное ограничение памяти.

Введем последовательность строк Фибоначчи следующим образом: \(f_0\) — строка 0, \(f_1\) — строка 1, \(f_i\) строится по формуле \(f_{i-1} + f_{i-2}\) при \(i>1\) (\(+\) обозначает конкатенацию строк). Например, \(f_2\)10, \(f_3\)101, \(f_4\)10110.

Для строки \(s\) обозначим за \(g(s)\) количество способов разрезать эту строку на строки, из которых ни одна не является строкой Фибоначчи. Например, если \(s\)10110101, \(g(s) = 3\), так как существуют три способа разрезать строку:

  • 101101 \(+\) 01;
  • 1011 \(+\) 0101;
  • 1011 \(+\) 01 \(+\) 01.

Вам дана последовательность строк \(s_1, s_2, \dots, s_n\). Посчитайте \(g(s_1), g(s_1 + s_2), \dots, g(s_1 + s_2 + \ldots + s_n)\). Так как эти значения могут быть очень большими, выведите их по модулю \(998244353\).

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^3\)).

Затем следуют \(n\) строк. В \(i\)-й из них задана \(s_i\) (\(1 \le |s_i| \le 10^3\)), состоящая из символов 0 и/или 1.

Выходные данные

Выведите \(n\) целых чисел, \(i\)-е из которых равно \(g(s_1 + s_2 + \ldots + s_i) \bmod 998244353\).

A. МаксМинА

жадные алгоритмы Конструктив *800

У вас есть массив \(a\) размера \(n\), состоящий только из нулей и единиц, и целое число \(k\). За одну операцию вы можете выполнить одно из двух следующих действий:

  • Выберите \(2\) последовательных элемента \(a\) и замените их на их минимум (то есть сделайте \(a := [a_{1}, a_{2}, \ldots, a_{i-1}, \min(a_{i}, a_{i+1}), a_{i+2}, \ldots, a_{n}]\) для некоторого \(1 \le i \le n-1\)). Эта операция уменьшает размер \(a\) на \(1\).
  • Выберите \(k\) последовательных элементов \(a\) и замените их на их максимум (то есть сделайте \(a := [a_{1}, a_{2}, \ldots, a_{i-1}, \max(a_{i}, a_{i+1}, \ldots, a_{i+k-1}), a_{i+k}, \ldots, a_{n}]\) для некоторого \(1 \le i \le n-k+1\)). Эта операция уменьшает размер \(a\) на \(k-1\).

Определите, возможно ли превратить \(a\) в \([1]\) после нескольких (возможно, нуля) операций.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 1000\)). Далее следует их описание.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \le k \le n \le 50\)) — размер массива \(a\) и длину отрезка, на котором можно выполнить операцию второго типа.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_{1}, a_{2}, \ldots, a_{n}\) (\(a_i\) равно \(0\) или \(1\)) — элементы массива \(a\).

Выходные данные

Для каждого набора входных данных, если возможно превратить \(a\) в \([1]\), выведите «YES», иначе выведите «NO».

Примечание

В первом наборе входных данных вы можете выполнить операцию второго типа над вторым и третьим элементами так, что \(a\) будет равно \([0, 1]\), затем вы можете выполнить операцию второго типа над первым и вторым элементами, после чего \(a\) превратится в \([1]\).

Очевидно, что в четвертом наборе входных данных вы не можете получить ни одного значения \(1\), что бы вы ни делали.

В пятом наборе входных данных вы можете сначала выполнить операцию второго типа над первыми тремя элементами, чтобы \(a\) стало равно \([1, 0, 0, 1]\), затем выполнить операцию второго типа над элементами со второй позиции по четвертую так, что \(a\) станет равно \([1, 1]\), и, наконец, выполнить операцию первого типа над оставшимися элементами так, что \(a\) превратится в \([1]\).

B. Восстание

жадные алгоритмы Конструктив *800

У вас есть массив \(a\) размера \(n\), состоящий только из нулей и единиц. Вы можете выполнять следующую операцию:

  • выбрать два индекса \(1 \le i , j \le n\), \(i \ne j\),
  • добавить \(a_{i}\) к \(a_{j}\),
  • удалить \(a_{i}\) из \(a\).

Обратите внимание, что элементы \(a\) могут стать больше \(1\) после выполнения некоторых операций. Также обратите внимание, что после операции \(n\) становится на \(1\) меньше.

Какое минимальное количество операций необходимо, чтобы сделать \(a\) неубывающим, т. е. каждый элемент должен быть не меньше предыдущего?

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Далее следует их описание.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 10^5\)), размер массива \(a\).

Следующая строка содержит \(n\) целых чисел \(a_{1}, a_{2}, \ldots a_{n}\) (\(a_i\) равно \(0\) или \(1\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, необходимых для сортировки \(a\) в неубывающем порядке.

Примечание

В первом наборе входных данных \(a\) уже неубывающий, поэтому никаких операций выполнять не нужно, и ответ равен \(0\).

Во втором наборе входных данных можно выполнить операцию для \(i = 1\) и \(j = 5\), тогда \(a\) будет равно \([0, 0, 1, 2]\) и станет неубывающим.

В третьем наборе входных данных можно выполнить операцию для \(i = 2\) и \(j = 1\), так что \(a\) будет равно \([1]\) и станет неубывающим.

C. Операции над перестановкой

жадные алгоритмы Конструктив математика реализация *1300

Вам дана перестановка \(a\) размера \(n\), и вы должны выполнить над ней \(n\) операций. В \(i\)-й операции вы должны выбрать непустой суффикс \(a\) и увеличить все его элементы на \(i\). Каким образом нужно выполнить операции, чтобы минимизировать количество инверсий в конечном массиве?

Обратите внимание, что вы можете выполнять операции с одним и тем же суффиксом любое количество раз.

Перестановкой размера \(n\) называется такой массив размера \(n\), где каждое целое число от \(1\) до \(n\) встречается ровно один раз. Суффиксом называются несколько последовательных элементов массива, включающие в себя последний элемент массива. Инверсией в массиве \(a\) называется пара индексов \((i, j)\) такая, что \(i > j\) и \(a_{i} < a_{j}\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Далее следует их описание.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — размер массива.

Вторая строка содержит \(n\) различных целых чисел \(a_{1}, a_{2}, \dots, a_{n}\) (\(1 \le a_i \le n\)) — исходная перестановка \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(x_{1}, x_{2}, \ldots, x_{n}\) (\(1 \le x_{i} \le n\) для каждого \(1 \le i \le n\)), указывающее, что \(i\)-я операция должна быть применена к суффиксу начиная с индекса \(x_{i}\). Если ответов несколько, выведите любой из них.

Примечание

В первом наборе входных данных одно из оптимальных решений — на каждой операции увеличивать весь массив (то есть суффикс, начинающийся с индекса \(1\)). Итоговый массив \([11, 12, 13, 14]\) будет содержать \(0\) инверсий.

Во втором наборе входных данных \(a\) будет равно \([2, 4, 3, 5, 6]\), \([2, 4, 3, 7, 8]\), \([2, 4, 6, 10, 11]\), \([2, 8, 10, 14, 15]\) и \([7, 13, 15, 19, 20]\) после первой, второй, третьей, четвертой и пятой операций соответственно. Таким образом, итоговый массив \(a\) будет иметь ноль инверсий.

E1. Задача-шутка (простая версия)

Бинарный поиск интерактив Конструктив Тернарный поиск *2500

Единственная разница между этой задачей и сложной версией — максимальное количество вопросов.

Это интерактивная задача!

Загадано некоторое целое число \(1 \le x \le n\), которое вам нужно найти. Чтобы найти его, вы можете задать не более \(\mathbf{82}\) вопросов.

В каждом вопросе вы можете выбрать непустое множество целых чисел \(S\) и спросить, принадлежит ли \(x\) множеству \(S\) или нет. После каждого запроса, если \(x\) принадлежит \(S\), вы получите «YES», иначе «NO».

Проблема в том, что не все ответы обязательно верны (некоторые из них шуточные). Гарантируется, что на каждые два последовательных вопроса хотя бы на один из них дан правильный ответ.

Вы также можете сделать не более \(2\) попыток угадать \(x\). Каждый раз, если вы правильно угадаете \(x\), вы получите «:)» и ваша программа должна завершиться, иначе вы получите «:(».

Как часть шутки, мы не будем фиксировать значение \(x\) в начале. Наоборот, это значение может изменяться в процессе взаимодействия, но все уже полученные ответы всегда будут корректны с точки зрения описанного выше.

Обратите внимание, что на ваши догадки ответа всегда отвечают правильно. Если вы задаете вопрос до и после догадки, по крайней мере на один из этих ваших вопросов будет дан правильный ответ, как обычно.

Входные данные

Единственная строка входных данных содержит единственное целое число \(n\) (\(1 \le n \le 10^5\)), максимально возможное значение \(x\).

Протокол взаимодействия

Для каждого вопроса, если вы хотите спросить о множестве \(S\), сначала выведите символ «?», затем выведите размер множества \(S\), а затем уже элементы \(S\) один за другим. Все элементы должны быть различными целыми числами от \(1\) до \(n\). После каждого вопроса вы получите ответ на него: «YES» или «NO» в соответствии с условием. Вы можете задать не более \(82\) таких запросов.

Если вы хотите угадать \(x\), сначала выведите «!», а затем выведите свою догадку. Если вы угадаете \(x\) правильно, вы получите «:)» и ваша программа должна завершиться, иначе вы получите «:(». Вы можете сделать не более \(2\) таких догадок.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы в этой задаче отключены.

Примечание

Если бы ответ на первый вопрос был правильным, то \(x\) было бы равно \(6\), но, как мы видим из первого предположения, \(6\) не является ответом.

Так что ответ на первый вопрос — шутка. Как мы знаем, ответ хотя бы на один из наших двух вопросов правильный, и так как ответ на первый вопрос был шутливым, ответ на второй вопрос должен быть правильным.

Итак, мы понимаем, что \(x\) не равно \(1, 2, 3\) или \(4\), и мы также знаем, что \(x\) не равно \(6\). Следовательно, \(x\) равно \(5\).

A. Две группы

жадные алгоритмы Конструктив *800

Вам дан массив \(a\), состоящий из \(n\) целых чисел. Вы хотите распределить эти \(n\) целых чисел в две группы \(s_1\) и \(s_2\) (группы могут быть пустыми) так, чтобы выполнялись следующие условия:

  • Для каждого \(i\) \((1 \leq i \leq n)\), \(a_i\) попадает ровно в одну группу.
  • Значение \(|sum(s_1)| - |sum(s_2)|\) является максимально возможным среди всех таких способов распределения этих чисел.

    Здесь \(sum(s_1)\) обозначает сумму чисел в группе \(s_1\), а \(sum(s_2)\) обозначает сумму чисел в группе \(s_2\).

Определите максимально возможное значение \(|sum(s_1)| - |sum(s_2)|\).

Входные данные

Входные данные состоят из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) \((1 \leq t \leq 2 \cdot 10^4)\)  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) \((1 \leq n \leq 10^5)\)  — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2 \ldots a_n\) \((-10^9 \leq a_i \leq 10^9)\)  — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число  — максимально возможное значение \(|sum(s_1)| - |sum(s_2)|\).

Примечание

В первом наборе входных данных, мы можем распределить числа как \(s_1 = \{10\}\), \(s_2 = \{-10\}\). Тогда значение будет \(|10| - |-10| = 0\).

Во втором наборе входных данных, мы можем распределить числа как \(s_1 = \{0, 11, -1\}\), \(s_2 = \{-2\}\). Тогда значение будет \(|0 + 11 - 1| - |-2| = 10 - 2 = 8\).

В третьем наборе входных данных, мы можем распределить числа как \(s_1 = \{2, 3, 2\}\), \(s_2 = \{\}\). Тогда значение будет \(|2 + 3 + 2| - |0| = 7\).

В четвертом наборе входных данных, мы можем распределить числа как \(s_1 = \{-9, -4, 0\}\), \(s_2 = \{2, 0\}\). Тогда значение будет \(|-9 - 4 + 0| - |2 + 0| = 13 - 2 = 11\).

B. Забаньте BAN

Конструктив *900

Вам дано целое число \(n\).

Определим \(s(n)\) как строку «BAN», повторенную \(n\) раз. Например, \(s(1)\) = «BAN», \(s(3)\) = «BANBANBAN». Заметим, что длина строки \(s(n)\) равна \(3n\).

Рассмотрим \(s(n)\). Вы можете выполнить следующую операцию над \(s(n)\) любое количество раз (возможно, нулевое):

  • Выберите любые два различных индекса \(i\) и \(j\) \((1 \leq i, j \leq 3n, i \ne j)\).
  • Затем поменяйте местами \(s(n)_i\) и \(s(n)_j\).

Вы хотите, чтобы строка «BAN» не встречалась в \(s(n)\) как подпоследовательность. Какое наименьшее количество операций нужно выполнить для достижения этой цели? Также найдите одну такую кратчайшую последовательность операций.

Строка \(a\) является подпоследовательностью строки \(b\), если \(a\) можно получить из \(b\) путем удаления нескольких (возможно, нуля или всех) символов.

Входные данные

Входные данные состоят из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) \((1 \leq t \leq 100)\)  — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) \((1 \leq n \leq 100)\).

Выходные данные

Для каждого набора входных данных в первой строке выведите \(m\) (\(0 \le m \le 10^5\)) — минимально необходимое количество операций. Гарантируется, что цель всегда достижима максимум за \(10^5\) операций при ограничениях задачи.

Затем выведите \(m\) строк. В \(k\)-й из этих строк должны содержаться два целых числа \(i_k\), \(j_k\) \((1\leq i_k, j_k \leq 3n, i_k \ne j_k)\), обозначающие, что вы хотите поменять местами символы с индексами \(i_k\) и \(j_k\) на \(k\)-й операции.

После всех \(m\) операций «BAN» не должно встречаться в \(s(n)\) как подпоследовательность.

Если существует несколько возможных ответов, выведите любой.

Примечание

В первом наборе входных данных, \(s(1) = \) «BAN», мы можем поменять местами \(s(1)_1\) и \(s(1)_2\), преобразуя \(s(1)\) в «ABN», которая не содержит «BAN» в качестве подпоследовательности.

Во втором наборе входных данных, \(s(2) = \) «BANBAN», мы можем поменять местами \(s(2)_2\) и \(s(2)_6\), преобразуя \(s(2)\) в «BNNBAA», которая не содержит «BAN» в качестве подпоследовательности.

D. Очередная задача

Бинарный поиск битмаски Конструктив Структуры данных *1900

Вам дан массив \(a\) из \(n\) целых чисел \(a_1, a_2, a_3, \ldots, a_n\).

Вы должны ответить на \(q\) независимых запросов, каждый из которых состоит из двух целых чисел \(l\) и \(r\).

  • Рассмотрим подмассив \(a[l:r]\) \(=\) \([a_l, a_{l+1}, \ldots, a_r]\). Вы можете применить следующую операцию к подмассиву любое количество раз (возможно, нулевое).
    1. Выберите два целых числа \(L\), \(R\) таких, что \(l \le L \le R \le r\) и \(R - L + 1\) является нечетным.
    2. Замените каждый элемент в подмассиве от \(L\) до \(R\) на XOR элементов в подмассиве \([L, R]\).
  • Ответом на запрос является минимальное количество операций, необходимых для того, чтобы все элементы подмассива \(a[l:r]\) стали равны \(0\), или \(-1\), если невозможно сделать их все равными \(0\).

Более подробную информацию об операции XOR можно найти здесь.

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) \((1 \le n, q \le 2 \cdot 10^5)\)  — длину массива \(a\) и количество запросов.

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((0 \le a_i \lt 2^{30})\)  — элементы массива \(a\).

В \(i\)-й из следующих \(q\) строк содержится два целых числа \(l_i\) и \(r_i\) \((1 \le l_i \le r_i \le n)\)  — описание \(i\)-го запроса.

Выходные данные

Для каждого запроса выведите одно целое число  — ответ на этот запрос.

Примечание

В первом запросе, \(l = 3, r = 4\), подмассив = \([3, 3]\). Мы можем применять операцию только к подмассивам длины \(1\), что не изменит массив; следовательно, невозможно сделать все элементы равными \(0\).

Во втором запросе, \(l = 4, r = 6\), подмассив = \([3, 1, 2]\). Мы можем выбрать весь подмассив \((L = 4, R = 6)\) и заменить все элементы на их XOR \((3 \oplus 1 \oplus 2) = 0\), получив подмассив \([0, 0, 0]\).

В пятом запрос, \(l = 1, r = 6\), подмассив = \([3, 0, 3, 3, 1, 2]\). Мы можем выполнить следующие операции:

  1. Выбираем \(L = 4, R = 6\), делая подмассив \([3, 0, 3, 0, 0, 0]\).
  2. Выбираем \(L = 1, R = 5\), делая подмассив \([0, 0, 0, 0, 0, 0]\).

D. ConstructOR

битмаски китайская теорема об остатках Комбинаторика Конструктив математика теория чисел *2100

Вам даны три целых числа \(a\), \(b\), \(d\). Найдите целое число \(x\), удовлетворяющее следующим требованиям, или сообщите, что такого числа не существует:

  • \(0 \le x \lt 2^{60}\);
  • \(a|x\) делится на \(d\);
  • \(b|x\) делится на \(d\).

Здесь \(|\) обозначает операцию побитового ИЛИ.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке даны три числа \(a\), \(b\) и \(d\) (\(1 \le a,b,d \lt 2^{30}\)).

Выходные данные

Для каждого набора входных данных выведите одно число:

  • если существует число \(x\), удовлетворяющее требованиям из условия, выведите \(x\);
  • иначе, выведите \(-1\).

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных одно из возможных решений \(x=18\). Оно корректно, так как \(39|18=55\) и \(12|18=30\) делятся на \(d=5\).

Во втором наборе входных данных одно из возможных решений \(x=14\). Оно корректно, так как \(8|14=6|14=14\) делится на \(d=14\).

Можно показать, что в третьем и четвёртом наборах входных данных решений не существует.

F. XOR-разворот циклического массива

битмаски Конструктив *3000

У вас есть массив \(a_0, a_1, \ldots, a_{n-1}\) длины \(n\). Изначально \(a_i = 2^i\) для всех \(0 \le i \lt n\). Обратите внимание, что элементы массива \(a\) нумеруются с нуля.

Вы хотите развернуть этот массив (то есть сделать \(a_i\) равным \(2^{n-1-i}\) для всех \(0 \le i \lt n\)). Чтобы сделать это, вы можете сделать следующую операцию не более \(250\,000\) раз:

  • Выбрать целое число \(i\) (\(0 \le i \lt n\)) и заменить \(a_i\) на \(a_i \oplus a_{(i+1)\bmod n}\).

Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Найдите любую последовательность операций, после выполнения которой массив \(a\) окажется развёрнутым. Можно показать, что при данных ограничениях решение всегда существует.

Входные данные

В первой строке дано одно число \(n\) (\(2 \le n \le 400\)) — длина массива \(a\).

Выходные данные

В первой строке выведите одно число \(k\) (\(0 \le k \le 250\,000\)) — количество использованных операций.

Во второй строке выведите \(k\) чисел \(i_1,i_2,\ldots,i_k\) (\(0 \le i_j \lt n\)), которые обозначают, что на \(j\)-й операции вы выбрали число \(i_j\).

Обратите внимание, что вам не требуется минимизировать количество операций.

Примечание

В примечании красным выделены элементы, находящиеся в позициях, к которым применяются операции.

В первом наборе входных данных массив \(a\) изменится следующим образом:

\([1,\color{red}{2}] \rightarrow [\color{red}{1},3] \rightarrow [2,\color{red}{3}] \rightarrow [2,1]\).

Во втором наборе входных данных массив \(a\) изменится следующим образом:

\([1,\color{red}{2},4] \rightarrow [\color{red}{1},6,4] \rightarrow [7,\color{red}{6},4] \rightarrow [\color{red}{7},2,4] \rightarrow [5,2,\color{red}{4}] \rightarrow [5,\color{red}{2},1] \rightarrow [\color{red}{5},3,1] \rightarrow [6,\color{red}{3},1] \rightarrow [\color{red}{6},2,1] \rightarrow [4,2,1]\).

E. Кактусовая стена

графы Конструктив кратчайшие пути поиск в глубину и подобное *2400

Монокарп играет в Minecraft и хочет построить стену из кактусов. Он хочет построить ее на поле из песка размера \(n \times m\) клеток. Изначально в некоторых ячейках поля есть кактусы. Обратите внимание, что в Minecraft кактусы не могут расти на соседних по стороне клетках; и начальное поле соответствует этому ограничению. Монокарп может сажать новые кактусы (они также должны соответствовать вышеупомянутому условию). Он не может срубить ни один из кактусов, которые уже растут на поле — у него нет топора, а кактусы слишком колючие для его рук.

Монокарп считает, что стена завершена, если нет пути от верхнего ряда поля к нижнему ряду, такого, что:

  • каждые две последовательные клетки в пути соседние по стороне;
  • ни одна ячейка, принадлежащая пути, не содержит кактуса.

Ваша задача — посадить минимальное количество кактусов, чтобы построить стену (или сообщить, что это невозможно).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(2 \le n, m \le 2 \cdot 10^5\); \(n \times m \le 4 \cdot 10^5\)) — количество строк и столбцов, соответственно.

Затем следуют \(n\) строк, \(i\)-я строка содержит строку \(s_i\) длины \(m\), где \(s_{i, j}\) равно '#', если на пересечении \(i\)-й строки и \(j\)-го столбца растет кактус, и \(s_{i, j}\) равно '.' в противном случае.

Сумма \(n \times m\) по всем наборам входных данных не превосходит \(4 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, в первой строку выведите NO, если невозможно построить стену кактусов не нарушая правил. В противном случае в первой строке выведите YES, затем выведите \(n\) строк по \(m\) символов — поле с кактусами, где \(j\)-й символ \(i\)-й строки равен '#', если на если на пересечении \(i\)-й строки и \(j\)-го столбца поля есть кактус, в противном случае символ равен '.'. Если существует несколько оптимальных решений, выведите любое из них.

A. Косвенная сортировка

Конструктив математика реализация *800

Вам дана перестановка \(a_1, a_2, \ldots, a_n\) размера \(n\), где каждое целое число от \(1\) до \(n\) встречается ровно один раз.

Вы можете выполнить следующую операцию любое количество раз (возможно, ноль):

  • Выбрать любые три индекса \(i, j, k\) (\(1 \le i < j < k \le n\)).
  • Если \(a_i > a_k\), заменить \(a_i\) на \(a_i + a_j\). В противном случае поменять местами \(a_j\) и \(a_k\).

Определите, можно ли отсортировать массив \(a\) в порядке неубывания.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 10\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\dots,a_n\) (\(1 \le a_i \le n\), \(a_i \neq a_j\), если \(i \neq j\)) — элементы массива \(a\).

Выходные данные

Для каждого набора входных данных выведите «Yes» (без кавычек), если массив можно отсортировать в неубывающем порядке, и «No» (без кавычек) в противном случае.

Вы можете вывести «Yes» и «No» в любом регистре (например, строки «YES», «yEs» и «yes» будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных массив \([1,2,3]\) уже отсортирован в порядке неубывания.

Во втором наборе входных данных мы можем выбрать \(i = 1,j = 2,k = 3\). Так как \(a_1 \le a_3\), поменяем местами \(a_2\) и \(a_3\), тогда массив станет \([1,2,3]\), который отсортирован в порядке неубывания.

В седьмом наборе входных данных мы можем последовательно выполнять следующие операции:

  • Выберем \(i = 5,j = 6,k = 7\). Поскольку \(a_5 \le a_7\), поменяем местами \(a_6\) и \(a_7\), тогда массив станет \([1,2,6,7,4,5,3]\).
  • Выберем \(i = 5,j = 6,k = 7\). Поскольку \(a_5 > a_7\), заменим \(a_5\) на \(a_5+a_6=9\), тогда массив станет \([1,2,6,7,9,5,3]\).
  • Выберем \(i = 2,j = 5,k = 7\). Поскольку \(a_2 \le a_7\), поменяем местами \(a_5\) и \(a_7\), тогда массив станет \([1,2,6,7,3,5,9]\).
  • Выберем \(i = 2,j = 4,k = 6\). Поскольку \(a_2 \le a_6\), поменяем местами \(a_4\) и \(a_6\), тогда массив станет \([1,2,6,5,3,7,9]\).
  • Выберем \(i = 1,j = 3,k = 5\). Поскольку \(a_1 \le a_5\), поменяем местами \(a_3\) и \(a_5\), тогда массив станет \([1,2,3,5,6,7,9]\), который отсортирован в порядке неубывания.

В третьем, четвертом, пятом и шестом наборах входных данных можно показать, что массив нельзя отсортировать в порядке неубывания.

C. Дополненный XOR

Конструктив реализация *1400

У вас есть две бинарные строки \(a\) и \(b\) длины \(n\). Вы хотите сделать все элементы обеих строк равными \(0\). К сожалению, вы можете изменять содержимое этих строк, используя только следующую операцию:

  • Вы выбираете два индекса \(l\) и \(r\) (\(1 \le l \le r \le n\));
  • Для каждого \(i\), соответствующего \(l \le i \le r\), заменить \(a_i\) на противоположное. То есть \(a_i := 1 - a_i\);
  • Для каждого \(i\), удовлетворяющего либо \(1 \le i < l\), либо \(r < i \le n\), заменить \(b_i\) на противоположное. То есть \(b_i := 1 - b_i\).

Ваша задача — определить, возможно ли это, и если да, то найти такую подходящую последовательность операций. Количество операций не должно превышать \(n + 5\). Можно доказать, что если такая последовательность операций существует, то существует и последовательность с не более чем \(n + 5\) операциями.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — длину строк.

Вторая строка каждого набора входных данных содержит бинарную строку \(a\), состоящую только из символов 0 и 1, длины \(n\).

Третья строка каждого набора входных данных содержит бинарную строку \(b\), состоящую только из символов 0 и 1, длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите сначала «YES», если возможно сделать все элементы обеих строк равными \(0\). В противном случае выведите «NO». Если ответ «YES», в следующей строке выведите одно целое число \(k\) (\(0 \le k \le n + 5\)) — количество операций. Далее должны следовать \(k\) строк, каждая из которых содержит два целых числа \(l\) и \(r\) (\(1 \le l \le r \le n\)) — описание операции.

Если правильных ответов несколько, выведите любой из них.

Примечание

В первом наборе входных данных мы можем выполнить одну операцию с \(l = 2\) и \(r = 2\). Итак, \(a_2 := 1 - 1 = 0\) и строка \(a\) стала равной 000. \(b_1 := 1 - 1 = 0\), \(b_3 := 1 - 1 = 0\) и строка \(b\) стала равной 000.

Во втором и третьем наборах входных данных можно доказать, что невозможно сделать все элементы обеих строк равными \(0\).

В четвертом наборе входных данных мы можем выполнить операцию с \(l = 1\) и \(r = 2\), тогда строка \(a\) станет равной 01, а строка \(b\) не изменится. Затем выполняем операцию с \(l = 2\) и \(r = 2\), тогда \(a_2 := 1 - 1 = 0\) и \(b_1 = 1 - 1 = 0\). Итак, обе строки \(a\) и \(b\) стали равны 00.

В пятом наборе входных данных мы можем выполнить операцию с \(l = 1\) и \(r = 1\). Затем строка \(a\) стала равной 011, а строка \(b\) стала равной 100. Тогда мы можем выполнить операцию с \(l = 2\) и \(r = 3\), чтобы обе строки \(a\) и \(b\) стали равны 000.

H. BinaryStringForces

дп Конструктив Структуры данных *3500

Вам дана бинарная строка \(s\) длины \(n\). Определим максимальную подстроку как подстроку, которую нельзя расширить, сохраняя при этом все элементы равными. Например, в строке \(11000111\) есть три максимальные подстроки: \(11\), \(000\) и \(111\).

За одну операцию можно выбрать две максимальные соседние подстроки. Поскольку они максимальные и соседние, легко видеть, что их элементы должны иметь разные значения. Пусть \(a\) — длина последовательности единиц, а \(b\) — длина последовательности нулей. Затем сделайте следующее:

  • Если \(a \ge b\), то заменить \(b\) выбранных нулей на \(b\) единиц.
  • Если \(a < b\), то заменить \(a\) выбранных единиц на \(a\) нулей.

Например, для \(1110000\) мы превратим в \(0000000\), для \(0011\) мы превратим в \(1111\). Мы называем строку хорошей, если ее можно превратить в \(1111...1111\) с помощью применения вышеупомянутой операции произвольное количество раз (возможно, ноль). Найдите количество хороших подстрок среди всех \(\frac{n(n+1)}{2}\) непустых подстрок \(s\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину строки \(s\).

Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого теста выведите одно целое число — количество хороших подстрок.

Примечание

Определим подстроку от индекса \(l\) до индекса \(r\) как \([l, r]\).

Для первого теста хорошими подстроками являются:

  • \([1,1]\),
  • \([1,2]\),
  • \([3,6]\),
  • \([4,5]\),
  • \([4,6]\),
  • \([5,5]\),
  • \([5,6]\),
  • \([6,6]\).

Во втором наборе входных данных все подстроки хорошие, кроме \([2,2]\).

В третьем наборе входных данных все подстроки хорошие.

A1. Нулевая сумма (простая версия)

дп жадные алгоритмы Конструктив *1300

Это простая версия задачи. Разница между версиями заключается в том, что в этой версии массив не содержит нулей. Вы можете делать взломы только в том случае, если обе версии задачи решены.

Вам дан массив \([a_1, a_2, \ldots a_n]\), состоящий из чисел \(-1\) и \(1\). Требуется предъявить разбиение этого массива на несколько отрезков \([l_1, r_1], [l_2, r_2], \ldots, [l_k, r_k]\), обладающее следующим свойством:

  • Обозначим за \(s_i\) знакопеременную сумму элементов в \(i\)-м отрезке, то есть \(s_i\) = \(a_{l_i} - a_{l_i+1} + a_{l_i+2} - a_{l_i+3} + \ldots \pm a_{r_i}\). Например знакопеременная сумма на отрезке \([2, 4]\) в массиве \([1, 0, -1, 1, 1]\) равна \(0 - (-1) + 1 = 2\).
  • Сумма значений \(s_i\) по всем отрезкам из разбиения должна быть равна нулю.

Обратите внимание, каждое \(s_i\) не обязано равняться 0, условие стоит только на сумму \(s_i\) по всем отрезкам разбиения.

Набор отрезков \([l_1, r_1], [l_2, r_2], \ldots, [l_k, r_k]\) называется разбиением массива \(a\) длины \(n\), если \(1 = l_1 \le r_1, l_2 \le r_2, \ldots, l_k \le r_k = n\), причем для всех \(i = 1, 2, \ldots k-1\) выполняется \(r_i + 1 = l_{i+1}\). Иными словами, каждый элемент массива должен принадлежать ровно одному отрезку.

Требуется предъявить разбиение массива, обладающее описанными свойствами, или сказать, что такого разбиения не существует.

Обратите внимание, минимизировать количество отрезков в разбиении не требуется.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. Далее следуют описания наборов:

Первая строка каждого описания содержит единственное целое число \(n\) (\(1 \le n \le 200\,000\)) — длину массива \(a\).

Вторая строка каждого описания содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(a_i\) равно \(-1\) или \(1\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(200\,000\).

Выходные данные

Для каждого набора входных данных выведите целое число \(k\) — количество отрезков в получившемся разбиении. Если требуемого разбиения не существует, выведите \(-1\).

Далее, если разбиение существует, то в \(i\)-й из следующих \(k\) строк выведите два целых числа \(l_i\) и \(r_i\) — границы \(i\)-го отрезка. При этом должны выполняться условия:

  • \(l_i \le r_i\) для всех \(i\) от \(1\) до \(k\).
  • \(l_{i + 1} = r_i + 1\) для всех \(i\) от \(1\) до \((k - 1)\).
  • \(l_1 = 1, r_k = n\).

Если существует несколько корректных разбиений массива на отрезки, разрешается вывести любое из них.

Примечание

В первом наборе входных данных массив можно разбить на один отрезок длины \(4\). Сумма на этом отрезке будет равна \(1 - 1 + 1 - 1 = 0\).

Во втором наборе входных данных массив можно разбить на два отрезка длины \(3\). В первом из них знакопеременная сумма будет равна \(-1 -1 + 1 = -1\), а во втором: \(1 - 1 + 1 = 1\). Получаем общую сумму: \(-1 + 1 = 0\).

В третьем и четвертом наборах входных данных можно показать, что требуемого разбиения не существует.

A1. Нулевая сумма (простая версия)

дп жадные алгоритмы Конструктив *1300

Это простая версия задачи. Разница между версиями заключается в том, что в этой версии массив не содержит нулей. Вы можете делать взломы только в том случае, если обе версии задачи решены.

Вам дан массив \([a_1, a_2, \ldots a_n]\), состоящий из чисел \(-1\) и \(1\). Требуется предъявить разбиение этого массива на несколько отрезков \([l_1, r_1], [l_2, r_2], \ldots, [l_k, r_k]\), обладающее следующим свойством:

  • Обозначим за \(s_i\) знакопеременную сумму элементов в \(i\)-м отрезке, то есть \(s_i\) = \(a_{l_i} - a_{l_i+1} + a_{l_i+2} - a_{l_i+3} + \ldots \pm a_{r_i}\). Например знакопеременная сумма на отрезке \([2, 4]\) в массиве \([1, 0, -1, 1, 1]\) равна \(0 - (-1) + 1 = 2\).
  • Сумма значений \(s_i\) по всем отрезкам из разбиения должна быть равна нулю.

Обратите внимание, каждое \(s_i\) не обязано равняться 0, условие стоит только на сумму \(s_i\) по всем отрезкам разбиения.

Набор отрезков \([l_1, r_1], [l_2, r_2], \ldots, [l_k, r_k]\) называется разбиением массива \(a\) длины \(n\), если \(1 = l_1 \le r_1, l_2 \le r_2, \ldots, l_k \le r_k = n\), причем для всех \(i = 1, 2, \ldots k-1\) выполняется \(r_i + 1 = l_{i+1}\). Иными словами, каждый элемент массива должен принадлежать ровно одному отрезку.

Требуется предъявить разбиение массива, обладающее описанными свойствами, или сказать, что такого разбиения не существует.

Обратите внимание, минимизировать количество отрезков в разбиении не требуется.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. Далее следуют описания наборов:

Первая строка каждого описания содержит единственное целое число \(n\) (\(1 \le n \le 200\,000\)) — длину массива \(a\).

Вторая строка каждого описания содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(a_i\) равно \(-1\) или \(1\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(200\,000\).

Выходные данные

Для каждого набора входных данных выведите целое число \(k\) — количество отрезков в получившемся разбиении. Если требуемого разбиения не существует, выведите \(-1\).

Далее, если разбиение существует, то в \(i\)-й из следующих \(k\) строк выведите два целых числа \(l_i\) и \(r_i\) — границы \(i\)-го отрезка. При этом должны выполняться условия:

  • \(l_i \le r_i\) для всех \(i\) от \(1\) до \(k\).
  • \(l_{i + 1} = r_i + 1\) для всех \(i\) от \(1\) до \((k - 1)\).
  • \(l_1 = 1, r_k = n\).

Если существует несколько корректных разбиений массива на отрезки, разрешается вывести любое из них.

Примечание

В первом наборе входных данных массив можно разбить на один отрезок длины \(4\). Сумма на этом отрезке будет равна \(1 - 1 + 1 - 1 = 0\).

Во втором наборе входных данных массив можно разбить на два отрезка длины \(3\). В первом из них знакопеременная сумма будет равна \(-1 -1 + 1 = -1\), а во втором: \(1 - 1 + 1 = 1\). Получаем общую сумму: \(-1 + 1 = 0\).

В третьем и четвертом наборах входных данных можно показать, что требуемого разбиения не существует.

A1. Нулевая сумма (простая версия)

дп жадные алгоритмы Конструктив *1300

Это простая версия задачи. Разница между версиями заключается в том, что в этой версии массив не содержит нулей. Вы можете делать взломы только в том случае, если обе версии задачи решены.

Вам дан массив \([a_1, a_2, \ldots a_n]\), состоящий из чисел \(-1\) и \(1\). Требуется предъявить разбиение этого массива на несколько отрезков \([l_1, r_1], [l_2, r_2], \ldots, [l_k, r_k]\), обладающее следующим свойством:

  • Обозначим за \(s_i\) знакопеременную сумму элементов в \(i\)-м отрезке, то есть \(s_i\) = \(a_{l_i} - a_{l_i+1} + a_{l_i+2} - a_{l_i+3} + \ldots \pm a_{r_i}\). Например знакопеременная сумма на отрезке \([2, 4]\) в массиве \([1, 0, -1, 1, 1]\) равна \(0 - (-1) + 1 = 2\).
  • Сумма значений \(s_i\) по всем отрезкам из разбиения должна быть равна нулю.

Обратите внимание, каждое \(s_i\) не обязано равняться 0, условие стоит только на сумму \(s_i\) по всем отрезкам разбиения.

Набор отрезков \([l_1, r_1], [l_2, r_2], \ldots, [l_k, r_k]\) называется разбиением массива \(a\) длины \(n\), если \(1 = l_1 \le r_1, l_2 \le r_2, \ldots, l_k \le r_k = n\), причем для всех \(i = 1, 2, \ldots k-1\) выполняется \(r_i + 1 = l_{i+1}\). Иными словами, каждый элемент массива должен принадлежать ровно одному отрезку.

Требуется предъявить разбиение массива, обладающее описанными свойствами, или сказать, что такого разбиения не существует.

Обратите внимание, минимизировать количество отрезков в разбиении не требуется.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. Далее следуют описания наборов:

Первая строка каждого описания содержит единственное целое число \(n\) (\(1 \le n \le 200\,000\)) — длину массива \(a\).

Вторая строка каждого описания содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(a_i\) равно \(-1\) или \(1\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(200\,000\).

Выходные данные

Для каждого набора входных данных выведите целое число \(k\) — количество отрезков в получившемся разбиении. Если требуемого разбиения не существует, выведите \(-1\).

Далее, если разбиение существует, то в \(i\)-й из следующих \(k\) строк выведите два целых числа \(l_i\) и \(r_i\) — границы \(i\)-го отрезка. При этом должны выполняться условия:

  • \(l_i \le r_i\) для всех \(i\) от \(1\) до \(k\).
  • \(l_{i + 1} = r_i + 1\) для всех \(i\) от \(1\) до \((k - 1)\).
  • \(l_1 = 1, r_k = n\).

Если существует несколько корректных разбиений массива на отрезки, разрешается вывести любое из них.

Примечание

В первом наборе входных данных массив можно разбить на один отрезок длины \(4\). Сумма на этом отрезке будет равна \(1 - 1 + 1 - 1 = 0\).

Во втором наборе входных данных массив можно разбить на два отрезка длины \(3\). В первом из них знакопеременная сумма будет равна \(-1 -1 + 1 = -1\), а во втором: \(1 - 1 + 1 = 1\). Получаем общую сумму: \(-1 + 1 = 0\).

В третьем и четвертом наборах входных данных можно показать, что требуемого разбиения не существует.

A2. Нулевая сумма (сложная версия)

дп жадные алгоритмы Конструктив *1500

Это сложная версия задачи. Разница между версиями заключается в том, что в этой версии массив содержит нули. Вы можете делать взломы только в том случае, если обе версии задачи решены.

Вам дан массив \([a_1, a_2, \ldots a_n]\), состоящий из чисел \(-1\), \(0\) и \(1\). Требуется предъявить разбиение этого массива на несколько отрезков \([l_1, r_1], [l_2, r_2], \ldots, [l_k, r_k]\), обладающее следующим свойством:

  • Обозначим за \(s_i\) знакопеременную сумму элементов в \(i\)-м отрезке, то есть \(s_i\) = \(a_{l_i} - a_{l_i+1} + a_{l_i+2} - a_{l_i+3} + \ldots \pm a_{r_i}\). Например знакопеременная сумма на отрезке \([2, 4]\) в массиве \([1, 0, -1, 1, 1]\) равна \(0 - (-1) + 1 = 2\).
  • Сумма значений \(s_i\) по всем отрезкам из разбиения должна быть равна нулю.

Обратите внимание, каждое \(s_i\) не обязано равняться 0, условие стоит только на сумму \(s_i\) по всем отрезкам разбиения.

Набор отрезков \([l_1, r_1], [l_2, r_2], \ldots, [l_k, r_k]\) называется разбиением массива \(a\) длины \(n\), если \(1 = l_1 \le r_1, l_2 \le r_2, \ldots, l_k \le r_k = n\), причем для всех \(i = 1, 2, \ldots k-1\) выполняется \(r_i + 1 = l_{i+1}\). Иными словами, каждый элемент массива должен принадлежать ровно одному отрезку.

Требуется предъявить разбиение массива, обладающее описанными свойствами, или сказать, что такого разбиения не существует.

Обратите внимание, минимизировать количество отрезков в разбиении не требуется.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. Далее следуют описания наборов:

Первая строка каждого описания содержит единственное целое число \(n\) (\(1 \le n \le 200\,000\)) — длину массива \(a\).

Вторая строка каждого описания содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(a_i\) равно \(-1\), \(0\) или \(1\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(200\,000\).

Выходные данные

Для каждого набора входных данных выведите целое число \(k\) — количество отрезков в получившемся разбиении. Если требуемого разбиения не существует, выведите \(-1\).

Далее, если разбиение существует, то в \(i\)-й из следующих \(k\) строк выведите два целых числа \(l_i\) и \(r_i\) — границы \(i\)-го отрезка. При этом должны выполняться условия:

  • \(l_i \le r_i\) для всех \(i\) от \(1\) до \(k\).
  • \(l_{i + 1} = r_i + 1\) для всех \(i\) от \(1\) до \((k - 1)\).
  • \(l_1 = 1, r_k = n\).

Если существует несколько корректных разбиений массива на отрезки, разрешается вывести любое из них.

Примечание

В первом наборе входных данных массив можно просто разбить на \(4\) отрезка по одному элементу, равному \(0\). Тогда общая сумма будет равна \(0 + 0 + 0 + 0 = 0\).

Во втором наборе входных данных массив разбивается на \(4\) отрезка. На первом из них знакопеременная сумма будет равна \(-1\), на втором \(1\), на третьем \(0 - 1 + 0 = -1\), на четвёртом \(1 - 0 = 1\). Получаем общую сумму: \(-1 + 1 -1 + 1 = 0\).

В третьем наборе входных данных можно показать, что требуемого разбиения не существует.

D. Пляж

графы Конструктив кратчайшие пути поиск в глубину и подобное *2400

Андрей обожает море. Именно поэтому в разгар летнего сезона он решил отправиться на пляж, взяв с собой лежак, чтобы позагорать.

Пляж представляет собой прямоугольное поле, состоящее из \(n\) строк и \(m\) столбцов. Некоторые клетки этого поля свободны, на некоторых расположены дорожки, камни, ларьки и другие несдвигаемые объекты, а так же на двух соседних по стороне клетках могут стоять лежаки, расположенные как горизонтально, так и вертикально.

Андрей надеется поставить где-то свой лежак, но вот незадача, свободных мест для него может уже не быть! Именно поэтому Андрей просит вас помочь найти ему свободное место для лежака. Лежак Андрея тоже должен занимать две соседние по стороне клетки.

Если двух соседних свободных клеток нет, то для того, чтобы освободить место для лежака, придется потревожить других туристов. Для этого вы можете делать следующие действия:

  • Подойти к любому лежаку, и доставив \(p\) единиц дискомфорта его хозяину, поднять лежак за одну из сторон и повернуть на \(90\) градусов. Одна из половин лежака должна остаться в той же клетке, а вторая переместиться в свободную клетку. При этом во время поворота на пути лежака может быть что угодно.
    Поворот лежака на \(90\) градусов вокруг клетки \((1, 2)\).
  • Подойти к любому лежаку, и доставив \(q\) единиц дискомфорта его хозяину, подвинуть лежак вдоль его длинной стороны на одну клетку. Одна сторона лежака должна переместиться на место другой, а другая — в свободную клетку.
    Сдвиг лежака на одну клетку вправо.

В любой момент времени каждый лежак занимает две соседние клетки, не содержащие ничего другого. Вы можете двигать одновременно максимум один лежак.

Помогите Андрею освободить место для еще одного лежака, доставив минимальное количество дискомфорта окружающим, или скажите, что сделать это не получится.

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 300\,000\), \(1 \le n \cdot m \le 300\,000\)) — количество строк и столбцов на поле.

Вторая строка содержит два целых числа \(p\) и \(q\) (\(1 \le p, q \le 10^9\)) — количество единиц дискомфорта, которые приносят поворот и сдвиг лежака, соответственно.

Каждая из следующих \(n\) строк содержит \(m\) символов, описывающие клетки поля. Все строки состоят из символов «L», «R», «D», «U», «.» и «#», задающих тип клетки. Символы «L», «R», «D» и «U» обозначают половину лежака, находящегося в этой клетке — левая, правая, нижняя или верхняя половина, соответственно. Символ «.» обозначает свободную клетку, а символ «#» — клетку, занятую несдвигаемым объектом.

Выходные данные

Выведите одно число — минимальное количество дискомфорта, которое возникнет при освобождении места для лежака. Если освободить место для лежака невозможно, выведите число \(-1\).

Примечание

В первом примере, передвинув верхний лежак налево, а нижний лежак направо, Андрей сможет вертикально поставить лежак посередине пляжа. Таким образом, мы доставим \(2 + 2 = 4\) единицы дискомфорта. Можно показать, что доставить меньшее количество дискомфорта не получится.

Оптимальные действия в первом примере (лежак Андрея обозначен белым цветом).
Во втором примере из условия невозможно освободить место для лежака Андрея. Всевозможные состояния пляжа после поворотов и сдвигов показаны в условии задачи.

B. Кевин и перестановка

жадные алгоритмы Конструктив математика *800

Кевину на день рождения подарили множество попарно различных чисел \(1, 2, 3, \ldots, n\).

Он хочет упорядочить эти числа таким образом, чтобы минимальное значение модуля разности двух соседних чисел было как можно больше. Более формально, если Кевин расположит числа в порядке \(p_1, p_2, \ldots, p_n\), он хочет максимизировать величину \(\)\min \limits_{i=1}^{n - 1} \lvert p_{i + 1} - p_i \rvert,\(\) где \(|x|\) обозначает модуль числа \(x\).

Помогите Кевину сделать это.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \leq 1\,000\)) — количество чисел в множестве.

Выходные данные

Для каждого набора входных данных выведите строку, содержащую \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)), описывающую порядок чисел, при котором минимальное значение модуля разности двух соседних чисел максимально.

Формально, нужно вывести перестановку \(p\), которая максимизирует величину \(\min \limits_{i=1}^{n - 1} \lvert p_{i + 1} - p_i \rvert\).

Если существует несколько оптимальных решений, выведите любое из них.

Примечание

В первом наборе входных данных минимальное значение модуля разности двух соседних чисел равно \(\min \{\lvert 4 - 2 \rvert, \lvert 1 - 4 \rvert, \lvert 3 - 1 \rvert \} = \min \{2, 3, 2\} = 2\). Несложно показать, что это оптимальный ответ.

Во втором наборе входных данных любая перестановка чисел \(1, 2, 3\) является оптимальным ответом. Минимальное значение модуля разности двух соседних чисел равно \(1\).

A. Ддввооииттссяя вв ггллааззаахх

Конструктив Строки *800

Палиндромом называется строка, которая читается одинаково слева направо и справа налево. Например, строки \(\texttt{z}\), \(\texttt{aaa}\), \(\texttt{aba}\) и \(\texttt{abccba}\) — палиндромы, а \(\texttt{codeforces}\) и \(\texttt{ab}\) — нет.

Удвоением строки \(s\) называется строка, полученная записыванием каждой буквы два раза. Например, удвоение \(\texttt{seeing}\) — это \(\texttt{sseeeeiinngg}\).

Вам дана строка \(s\). Переставьте буквы в ее удвоении так, чтобы получился палиндром. Выведите полученную строку. Можно показать, что это всегда можно сделать.

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Каждый набор входных данных содержит одну строку \(s\) (\(1 \leq |s| \leq 100\)), состоящую только из строчных латинских букв.

Обратите внимание, что нет ограничения на сумму \(|s|\) по всем наборам входных данных.

Выходные данные

Для каждого набора входных данных выведите палиндром длины \(2 \cdot |s|\), являющийся перестановкой удвоения \(s\).

Примечание

В первом примере удвоением \(\texttt{a}\) является \(\texttt{aa}\), что уже палиндром.

Во втором примере удвоением \(\texttt{sururu}\) является \(\texttt{ssuurruurruu}\). Если передвинуть первую \(\texttt{s}\) в конец, получится \(\texttt{suurruurruus}\), что палиндром.

В третьем примере удвоением \(\texttt{errorgorn}\) является \(\texttt{eerrrroorrggoorrnn}\). Можно переупорядочить буквы так, чтобы получился \(\texttt{rgnororerrerorongr}\), что является палиндромом.

A. Ддввооииттссяя вв ггллааззаахх

Конструктив Строки *800

Палиндромом называется строка, которая читается одинаково слева направо и справа налево. Например, строки \(\texttt{z}\), \(\texttt{aaa}\), \(\texttt{aba}\) и \(\texttt{abccba}\) — палиндромы, а \(\texttt{codeforces}\) и \(\texttt{ab}\) — нет.

Удвоением строки \(s\) называется строка, полученная записыванием каждой буквы два раза. Например, удвоение \(\texttt{seeing}\) — это \(\texttt{sseeeeiinngg}\).

Вам дана строка \(s\). Переставьте буквы в ее удвоении так, чтобы получился палиндром. Выведите полученную строку. Можно показать, что это всегда можно сделать.

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Каждый набор входных данных содержит одну строку \(s\) (\(1 \leq |s| \leq 100\)), состоящую только из строчных латинских букв.

Обратите внимание, что нет ограничения на сумму \(|s|\) по всем наборам входных данных.

Выходные данные

Для каждого набора входных данных выведите палиндром длины \(2 \cdot |s|\), являющийся перестановкой удвоения \(s\).

Примечание

В первом примере удвоением \(\texttt{a}\) является \(\texttt{aa}\), что уже палиндром.

Во втором примере удвоением \(\texttt{sururu}\) является \(\texttt{ssuurruurruu}\). Если передвинуть первую \(\texttt{s}\) в конец, получится \(\texttt{suurruurruus}\), что палиндром.

В третьем примере удвоением \(\texttt{errorgorn}\) является \(\texttt{eerrrroorrggoorrnn}\). Можно переупорядочить буквы так, чтобы получился \(\texttt{rgnororerrerorongr}\), что является палиндромом.

B. ИЛИ = среднее

Конструктив *900

Вам дано целое число \(n\). Найдите последовательность из \(n\) целых чисел \(a_1, a_2, \dots, a_n\) таких, что \(1 \leq a_i \leq 10^9\) для всех \(i\) и \(\)a_1 \oplus a_2 \oplus \dots \oplus a_n = \frac{a_1 + a_2 + \dots + a_n}{n},\(\) где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Можно показать, что существует последовательность целых чисел, которая удовлетворяет условиям, упомянутым сверху.

Входные данные

Первая строка содержит \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — длину последовательности, которую вам необходимо найти.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(a_1, a_2, \dots, a_n\), которые удовлетворяют условиям задачи.

Если решений несколько, вывести любое.

Примечание

В первом примере \(69 = \frac{69}{1} = 69\).

Во втором примере \(13 \oplus 2 \oplus 8 \oplus 1 = \frac{13 + 2 + 8 + 1}{4} = 6\).

D. Интервал = √Суммы

Бинарный поиск Конструктив математика Перебор *1800

Вам дано целое число \(n\). Найдите последовательность из \(n\) различных целых чисел \(a_1, a_2, \dots, a_n\) такую, что \(1 \leq a_i \leq 10^9\) для всех \(i\), и \(\)\max(a_1, a_2, \dots, a_n) - \min(a_1, a_2, \dots, a_n)= \sqrt{a_1 + a_2 + \dots + a_n}.\(\)

Можно показать, что существует последовательность различных целых чисел, удовлетворяющая всем условиям выше.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 3 \cdot 10^5\)) — длину последовательности, которую вам нужно найти.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) различных целых чисел \(a_1, a_2, \dots, a_n\), удовлетворяющих условиям.

Если существуют несколько решений, выведите любое из них. Обратите внимание, числа должны быть различными!

Примечание

В первом примере максимум равен \(3\), минимум \(1\), сумма \(4\), и \(3 - 1 = \sqrt{4}\).

Во втором примере максимум равен \(29\), минимум \(18\), сумма \(121\), и \(29-18 = \sqrt{121}\).

В каждом случае все числа различны.

F. Приличное разделение

Конструктив Структуры данных *3000

Бинарной строкой называется строка, каждый символ которой это \(\texttt{0}\) или \(\texttt{1}\). Назовем бинарную строку приличной, если в ней поровну символов \(\texttt{0}\) и \(\texttt{1}\).

Изначально у вас есть бесконечная бинарная строка \(t\), все символы которой равны \(\texttt{0}\). Вам дана последовательность целых чисел \(a\) из \(n\) обновлений, где \(a_i\) означает, что символ на позиции \(a_i\) будет изменен на противоположный (\(\texttt{0} \leftrightarrow \texttt{1}\)). Вам нужно поддерживать и изменять после каждого обновления множество \(S\) непересекающихся отрезков таких, что

  • для каждого отрезка \([l,r]\) строка \(t_l \dots t_r\) является приличной бинарной строкой, и
  • для каждого индекса \(i\) такого, что \(t_i = \texttt{1}\), существует отрезок \([l,r]\) в \(S\) такой, что \(l \leq i \leq r\).

Вам нужно выводить только отрезки, которые вы удаляете или добавляете в множество \(S\) после каждого обновления. В вашем ответе добавлений и удалений в \(S\) должно быть не более чем \(\mathbf{10^6}\).

Формально, пусть \(S_i\) — множество отрезков после \(i\)-го обновления, где \(S_0 = \varnothing\) (пустое множество). Определим \(X_i\) как множество отрезков, удаленных из множества после \(i\)-го обновления, и \(Y_i\) как множество отрезков, добавленных в множество после \(i\)-го обновления. Тогда для каждого \(1 \leq i \leq n\) выполняется \(S_i = (S_{i - 1} \setminus X_i) \cup Y_i\). Для каждого \(1 \leq i \leq n\) должно выполняться следующее:

  • \(\forall a,b \in S_i, (a \neq b) \rightarrow (a \cap b = \varnothing)\);
  • \(X_i \subseteq S_{i - 1}\);
  • \((S_{i-1} \setminus X_i) \cap Y_i = \varnothing\);
  • \(\displaystyle\sum_{i = 1}^n {(|X_i| + |Y_i|)} \leq 10^6\).
Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество обновлений.

Каждая из следующих \(n\) строк содержит одно целое число \(a_i\) (\(1 \leq a_i \leq 2 \cdot 10^5\)) — номер символа, к которому применяется \(i\)-е обновление.

Выходные данные

После \(i\)-го обновления сначала одно целое число \(x_i\) — количество отрезков, которое нужно удалить из \(S\) после обновления \(i\).

В каждой из следующих \(x_i\) строк выведите два целых числа \(l\) и \(r\) (\(1 \leq l < r \leq 10^6\)), определяющие отрезок \([l,r]\), который должен быть удален из \(S\). Каждый из этих отрезков должен быть уникальным и содержаться в \(S\).обозначающее

В следующей строке выведите одно целое число \(y_i\) — количество отрезков, которое нужно добавить в \(S\) после обновления \(i\).

В каждой из следующих \(y_i\) строк выведите два целых числа \(l\) и \(r\) (\(1 \leq l < r \leq 10^6\)), определяющие отрезок \([l,r]\), который должен быть добавлен в \(S\). Каждый из этих отрезков должен быть уникальным и не содержаться в \(S\).

Общее количество добавлений и удалений после всех обновлений не должно превосходить \(\mathbf{10^6}\).

После каждого обновления после всех удалений и добавлений все отрезки в \(S\) должны быть непересекающимися и покрывать все единицы.

Можно показать, что ответ всегда существует при данных ограничениях.

Примечание

В примере вывода приведены дополнительные переводы строк для ясности, вам не обязательно их выводить.

После первого обновления множество индексов, в которых \(a_i = 1\), это \(\{1\}\). Отрезок \([1, 2]\) добавлен, поэтому \(S_1 = \{[1, 2]\}\), в нем один \(\texttt{0}\) и одна \(\texttt{1}\).

После второго обновления множество индексов, в которых \(a_i = 1\), это \(\{1, 6\}\). Отрезок \([5, 6]\) добавлен, поэтому \(S_2 = \{[1, 2], [5, 6]\}\), в каждом из них один \(\texttt{0}\) и одна \(\texttt{1}\).

После третьего обновления множество индексов, в которых \(a_i = 1\), это \(\{1, 5, 6\}\). Отрезок \([5, 6]\) удален, а отрезки \([4, 5]\) и \([6, 7]\) добавлены, поэтому \(S_3 = \{[1, 2], [4, 5], [6, 7]\}\), в каждом из них один \(\texttt{0}\) и одна \(\texttt{1}\).

После четвертого обновления множество индексов, в которых \(a_i = 1\), это \(\{1, 6\}\). Отрезок \([4, 5]\) удален, поэтому \(S_4 = \{[1, 2], [6, 7]\}\), в каждом из которых один \(\texttt{0}\) и одна \(\texttt{1}\).

После пятого обновления множество индексов, в которых \(a_i = 1\), это \(\{1\}\). Отрезок \([6, 7]\) удален, поэтому \(S_5 = \{[1, 2]\}\), в этом отрезке один \(\texttt{0}\) и одна \(\texttt{1}\).

G. Восстанови перестановку

Бинарный поиск жадные алгоритмы Конструктив математика Структуры данных *1900

Последовательность из \(n\) чисел называется перестановкой, если она содержит в себе все числа от \(1\) до \(n\) ровно по одному разу. Например, последовательности [\(3, 1, 4, 2\)], [\(1\)] и [\(2,1\)] являются перестановками, а [\(1,2,1\)], [\(0,1\)] и [\(1,3,4\)] — нет.

Для перестановки \(p\) чётной длины \(n\) можно получить массив \(b\) длины \(\frac{n}{2}\) такой, что:

  • \(b_i = \max(p_{2i - 1}, p_{2i})\) для \(1 \le i \le \frac{n}{2}\)

Например, если \(p\) = [\(2, 4, 3, 1, 5, 6\)], то:

  • \(b_1 = \max(p_1, p_2) = \max(2, 4) = 4\)
  • \(b_2 = \max(p_3, p_4) = \max(3,1)=3\)
  • \(b_3 = \max(p_5, p_6) = \max(5,6) = 6\)
Итого получим \(b\) = \([4, 3, 6]\).

Для заданного массива \(b\) найдите лексикографически минимальную перестановку \(p\) такую, что из неё можно получить заданный массив \(b\).

Если \(b\) = [\(4,3,6\)], то лексикографически минимальная перестановка, из которой можно его получить, это \(p\) = [\(1,4,2,3,5,6\)], так как:

  • \(b_1 = \max(p_1, p_2) = \max(1, 4) = 4\)
  • \(b_2 = \max(p_3, p_4) = \max(2, 3) = 3\)
  • \(b_3 = \max(p_5, p_6) = \max(5, 6) = 6\)

Перестановка \(x_1, x_2, \dots, x_n\) лексикографически меньше перестановки \(y_1, y_2 \dots, y_n\), если и только если существует такое \(i\) (\(1 \le i \le n\)), что \(x_1=y_1, x_2=y_2, \dots, x_{i-1}=y_{i-1}\) и \(x_i<y_i\).

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

В первой строке каждого набора входных данных записано одно целое чётное число \(n\) (\(2 \le n \le 2 \cdot 10^5\)).

Вo второй строке каждого набора входных данных записано ровно \(\frac{n}{2}\) целых чисел \(b_i\) (\(1 \le b_i \le n\)) — элементы массива \(b\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке:

  • лексикографически минимальную перестановку \(p\) такую, что из неё можно получить массив \(b\);
  • или число -1, если искомой перестановки не существует.
Примечание

Первый набор входных данных разобран в условии задачи.

C. Игра с суперклеем

Комбинаторика Конструктив *2000

Два игрока играют в игру. Игра ведется на прямоугольной доске n × m клеток. В начале игры в двух различных клетках доски лежат две фишки. Цель первого игрока — сдвигая фишки, переместить их обе в одну клетку. Цель второго игрока — помешать первому при помощи тюбика с суперклеем.

Опишем правила игры более подробно.

Ходы делаются по очереди. Первым ходит первый игрок.

Каждым своим ходом первый игрок выбирает одну из своих не приклеенных фишек и сдвигает ее влево, вправо, вверх или вниз на одну клетку. При этом не разрешается двигать фишку за границу доски. В момент начала хода некоторые клетки доски могут быть покрыты клеем. Первый игрок может передвинуть фишку в такую клетку, после чего фишка приклеивается намертво и ее больше нельзя двигать.

Второй игрок на каждом своем ходу выбирает одну из свободных клеток (в которой нет фишки и клея) и намазывает ее суперклеем. Клей долго сохнет и все покрытые им клетки остаются липкими до конца игры.

Если после какого-либо хода первого игрока обе фишки оказываются в одной клетке — выигрывает первый игрок. Если первый игрок не может сделать ход (обе его фишки приклеены), то выигрывает второй игрок. Заметим, что ситуации, когда второй игрок не может сделать ход, никогда не возникнет — он всегда может намазать клеем ту клетку, из которой первый игрок только что передвинул фишку.

Стоит дополнительно пояснить случай, когда обе фишки оказываются приклеены и находятся в одной клетке. Тут выигрывает первый игрок, поскольку игра заканчивается сразу, как только фишки оказываются в одной клетке, и условие проигрыша (невозможность сделать хода) не возникает.

Известны размеры доски и положения двух фишек на ней. В начале игры все клетки доски свободны от клея. Определите, кто выиграет при правильной игре.

Входные данные

В первой строке записано шесть целых чисел n, m, x1, y1, x2, y2 — размеры доски и координаты первой и второй фишки, соответственно (1 ≤ n, m ≤ 100; 2 ≤ n × m; 1 ≤ x1, x2 ≤ n; 1 ≤ y1, y2 ≤ m). Числа в строке разделяются единичными пробелами.

Гарантируется, что фишки находятся в различных клетках.

Выходные данные

Если выигрывает первый игрок — выведите «First» без кавычек. Иначе выведите «Second» без кавычек.

A. Две перестановки

Конструктив Перебор *800

Вам даны три целых числа \(n\), \(a\) и \(b\). Определите, существуют ли две перестановки \(p\) и \(q\) длины \(n\), для которых выполняются следующие условия:

  • Длина самого длинного общего префикса \(p\) и \(q\) равна \(a\).
  • Длина самого длинного общего суффикса \(p\) и \(q\) равна \(b\).

Перестановка длины \(n\)  — это массив, содержащий каждое целое число от \(1\) до \(n\) ровно один раз. Например, \([2,3,1,5,4]\)  — это перестановка, но \([1,2,2]\)  — не перестановка (\(2\) встречается в массиве дважды), и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве есть \(4\)).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит три целых числа \(n\), \(a\) и \(b\) (\(1\leq a,b\leq n\leq 100\)).

Выходные данные

Для каждого набора входных данных, если такая пара перестановок существует, выведите «Yes», в противном случае выведите «No». Вы можете выводить каждую букву в любом регистре (верхнем или нижнем).

Примечание

В первом наборе входных данных \([1]\) и \([1]\) образуют подходящую пару.

Во втором и третьем наборах входных данных можно показать, что такой пары перестановок не существует.

В четвертом наборе входных данных \([1,2,3,4]\) и \([1,3,2,4]\) образуют подходящую пару.

B. Уничтожение кольца

жадные алгоритмы Конструктив реализация *1000

Определим циклическую последовательность размера \(n\) как массив \(s\) длины \(n\), в котором \(s_n\) является соседним с \(s_1\).

У Muxii есть кольцо, представленное циклической последовательностью \(a\) размера \(n\).

Сама сущность кольца ненавидит равные соседние элементы. Поэтому, если два соседних элемента в последовательности равны в любой момент времени, один из них будет немедленно стерт. Изначально последовательность не содержит равных соседних элементов.

Muxii может выполнять следующие операции, пока последовательность не станет пустой:

  • Выбрать элемент в \(a\) и стереть его.

Например, если кольцо имеет вид \([1, 2, 4, 2, 3, 2]\), и Muxii стирает элемент \(4\), то кольцо сотрёт один из элементов, равных \(2\), и кольцо примет вид \([1, 2, 3, 2]\).

Muxii хочет найти максимальное количество операций, которые он может выполнить.

Заметим, что в кольце размером \(1\) его единственный элемент не считается соседним с самим собой (поэтому он не стирается сразу).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1\leq n\leq 100\)) — размер циклической последовательности.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1\leq a_i\leq n\)) — саму последовательность.

Гарантируется, что \(a_i\ne a_{i+1}\) для \(1\leq i<n\).

Гарантируется, что \(a_n\ne a_1\) при \(n>1\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество операций, которые может выполнить Muxii.

Примечание

В первом наборе входных данных вы можете сначала стереть второй элемент, а затем стереть оставшиеся элементы по одному в любом порядке. Всего можно выполнить эту операцию \(4\) раза. Обратите внимание, что если сначала стереть первый элемент, то последовательность превратится в \([2,3,2]\), а затем сразу станет \([2,3]\).

Во втором наборе входных данных можно сначала стереть первый элемент, тогда последовательность превратится в \([2,1]\). Затем можно стереть все оставшиеся элементы по одному в любом порядке.

C. Построение множеств

графы жадные алгоритмы Конструктив поиск в глубину и подобное *1400

Вам дана бинарная матрица \(b\) (все элементы матрицы равны \(0\) или \(1\)) из \(n\) строк и \(n\) столбцов.

Вам нужно построить \(n\) множеств \(A_1, A_2, \ldots, A_n\), для которых выполняются следующие условия:

  • Каждое множество непустое и состоит из различных целых чисел от \(1\) до \(n\) включительно.
  • Все множества попарно различны.
  • Для всех пар \((i,j)\), удовлетворяющих условиям \(1\leq i, j\leq n\), \(b_{i,j}=1\) тогда и только тогда, когда \(A_i\subsetneq A_j\). Другими словами, \(b_{i, j}\) равно \(1\), если \(A_i\) является собственным подмножеством \(A_j\) и \(0\) в противном случае.

Множество \(X\) является собственным подмножеством множества \(Y\), если \(X\) является непустым подмножеством \(Y\), и \(X \neq Y\).

Гарантируется, что для всех наборов входных данных в этой задаче, такие \(n\) множеств существуют. Заметим, что это не означает, что такие \(n\) множеств существуют для всех возможных наборов входных данных.

Если существует несколько решений, то можно вывести любое из них.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка содержит целое число \(n\) (\(1\le n\le 100\)).

Следующие \(n\) строк содержат бинарную матрицу \(b\), \(j\)-е символ \(i\)-й строки обозначает \(b_{i,j}\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(1000\).

Гарантируется, что для всех наборов входных данных в данной задаче такие \(n\) множеств существуют.

Выходные данные

Для каждого набора входных данных выведите \(n\) строк.

В \(i\)-й строке сначала выведите \(s_i\) \((1 \le s_i \le n)\)  — размер множества \(A_i\). Затем выведите \(s_i\) попарно различных целых чисел от \(1\) до \(n\)  — элементы множества \(A_i\).

Если существует несколько решений, то можно вывести любое из них.

Гарантируется, что для всех наборов входных данных в данной задаче такие \(n\) множеств существуют.

Примечание

В первом наборе входных данных имеем \(A_1 = \{1, 2, 3\}, A_2 = \{1, 3\}, A_3 = \{2, 4\}, A_4 = \{1, 2, 3, 4\}\). Множества \(A_1, A_2, A_3\) являются собственными подмножествами \(A_4\), а также множество \(A_2\) является собственным подмножеством \(A_1\). Никакое другое множество не является собственным подмножеством никакого другого множества.

Во втором наборе входных данных имеем \(A_1 = \{1\}, A_2 = \{1, 2\}, A_3 = \{1, 2, 3\}\). \(A_1\) является собственным подмножеством \(A_2\) и \(A_3\), а \(A_2\) является собственным подмножеством \(A_3\).

E. Сделайте связным

Бинарный поиск графы Деревья жадные алгоритмы Конструктив матрицы Перебор снм *2400

Вам дан простой неориентированный граф, состоящий из \(n\) вершин. Граф не содержит петель, между каждой парой вершин существует не более одного ребра. Ваша задача проста: сделать граф связным.

Вы можете выполнить следующую операцию любое количество раз (возможно, ноль):

  • Выберите произвольную вершину \(u\).
  • Для каждой вершины \(v\), для которой \(v\ne u\), если \(v\) смежна с \(u\), удалите ребро между \(u\) и \(v\), иначе добавьте ребро между \(u\) и \(v\).

Найдите минимальное количество операций, необходимых для того, чтобы сделать граф связным. Также найдите любую последовательность операций минимальной длины, которая делает граф связным.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\leq t\leq 800\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2\leq n\leq 4000\)) — количество вершин в графе.

Затем следуют \(n\) строк. В \(i\)-й строке содержится бинарная строка \(s_i\) длины \(n\), где \(s_{i,j}\) равно '1', если между вершинами \(i\) и \(j\) изначально существует ребро, иначе \(s_{i,j}\) равно '0'.

Гарантируется, что \(s_{i,i}\) всегда '0' и \(s_{i,j}=s_{j,i}\) для \(1\leq i,j\leq n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(4000\).

Выходные данные

Для каждого набора входных данных в первой строке выведите целое число \(m\)  — минимально необходимое количество операций.

Если \(m\) больше нуля, то выведите дополнительную строку, состоящую из \(m\) целых чисел — вершин, выбранных в операциях в вашем решении. Если существует несколько решений с минимальным количеством операций, выведите любое из них.

Примечание

В первом наборе входных данных граф связен в начале, поэтому ответ  — \(0\).

Во втором наборе входных данных, если мы выполним операцию с вершиной \(1\), то получим следующий граф, представленный следующей матрицей смежности:

\(\) \begin{bmatrix} 0&1&1\\ 1&0&1\\ 1&1&0 \end{bmatrix} \(\)

Очевидно, что приведенный выше граф является связным.

В третьем наборе входных данных, если мы проделаем операцию с вершинами \(3\) и \(4\), то получим следующий граф, представленный следующей матрицей смежности:

\(\) \begin{bmatrix} 0&1&1&1\\ 1&0&1&1\\ 1&1&0&1\\ 1&1&1&0 \end{bmatrix} \(\)

Очевидно, что приведенный выше граф является связным, и можно доказать, что мы не можем выполнить менее \(2\) операций, чтобы сделать граф связным.

B. Сделайте массив хорошим

Конструктив реализация сортировки теория чисел *1100

Массив \(b\) из \(m\) положительных целых чисел называется хорошим, если для всех пар \(i\) и \(j\) (\(1 \leq i,j \leq m\)), значение \(\max(b_i,b_j)\) делится на \(\min(b_i,b_j)\).

Вам дан массив \(a\) из \(n\) положительных целых чисел. Вы можете выполнять следующую операцию:

  • Выберите индекс \(i\) (\(1 \leq i \leq n\)) и целое число \(x\) (\(0 \leq x \leq a_i\)), затем добавьте \(x\) к \(a_i\). Другими словами, \(a_i := a_i+x\).
  • После этой операции должно выполняться \(a_i \leq 10^{18}\).

Постройте последовательность из не более чем \(n\) операций, после которой массив \(a\) будет хорошим. Можно показать, что в ограничениях задачи такая последовательность операций всегда существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)) — длину массива \(a\).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \leq a_i \leq 10^9\)) — массив \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных сначала выведите целое число \(p\) (\(0 \leq p \leq n\)) — количество операций в вашем решении.

Для каждой из следующих \(p\) строк, выведите два целых числа через пробел — \(i\) и \(x\).

Вам не нужно минимизировать число операций. Можно показать, что решение всегда существует.

Примечание

В первом примере массив \(a\) становится после операций равным \([5,5,5,5]\). Легко видеть, что \([5,5,5,5]\) — хороший.

Во втором примере массив \(a\) изначально хороший.

В третьем примере массив \(a\) становится после операций равным \([10,5,350,5,10]\), что является хорошим массивом.

В четвертом примере после выполнения операций массив \(a\) становится равным \([60,10,20]\), что является хорошим массивом.

D. Запросы НОД

интерактив Конструктив теория чисел *2100

Это интерактивная задача.

Загадана перестановка \(p\) чисел \([0,1,2,\ldots,n-1]\). Ваша задача — найти \(2\) индекса \(x\) и \(y\) (\(1 \leq x, y \leq n\), возможно, \(x=y\)) такие, что \(p_x=0\) или \(p_y=0\). Чтобы это сделать, вы можете сделать не более чем \(2n\) запросов.

В каждом запросе вы даете два целых числа \(i\) и \(j\) (\(1 \leq i, j \leq n\), \(i \neq j\)) и получаете значение \(\gcd(p_i,p_j)^\dagger\).

Обратите внимание, что перестановка \(p\) зафиксирована до начала взаимодействия, и не зависит от ваших запросов.

\(^\dagger\) \(\gcd(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\). Обратите внимание, что \(\gcd(x,0)=\gcd(0,x)=x\) для всех положительных целых чисел \(x\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^4\)).

После считывания числа \(n\) вы должны начать взаимодействие.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^4\).

Протокол взаимодействия

Взаимодействие начинается для каждого набора входных данных после считывания числа \(n\).

Чтобы сделать запрос, выведите «? \(i\) \(j\)» (\(1 \leq i, j \leq n\), \(i \neq j\)) без кавычек. После этого считайте одно целое число — ответ на ваш запрос \(\gcd(p_i,p_j)\). Вы можете сделать не более чем \(2n\) таких запросов в каждом наборе входных данных.

Если вы знаете ответ, выведите «! \(x\) \(y\)» (\(1 \leq x, y \leq n\)) без кавычек. После этого считайте целое число \(1\) или \(-1\). Если \(p_x=0\) или \(p_y=0\), вы получите \(1\), иначе вы получите \(-1\). Если вы получили \(-1\), ваша программа должна немедленно завершиться, чтобы получить вердикт Неправильный ответ. В противном случае вы можете получить любой вердикт, так как программа продолжит чтение из закрытого потока.

Если вы получили число \(-1\) вместо ответа или корректного значения \(n\), то ваша программа сделала некорректный запрос, превысила число запросов, или дала неправильны ответ на предыдущий набор входных данных. Ваша программа должна немедленно завершиться для получения вердикта Неправильный ответ. В противном случае вы можете получить любой вердикт, так как программа продолжит чтение из закрытого потока.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Чтобы сделать взлом, используйте следующий формат.

Первая строка должна содержать одно целое число \(t\) (\(1 \leq t \leq 10^4\)).

Первая строка каждого набора входных данных должна содержать одно целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^4\)).

Вторая строка должна содержать \(n\) целых чисел \(p_1,p_2,\ldots,p_n\). \(p\) должно быть перестановкой чисел \([0,1,2,\ldots,n-1]\).

Сумма значений \(n\) не должна превосходить \(2 \cdot 10^4\).

Примечание

В первом примере взаимодействие происходит следующим образом.

РешениеЖюриКомментарий
\(\texttt{2}\)В тесте 2 набора входных данных.
\(\texttt{2}\)В первом наборе загадана перестановка \([1,0]\) длины \(2\).
\(\texttt{? 1 2}\)\(\texttt{1}\)Решение запрашивает \(\gcd(p_1,p_2)\), жюри отвечает \(1\).
\(\texttt{! 1 2}\)\(\texttt{1}\)Решение знает, что либо \(p_1=0\), либо \(p_2=0\), и выводит ответ. Так как ответ правильный, жюри отвечает \(1\) и переходит к следующему набору входных данных.
\(\texttt{5}\)Во втором наборе загадана перестановка \([2,4,0,1,3]\) длины \(5\).
\(\texttt{? 1 2}\)\(\texttt{2}\)Решение запрашивает \(\gcd(p_1,p_2)\), жюри отвечает \(2\).
\(\texttt{? 2 3}\)\(\texttt{4}\)Решение запрашивает \(\gcd(p_2,p_3)\), жюри отвечает \(4\).
\(\texttt{! 3 3}\)\(\texttt{1}\)Решение каким-то образом определило, что \(p_3=0\), и выводит ответ. Так как ответ верный, жюри отвечает \(1\).

Обратите внимание, что пустые строки в примерах ввода и вывода показаны для ясности и отсутствуют в настоящем взаимодействии.

Помните про считывание \(1\) или \(-1\) после каждого набора входных данных.

G. Неравные соседние элементы

Конструктив сортировки *3100

Вам дан массив \(a\), состоящий из \(n\) положительных целых чисел.

Найдите любую перестановку \(p\) чисел \([1,2,\dots,n]\) такую, что:

  • \(p_{i-2} < p_i\) для всех \(i\), удовлетворяющих \(3 \leq i \leq n\), и
  • \(a_{p_{i-1}} \neq a_{p_i}\) для всех \(i\), удовлетворяющих \(2 \leq i \leq n\).

Или найдите, что таких перестановок не существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \leq n \leq 3 \cdot 10^5\)) — длину массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \leq a_i \leq n\)) — массив \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «NO», если не существует подходящей перестановки, иначе выведите «YES» в первой строке, а во второй выведите перестановку \(p\).

Если существует несколько подходящих перестановок, выведите любую из них.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ).

Примечание

В первом примере \(p=[1,2,3]\) является единственной перестановкой чисел \([1,2,3]\), удовлетворяющей данным условиям.

В третьем примере можно показать, что не существует перестановки чисел \([1,2,3]\), удовлетворяющей данным условиям.

A. Абсолютная максимизация

битмаски жадные алгоритмы Конструктив математика *800

Вам дан массив \(a\) длины \(n\). Вы можете применить следующую операцию несколько (возможно, ноль) раз:

  • Выбрать \(i\), \(j\), \(b\): Поменять местами \(b\)-й бит в бинарной записи \(a_i\) и \(a_j\).

В бинарной записи биты нумеруются справа (наименее значимый) налево (наиболее значимый). Учтите, что в начале любой бинарной записи имеется бесконечное число начальных нулевых битов.

Например, поменять местами \(0\)-й бит для \(4=100_2\) и \(3=11_2\) даст в результате \(101_2=5\) и \(10_2=2\). Поменять местами \(2\)-й бит для \(4=100_2\) и \(3=11_2\) даст в результате \(000_2=0_2=0\) и \(111_2=7\).

Найдите максимальное значение \(\max(a) - \min(a)\).

Тут \(\max(a)\) означает максимальный элемент \(a\) и \(\min(a)\) означает минимальный элемент \(a\).

Бинарная запись \(x\) — это \(x\) записанное в системе счисления с основанием \(2\). Например, \(9\) и \(6\) записанные в системе счисления с основанием \(2\) это \(1001\) и \(110\), соответственно.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 128\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(3 \le n \le 512\)) — длину массива \(a\).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i < 1024\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(512\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное возможное значение \(\max(a) - \min(a)\).

Примечание

В первом примере может быть показано, что не надо делать никаких операций — максимальное значение \(\max(a) - \min(a)\) это \(1 - 0 = 1\).

Во втором примере ни одна операция не может изменить массив — максимальное значение \(\max(a) - \min(a)\) это \(5 - 5 = 0\).

В третьем примере изначально \(a = [1, 2, 3, 4, 5]\), мы можем применить операцию \(i = 2\), \(j = 5\), \(b = 1\). Массив станет равен \(a = [1, 0, 3, 4, 7]\). Может быть показано, что последующие операции не приведут к улучшению ответ. Таким образом, максимальное значение это \(\max(a) - \min(a) = 7 - 0 = 7\).

C. Очередная задача про массив

жадные алгоритмы Конструктив Перебор *2000

Вам дан массив \(a\) из \(n\) целых чисел. Вы можете совершить следующую операцию любое число раз (0 или больше раз):

  • Выбрать \(2\) индекса \(i\),\(j\) где \(1 \le i < j \le n\) и заменить \(a_k\) для всех \(i \leq k \leq j\) значением \(|a_i - a_j|\)

Выведите максимальную сумму всех элементов конечного массива, которую вы можете получить таким образом.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — длина массива \(a\).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите сумму конечного массива.

Примечание

В первом примере невозможно достичь сумму \(> 3\) используя операцию, таким образом ответ \(3\).

Во втором примере можно показать, что максимальная достижимая сумма равна \(16\). Используем операцию \((1,2)\) и преврати массив из \([9,1]\) в \([8,8]\), таким образом ответ равен \(16\).

В третьем примере можно показать, что невозможно достичь суммы \(> 18\) используя операцию, таким образом ответ \(18\).

F. Дореми и экспериментальное дерево

Деревья Конструктив Перебор поиск в глубину и подобное снм сортировки *2500

У Дореми есть реберно-взвешенное дерево из \(n\) вершин, веса являются целыми числами от \(1\) до \(10^9\). Дореми провела \(\frac{n(n+1)}{2}\) экспериментов с деревом.

В каждом эксперименте Дореми выбирает две вершины \(i\) и \(j\) такие, что \(j \leq i\), и соединяет их дополнительным ребром веса \(1\). После этого в графе образовывается один цикл (или петля, если \(i=j\)). Дореми определяет \(f(i,j)\) как сумму длин кратчайших путей от каждой вершины до цикла.

Формально, пусть \(\mathrm{dis}_{i,j}(x,y)\) — длина кратчайшего пути между вершинами \(x\) и \(y\), когда в дерево добавлено одно ребро \((i,j)\) веса \(1\), а \(S_{i,j}\) — множество вершин на цикле, когда добавлено ребро \((i,j)\). Тогда \(\) f(i,j)=\sum_{x=1}^{n}\left(\min_{y\in S_{i,j}}\mathrm{dis}_{i,j}(x,y)\right). \(\)

Дореми записала все значения \(f(i,j)\) для \(1 \leq j \leq i \leq n\), потом пошла спать. Однако проснувшись, она обнаружила, что дерево пропало. К счастью, значения \(f(i,j)\) все еще в ее тетради, и она значит, каким \(i\) и \(j\) они соответствуют. Вам даны значения \(f(i,j)\), можете ли вы помочь Дореми восстановить дерево?

Гарантируется, что хотя бы одно подходящее дерево существует.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 2000\)) — количество вершин в дереве.

Следующие \(n\) строк содержат нижне-треугольную матрицу с \(i\) целыми числами в \(i\)-й строке; \(j\)-е число в \(i\)-й строке равно \(f(i,j)\) (\(0 \le f(i,j) \le 2\cdot 10^{15}\)).

Гарантируется, что существует дерево, веса ребер которого являются целыми числами в пределах от \(1\) до \(10^9\) такое, что все значения \(f(i,j)\) для этого дерева совпадают с данными.

Выходные данные

Выведите \(n-1\) строку, описывающую дерево. В \(i\)-й строке выведите три целых числа \(u_i\), \(v_i\), \(w_i\) (\(1 \le u_i,v_i \le n\), \(1 \le w_i \le 10^9\)), обозначающих ребро \((u_i,v_i)\) веса \(w_i\).

Если существуют несколько решений, выведите любое из них.

Ребра должны образовывать дерево, а все значения \(f(i,j)\) должны совпадать с данными.

Примечание

Для первого примере рисунок ниже слева направо сверху вниз показывает графы, получающиеся при добавлении ребер \((1,1)\), \((1,2)\), \((1,3)\), \((2,2)\), \((2,3)\), \((3,3)\) соответственно. Вершины на цикле выделены желтым.

D. Watch the Videos

Бинарный поиск Конструктив *1700

Monocarp wants to watch \(n\) videos. Each video is only one minute long, but its size may be arbitrary. The \(i\)-th video has the size \(a_i\) megabytes. All videos are published on the Internet. A video should be downloaded before it can be watched. Monocarp has poor Internet connection — it takes exactly \(1\) minute to download \(1\) megabyte of data, so it will require \(a_i\) minutes to download the \(i\)-th video.

Monocarp's computer has a hard disk of \(m\) megabytes. The disk is used to store the downloaded videos. Once Monocarp starts the download of a video of size \(s\), the \(s\) megabytes are immediately reserved on a hard disk. If there are less than \(s\) megabytes left, the download cannot be started until the required space is freed. Each single video can be stored on the hard disk, since \(a_i \le m\) for all \(i\). Once the download is started, it cannot be interrupted. It is not allowed to run two or more downloads in parallel.

Once a video is fully downloaded to the hard disk, Monocarp can watch it. Watching each video takes exactly \(1\) minute and does not occupy the Internet connection, so Monocarp can start downloading another video while watching the current one.

When Monocarp finishes watching a video, he doesn't need it on the hard disk anymore, so he can delete the video, instantly freeing the space it occupied on a hard disk. Deleting a video takes negligible time.

Monocarp wants to watch all \(n\) videos as quickly as possible. The order of watching does not matter, since Monocarp needs to watch all of them anyway. Please calculate the minimum possible time required for that.

Input

The first line contains two integers \(n\) and \(m\) (\(1 \le n \le 2 \cdot 10^5\); \(1 \le m \le 10^9\)) — the number of videos Monocarp wants to watch and the size of the hard disk, respectively.

The second line contains \(n\) integers \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le m\)) — the sizes of the videos.

Output

Print one integer — the minimum time required to watch all \(n\) videos.

G. Guess the String

интерактив Конструктив Теория вероятностей *2600

This is an interactive problem. You have to use flush operation right after printing each line. For example, in C++ you should use the function fflush(stdout), in Java or Kotlin — System.out.flush(), and in Python — sys.stdout.flush().

The jury has a string \(s\) consisting of characters 0 and/or 1. The first character of this string is 0. The length of this string is \(n\). You have to guess this string. Let's denote \(s[l..r]\) as the substring of \(s\) from \(l\) to \(r\) (i. e. \(s[l..r]\) is the string \(s_ls_{l+1} \dots s_r\)).

Let the prefix function of the string \(s\) be an array \([p_1, p_2, \dots, p_n]\), where \(p_i\) is the greatest integer \(j \in [0, i-1]\) such that \(s[1..j] = s[i-j+1..i]\). Also, let the antiprefix function of the string \(s\) be an array \([q_1, q_2, \dots, q_n]\), where \(q_i\) is the greatest integer \(j \in [0, i-1]\) such that \(s[1..j]\) differs from \(s[i-j+1..i]\) in every position.

For example, for the string 011001, its prefix function is \([0, 0, 0, 1, 1, 2]\), and its antiprefix function is \([0, 1, 1, 2, 3, 4]\).

You can ask queries of two types to guess the string \(s\):

  • \(1\) \(i\) — "what is the value of \(p_i\)?";
  • \(2\) \(i\) — "what is the value of \(q_i\)?".

You have to guess the string by asking no more than \(789\) queries. Note that giving the answer does not count as a query.

In every test and in every test case, the string \(s\) is fixed beforehand.

Interaction

Initially, the jury program sends one integer \(t\) (\(1 \le t \le 100\)) — the number of test cases.

At the start of each test case, the jury program sends one integer \(n\) (\(2 \le n \le 1000\)) — the length of the string.

After that, your program can submit queries to the jury program by printing one of the following lines (do not forget to flush the output after printing a line!):

  • \(1\) \(i\) — the query "what is the value of \(p_i\)?";
  • \(2\) \(i\) — the query "what is the value of \(q_i\)?".

For every query, the jury prints one integer on a separate line. It is either:

  • the answer for your query, if the query is correct and you haven't exceeded the query limit;
  • or the integer \(-1\), if your query is incorrect (for example, the constraint \(1 \le i \le n\) is not met) or if you have asked too many queries while processing the current test case.

To submit the answer, your program should send a line in the following format (do not forget to flush the output after printing a line!):

  • \(0\) \(s\), where \(s\) is a sequence of \(n\) characters 0 and/or 1.

If your guess is correct, the jury program will print one integer \(1\) on a separate line, indicating that you may proceed to the next test case (or terminate the program, if it was the last test case) and that the number of queries you have asked is reset. If it is not correct, the jury program will print one integer \(-1\) on a separate line.

After your program receives \(-1\) as the answer, it should immediately terminate. This will lead to your submission receiving the verdict "Wrong Answer". If your program does not terminate, the verdict of your submission is undefined.

Note

The example contains one possible way of interaction in a test where \(t = 2\), and the strings guessed by the jury are 011001 and 00111. Note that everything after the // sign is a comment that explains which line means what in the interaction. The jury program won't print these comments in the actual problem, and you shouldn't print them. The empty lines are also added for your convenience, the jury program won't print them, and your solution should not print any empty lines.

D. Плей-офф

дп жадные алгоритмы Комбинаторика Конструктив математика *1500

\(2^n\) команд участвуют в плей-офф турнире. Турнир состоит из \(2^n - 1\) игры. Они проводятся следующим образом: на первом этапе команды делятся на пары: команда \(1\) играет против команды \(2\), команда \(3\) играет против команды \(4\) и так далее (таким образом, в этой фазе будет сыграно \(2^{n-1}\) игры). Когда команда проигрывает игру, она выбывает, и каждая игра приводит к выбыванию одной команды (нет ничьих). После этого остается \(2^{n-1}\) команд. Если остается только одна команда, она объявляется чемпионом; в противном начинается второй этап, где играется еще \(2^{n-2}\) игр: в первой из них победитель игры «\(1\) против \(2\)» играет против победителя игры «\(3\) против \(4\)», затем победитель игры «\(5\) против \(6\)» играет против победителя игры «\(7\) против \(8\)» и так далее. Этот процесс повторяется до тех пор, пока не останется только одна команда.

Уровень навыков \(i\)-й команды равен \(p_i\), где \(p\) — перестановка чисел \(1\), \(2\), ..., \(2^n\) (перестановка — это массив, в котором каждый элемент от \(1\) до \(2^n\) встречается ровно один раз).

Задана строка \(s\), состоящая из \(n\) символов. Эти символы обозначают результаты игр на каждом этапе турнира следующим образом:

  • если \(s_i\) равно 0, то на \(i\)-м этапе турнира (этапе с \(2^{n-i}\) играми) каждую игру выигрывает команда с меньшим уровнем навыков;
  • если \(s_i\) равно 1, то на \(i\)-м этапе турнира (этапе с \(2^{n-i}\) играми) каждую игру выигрывает команда с большим уровнем навыков.

Назовем целое число \(x\) выигрышным, если существует такая перестановка \(p\), что команда с уровнем навыков \(x\) выиграет турнир. Найдите все выигрышные целые числа.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 18\)).

Вторая строка содержит строку \(s\) длины \(n\), состоящую из символов 0 и/или 1.

Выходные данные

Выведите все выигрышные целые числа \(x\) в порядке их возрастания.

C. Поэлементное ограничение

жадные алгоритмы Конструктив реализация сортировки *1300

Вам дан массив целых чисел \(a\) длины \(n\).

Найдите две перестановки\(^\dagger\) \(p\) и \(q\) длины \(n\) такие, что \(\max(p_i,q_i)=a_i\) для всех \(1 \leq i \leq n\) или сообщите, что таких \(p\) и \(q\) не существует.

\(^\dagger\) Перестановкой длины \(n\) называется массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) является перестановкой, но \([1,2,2]\) не является перестановкой (\(2\) встречается дважды в массиве) и \([1,3,4]\) тоже не является перестановкой (\(n=3\), но в массиве присутствует \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержится одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина перестановки.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \leq a_i \leq n\)) — массив \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если не существует \(p\) и \(q\), удовлетворяющих условиям, выведите «NO» (без кавычек).

В противном случае выведите «YES» (без кавычек), затем выведите \(2\) строки. Первая строка должна содержать \(n\) целых \(p_1,p_2,\ldots,p_n\), а вторая строка должна содержать \(n\) целых \(q_1,q_2,\ldots,q_n\).

Если существует несколько решений, вы можете вывести любое из них.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes» и «Yes» будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных \(p=q=[1]\). Это верно, так как \(a_1 = max(p_1,q_1) = 1\).

Во втором наборе \(p=[1,3,4,2,5]\) и \(q=[5,2,3,1,4]\). Эти массивы удовлетворяют условию, так как:

  • \(a_1 = \max(p_1, q_1) = \max(1, 5) = 5\),
  • \(a_2 = \max(p_2, q_2) = \max(3, 2) = 3\),
  • \(a_3 = \max(p_3, q_3) = \max(4, 3) = 4\),
  • \(a_4 = \max(p_4, q_4) = \max(2, 1) = 2\),
  • \(a_5 = \max(p_5, q_5) = \max(5, 4) = 5\).

В третьем наборе можно показать, что таких \(p\) и \(q\) не существует.

D. Удачная перестановка

графы жадные алгоритмы Конструктив поиск в глубину и подобное *1800

Вам дана перестановка\(^\dagger\) \(p\) длины \(n\).

За одну операцию вы можете выбрать два индекса \(1 \le i < j \le n\) и поменять местами \(p_i\) и \(p_j\).

Найдите минимальное количество операций, которое необходимо сделать, чтобы в итоговой перестановке была ровно одна инверсия\(^\ddagger\).

\(^\dagger\) Перестановкой называется массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) является перестановкой, но \([1,2,2]\) не является перестановкой (\(2\) встречается дважды в массиве) и \([1,3,4]\) тоже не является перестановкой (\(n=3\), но \(4\) присутствует в массиве).

\(^\ddagger\) Количеством инверсий в перестановке \(p\) называется количество пар индексов \((i, j)\) таких, что \(1 \le i < j \le n\) и \(p_i > p_j\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержится одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — длина перестановки.

Вторая строка каждого набора содержит \(n\) чисел \(p_1,p_2,\ldots, p_n\) (\(1 \le p_i \le n\)). Гарантируется, что \(p\) — перестановка.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — минимальное количество операций, которое необходимо сделать, чтобы в итоговом массиве была ровно одна инверсия. Можно показать, что это всегда возможно.

Примечание

В первом наборе входных перестановка уже удовлетворяет условию.

Во втором наборе вы можете выполнить операцию с \((i,j)=(1,2)\), после этого в перестановке \([2,1]\) будет ровно одна инверсия.

В третьем наборе нельзя выполнить условие меньше чем за \(3\) операции. А за \(3\) операции можно добиться выполнения условия так: \((i,j)\) должны равняться \((1,3)\), \((2,4)\), \((3,4)\) в соответствующих операциях. Итоговой перестановкой будет \([1, 2, 4, 3]\), в ней ровно одна инверсия.

В четвёртом наборе нужно сделать обмен, в котором \((i,j)=(2,4)\), в результате чего перестановка будет равняться \([2,1,3,4]\).

B. Косия и перестановка

Конструктив *1000

У Реве есть два целых числа \(n\) и \(k\).

Пусть \(p\) — перестановка\(^\dagger\) длины \(n\). Пусть \(c\) — массив длины \(n - k + 1\) такой, что \(\)c_i = \max(p_i, \dots, p_{i+k-1}) + \min(p_i, \dots, p_{i+k-1}).\(\) Стоимостью перестановки \(p\) называется максимальное число в массиве \(c\).

Косия хочет, чтобы вы построили перестановку с минимальной возможной стоимостью.

\(^\dagger\) Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 2000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \leq k \leq n \leq 2 \cdot 10^5\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(p_1,p_2,\dots,p_n\), которые образуют перестановку с минимальной стоимостью.

Если существует более одной перестановки с минимальной стоимостью, выведите любую из них.

Примечание

Рассмотрим первый набор входных данных.

  • \(c_1 = \max(p_1,p_2,p_3) + \min(p_1,p_2,p_3) = 5 + 1 = 6\).
  • \(c_2 = \max(p_2,p_3,p_4) + \min(p_2,p_3,p_4) = 3 + 1 = 4\).
  • \(c_3 = \max(p_3,p_4,p_5) + \min(p_3,p_4,p_5) = 4 + 2 = 6\).

Поэтому стоимость равна \(\max(6,4,6)=6\). Можно показать, что это минимально возможная стоимость.

D. Косия и игра

графы игры Конструктив Паросочетания поиск в глубину и подобное Потоки реализация снм Структуры данных *2000

Косия и Махиру играют в игру с тремя массивами \(a\), \(b\) и \(c\) длины \(n\). Каждый элемент \(a\), \(b\) и \(c\) — целое число от \(1\) до \(n\) включительно.

Игра состоит из \(n\) раундов. В \(i\)-м раунде они делают следующие ходы:

  • Пусть \(S\) — мультимножество \(\{a_i, b_i, c_i\}\).
  • Косия удаляет один из элементов \(S\) по своему выбору.
  • Затем Махиру выбирает одно из двух оставшихся в \(S\) чисел.

Пусть \(d_i\) — число, выбранное Махиру в \(i\)-м раунде. Если \(d\) является перестановкой\(^\dagger\), Косия выигрывает. Иначе выигрывает Махиру.

Сейчас выбраны только массивы \(a\) и \(b\). Являясь ярым поклонником Косии, вы хотите выбрать массив \(c\) так, чтобы Косия выиграла. Вычислите количество таких \(c\) по модулю \(998\,244\,353\).

Обратите внимание, что Косия и Махиру играют оптимально.

\(^\dagger\) Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq {10}^5\)) — размеры массивов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \leq a_i \leq n\)).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \leq b_i \leq n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \({10}^5\).

Выходные данные

Выведите одно целое число — количество массивов \(c\), при которых выигрывает Косия, по модулю \(998\,244\,353\).

Примечание

В первом примере есть \(6\) массивов \(c\), при которых выигрывает Косия: \([1, 2, 3]\), \([1, 3, 2]\), \([2, 2, 3]\), \([2, 3, 2]\), \([3, 2, 3]\), \([3, 3, 2]\).

Во втором примере можно показать, что нет массивов \(c\), при которых выигрывает Косия.

H. Косия, Махиру и зимний фестиваль

Конструктив *3500

Косия и Махиру наслаждаются зимним фестивалем. Улицы зимнего фестиваля можно представить как неориентированный граф-сетку размера \(n \times n\). Формально, множество вершин определяется как \(\{(i,j) \; | \; 1 \leq i,j\leq n \}\), и две вершины \((i_1,j_1)\) и \((i_2,j_2)\) соединены ребром только тогда когда \(|i_1-i_2|+|j_1-j_2|=1\).

Граф размера \(n = 3\).

Косия и Махиру планируют посетить зимний фестиваль, проехав по \(2n\) маршрутам. Сами маршруты еще не определены, но начала и концы маршрутов уже известны:

  • На \(i\)-м маршруте они начнут из вершины \((1, i)\) и закончат в вершине \((n, p_i)\), где \(p\) — перестановка длины \(n\).
  • На \((i+n)\)-м маршруте они начнут из вершины \((i, 1)\) и закончат в вершине \((q_i, n)\), где \(q\) — перестановка длины \(n\).
Граф размера \(n = 3\), одинаковыми цветами показаны начала и концы одного маршрута для \(p = [3, 2, 1]\) и \(q = [3, 1, 2]\).

Ваша задача — создать схему маршрутов, то есть выбрать \(2n\) путей таких, что каждый путь соединяет заданные начало и конец. Определим загрузку ребра как количество раз, которое это ребро используется (суммарно в обе стороны) в схеме маршрутов. Чтобы Косия и Махиру не слишком скучали от проезда одних и тех же ребер, найдите схему маршрутов, минимизирующую максимальную загрузку среди всех ребер.

Пример решения. Максимальная загрузка равна \(2\), что оптимально для этого случая.
Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \leq n \leq 200\)) — размер сетки графа.

Вторая строка содержит \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \leq p_i \leq n\)).

Третья строка содержит \(n\) целых чисел \(q_1, q_2, \dots, q_n\) (\(1 \leq q_i \leq n\)).

Гарантируется, что и \(p\), и \(q\) являются перестановками длины \(n\).

Выходные данные

Выведите \(2n\) строк, каждая из которых описывает маршрут.

Первые \(n\) строк должны описывать маршруты, идущие сверху вниз. \(i\)-я строка должна описывать маршрут, начинающийся в вершине \((1, i)\) и заканчивающийся в вершине \((n, p_i)\).

Следующие \(n\) строк должны описывать маршруты, идущие слева направо. \((i+n)\)-я строка должна описывать маршрут, начинающийся в вершине \((i, 1)\) и заканчивающийся в вершине \((q_i, n)\).

Каждая строка, описывающая маршрут, должна начинаться с числа \(k\) (\(2 \le k \le 10^5\)) — количество вершин, через которые проходит маршрут, включая начальную и конечную. Далее выведите все вершины, через которые проходит маршрут, по порядку. Иными словами, если маршрут выглядит как \((x_1, y_1) \rightarrow (x_2, y_2) \rightarrow \dots \rightarrow (x_k, y_k)\), то выведите \(k~x_1~y_1~x_2~y_2 \ldots x_k~y_k\). Обратите внимание, что \(|x_i-x_{i+1}|+|y_i-y_{i+1}| = 1\) должно выполняться для всех \(1 \le i < k\).

Если существует несколько решений, минимизирующих максимальную загрузку, выведите любое.

Примечание

Первый пример соответствует рисункам из условия задачи.

Примеры ответов для примеров \(2\) и \(3\) показаны ниже:

Примеры ответов для примеров \(2\) и \(3\). Максимальная загрузка равна соответственно \(2\) и \(1\).

B. Хоссам и друзья

Бинарный поиск дп Конструктив *1400

Хоссам устраивает большую вечеринку, он собирается пригласить на нее своих друзей.

У него есть \(n\) друзей, пронумерованных от \(1\) до \(n\). Они будут организованы в очередь следующим образом: \(1, 2, 3, \ldots, n\).

У Хоссама есть список из \(m\) пар его друзей, которые не знакомы друг с другом. Любая пара, не входящая в этот список, знакома друг с другом.

Подотрезок очереди, начинающийся с друга \(a\) и заканчивающийся другом \(b\), равен \([a, a + 1, a + 2, \ldots, b]\). Подоторезок очереди считается хорошим, если любая пара из этого подотрезка знакома друг с другом.

Хоссам хочешь знать, сколько пар \((a, b)\) (\(1 \le a \le b \le n\)), таких, что подотрезок начинающийся с друга \(a\) и заканчивающийся другом \(b\) хороший.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)), количество наборов входных данных. Далее следует их описание.

Первая строка каждого набора содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 10^5\), \(0 \le m \le 10^5\)) означающих число друзей и число пар, соответственно.

В \(i\)-й из следующих \(m\) строк содержатся два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i\le n\), \(x_i \neq y_i\)) означающих пары друзей Хоссама, которые не знают друг друга.

Обратите внимание, что пары могут повторяться.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\), и сумма \(m\) по всем наборам входных данных не первосходит\(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество хороших подотрезков.

Примечание

В первом наборе ответ равен \(4\). Хорошие подотрезки здесь:

[1]

[2]

[3]

[1, 2]

Во втором наборе ответ равен \(5\). Хорошие подотрезки здесь:

[1]

[2]

[3]

[4]

[3, 4]

C. Разные разности

жадные алгоритмы Конструктив математика *1000

Назовем массив \(a\), состоящий из \(k\) целых чисел, строго возрастающим, если \(a_1 < a_2 < \dots < a_k\). Например, массивы \([1, 3, 5]\), \([1, 2, 3, 4]\), \([3, 5, 6]\) — строго возрастающие; массивы \([2, 2]\), \([3, 7, 5]\), \([7, 4, 3]\), \([1, 2, 2, 3]\) — нет.

Для строго возрастающего массива \(a\) из \(k\) элементов обозначим характеристику как количество различных элементов в массиве \([a_2 - a_1, a_3 - a_2, \dots, a_k - a_{k-1}]\). Например, характеристика массива \([1, 3, 4, 7, 8]\) равна \(3\), так как массив \([2, 1, 3, 1]\) содержит \(3\) различных элемента: \(2\), \(1\) и \(3\).

Вам даны два целых числа \(k\) и \(n\) (\(k \le n\)). Постройте строго возрастающий массив из \(k\) целых чисел от \(1\) до \(n\) с максимально возможной характеристикой.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 819\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей два целых числа \(k\) и \(n\) (\(2 \le k \le n \le 40\)).

Выходные данные

Для каждого набора входных данных выведите \(k\) целых чисел — элементы строго возрастающего массива \(a\) с максимально возможной характеристикой. Если ответов несколько, выведите любой из них.

D. Абсолютная сортировка

Конструктив математика *1400

Дан массив \(a\), состоящий из \(n\) целых чисел. Массив считается отсортированным, если \(a_1 \le a_2 \le \dots \le a_n\).

Вы должны сделать массив \(a\) отсортированным, выполнив следующую операцию ровно один раз:

  • выбрать целое число \(x\), затем для каждого \(i \in [1, n]\) заменить \(a_i\) на \(|a_i - x|\).

Найдите любое значение \(x\), при котором массив станет отсортированным, или скажите, что такого не существует.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк. В первой строке задано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)). Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^8\)).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите целое число \(x\) (\(0 \le x \le 10^9\)), которое сделает массив отсортированным. Можно показать, что если такое целое \(x\) существует, есть хотя бы одно такое целое число между \(0\) и \(10^9\).

Если такого целого числа не существует, выведите \(-1\). Если есть несколько подходящих значений \(x\), выведите любое из них.

Примечание

В первом наборе входных данных, если применить \(x = 4\), массив станет \([1, 1, 1, 1, 1]\).

В третьем наборе входных данных, если применить \(x = 0\), массив станет \([1, 2, 3, 4, 5, 6, 7, 8]\).

В четвертом наборе входных данных, если применить \(x = 42\), массив станет \([32, 37, 38, 39, 40, 41]\).

F. Копия копии копии

графы Конструктив поиск в глубину и подобное реализация сортировки *2000

Все началось с черно-белой картинки, которую можно представить как матрицу \(n \times m\) такую, что все ее элементы равны \(0\) или \(1\). Строки пронумерованы от \(1\) до \(n\), столбцы пронумерованы от \(1\) до \(m\).

Над картинкой проделали несколько операций (возможно, ноль), каждая — одного из двух типов:

  • выбрать ячейку такую, что она не находится на границе (строка не \(1\) и не \(n\), столбец не \(1\) и не \(m\)) и она окружена четырьмя ячейками противоположного цвета (четырьмя нулями, если она единица, и наоборот), и перекрасить ее саму в противоположный цвет;
  • сделать копию текущей картинки.

Обратите внимание, что порядок операций мог быть произвольным, они могут не чередоваться.

Вам сообщили результат: все \(k\) копий, которые были сделаны. Кроме того, вам сообщили первоначальную картинку. Однако, все эти \(k+1\) картинки были перемешаны.

Восстановите последовательность операций. Если существует несколько ответов, то выведите любой из них. Тесты построены из реальной последовательности операций, т. е. хотя бы один ответ всегда существует.

Входные данные

В первой строке записаны три целых числа \(n, m\) и \(k\) (\(3 \le n, m \le 30\); \(0 \le k \le 100\)) — количество строк, количество столбцов и количество сделанных копий, соответственно.

Затем следуют \(k+1\) картинок — \(k\) копий и первоначальная. Их порядок произвольный.

Каждая картинка состоит из \(n\) строк, в каждой по \(m\) символов, каждый символ — это \(0\) или \(1\). Перед каждой картинкой идет пустая строка.

Выходные данные

В первой строке выведите одно целое число — номер первоначальной картинки. Картинки пронумерованы от \(1\) до \(k+1\) в порядке, в котором они заданы во входных данных.

Во второй строке выведите одно целое число \(q\) — количество операций.

В каждой из следующих \(q\) строк должна быть записана одна операция. Операции должны быть перечислены в том порядке, в котором они применялись. Каждая операция может быть одного из двух типов:

  • \(1\) \(x\) \(y\) — перекрасить ячейку \((x, y)\) (\(y\)-я ячейка в \(x\)-й строке, она не должна лежать на границу и должна быть окружена четырьмя клетками противоположного от себя цвета);
  • \(2\) \(i\) — сделать копию текущей картинки и присвоить ей номер \(i\) (картинка под номером \(i\) должна совпадать с текущей картинкой).

Каждый номер от \(1\) до \(k+1\) должен встречаться в выводе ровно один раз — один из них — это номер первоначальной картинки, остальные \(k\) — аргументы операций второго типа.

Если существует несколько ответов, то выведите любой из них. Тесты построены из реальной последовательности операций, т. е. хотя бы один ответ всегда существует.

A. Добавьте плюсы и минусы

Конструктив математика *800

У AquaMoon есть строка \(a\), состоящая только из \(0\) и \(1\). Она хочет добавить \(+\) и \(-\) между всеми парами соседних позиций, чтобы абсолютное значение полученного выражения было как можно меньше. Можете ли вы ей помочь?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 2\,000\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 100\))  — длину \(a\).

Вторая строка каждого набора входных данных содержит строку \(a\) длины \(n\), состоящую только из \(0\) и \(1\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке строку длины \(n - 1\), состоящую из \(-\) и \(+\). Если существует более одного способа расстановки знаков, дающего наименьшее возможное абсолютное значение, то принимается любой из них.

Примечание

В первом наборе входных данных мы можем получить выражение \(1 - 1 = 0\), с абсолютным значением \(0\).

Во втором наборе входных данных мы можем получить выражение \(0 + 1 - 1 + 0 + 1 = 1\), с абсолютным значением \(1\).

В третьем наборе входных данных мы можем получить выражение \(1 + 0 + 0 + 0 - 1 = 0\), с абсолютным значением \(0\).

B. Покраска

жадные алгоритмы Конструктив математика *1500

У Cirno_9baka есть бумажная лента с \(n\) клетками, расположенными в ряд. Поскольку он считает, что чистая бумажная лента слишком скучна, он хочет раскрасить клетки в \(m\) цветов. Из эстетических соображений он считает, что \(i\)-й цвет должен быть использован ровно \(a_i\) раз, а также, что для каждых \(k\) последовательных клеток их цвета должны быть попарно различными.

Помогите Cirno_9baka выяснить, существует ли такой способ раскрасить клетки.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10\,000\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\), \(k\) (\(1 \leq k \leq n \leq 10^9\), \(1 \leq m \leq 10^5\), \(m \leq n\)). Здесь \(n\) обозначает количество клеток, \(m\)  — количество цветов, а \(k\) означает, что для каждых \(k\) последовательных клеток, их цвета должны быть попарно различными.

Вторая строка каждого набора входных данных содержит \(m\) целых чисел \(a_1, a_2, \cdots , a_m\) (\(1 \leq a_i \leq n\))  — обозначающие, сколько раз цвета должны быть использованы. Гарантируется, что \(a_1 + a_2 + \ldots + a_m = n\).

Гарантируется, что сумма \(m\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если существует хотя бы одна возможная схема раскраски; в противном случае выведите «NO».

Вы можете выводить каждую букву в любом регистре (например, «YES», «Yes», «Yes» и «YEs» будут распознаны как положительные ответы).

Примечание

В первом наборе входных данных нет способа раскрасить клетки, удовлетворяющего всем условиям.

Во втором наборе входных данных мы можем раскрасить клетки следующим образом: \((1, 2, 1, 2, 3, 4, 3, 4, 5, 6, 5, 6)\). Для любых \(2\) последовательных клеток, их цвета различны.

C. Лед и пламень

дп жадные алгоритмы Конструктив *1300

Little09 и его друзья играют в игру. Есть \(n\) игроков, и значение температуры игрока \(i\) равно \(i\).

Типы окружающей среды обозначаются как \(0\) или \(1\). Когда два игрока сражаются в определенной среде, если её тип равен \(0\), то всегда побеждает игрок с более низким значением температуры; если он равен \(1\), то всегда побеждает игрок с более высоким значением температуры. Типы этих сред \(n-1\) образуют бинарную строку \(s\) длиной \(n-1\).

Если в игре участвует \(x\) игроков, то всего будет \(x-1\) сражений, а типами \(x-1\) сред будут первые \(x-1\) символов \(s\). Если в турнире осталось более одного игрока, выберите для сражения любых двух оставшихся игроков. Игрок, который проиграет, выбывает из турнира. Типом среды для \(i\)-го сражения является \(s_i\).

Для каждого \(x\) от \(2\) до \(n\) ответьте на следующий вопрос: если в игре участвуют все игроки, значение температуры которых не превышает \(x\), то сколько игроков имеют шансы на победу?

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t \le 10^3\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2\leq n\leq 2\cdot 10^5\))  — количество игроков.

Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длиной \(n-1\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(3\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n-1\) целых чисел  — для каждого \(x\) от \(2\) до \(n\) выведите количество игроков, имеющих шанс на победу.

Примечание

В первом наборе входных данных для \(x=2\) и \(x=3\) победителем может стать только игрок, чье значение температуры равно \(1\). Для \(x=4\) победителем могут стать игроки, чьи значения температуры равны \(2,3,4\).

D. Одинаковое число единиц

жадные алгоритмы Конструктив Перебор реализация *1600

ChthollyNotaSeniorious получил специальный подарок от AquaMoon: \(n\) бинарных массивов длины \(m\). AquaMoon говорит ему, что за одну операцию он может выбрать любые два массива и любую позицию \(pos\) от \(1\) до \(m\) и поменять местами элементы на позициях \(pos\) в этих массивах.

Его увлекла эта игра, и он хочет найти минимальное количество операций, которые необходимо выполнить, чтобы количество \(1\) во всех массивах было одинаковым. Он пригласил вас принять участие в этой интересной игре, поэтому, пожалуйста, попробуйте найти его!

Если это возможно, пожалуйста, выведите конкретные шаги обмена в формате, описанном в разделе выходных данных. В противном случае, пожалуйста, выведите \(-1\).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \leq t \leq 2\cdot 10^4\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 10^5\), \(2 \leq m \leq 10^5\)).

В \(i\)-й из следующих \(n\) строк содержится \(m\) целых чисел \(a_{i, 1}, a_{i, 2}, \ldots, a_{i, m}\) \((0 \le a_{i, j} \le 1)\)  — элементы \(i\)-го массива.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных, если цель недостижима, выведите \(-1\).

В противном случае в первой строке выведите \(k\) \((0 \le k \le mn)\)  — минимальное необходимое количество операций.

\(i\)-я из следующих \(k\) строк должна содержать \(3\) целых числа \(x_i, y_i, z_i\) \((1 \le x_i, y_i \le n, 1 \le z_i \le m)\), которые описывают операцию, которая меняет местами \(a_{x_i, z_i}, a_{y_i, z_i}\): меняет местами \(z_i\)-е числа \(x_i\)-го и \(y_i\)-го массивов.

Примечание

В первом наборе входных данных достаточно выполнить одну операцию: поменять местами первый элемент во второй и первой строках. Массивы станут \([0, 1, 1, 0], [1, 0, 1, 0], [1, 0, 0, 1]\), каждый из которых содержит ровно две \(1\).

G. Покрытие отрезками

Деревья дп Комбинаторика Конструктив Перебор Структуры данных *3200

ChthollyNotaSeniorious дает DataStructures числовую ось с \(m\) различными отрезками на ней. Пусть \(f(l,r)\)  — количество способов выбрать четное число отрезков так, чтобы их объединение было равно \([l,r]\), а \(g(l,r)\)  — количество способов выбрать нечетное число отрезков так, чтобы их объединение было равно \([l,r]\).

ChthollyNotaSeniorious задал DataStructures \(q\) вопросов. В каждом вопросе ChthollyNotaSeniorious дает DataStructures два числа \(l, r\), и хочет, чтобы вы помогли ему найти значение \(f(l,r)-g(l,r)\) по модулю \(998\,244\,353\), чтобы он не подвел ее.

Входные данные

Первая строка ввода содержит два целых числа \(m\) (\(1 \leq m \leq 2 \cdot 10^5\)) и \(q\) (\(1 \leq q \leq 2 \cdot 10^5\))  — количество отрезков и запросов, соответственно.

\(i\)-я из следующих \(m\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(1 \leq x_i < y_i \leq 10^9\)), обозначающие отрезок \([x_i, y_i]\).

Гарантируется, что все отрезки попарно различны. Более формально, не существует двух чисел \(i, j\) при \(1 \le i < j \le m\) таких, что \(x_i = x_j\) и \(y_i = y_j\).

\(i\)-я из следующих \(q\) строк содержит два целых числа \(l_i\) и \(r_i\) (\(1 \leq l_i < r_i \leq 10^9\)), описывающие запрос.

Выходные данные

Для каждого запроса выведите одно целое число  — \(f(l_i,r_i)-g(l_i,r_i)\) по модулю \(998\,244\,353\).

Примечание

В первом запросе мы должны найти \(f(1, 4) - g(1, 4)\). Единственное подмножество отрезков с объединением \([1, 4]\) это \(\{[1, 3], [2, 4]\}\), поэтому \(f(1, 4) = 1, g(1, 4) = 0\).

Во втором запросе нам нужно найти \(f(1, 5) - g(1, 5)\). Единственными подмножествами отрезков с объединением \([1, 5]\) являются \(\{[1, 3], [2, 4], [3, 5]\}\) и \(\{[1, 3], [3, 5]\}\), поэтому \(f(1, 5) = 1, g(1, 5) = 1\).

H. Максимальная перестановка

Конструктив *3500

Ecrade купил колоду карт, пронумерованных от \(1\) до \(n\). Пусть ценность перестановки \(a\) длины \(n\) равна \(\min\limits_{i = 1}^{n - k + 1}\ \sum\limits_{j = i}^{i + k - 1}a_j\). Ecrade хочет найти среди всех перестановок карт самую ценную. Однако это кажется немного сложным, поэтому, пожалуйста, помогите ему!

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 2 \cdot 10^4\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n,k\) (\(4 \leq k < n \leq 10^5\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите в первой строке наибольшую возможную ценность. Затем выведите \(n\) целых чисел \(a_1,a_2,\dots,a_n\) (\(1 \le a_i \le n\), все \(a_i\) различны)  — элементы перестановки, которая имеет наибольшую ценность.

Если таких перестановок несколько, выведите любую из них.

Примечание

В первом наборе входных данных \([1,4,5,3,2]\) имеет ценность \(13\). Можно показать, что при \(k = 4\) ни одна перестановка длиной \(5\) не имеет ценность больше \(13\).

Во втором наборе входных данных \([4,2,5,7,8,3,1,6]\) имеет ценность \(18\). Можно показать, что ни одна перестановка длины \(8\) не имеет ценность больше \(18\) при \(k = 4\).

A1. Садовник и капибары (простая версия)

Конструктив Перебор реализация *800

Это простая версия задачи. Различия между версиями заключаются в ограничениях на длину строки. Вы можете делать взломы, только если обе версии задачи сданы.

Казимир Казимирович — марсианский садовник. У него есть огромный сад, в котором растут двоичные сбалансированные яблони.

Недавно Казимир решил завести себе трех капибар. Садовник даже придумал им имена и записал их на листе бумаги. Имя каждой из капибар — непустая строка, состоящая из строчных букв «a» и «b».

Обозначим имена капибар строками \(a\), \(b\) и \(c\). Тогда Казимир записал непустые строки \(a\), \(b\) и \(c\) подряд без пробелов. Например, если капибар звали «aba», «ab» и «bb», то записанная садовником строка будет выглядеть как «abaabbb».

Садовник запомнил интересное свойство: либо строка \(b\) лексикографически не меньше строк \(a\) и \(c\) одновременно, либо строка \(b\) лексикографически не больше строк \(a\) и \(c\) одновременно. Иными словами, либо выполнено \(a \le b\) и \(c \le b\), либо выполнено \(b \le a\) и \(b \le c\) (а возможно, и оба условия одновременно). Здесь \(\le\) обозначает лексикографическое «меньше или равно» для строк. Таким образом, \(a \le b\) значит, что строки должны быть либо равны, либо строка \(a\) должна стоять раньше в словаре, чем строка \(b\). Более подробное объяснение этой операции см. в разделе «Примечание».

Сегодня садовник взглянул на свои записи и понял, что не может восстановить имена, поскольку они записаны без пробелов. Он уже не уверен, сможет ли восстановить оригинальные строки \(a\), \(b\) и \(c\), поэтому ему хочется найти любую тройку имен, которая удовлетворяет описанному выше свойству.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В единственной строке набора входных данных находится строка \(s\) (\(3 \le |s| \le 100\)) — имена капибар, записанные слитно. Строка состоит только из латинских букв «a» и «b».

Гарантируется, что сумма длин строк по всем наборам тестовых данных не превосходит \(500\).

Выходные данные

Для каждого набора входных данных выведите на отдельной строке три строки \(a\), \(b\) и \(c\), разделенные пробелами — имена, при записи которых без пробелов получается строка \(s\). При этом должно выполняться либо \(a \le b\) и \(c \le b\), либо \(b \le a\) и \(b \le c\).

Если способов восстановить имена несколько, то выведите любой из них. Если имена восстановить невозможно, то выведите «:(» (без кавычек).

Примечание

Строка \(x\) лексикографически меньше строки \(y\), если и только если выполняется один из следующих пунктов:

  • \(x\) — префикс \(y\), но \(x \ne y\);
  • в первой позиции, где \(x\) и \(y\) различны, в строке \(x\) находится буква «a», а в строке \(y\) — буква «b».

Теперь перейдем к примерам.

В первом наборе входных данных один из возможных способов разбить строку \(s\) на три строки — это «b», «bb», «a».

В третьем наборе входных данных можно заметить, что разбиение удовлетворяет двум условиям сразу (т. е. \(a \le b\), \(c \le b\), \(b \le a\) и \(b \le c\) верны одновременно).

A2. Садовник и капибары (сложная версия)

жадные алгоритмы Конструктив *900

Это сложная версия задачи. Различия между версиями заключаются в ограничениях на длину строки. Вы можете делать взломы, только если обе версии задачи сданы.

Казимир Казимирович — марсианский садовник. У него есть огромный сад, в котором растут двоичные сбалансированные яблони.

Недавно Казимир решил завести себе трех капибар. Садовник даже придумал им имена и записал их на листе бумаги. Имя каждой из капибар — непустая строка, состоящая из строчных букв «a» и «b».

Обозначим имена капибар строками \(a\), \(b\) и \(c\). Тогда Казимир записал непустые строки \(a\), \(b\) и \(c\) подряд без пробелов. Например, если капибар звали «aba», «ab» и «bb», то записанная садовником строка будет выглядеть как «abaabbb».

Садовник запомнил интересное свойство: либо строка \(b\) лексикографически не меньше строк \(a\) и \(c\) одновременно, либо строка \(b\) лексикографически не больше строк \(a\) и \(c\) одновременно. Иными словами, либо выполнено \(a \le b\) и \(c \le b\), либо выполнено \(b \le a\) и \(b \le c\) (а возможно, и оба условия одновременно). Здесь \(\le\) обозначает лексикографическое «меньше или равно» для строк. Таким образом, \(a \le b\) значит, что строки должны быть либо равны, либо строка \(a\) должна стоять раньше в словаре, чем строка \(b\). Более подробное объяснение этой операции см. в разделе «Примечание».

Сегодня садовник взглянул на свои записи и понял, что не может восстановить имена, поскольку они записаны без пробелов. Он уже не уверен, сможет ли восстановить оригинальные строки \(a\), \(b\) и \(c\), поэтому ему хочется найти любую тройку имен, которая удовлетворяет описанному выше свойству.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В единственной строке набора входных данных находится строка \(s\) (\(3 \le |s| \le 2 \cdot 10^5\)) — имена капибар, записанные слитно. Строка состоит только из латинских букв «a» и «b».

Гарантируется, что сумма длин строк по всем наборам тестовых данных не превосходит \(4 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите на отдельной строке три строки \(a\), \(b\) и \(c\), разделенные пробелами — имена, при записи которых без пробелов получается строка \(s\). При этом должно выполняться либо \(a \le b\) и \(c \le b\), либо \(b \le a\) и \(b \le c\).

Если способов восстановить имена несколько, то выведите любой из них. Если имена восстановить невозможно, то выведите «:(» (без кавычек).

Примечание

Строка \(x\) лексикографически меньше строки \(y\), если и только если выполняется один из следующих пунктов:

  • \(x\) — префикс \(y\), но \(x \ne y\);
  • в первой позиции, где \(x\) и \(y\) различны, в строке \(x\) находится буква «a», а в строке \(y\) — буква «b».

Теперь перейдем к примерам.

В первом наборе входных данных один из возможных способов разбить строку \(s\) на три строки — это «b», «bb», «a».

В третьем наборе входных данных можно заметить, что разбиение удовлетворяет двум условиям сразу (т. е. \(a \le b\), \(c \le b\), \(b \le a\) и \(b \le c\) верны одновременно).

B. Садовник и массив

битмаски Конструктив *1300

У садовника Казимира Казимировича есть массив из \(n\) целых чисел \(c_1, c_2, \dots, c_n\).

Он хочет проверить, найдется ли две различных подпоследовательности \(a\) и \(b\) исходного массива, для которых \(f(a) = f(b)\), где \(f(x)\) обозначает побитовое ИЛИ всех чисел в последовательности \(x\).

Последовательность \(q\) является подпоследовательностью \(p\), если \(q\) может быть получена из \(p\) удалением нескольких (возможно, ни одного или всех) элементов.

Две подпоследовательности считаются различными, если множества индексов входящих в них чисел различны, то есть значения элементов не учитываются при сравнении подпоследовательностей.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — размер массива \(c\).

Описание массива \(c\) в этой задаче дано в неявном виде для ускорения ввода.

\((i + 1)\)-я из следующих \(n\) строк набора данных начинается с целого числа \(k_i\) (\(1 \le k_i \le 10^5\)) — количества единичных бит в числе \(c_i\). Далее следуют \(k_i\) различных целых чисел \(p_{i, 1}, p_{i, 2}, \dots, p_{i, k_i}\) (\(1 \le p_i \le 2 \cdot 10^5\)) — номера единичных битов в числе \(c_i\). Иными словами, \(c_i = 2^{p_{i, 1}} + 2^{p_{i, 2}} + \ldots + 2^{p_{i, k_i}}\).

Гарантируется, что общая сумма \(k_i\) во всех тестах не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «Yes», если найдется описанные две различных подпоследовательности, для которых \(f(a) = f(b)\), и «No» в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Можно показать, что в первом наборе входных данных двух различных подпоследовательностей \(a\) и \(b\), для которых \(f(a) = f(b)\), не существует.

Во втором наборе входных данных можно взять такие подпоследовательности: подпоследовательность \(a\), сформированная элементом на позиции \(1\), и подпоследовательность \(b\), сформированная элементами на позициях \(1\) и \(2\).

В третьем наборе входных данных можно взять такие подпоследовательности: подпоследовательность \(a\), сформированная элементами на позициях \(1\), \(2\), \(3\) и \(4\), и подпоследовательность \(b\), сформированная элементами на позициях \(2\), \(3\) и \(4\).

F. Лаборатория на Плутоне

дп жадные алгоритмы Конструктив математика *2500

Как известно, марсианские ученые активно занимаются космическими исследованиями. Одно из самых приоритетных направлений — Плутон. Чтобы изучить эту планету более детально, было решено построить на Плутоне лабораторию.

Известно, что лаборатория будет построена из \(n\) квадратных блоков одинакового размера. Для удобства будем считать, что поверхность Плутона — плоскость, разбитая вертикальными и горизонтальными линиями на единичные квадраты. Но тогда каждый квадрат либо занят блоком лаборатории, либо нет, причем занято всего \(n\) квадратов.

Поскольку каждый блок квадратный, то у него есть четыре стены. Если стена примыкает к другому блоку, то она считается внутренней, иначе — внешней.

Плутон славится своими крайне холодными температурами, поэтому внешние стены лаборатории необходимо утеплить. На одну внешнюю стену потребуется одна единица утеплителя. Таким образом, чем больше суммарная длина внешних стен лаборатории (т. е. ее периметр), тем больше утеплителя потребуется.

Рассмотрим план лаборатории на рисунке ниже. На нем видно, что лаборатория состоит из \(n = 33\) блоков, а суммарно у всех блоков \(24\) внешние стены, т. е. потребуется \(24\) единицы утеплителя.

Следует строить лабораторию оптимальным образом, т. е. минимизировать количество утеплителя. С другой стороны, оптимальных вариантов может быть много, поэтому ученых может заинтересовать количество способов построить лабораторию, используя минимальное количество утеплителя, по модулю простого числа \(m\).

Два способа считаются одинаковыми, если они совпадают при наложении друг на друга без поворотов. Таким образом, если повернуть план лаборатории на \(90^{\circ}\), то такой новый план может считаться отдельным способом.

Чтобы помочь ученым в освоении Плутона, вам надо написать программу, которая решает эти непростые задачи.

Входные данные

В первой строке входных данных находится два целых числа \(t\) и \(u\) (\(1 \le t \le 2\cdot 10^5\), \(1 \le u \le 2\)) — количество тестовых примеров и тип задания. Если \(u=1\), то необходимо найти любой способ построить лабораторию оптимальным способом, а если \(u=2\), то необходимо вычислить количество способов это сделать.

Если \(u=2\), то в следующей строке входных данных находится простое целое число \(m\) (\(10^8 \le m \le 10^9 + 9\)), по модулю которого необходимо вычислять количество способов.

В каждой из следующих \(t\) строк входных данных находится описание тестового примера, состоящее из одного целого числа \(n\) (\(1 \le n \le 4\cdot 10^5\)) — количество блоков, из которых должна состоять лаборатория.

Гарантируется, что если \(u=1\), то сумма \(n\) по всем тестовым примерам не превосходит \(8\cdot10^5\).

Выходные данные

Для каждого тестового примера необходимо вывести ответы в формате ниже, разделяя их переводом строки. Формат выходных данных при этом зависит от \(u\) во входных данных.

Если \(u=1\), то необходимо в первой строке вывести через пробел два целых числа \(h\) и \(w\) — высота и ширина участка, на котором должна быть построена лаборатория. Далее, в каждой из следующих \(h\) строк необходимо вывести строки \(s_i\), состоящие из \(w\) символов «#» и «.» каждая. Если \(j\)-й символ строки \(s_i\) равен «#», то тогда на соответствующем квадрате должен располагаться блок лаборатории, иначе он считается пустым. Таким образом, мы получаем матрицу из символов. Должно также выполняться условие, что в первой и последней строках матрицы, а также в первом и последнем столбцах, должен быть хотя бы один символ «#», иначе можно было бы вывести такой же план лаборатории, но с меньшими \(h\) и \(w\). Если вариантов построить оптимальную лабораторию несколько, выведите любой из них.

Если \(u=2\), то необходимо вывести через пробел два целых числа \(p\) и \(c\) — количество внешних стен в оптимальной лаборатории, а также остаток от деления количества способов на \(m\).

Примечание

Рассмотрим второй пример.

При \(n=1\) единственный способ построить лабораторию — разместить единственный блок. При этом периметр будет равен четырем.

При \(n=2\) необходимо разместить два блока рядом. Это можно сделать как по вертикали, так и по горизонтали, поэтому есть два способа. Нетрудно убедиться, что в данном случае у лаборатории шесть внешних стен.

При \(n=7\) все \(22\) оптимальных плана показаны на рисунке ниже:

D. Teamwork

жадные алгоритмы Конструктив математика *2800

As soon as SWERC starts, your experienced \(3\)-person team immediately realizes that the contest features \(a\) easy problems, \(b\) medium problems, and \(c\) hard problems. Solving a problem will take any of you \(2\), \(3\), or \(4\) time units, depending on whether the problem is easy, medium, or hard. Regardless of the difficulty of the problem, the last time unit spent to solve it has to be spent using your shared computer.

You organize your efforts so that each of you starts (and ends) solving problems at integer time units. Any given problem can be solved by only one contestant; it requires a contiguous amount of time (which depends on the difficulty of the problem). None of the \(3\) of you can solve more than one problem at a time, but you can start solving a new problem immediately after finishing one. Similarly, the shared computer cannot be used by more than one of you at a time, but any of you can start using the computer (to complete the problem currently being solved) immediately after someone else stops using it.

Given that the contest lasts \(l\) time units, find the maximum number of problems that your team can solve. Additionally, find one way to solve the maximum number of problems.

Input

The input has a single line. It contains four integers \(a\), \(b\), \(c\), \(l\) (\(0 \leq a, b, c, \leq 10^4\), \(0 \le l \le 10^5\)) — the number of easy, medium, and hard problems, and the duration of the contest.

Output

On the first line, print a single integer \(n\) — the maximum number of problems that your team can solve.

Then, on the \(j\)-th of the following \(n\) lines, print three integers \(x_j\), \(p_j\), \(q_j\) (\(1 \leq x \leq 3\), \(0 \leq p_j < q_j \leq l\)) — the contestant that solves the \(j\)-th problem, and the start and end time for solving the \(j\)-th problem (measured as time units elapsed from the beginning of the contest). The difference \(q_j - p_j\) is \(2\), \(3\), or \(4\), depending on the difficulty of the problem.

The last \(n\) lines are to be provided in increasing order of end time: \(q_1 < q_2 < \cdots < q_n\). If there are multiple ways to solve \(n\) problems, output any of them.

Note

In the first sample, the first contestant solves an easy problem between time \(0\) and time \(2\) while the second contestant solves a medium problem between time \(0\) and time \(3\).

In the second sample, the first contestant solves an easy problem between time \(0\) and time \(2\), and then also solves a medium problem between time \(2\) and time \(5\). In the meantime, the second contestant solves another medium problem between time \(0\) and time \(3\), while the third contestant solves a hard problem between time \(0\) and time \(4\).

In the third sample, the contest only has medium and hard problems, and there is not enough time to solve any of them.

F. Train Splitting

графы жадные алгоритмы Конструктив *1700

There are \(n\) big cities in Italy, and there are \(m\) train routes between pairs of cities. Each route connects two different cities bidirectionally. Moreover, using the trains one can reach every city starting from any other city.

Right now, all the routes are operated by the government-owned Italian Carriage Passenger Company, but the government wants to privatize the routes. The government does not want to give too much power to a single company, but it also does not want to make people buy a lot of different subscriptions. Also, it would like to give a fair chance to all companies. In order to formalize all these wishes, the following model was proposed.

There will be \(k \ge 2\) private companies indexed by \(1, \, 2, \, \dots, \, k\). Each train route will be operated by exactly one of the \(k\) companies. Then:

  • For any company, there should exist two cities such that it is impossible to reach one from the other using only routes operated by that company.
  • On the other hand, for any two companies, it should be possible to reach every city from any other city using only routes operated by these two companies.

Find a plan satisfying all these criteria. It can be shown that a viable plan always exists. Please note that you can choose the number \(k\) and you do not have to minimize or maximize it.

Input

Each test contains multiple test cases. The first line contains an integer \(t\) (\(1 \le t \le 1000\)) — the number of test cases. The descriptions of the \(t\) test cases follow.

The first line of each test case contains two integers \(n\) and \(m\) (\(3 \le n \le 50\), \(n-1 \le m \le n(n-1)/2\)) — the number of cities and the number of train routes.

The next \(m\) lines contain two integers \(u_i\) and \(v_i\) each (\(1 \le u_i, v_i \le n\), \(u_i \ne v_i\)) — the \(i\)-th train route connects cities \(u_i\) and \(v_i\).

It is guaranteed that the routes connect \(m\) distinct pairs of cities. It is guaranteed that using the trains one can reach every city starting from any other city.

The sum of the values of \(n\) over all test cases does not exceed \(5000\).

Output

For each test case, on the first line print an integer \(k\) (\(2 \le k \le m\)) — the number of companies in your plan; on the second line print \(m\) integers \(c_1, \, c_2, \, \dots, \, c_m\) (\(1 \le c_i \le k\)) — in your plan company \(c_i\) operates the \(i\)-th route.

If there are multiple valid plans, you may print any of them.

Note

In the first test case, the output is illustrated in the following picture, where different colors correspond to different companies (blue for \(1\), red for \(2\), green for \(3\), and yellow for \(4\)):

If we consider, for example, only companies \(2\) and \(3\), we can see that from any city it is possible to reach every other city (picture on the left below). However, if we restrict to company \(2\) alone, it becomes impossible to reach city \(5\) from city \(1\) (picture on the right).

In the second test case, the output is illustrated in the following picture:

G. Another Wine Tasting Event

Комбинаторика Конструктив математика Строки *2100

After the first successful edition, Gabriella has been asked to organize a second wine tasting event. There will be \(2n - 1\) bottles of wine arranged in a row, each of which is either red wine or white wine.

This time, Gabriella has already chosen the type and order of all the bottles. The types of the wines are represented by a string \(s\) of length \(2n - 1\). For each \(1 \le i \le 2n - 1\), it holds that \(s_i = \texttt{R}\) if the \(i\)-th bottle is red wine, and \(s_i = \texttt{W}\) if the \(i\)-th bottle is white wine.

Exactly \(n\) critics have been invited to attend. The critics are numbered from \(1\) to \(n\). Just like last year, each critic \(j\) wants to taste an interval of wines, that is, the bottles at positions \(a_j, \, a_j + 1, \, \dots, \, b_j\) for some \(1 \le a_j \le b_j \le 2n - 1\). Moreover, they have the following additional requirements:

  • each of them wants to taste at least \(n\) wines, that is, it must hold that \(b_j - a_j + 1 \ge n\);
  • no two critics must taste exactly the same wines, that is, if \(j \ne k\) it must hold that \(a_j \ne a_k\) or \(b_j \ne b_k\).

Gabriella knows that, since the event is held in a coastal region of Italy, critics are especially interested in the white wines, and don't care much about the red ones. (Indeed, white wine is perfect to accompany seafood.) Thus, to ensure fairness, she would like that all critics taste the same number of white wines.

Help Gabriella find an integer \(x\) (with \(0 \le x \le 2n - 1\)) such that there exists a valid assignment of intervals to critics where each critic tastes exactly \(x\) white wines. It can be proved that at least one such \(x\) always exists.

Input

The first line contains the integer \(n\) (\(1 \le n \le 10^6\)) — where \(2n - 1\) is the number of bottles, and \(n\) is the number of critics.

The second line contains a string \(s\) of length \(2n - 1\) that represents the arrangement of the wines — the \(i\)-th character of \(s\) (\(1 \le i \le 2n - 1\)) is \(\texttt{R}\) for a red wine and \(\texttt{W}\) for a white wine.

Output

Print an integer \(x\) — the number of white wines that each critic will taste.

It can be proved that at least one solution exists. If multiple solutions exist, any of them will be accepted.

Note

In the first sample, there are \(5\) critics and \(2 \cdot 5 - 1 = 9\) bottles of wine. A possible set of intervals that makes each critic taste \(2\) white wines is the following: \([2, 6],\) \([1, 6],\) \([4, 8],\) \([1, 5],\) \([3, 7]\). Note that all intervals contain at least \(5\) bottles.

In the second sample, there is \(1\) critic and \(2 \cdot 1 - 1 = 1\) bottle of wine. The only possible interval is \([1, 1]\), which gives \(x = 0\).

A. Зал славы

жадные алгоритмы Конструктив Строки *800

Талия — легендарный гроссмейстер в шахматах. У нее есть \(n\) кубков, расположеных в ряд, кубки пронумерованы от \(1\) до \(n\) (слева направо), и по одной лампе рядом с каждым из кубков (лампы пронумерованы так же, как и кубки).

Каждая лампа направлена либо налево, либо направо; лампа освещает все кубки в заданном направлении (но не освещает кубок, рядом с которым стоит). Формально, у Талии есть строка \(s\) из символов «L» и «R», описывающая направления ламп. Лампа номер \(i\) освещает:

  • кубки \(1,2,\ldots, i-1\), если \(s_i\) это «L»;
  • кубки \(i+1,i+2,\ldots, n\), если \(s_i\) это «R».

Талия может выполнить следующую операцию не более одного раза:

  • Выбрать индекс \(i\) (\(1 \leq i < n\));
  • Поменять местами лампы \(i\) и \(i+1\) (не меняя их направление). Другими словами, поменять \(s_i\) и \(s_{i+1}\).

Талия попросила вас осветить все кубки (то есть сделать так, чтобы каждый кубок был освещен хотя бы одной лампой), или сообщить, что это невозможно сделать. Если это можно сделать, вы можете выполнить одну операцию или ничего не делать. Обратите внимание, что нельзя менять направления освещения ламп, можно только поменять местами соседние лампы.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит положительное целое число \(n\) (\(2 \leq n \leq 100\,000\)) — количество кубков.

Вторая строка содержит строку \(s\) длины \(n\), состоящую только из букв «L» и «R»: \(i\)-я буква описывает направление \(i\)-й лампы.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(100\,000\).

Выходные данные

Для каждого набора входных данных выведите \(-1\), если невозможно осветить все кубки, выполнив одну операцию или ничего не делая. Иначе выведите \(0\), если операцию выполнять не надо (т. е. все кубки освещены при изначальном положении ламп), или индекс \(i\) (\(1 \leq i < n\)), если нужно поменять местами лампы \(i\) и \(i+1\).

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере можно поменять местами лампы \(1\) и \(2\) или ничего не делать. В любом случае мы получим строку «LL». Не все кубки будут освещены, так как кубок \(2\) не освещен ни одной лампой: лампа \(1\) ничего не освещает, а лампа \(2\) освещает только кубок \(1\).

Во втором примере необходимо поменять местами лампы \(1\) и \(2\). Строка станет равной «RL«. Кубок \(1\) освещен лампой \(2\), а кубок \(2\) освещен лампой \(1\), поэтому можно подсветить все кубки.

В третьем примере все кубки изначально освещены, поэтому не выполнять операцию является корректным решением.

В последних двух примерах не обязательно менять местами лампы, так как все кубки изначально освещены. Однако представленные решения тоже верные.

B. Конструктив от MKnez

Конструктив математика *900

MKnez хочет построить массив \(s_1,s_2, \ldots , s_n\), удовлетворяющий следующим условиям:

  • Каждый элемент массива является целым числом, отличным от \(0\);
  • Сумма любых двух соседних элементов равна сумме всех элементов массива.

Формально, \(s_i \neq 0\) должно выполняться для всех \(1 \leq i \leq n\). Также должно выполняться \(s_1 + s_2 + \cdots + s_n = s_i + s_{i+1}\) для всех \(1 \leq i < n\).

Помогите MKnez построить массив с такими свойствами, или определите, что это невозможно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 1000\)) — требуемую длину массива.

Выходные данные

Для каждого набора входных данных выведите «YES», если существует массив длины \(n\), удовлетворяющий заданным условиям. Иначе выведите «NO».

Если ответ «YES», то на следующей строке выведите массив \(s_1,s_2, \ldots, s_n\), удовлетворяющий условиям. Каждый элемент должен быть ненулевым целым числом в отрезке \([-5000,5000]\), т. е. для каждого \(1 \leq i \leq n\) должно выполняться \(-5000 \leq s_i \leq 5000\) и \(s_i \neq 0\).

Можно показать, что если решение существует, то также существует решение, удовлетворяющее дополнительным ограничениям на значения чисел.

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере \([9,5]\) является корректным ответом, потому что \(9+5\) (сумма двух элементов \(s_1+s_2\)) равна \(9+5\) (сумме всех элементов). Существуют также другие решения, например, \([6,-9], [-1,-2], [-5000,5000], \ldots\)

Для второго примера покажем, почему некоторые массивы не удовлетворяют ограничениям:

  • \([1,1,1]\): \(s_1+s_2 = 1+1 = 2\) и \(s_1+s_2+s_3=1+1+1 = 3\) различны;
  • \([1,-1,1]\): \(s_1+s_2=1+(-1)=0\) и \(s_1+s_2+s_3=1+(-1)+1 = 1\) различны;
  • \([0,0,0]\): массив \(s\) не может содержать \(0\).

Это не является доказательством, но можно показать, что ответ — «NO».

D. Борис и его восхитительная прическа

дп жадные алгоритмы Конструктив снм сортировки Структуры данных *1700

Борис думает, что шахматы это скучная игра, поэтому он ушел со своего турнира пораньше. Он пошел в парикмахерскую, ведь его прическа была немного неаккуратная.

В настоящий момент его волосы можно описать массивом \(a_1,a_2,\ldots, a_n\), где \(a_i\) — высота волоса на позиции \(i\). Его желаемая прическа описывается массивом \(b_1,b_2,\ldots, b_n\) аналогично.

У парикмахера есть \(m\) бритв. Каждая бритва имеет некоторый размер и может быть использована не более одного раза. За одну операцию парикмахер может выбрать одну бритву и обрезать с помощью нее отрезок волос Бориса. Формально, операция выглядит следующим образом:

  • Выбрать ранее неиспользованную бритву, пусть ее размер равен \(x\);
  • Выбрать отрезок \([l,r]\) (\(1\leq l \leq r \leq n\));
  • Присвоить \(a_i := \min (a_i,x)\) для всех \(l\leq i \leq r\).

Обратите внимание, что некоторые бритвы могут иметь одинаковый размер. Парикмахер может выбирать размер \(x\) максимум столько раз, сколько у него есть бритв размера \(x\).

Парикмахер может выполнить сколько угодно операций, не используя одну бритву дважды. Необходимо, чтобы в конце выполнялось \(a_i = b_i\) для всех \(1 \leq i \leq n\). Он не обязан использовать все бритвы.

Определите, может ли парикмахер сделать необходимую Борису стрижку.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 20\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит положительное целое число \(n\) (\(3\leq n\leq 2\cdot 10^5\)) — длину массивов \(a\) и \(b\).

Вторая строка содержит \(n\) положительных целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — описание текущих волос Бориса.

Третья строка содержит \(n\) положительных целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \leq b_i \leq 10^9\)) — описание необходимой стрижки.

Четвертая строка содержит положительное целое число \(m\) (\(1 \leq m \leq 2\cdot 10^5\)) — количество бритв.

Пятая строка содержит \(m\) положительных целых чисел \(x_1,x_2, \ldots, x_m\) (\(1 \leq x_i \leq 10^9\)) — размеры бритв.

Гарантируется, что сумма значений \(n\) и сумма значений \(m\) по всем наборам входных данных не превосходят \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если парикмахер может выполнить необходимую стрижку, и «NO» иначе.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом примере волосы Бориса изначально равны \([3,3,3]\). Опишем последовательность из \(2\) операций, которые может выполнить парикмахер:

  • Использовать бритву размера \(1\) на отрезке \([2,2]\); волосы становятся \([3,1,3]\).
  • Использовать бритву размера \(2\) на отрезке \([1,3]\); волосы становятся \([2,1,2]\), что и требуется.

В третьем примере можно ничего не делать, так как волосы уже в желаемом состоянии.

В четвертом примере нельзя обрезать волосы так, чтобы их длина увеличилась, и \([1,1,1]\) превратился в \([1,1,2]\).

E. Параллельные показательные матчи Ани

графы жадные алгоритмы интерактив Конструктив сортировки *2400

Это интерактивная задача.

Аня собрала \(n\) шахматных экспертов, пронумерованных от \(1\) до \(n\), для которых выполняются следующие свойства:

  • Для любой пары игроков один игрок всегда выигрывает игру против другого (ничей не бывает);
  • Свойство транзитивности не обязательно выполняется: может быть такое, что \(A\) всегда выигрывает \(B\), \(B\) всегда выигрывает \(C\), а \(C\) всегда выигрывает \(A\).
Аня не знает, кто из игроков выигрывает кого в каждой паре.

Рассмотрим турнир из \(n-1\) игр. В каждой игре Аня выбирает двух игроков. Один из них выигрывает и остается в турнире, другой выбывает. После всех игр только остается только один игрок, называемый победителем. Игрок называется кандидатом в мастера, если он может победить в турнире (обратите внимание, что победитель турнира может зависеть от Аниного выбора игроков в \(n-1\) игре).

Так как Аня — любознательная девочка, ей интересно найти, какие игроки являются кандидатами в мастера. К сожалению, у нее не очень много времени. Она может организовать не более \(2n\) сеансов параллельной игры, в которых один игрок играет против многих.

В каждом сеансе Аня выберет ровно одного игрока, который сыграет по одной партии против нескольких (как минимум одного) других игроков. Выбранный игрок выиграет все игры, которые он бы выиграл в обычных условиях, то же самое верно для проигрышей. После окончания сеанса Аня узнает только количество партий, выигранных выбранным игроком (но не какие из партий были выиграны). По результатам сеанса никто не выбывает из турнира.

Можете помочь Ане определить кандидатов в мастера?

Выигрывающий игрок в каждой паре игроков может быть изменен между сеансами, но только так, чтобы результаты всех предыдущих сеансов сохранились. Эти изменения могут зависеть от ваших запросов.

Протокол взаимодействия

Сначала считайте одно целое число \(n\) (\(3 \leq n \leq 250\)) — количество игроков. После этого вы можете устраивать сеансы или выводить ответ.

Чтобы устроить сеанс, выведите «? \(i \; s_1 s_2 \ldots s_n\)» (без кавычек), где \(i\) — номер игрока, который будет одновременно играть против других. \(s\) — бинарная строка, обозначающая, против кого будет играть этот игрок. \(i\) играет против каждого \(j\), для которого выполняется \(s_j = 1\) (\(s_j = 1\) должно выполняться хотя бы для одного \(1 \leq j \leq n\)). Обратите внимание, должно выполняться \(s_i = 0\), так как игрок не может играть сам против себя, иначе запрос считается некорректным.

После этого считайте одно целое число — количество партий, в которых выиграл \(i\).

Когда вы нашли ответ, выведите «! \(c_1 c_2 \ldots c_n\)» (без кавычек) и завершите свою программу. \(c\) — бинарная строка, показывающая кандидатов в мастера. Игрок \(i\) является кандидатом в мастера, если выполняется \(c_i=1\), иначе он им не является.

Если вы сделаете более \(2n\) запросов, или какой-то запрос некорректен, взаимодействие немедленно завершится, и вы получите вердикт Неправильны ответ.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы в этой задаче запрещены.

Примечание

В первом примере первый запрос описывает сеанс игрока \(1\) против игрока \(2\) (и никого другого). Ответ на запрос равен \(1\), что означает, что игрок \(1\) выиграл единственную игру. Можно заключить, что \(1\) побеждает \(2\). Аналогично во втором запросе \(2\) побеждает \(3\), и в третьем запросе \(3\) побеждает \(1\). Все игроки являются кандидатами в мастера, потому что

  • Игрок \(1\) может выиграть турнир, если сначала играют \(2\) и \(3\). \(3\) проигрывает и выбывает, а \(2\) остается. \(1\) играет против \(2\) и выигрывает;
  • Другие игроки могут выиграть аналогично.

Во втором примере третий запрос описывает сеанс игрока \(1\) против всех остальных. Ответ на этот запрос равен \(4\), что означает, что им были выиграны все игры. Можно понять, что \(1\) побеждает всех других игроков. Так как этот игрок не может проиграть, то только он может остаться в конце турнира, то есть это единственный кандидат в мастера.

F. Ксолдовские камни

битмаски Деревья дп Конструктив *2500

Миша был забанен в шахматах за использование компьютера. Он отправился на пенсию и решил стать ксолдуном.

Однажды, гуляя в парке, Миша наткнулся на корневое дерево с вершинами, пронумерованными от \(1\) до \(n\). Корнем дерева является вершина с номером \(1\).

Для всех \(1\le i\le n\) в вершине \(i\) лежат \(a_i\) камней. Миша недавно выучил новое заклинание на уроке ксолдовства и хочет его опробовать. Заклинание состоит из нескольких шагов:

  • Выбрать некоторую вершину \(i\) (\(1 \leq i \leq n\)).
  • Вычислить побитовое исключающее ИЛИ \(x\) всех \(a_j\) таких, что вершина \(j\) лежит в поддереве вершины \(i\) (\(i\) принадлежит своему поддереву).
  • В значения \(a_j\) для всех вершин \(j\) в поддереве \(i\) присвоить \(x\).

Миша может выполнить не более \(2n\) заклинаний и хочет, чтобы в дереве не осталось камней. Более формально, он хочет, чтобы выполнялось \(a_i=0\) для всех \(1\leq i \leq n\). Можете помочь ему выполнить заклинания?

Деревом из \(n\) вершин называется связный ациклический граф из \(n-1\) ребра. Поддеревом вершины \(i\) является множество всех вершин \(j\) таких, что \(i\) лежит на простом пути от \(1\) (корня) к \(j\). В этой задаче \(i\) принадлежит собственному поддереву.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \leq n \leq 2\cdot 10^5\)) — размер дерева.

Вторая строка содержит массив целых чисел \(a_1,a_2,\ldots, a_n\) (\(0 \leq a_i \leq 31\)), описывающий изначальное количество камней в каждой вершине дерева.

Третья строка содержит массив целых чисел \(p_2,p_3,\ldots, p_n\) (\(1 \leq p_i \leq i-1\)), где \(p_i\) обозначает, что вершины \(p_i\) и \(i\) соединены ребром.

Выходные данные

Если нет подходящей последовательности заклинаний, выведите \(-1\).

Иначе в первой строке выведите одно целое число \(q\) (\(0 \leq q \leq 2n\)) — количество заклинаний в вашем решении.

Во второй строке выведите последовательность целых чисел \(v_1,v_2,\ldots,v_q\) (\(1 \leq v_i \leq n\)): \(i\)-е заклинание будет выполнено к поддереву вершины \(v_i\). Обратите внимание, что здесь важен порядок.

Если существует несколько решений, выведите любое из них. Вам не нужно минимизировать число операций.

Примечание

Рисунок ниже объясняет третий пример. Показаны только первые \(4\) заклинания, так как последние \(2\) ничего не меняют. Первый рисунок показывает начальное дерево, число камней в каждой вершине написано над вершиной зеленым. Изменения от заклинаний показаны красным.

G. Игра века

графы Конструктив кратчайшие пути *3000

Время пришло, MKnez и Балтик должны наконец-то провести Игры века. Для этого они построили деревню для размещения всех участников.

Деревня имеет вид равностороннего треугольника, ограниченного тремя дорогами длины \(n\). Она разделена на \(n^2\) меньших равносторонних треугольников со стороной \(1\) с помощью \(3n-3\) дополнительных дорог, параллельных сторонам, см. рисунок для \(n=3\). Каждая из \(3n\) дорог состоит из нескольких (возможно, \(1\)) участков дороги длины \(1\), соединяющих соседние перекрестки.

Для всех \(3n\) дороги уже выбраны направления (то есть, для каждой дороги выбрано одно и то же направление для всех ее участков). Транспорт может двигаться по участкам дорог только в выбранном направлении (т. е. дороги односторонние).

Ваша задача — внести поправки в план движения так, чтобы от каждого перекрестка можно было доехать до любого другого. А именно, вы можете изменять направление движения на любом участке дороги длины \(1\). Чему равно минимальное количество участков дорог, на которых нужно изменить направление?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое положительное число \(n\) (\(1\leq n\leq 10^5\)) — размер стороны треугольной деревни.

Далее следуют три строки, каждая из которых содержит бинарную строку длины \(n\), описывающую направления движения на дорогах.

\(i\)-я из этих строк содержит бинарную строку \(s_i\) длины \(n\), описывающую направления на дорогах, параллельных дороге \(i\) на рисунке выше. А именно, \(j\)-й символ \(s_i\) равен «1», если \(j\)-я кратчайшая дорога (параллельная дороге \(i\) на рисунке) имеет такое же направление, как дорога \(i\) на рисунке, и «0», если ее направление противоположное. Таким образом, первый символ \(s_i\) описывает направление на дороге из \(1\) участка, а последний символ описывает направление на дороге из \(n\) участков.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество участков дороги, на которых нужно изменить направление движения.

Примечание

Первый пример показан на рисунке в условии. Существует несколько решений, изменяющих направление на ровно \(2\) участках дорог, но изменение направления только на \(1\) участке дороги не может привести к тому, что от каждого перекрестка можно добраться до любого другого. Одно из возможных решений показано на рисунке ниже, измененные участки дорог показаны синим.

Во втором примере ответ равен \(0\), потому что уже в изначальной конфигурации можно от каждого перекрестка добраться до любого другого.

A. Школа и Хаято

жадные алгоритмы Конструктив *800

Сегодня Хаято пришёл из школы с домашним заданием.

Для задания Хаято дали массив \(a\) длины \(n\). Задание заключается в поиске \(3\) чисел из этого массива таких, что их сумма нечетна. В школе он утверждал, что такие \(3\) числа есть, но Хаято не уверен, поэтому попросил у вас помощи.

Скажите, есть ли такие три числа, и если есть, то выведите индексы \(i\), \(j\) и \(k\) такие, что число \(a_i + a_j + a_k\) нечетное.

Нечетными числами называются целые числа, не делящиеся на \(2\): \(1\), \(3\), \(5\) и так далее.

Входные данные

Первая строка содержит единственное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Для каждого набора данных в первой строке содержится одно целое число \(n\) (\(3 \le n \le 300\)) — длина массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^5\)) — сам массив \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных в первой строке сначала выведите одно слово «YES» (без кавычек), если существует \(3\) числа с нечетной суммой, или «NO» (без кавычек), если таких \(3\) чисел нет.

Если ответ существует, то во второй строке выведите \(3\) различных числа \(i, j, k\) (\(1 \le i, j, k \le n\)) — индексы чисел. Если ответов несколько — выведите любой.

Примечание

В первом наборе входных данных существует один способ взять \(3\) числа, и так как \(1 + 1 + 1 = 3\), то такая тройка нам подходит.

Во втором наборе входных данных нужно взять числа \(1, 2, 2\), так как \(1 + 2 + 2 = 5\).

В третьем наборе входных данных существует один способ взять три числа, но получаем \(1 + 2 + 3 = 6\) — четное число, поэтому нужной тройки не существует.

В пятом наборе входных данных, какие бы три числа мы не взяли, их сумма будет четной.

D. Битовая угадайка

Бинарный поиск битмаски интерактив Конструктив *1800

Это интерактивная задача.

Кира загадал некое положительное целое число \(n\), а Хаято требуется его угадать.

Изначально Кира дает Хаято значение \(\mathrm{cnt}\) — количество единичных битов в двоичной записи \(n\). Для того чтобы угадать \(n\), Хаято может делать лишь операции одного типа: выбрать некоторое целое число \(x\) и вычесть его из \(n\). Обратите внимание, что после каждой операции число \(n\) изменяется. Кира не любит плохих запросов, поэтому если Хаято попробует вычесть число \(x\) большее, чем \(n\), то он проиграет Кире. После каждой операции Кира сообщает обновленное значение \(\mathrm{cnt}\) — количество единичных битов в двоичной записи обновленного значения \(n\).

У Киры не так много терпения, поэтому Хаято должен угадать изначальное значение числа \(n\) за не более чем \(30\) запросов.

Так как Хаято учится в начальной школе, он просит вашей помощи — напишите программу, которая угадывает число \(n\). Кира — честный человек, поэтому он зафиксирует значение \(n\) изначально и не станет как-то менять начальное число в зависимости от запросов Хаято.

Входные данные

Во входных данных находятся несколько наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следуют наборы входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(\mathrm{cnt}\) — изначальное количество единичных битов в двоичной записи \(n\).

Загаданное целое число \(n\) удовлетворяет следующему ограничению \(1 \le n \le 10^9\).

Протокол взаимодействия

Для угадывания \(n\) вы можете не более \(30\) раз произвести описанную операцию. Для этого выведите строку в формете «- x» (\(1 \le x \le 10^9\)).

После этой операции из \(n\) вычитается число \(x\), и поэтому значение \(n\) изменяется. Если число \(x\) оказалось больше, чем текущее число \(n\), то такой запрос считается некорректным.

После каждой операции считайте одно неотрицательное целое число \(\mathrm{cnt}\) — количество единичных битов в двоичной записи текущего \(n\) после совершения операции.

Когда вы узнаете число \(n\), выведите одну строку следующего формата: «! n» (\(1 \le n \le 10^9\)).

После этого переходите к решению следующего набора входных данных или завершите программу, если таких нет.

Если ваша программа сделает более \(30\) операций для одного набора входных данных, вычтет число \(x\) большее, чем \(n\), или сделает некорректный запрос, то ответом на запрос будет -1, после получения такого ответа ваша программа должна немедленно завершится, чтобы получить вердикт Неправильный ответ. Иначе она может получить любой другой вердикт.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Чтобы сделать взлом, используйте следующий формат.

Первая строка должна содержать одно целое число \(t\) (\(1 \leq t \leq 500\)).

Каждый набор входных данных должен содержать одно целое число \(n\) (\(1 \leq n \leq 10^9\)) на отдельной строке.

Примечание

К примеру, количество единичных битов в числе \(6\) это \(2\), потому что двоичное представление \(6\) это \(110\). Для \(13\) количество единичных битов \(3\), так как \(13_{10} = 1101_2\).

В первом примере \(n = 1\), поэтому на вход дается число \(1\). После вычитания из \(n\) единицы оно становится нулевым, поэтому и количество единичных битов у него \(0\).

В третьем примере \(n = 3\), которое в двоичном представлении выглядит как \(3_{10} = 11_2\), следовательно на вход даётся количество единиц, то есть \(2\). После вычитания числа \(2\) мы имеем \(n = 1\), поэтому количество единичных битов теперь \(1\). После вычитания из \(n\) единицы оно становится равно нулю.

C. Равные частоты

жадные алгоритмы Конструктив Перебор реализация сортировки Строки *1600

Назовём строку сбалансированной, если все символы, которые в ней присутствуют, входят в неё одинаковое число раз. Например, «coder», «appall» и «ttttttt» — сбалансированные строки, а «wowwow» и «codeforces» — нет.

Вам дана строка \(s\) длины \(n\), состоящая из строчных латинских букв. Найдите сбалансированную строку \(t\) той же длины \(n\), состоящую из строчных латинских букв и отличающуюся от строки \(s\) в как можно меньшем числе позиций. Другими словами, число индексов \(i\) таких, что \(s_i \ne t_i\), должно быть минимальным возможным.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — длину строки \(s\).

Вторая строка содержит строку \(s\) длины \(n\), состоящую из строчных латинских букв.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите наименьшее число позиций, в которых строка \(s\) и сбалансированная строка \(t\) могут отличаться, и далее выведите саму такую строку \(t\).

Если существует несколько решений, выведите любое из них. Можно показать, что хотя бы одна сбалансированная строка всегда существует.

Примечание

В первом наборе входных данных заданная строка «hello» не является сбалансированной: буквы «h», «e» и «o» встречаются в ней по одному разу, а буква «l» — два раза. С другой стороны, строка «helno» сбалансирована: в ней присутствуют пять разных букв, и каждая из них встречается ровно один раз. Строки «hello» и «helno» отличаются всего в одной позиции — в четвёртом символе. Возможны и другие решения.

Во втором наборе входных данных строка «codefofced» сбалансирована, так как в ней присутствуют только буквы «c», «o», «d», «e» и «f», и каждая из них встречается ровно два раза.

В третьем наборе входных данных строка «eeeee» сбалансирована, так как в ней присутствует только буква «e».

В четвёртом наборе входных данных заданная строка «appall» уже сбалансирована.

G. Разнообразная раскраска

Деревья Конструктив *3200

В этой задаче мы будем работать с подвешенными бинарными деревьями. Напомним, что дерево называется подвешенным бинарным, если в нем есть выделенный корень, а у каждой вершины не более двух детей.

Сопоставим каждой вершине дерева один из двух цветов — белый или синий — и назовем такое сопоставление раскраской дерева. Раскраску назовем разнообразной, если у каждой вершины есть сосед (ребенок или родитель), покрашенный не в тот же цвет, что и сама вершина. Можно показать, что у любого дерева из не менее чем двух вершин существует разнообразная раскраска.

Дисбалансом раскраски назовем абсолютную разность между числом белых и синих вершин в ней.

Теперь к задаче. Изначально дерево состоит из одной вершины с номером \(1\), являющейся его корнем. Далее для каждого \(i\) от \(2\) до \(n\) в дереве появляется новая вершина \(i\), которая становится ребенком вершины \(p_i\). Гарантируется, что после каждого добавления дерево будет оставаться бинарным с корнем в вершине \(1\), то есть у каждой вершины будет не более двух детей.

После каждого добавления вершины нужно вывести минимальное возможное значение дисбаланса по всем возможным разнообразным раскраскам текущего дерева. Более того, после добавления последней вершины с номером \(n\) нужно также вывести саму разнообразную раскраску с минимальным дисбалансом.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — число вершин в итоговом дереве.

Вторая строка содержит \(n-1\) целых чисел \(p_2, p_3, \ldots, p_n\) (\(1 \le p_i \le i - 1\)) — номера родителей вершин \(2, 3, \ldots, n\). Никакое число не встречается среди \(p_2, p_3, \ldots, p_n\) более двух раз.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n-1\) целое число — минимальное возможное значение дисбаланса по всем возможным разнообразным раскраскам дерева после добавления в него вершин \(2, 3, \ldots, n\).

Далее выведите строку из \(n\) символов «w» и «b», описывающую разнообразную раскраску с минимальным дисбалансом для всего дерева целиком после добавления вершины \(n\): \(i\)-й символ строки должен быть равен «w», если вершина \(i\) покрашена в белый цвет, и «b», если в синий. Абсолютная разность между числом символов «w» и «b» должна быть равна последнему выведенному числу. У каждой вершины должен быть родитель или ребенок, покрашенный не в тот же цвет, что и сама вершина.

Примечание

Примеры разнообразных раскрасок с минимальным дисбалансом для всех промежуточных деревьев в первом наборе входных данных представлены на рисунке ниже:

A. Сделай массив красивым

Конструктив математика сортировки *800

Назовем массив \(a\) уродливым, если в нем есть хотя бы один элемент, который равен сумме всех элементов до него. Если массив не уродливый, назовем его красивым.

Например:

  • массив \([6, 3, 9, 6]\) — уродливый: элемент \(9\) равен \(6 + 3\);
  • массив \([5, 5, 7]\) — уродливый: элемент \(5\) (второй) равен \(5\);
  • массив \([8, 4, 10, 14]\) — красивый: \(8 \ne 0\), \(4 \ne 8\), \(10 \ne 8 + 4\), \(14 \ne 8 + 4 + 10\), значит, ни один элемент не равен сумме всех элементов до него.

Вам дан массив \(a\), для элементов которого выполняется условие \(1 \le a_1 \le a_2 \le \dots \le a_n \le 100\). Вы должны поменять порядок элементов \(a\) так, чтобы получился красивый массив. Обратите внимание, что нельзя ни добавлять новые элементы, ни удалять существующие — вы можете только переставлять элементы массива \(a\). Если массив \(a\) уже красивый, вы можете оставить его без изменений.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 2000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк. В первой строке задано одно целое число \(n\) (\(2 \le n \le 50\)). Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_1 \le a_2 \le \dots \le a_n \le 100\)).

Выходные данные

Для каждого набора входных данных выведите ответ следующим образом:

  • если нельзя переставить элементы \(a\) так, чтобы он стал красивым, выведите NO;
  • иначе в первой строке выведите YES. Во второй строке выведите \(n\) целых чисел — красивый массив, который можно получить, поменяв порядок элементов в \(a\). Если таких массивов несколько, выведите любой из них.

B. Матрица разностей

Конструктив математика *1100

Для квадратной матрицы целых чисел размера \(n \times n\) определим ее красоту следующим образом: для каждой пары соседних по стороне элементов \(x\) и \(y\) выпишем число \(|x-y|\), а затем найдем количество различных чисел среди выписанных.

Например, для матрицы \(\begin{pmatrix} 1 & 3\\ 4 & 2 \end{pmatrix}\) будут выписаны числа \(|1-3|=2\), \(|1-4|=3\), \(|3-2|=1\) и \(|4-2|=2\); среди них \(3\) различных числа (\(2\), \(3\) и \(1\)), а значит, ее красота равна \(3\).

Ваша задача — для заданного \(n\) найти матрицу целых чисел размера \(n \times n\), где каждое число от \(1\) до \(n^2\) встречается ровно один раз, такую, что ее красота максимально возможная среди всех таких матриц.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 49\)) — количество наборов входных данных.

Первая (и единственная) строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 50\)).

Выходные данные

Для каждого набора входных данных выведите \(n\) строк по \(n\) целых чисел — матрицу целых чисел размера \(n \times n\), где каждое число от \(1\) до \(n^2\) встречается ровно один раз, такую, что ее красота максимально возможная среди всех таких матриц.

Если ответов несколько, выведите любой из них

B. Обмен буквами

Конструктив *1900

В кооперативную игру играют \(m\) человек. В игре есть \(3m\) листков бумаги: \(m\) листков с буквой «w», \(m\) листков с буквой «i» и \(m\) листков с буквой «n».

Изначально каждому игроку дают три листка (возможно, с одинаковыми буквами).

Цель игры — сделать так, чтобы каждый из \(m\) человек мог сложить из своих листков бумаги слово «win». Другими словами, у каждого игрока должен оказаться один листок с буквой «w», один листок с буквой «i» и один листок с буквой «n».

Чтобы достичь цели, игроки могут производить обмены. В каждом обмене участвуют два игрока. Каждый из них выбирает ровно один из своих листков бумаги, и потом игроки обмениваются выбранными листками.

Найдите кратчайшую последовательность обменов, после которой у каждого игрока будет одна буква «w», одна буква «i» и одна буква «n».

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(m\) (\(2 \le m \le 10^5\)) — число игроков.

\(i\)-я из следующих \(m\) строк содержит строку \(s_i\) длины \(3\), состоящую из строчных латинских букв «w», «i» и «n» и обозначающую буквы, которые написаны на листках бумаги игрока \(i\) в начале игры, в произвольном порядке.

Каждая из букв «w», «i» и «n» встречается на листках бумаги суммарно ровно \(m\) раз.

Гарантируется, что сумма \(m\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите неотрицательное целое число \(k\) — наименьшее число обменов, необходимое для того, чтобы у каждого игрока оказалась одна буква «w», одна буква «i» и одна буква «n».

В каждой из следующих \(k\) строк выведите четыре токена \(a_1\) \(c_1\) \(a_2\) \(c_2\), описывающих обмены в хронологическом порядке (\(1 \le a_1, a_2 \le m\); \(a_1 \ne a_2\); \(c_1, c_2\) — символы из \(\{\mathtt{w}, \mathtt{i}, \mathtt{n}\}\)): игрок номер \(a_1\) отдаёт листок с буквой \(c_1\) игроку номер \(a_2\), а игрок номер \(a_2\) одновременно с этим отдаёт листок с буквой \(c_2\) игроку номер \(a_1\).

Если существует несколько решений, выведите любое из них.

A. Экспоненциальное уравнение

Конструктив математика *800

Вам дано целое число \(n\).

Найдите любую пару целых чисел \((x,y)\) (\(1\leq x,y\leq n\)), для которой \(x^y\cdot y+y^x\cdot x = n\).

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1\leq t\leq 10^4\)) — количество наборов входных данных.

Каждый набор входных данных содержит одну строку с одним целым числом \(n\) (\(1\leq n\leq 10^9\)).

Выходные данные

Для каждого набора входных данных, если возможно, выведите два целых числа \(x\) и \(y\) (\(1\leq x,y\leq n\)). Если ответов несколько, выведите любой.

В противном случае выведите \(-1\).

Примечание

В третьем наборе входных данных \(2^3 \cdot 3+3^2 \cdot 2 = 42\), поэтому пары \((2,3),(3,2)\) будут считаться допустимыми решениями.

В четвертом наборе входных данных \(5^5 \cdot 5+5^5 \cdot 5 = 31250\), поэтому пара \((5,5)\) является допустимым решением.

E. Распределение XOR

битмаски жадные алгоритмы Конструктив математика *2100

Вам дан массив из ровно \(n\) чисел \([1,2,3,\ldots,n]\), а также целые числа \(k\) и \(x\).

Вам нужно разбить массив на ровно \(k\) непустых непересекающихся подпоследовательностей так, чтобы побитовое исключающее ИЛИ всех чисел в каждой подпоследовательности было равно \(x\), и каждое число находилось ровно в одной подпоследовательности. Обратите внимание, что нет никаких ограничений на длину каждой подпоследовательности.

Последовательность \(a\) является подпоследовательностью \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) элементов.

Например, для \(n = 15\), \(k = 6\), \(x = 7\) корректно следующее разбиение:

  • \([6,10,11]\), \(6 \oplus 10 \oplus 11 = 7\),
  • \([5,12,14]\), \(5 \oplus 12 \oplus 14 = 7\),
  • \([3,9,13]\), \(3 \oplus 9 \oplus 13 = 7\),
  • \([1,2,4]\), \(1 \oplus 2 \oplus 4 = 7\),
  • \([8,15]\), \(8 \oplus 15 = 7\),
  • \([7]\), \(7 = 7\),
где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Следующее разбиение некорректно, так как не используются числа \(8\) и \(15\):

  • \([6,10,11]\), \(6 \oplus 10 \oplus 11 = 7\),
  • \([5,12,14]\), \(5 \oplus 12 \oplus 14 = 7\),
  • \([3,9,13]\), \(3 \oplus 9 \oplus 13 = 7\),
  • \([1,2,4]\), \(1 \oplus 2 \oplus 4 = 7\),
  • \([7]\), \(7 = 7\).

Следующее разбиение некорректно, так как \(3\) встречается дважды, а \(1\), \(2\) не используются:

  • \([6,10,11]\), \(6 \oplus 10 \oplus 11 = 7\),
  • \([5,12,14]\), \(5 \oplus 12 \oplus 14 = 7\),
  • \([3,9,13]\), \(3 \oplus 9 \oplus 13 = 7\),
  • \([3,4]\), \(3 \oplus 4 = 7\),
  • \([8,15]\), \(8 \oplus 15 = 7\),
  • \([7]\), \(7 = 7\).
Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит три целых числа \(n\), \(k\), \(x\) (\(1 \le k \le n \le 2 \cdot 10^5\); \(1\le x \le 10^9\)) — длина массива, количество подпоследовательностей и требуемое значение XOR.

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если ответ существует, выведите «YES» в первой строке. В \(i\)-й из следующих \(k\) строк сначала выведите целое число \(s_i\) — длину \(i\)-й подпоследовательности, затем выведите \(s_i\) целых чисел — саму \(i\)-ю подпоследовательность. Если ответов несколько, выведите любой. Обратите внимание, что вы можете вывести элементы подпоследовательности в любом порядке.

В противном случае выведите «NO».

Примечание

В первом наборе входных данных мы строим следующие \(6\) подпоследовательностей:

  • \([6,10,11]\), \(6 \oplus 10 \oplus 11 = 7\),
  • \([5,12,14]\), \(5 \oplus 12 \oplus 14 = 7\),
  • \([3,9,13]\), \(3 \oplus 9 \oplus 13 = 7\),
  • \([1,2,4]\), \(1 \oplus 2 \oplus 4 = 7\),
  • \([8,15]\), \(8 \oplus 15 = 7\),
  • \([7]\), \(7 = 7\).

Во втором наборе входных данных мы строим следующие \(4\) подпоследовательности:

  • \([1,4]\), \(1 \oplus 4 = 5\),
  • \([2,7]\), \(2 \oplus 7 = 5\),
  • \([3,6]\), \(3 \oplus 6 = 5\),
  • \([5,8,9,10,11]\), \(5 \oplus 8 \oplus 9 \oplus 10 \oplus 11 = 5\).

Следующей разбиение также будет считаться правильным в этом наборе входных данных:

  • \([1,4]\), \(1 \oplus 4 = 5\),
  • \([2,7]\), \(2 \oplus 7 = 5\),
  • \([5]\), \(5 = 5\),
  • \([3,6,8,9,10,11]\), \(3 \oplus 6 \oplus 8 \oplus 9 \oplus 10 \oplus 11 = 5\).

F. Обратное преобразование

Конструктив математика реализация *2500

Ученый-перестановщик изучает самопреобразующуюся перестановку \(a\), состоящую из \(n\) элементов \(a_1,a_2,\ldots,a_n\).

Перестановка — это последовательность целых чисел от \(1\) до \(n\) длины \(n\), содержащая каждое число ровно один раз. Например, \([1]\), \([4, 3, 5, 1, 2]\) являются перестановками, а \([1, 1]\), \([4, 3, 1]\) — нет.

Перестановка изменяется каждый день. Каждый день каждый элемент \(x\) заменяется на \(a_x\), то есть \(a_x\) станет \(a_{a_x}\). Другими словами,

  • в первый день перестановка примет вид \(b\), где \(b_x = a_{a_x}\);
  • на второй день перестановка примет вид \(c\), где \(c_x = b_{b_x}\);
  • \(\ldots\)
Например, рассмотрим перестановку \(a = [2,3,1]\). В первый день она станет равна \([3,1,2]\). На второй день она станет равна \([2,3,1]\).

Вам дана перестановка \(a'\) на \(k\)-й день.

Определим \(\sigma(x) = a_x\) и определим \(f(x)\) как минимальное натуральное число \(m\) такое, что \(\sigma^m(x) = x\), где \(\sigma^m(x)\) обозначает \(\underbrace{\sigma(\sigma(\ldots \sigma}_{m \text{ раз}}(x) \ldots))\).

Например, если \(a = [2,3,1]\), то \(\sigma(1) = 2\), \(\sigma^2(1) = \sigma(\sigma(1)) = \sigma(2) = 3\), \(\sigma^3(1) = \sigma(\sigma(\sigma(1))) = \sigma(3) = 1\), поэтому \(f(1) = 3\). И если \(a=[4,2,1,3]\), то \(\sigma(2) = 2\), значит, \(f(2) = 1\); \(\sigma(3) = 1\), \(\sigma^2(3) = 4\), \(\sigma^3(3) = 3\), поэтому \(f(3) = 3\).

Найдите начальную перестановку \(a\) такую, что \(\sum\limits^n_{i=1} \dfrac{1}{f(i)}\) принимает минимально возможное значение.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\); \(1 \le k \le 10^9\)) — длина \(a\) и последний день.

Вторая строка содержит \(n\) целых чисел \(a'_1,a'_2,\ldots,a'_n\) (\(1 \le a'_i \le n\)) — перестановка в \(k\)-й день.

Гарантируется, что сумма \(n\) не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если хотя бы одна перестановка \(a\), из которой получается \(a'\), существует, выведите «YES», и в следующей строке выведите \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) — начальную перестановку с минимальной суммой \(\sum\limits^n_{i=1} \dfrac{1}{f(i)}\). Если ответов с минимальной суммой несколько, выведите любой.

Если нет ни одной подходящей перестановки, выведите «NO».

Примечание

Во втором наборе входных данных начальная перестановка может быть равна \(a = [6,2,5,7,1,3,4]\), которая станет \([3,2,1,4,6,5,7]\) в первый день и \(a' = [1,2,3,4,5,6,7]\) во второй день (\(k\)-й день). Кроме того, среди всех перестановок, удовлетворяющих этому, она имеет минимальную \(\sum\limits^n_{i=1} \dfrac{1}{f(i)}\), которая равна \(\dfrac{1}{4}+\dfrac{1}{1}+\dfrac{1}{4}+\dfrac{1}{2}+\dfrac{1}{4}+\dfrac{1}{4}+\dfrac{1}{2}=3\).

В пятом наборе входных данных начальная перестановка может быть равна \(a = [4,2,1,3]\), которая станет \([3,2,4,1]\) в первый день, \([4,2,1,3]\) на второй день и так далее. Таким образом, в \(8\)-й день (\(k\)-й день) в итоге получится \(a' = [4,2,1,3]\). Для такой перестановки достигается минимальное значение \(\sum\limits^n_{i=1} \dfrac{1}{f(i)} = \dfrac{1}{3} + \dfrac{1}{1} + \dfrac{1}{3} + \dfrac{1}{3} = 2\).

B. Сумма двух чисел

жадные алгоритмы Конструктив математика реализация Теория вероятностей *1100

Сумма цифр целого неотрицательного числа \(a\) — это результат суммирования его цифр при записи в десятичной системе счисления. Например, сумма цифр числа \(123\) равна \(6\), а сумма цифр числа \(10\) равна \(1\). Формально, сумма цифр числа \(\displaystyle a=\sum_{i=0}^{\infty} a_i \cdot 10^i\), где \(0 \leq a_i \leq 9\), определяется как \(\displaystyle\sum_{i=0}^{\infty}{a_i}\).

Дано целое число \(n\). Найдите два целых неотрицательных числа \(x\) и \(y\), которые удовлетворяют следующим условиям:

  • \(x+y=n\), и
  • сумма цифр числа \(x\) и сумма цифр числа \(y\) отличаются не более чем на \(1\).

Можно показать, что такие \(x\) и \(y\) всегда существуют.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно число \(n\) (\(1 \leq n \leq 10^9\)) — сумму искомых чисел.

Выходные данные

Для каждого набора входных данных выведите два целых числа \(x\) и \(y\). Если ответов несколько, выведите любой.

Примечание

Во втором наборе входных данных сумма цифр \(67\) и сумма цифр \(94\) равны \(13\).

В третьем наборе сумма цифр числа \(60\) равна \(6\), а сумма цифр числа \(7\) равна \(7\).

C. Разбиение на пары

жадные алгоритмы Конструктив математика *1300

Дано целое число \(n\). Разбейте числа от \(1\) до \(2n\) на пары (каждое число должно быть ровно в одной паре) так, чтобы суммы пар были последовательными различными целыми числами.

Формально, пусть \((a_i, b_i)\) — пары, на которые вы разбили числа. \(\{a_1, b_1, a_2, b_2, \ldots, a_n, b_n\}\) должно быть перестановкой чисел \(\{1, 2, \ldots, 2n\}\). Обозначим отсортированные по возрастанию значения \(\{a_1+b_1, a_2+b_2, \ldots, a_n+b_n\}\) как \(s_1 < s_2 < \ldots < s_n\). Должно выполняться \(s_{i+1}-s_i = 1\) для всех \(1 \le i \le n - 1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно число \(n\) (\(1 \leq n \leq 10^5\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных, если такое разбиение не существует, выведите «No». В противном случае выведите «Yes», а после \(n\) строк — пары чисел.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Для третьего набора каждое целое число от \(1\) до \(6\) встречается один раз. Суммы совпавших пар составляют \(4+2=6\), \(1+6=7\), \(3+5=8\) — последовательные различные целые числа.

F. XOR, деревья и запросы

битмаски графы Деревья жадные алгоритмы Конструктив поиск в глубину и подобное реализация снм *2500

Вам дано дерево с \(n\) вершинами. Вершины пронумерованы от \(1\) до \(n\).

Вам нужно будет назначить каждому ребру вес. Пусть вес \(i\)-го ребра будет \(a_i\) (\(1 \leq i \leq n-1\)). Вес каждого ребра должен быть целым числом от \(0\) до \(2^{30}-1\), включительно.

Вам дано \(q\) условий. Каждое условие состоит из трех целых чисел \(u\), \(v\) и \(x\). Это означает, что побитовое исключающее ИЛИ всех ребер на кратчайшем пути от \(u\) до \(v\) должно быть равно \(x\).

Выясните, существуют ли числа \(a_1, a_2, \ldots, a_{n-1}\), удовлетворяющие заданным условиям. Если существуют, выведите такое решение, при котором \(a_1 \oplus a_2 \oplus \ldots \oplus a_{n-1}\) будет наименьшим. Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Если существует несколько решений таких, что \(a_1 \oplus a_2 \oplus \ldots \oplus a_{n-1}\) является наименьшим, выведите любое из них.

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(2 \le n \le 2.5 \cdot 10^5\), \(0 \le q \le 2.5 \cdot 10^5\)). В \(i\)-й из следующих \(n-1\) строк содержится два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\), \(x_i \neq y_i\)), то есть \(i\)-е ребро соединяет вершины \(x_i\) и \(y_i\) в дереве.

Гарантируется, что заданные ребра образуют дерево.

Следующие \(q\) строк содержат информацию об условиях.

Каждая строка содержит три целых числа \(u\), \(v\), \(x\) (\(1 \le u, v \le n\), \(u \neq v\), \(0 \le x \le 2^{30}-1\)), означающие, что побитовое исключающее ИЛИ всех ребер на кратчайшем пути от \(u\) до \(v\) должно быть \(x\).

Выходные данные

Если не существует \(a_1\), \(a_2\), ..., \(a_{n-1}\), которые удовлетворяют заданным условиям, выведите «No».

В противном случае в первой строке выведите «Yes».

Затем в следующей строке выведите \(n-1\) целых чисел, где \(i\)-е целое число — это вес \(i\)-го ребра. Если существует несколько решений, то выведите такое решение, при котором \(a_1 \oplus a_2 \oplus \ldots \oplus a_{n-1}\) будет наименьшим.

Если существует несколько решений, при которых \(a_1 \oplus a_2 \oplus \ldots \oplus a_{n-1}\) принимает наименьшее значение, выведите любое.

При выводе «Yes» или «No» вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Для первого примера не существует набора весов ребер, удовлетворяющего заданному условию.

Для второго примера два условия означают, что \(a_1 \oplus a_2 \oplus a_3=2\) и \(a_4 \oplus a_5=7\). Может существовать несколько решений, например, \((a_1, a_2, a_3, a_4, a_5)=(1, 2, 1, 4, 3)\).

Для третьего примера два условия означают, что \(a_1 \oplus a_2 \oplus a_3=3\) и \(a_1 \oplus a_4 \oplus a_5=5\). Существует множество решений, удовлетворяющих данному условию.

\((a_1, a_2, a_3, a_4, a_5)=(1, 1, 3, 4, 0)\) удовлетворяет заданным условиям, но побитовое исключающее ИЛИ весов всех ребер равно \(7\), что не является наименьшим возможным значением \(a_1 \oplus a_2 \oplus \ldots \oplus a_{n-1}\), поэтому это не является верным решением.

D. Serval и сдвиг-сдвиг-сдвиг

битмаски Конструктив Перебор реализация *2200

У Serval есть два \(n\)-битных двоичных числа \(a\) и \(b\). Он хочет поделиться этими числами с Toxel.

Так как Toxel больше нравится число \(b\), Serval решил изменить \(a\) на \(b\) с помощью нескольких (возможно, нуля) операций. За одну операцию Serval может выбрать любое положительное целое число \(k\) от \(1\) до \(n\), и заменить \(a\) на одно из следующих чисел:

  • \(a\oplus(a\ll k)\)
  • \(a\oplus(a\gg k)\)

Другими словами, операция сдвигает каждый бит числа \(a\) налево или направо на \(k\) позиций, при этом переполненные биты удаляются, а недостающие биты дополняются \(0\). Побитовое исключающее ИЛИ результата сдвига и изначального \(a\) присваиваются обратно \(a\).

У Serval нет много времени. Он хочет применить не более \(n\) операций, чтобы изменить \(a\) на \(b\). Пожалуйста, помогите ему найти последовательность операций, или определите, что невозможно изменить \(a\) на \(b\) за не более \(n\) операций. Вам не нужно минимизировать количество операций.

В этой задаче \(x\oplus y\) обозначает побитовое исключающее ИЛИ чисел \(x\) и \(y\). \(a\ll k\) и \(a\gg k\) обозначают логический сдвиг влево и логический сдвиг вправо.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1\le t\le2\cdot10^{3}\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1\le n\le2\cdot10^{3}\)) — количество битов в числах \(a\) и \(b\).

Вторая и третья строка каждого набора входных данных содержат бинарную строку длины \(n\), обозначающую \(a\) и \(b\), соответственно. Строки содержат только символы 0 и 1.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot10^{3}\).

Выходные данные

Для каждого набора входных данных, если невозможно изменить \(a\) на \(b\) за не более \(n\) операций, выведите одно число \(-1\).

Иначе, в первой строке выведите количество операций \(m\) (\(0\le m\le n\)).

Если \(m>0\), во второй строке выведите \(m\) целых чисел \(k_{1},k_{2},\dots,k_{m}\) обозначающих операции. Если \(1\le k_{i}\le n\), это обозначает логический сдвиг влево \(a\) на \(k_{i}\) позиций. Если \(-n\le k_{i}\le-1\), это обозначает логический сдвиг вправо \(a\) на \(-k_{i}\) позиций.

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных:

Первая операция изменяет \(a\) на \(\require{cancel}00111\oplus\cancel{001}11\underline{000}=11111\).

Вторая операция изменяет \(a\) на \(\require{cancel}11111\oplus\underline{00}111\cancel{11}=11000\).

Биты с зачеркиванием — это биты с переполнением, которые удаляются. Биты с подчеркиванием являются дополненными битами.

Во втором наборе входных данных \(a\) уже равно \(b\), поэтому никаких операций делать не нужно.

В третьем наборе входных данных можно показать, что \(a\) невозможно изменить на \(b\).

E. Влад и пара чисел

битмаски Конструктив *1400

Влад нашёл два положительных целых числа \(a\) и \(b\) (\(a,b>0\)). Он обнаружил, что \(a \oplus b = \frac{a + b}{2}\), где \(\oplus\) означает операцию побитового исключающего ИЛИ, а деление происходит без округления.

Так как запомнить одно число проще, чем два, Влад запомнил только \(a\oplus b\), обозначим это число как \(x\). Помогите ему найти любые подходящие \(a\) и \(b\) или скажите, что такие не существуют.

Входные данные

Первая строка входных данных содержит единственное число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Каждый набор входных данных описывается одним целым числом \(x\) (\(1 \le x \le 2^{29}\)) — числом, которое запомнил Влад.

Выходные данные

Выведите \(t\) строк, каждая из которых является ответом на соответствующий набор входных данных. В качестве ответа выведите \(a\) и \(b\) (\(0 < a,b \le 2^{32}\)), такие что \(x = a \oplus b = \frac{a + b}{2}\). Если вариантов несколько, выведите любой из них. Если подходящих пар не существует, выведите -1.

G. Фишки на графе

графы Конструктив кратчайшие пути поиск в глубину и подобное *2300

Вам дан неориентированный связный граф, в некоторых вершинах которого находятся фишки и/или бонусы. Рассмотрим игру, в которой участвует один игрок  — вы.

Вы можете передвигать фишки согласно следующим правилам:

  • В начале игры вы можете совершить ровно один ход: подвинуть любую фишку на любую соседнюю вершину.
  • Если перемещение фишки завершилось на бонусе, то разрешается совершить ещё один ход любой другой фишкой.

Можно использовать разные бонусы в любом порядке, один и тот же бонус может быть использован несколько раз. Бонусы в ходе игры не перемещаются.

В одной вершине может одновременно находиться несколько фишек, но изначально в каждой вершине находится не более одной фишки.

Вершина с номером \(1\) является финишной, и ваша задача — определить, можно ли попасть в неё какой-либо фишкой, совершая ходы фишками по описанным выше правилам. Если какая-то фишка изначально находится в вершине \(1\), то игра считается уже выигранной.

Финиш обозначен чёрным цветом, бонусы красным, фишки — серым.
Например, для данного графа можно дойти до финиша фишкой из \(8\)-й вершины, совершив следующую последовательность ходов:
  1. Перейти из \(8\)-й вершины в \(6\)-ю.
  2. Перейти из \(7\)-й вершины в \(5\)-ю.
  3. Перейти из \(6\)-й вершины в \(4\)-ю.
  4. Перейти из \(5\)-й вершины в \(6\)-ю.
  5. Перейти из \(4\)-й вершины в \(2\)-ю.
  6. Перейти из \(6\)-й вершины в \(4\)-ю.
  7. Перейти из \(2\)-й вершины в \(1\)-ю, которая является финишной.
Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 2 \cdot 10^5\), \(0 \le m \le 2 \cdot 10^5\)) — число вершин и рёбер в графе, соответственно.

Вторая строка описания каждого набора входных данных содержит два целых числа \(p\) и \(b\) (\(1 \le p \le n, 0 \le b \le n\)) — число фишек и бонусов, соответственно.

Третья строка описания каждого набора входных данных содержит \(p\) различных целых чисел от \(1\) до \(n\) — номера вершин, в которых находятся фишки.

Четвёртая строка описания каждого набора входных данных содержит \(b\) различных целых чисел от \(1\) до \(n\) — номера вершин, в которых находятся бонусы. Обратите внимание, что значение \(b\) может быть равно \(0\). В этом случае эта строка является пустой.

В одной вершине могут одновременно находиться и фишка и бонус.

Следующие \(m\) строк описания каждого набора входных данных содержат по два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\), \(u_i \ne v_i\)) — вершины, соединяемые \(i\)-м ребром. Между каждой парой вершин существует не более одного ребра. Заданный граф является связным, то есть из любой вершины можно попасть в любую, двигаясь по рёбрам.

Наборы входных данных разделены пустой строкой.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\). Аналогично, гарантируется, что сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите YES, если можно дойти до финиша какой-нибудь фишкой, и NO в противном случае.

Вы можете выводить YES и NO в любом регистре (например, строки yEs, yes, Yes и YES будут распознаны как положительный ответ).

Примечание
  • Первый набор входных данных разобран в условии.
  • Во втором наборе входных данных есть только одна фишка, она может походить только один раз, и не может дойти до финиша.
  • В третьем наборе входных данных фишка может дойти до финиша за \(1\) ход.
  • В четвёртом наборе входных данных нужно просто походить от вершины \(2\) к вершине \(1\).
  • В шестом наборе входных данных фишка изначально находится в вершине номер \(1\), поэтому мы побеждаем сразу.

B. Федя и массив

Конструктив математика *1100

Недавно Феде на день рождения подарили массив \(a\) из \(n\) целых чисел, записаных по кругу, в котором для каждой пары соседних элементов (\(a_1\) и \(a_2\), \(a_2\) и \(a_3\), \(\ldots\), \(a_{n - 1}\) и \(a_n\), \(a_n\) и \(a_1\)) модуль их разности равен \(1\).

Назовём локальным максимумом элемент, который больше обоих соседних элементов. Также назовём локальным минимумом элемент, который меньше обоих соседних элементов. Обратите внимание, что элементы \(a_1\) и \(a_n\) являются соседними.

К сожалению, Федя потерял массив, но он запомнил в нём сумму локальных максимумов \(x\) и сумму локальных минимумов \(y\).

По заданным \(x\) и \(y\) помогите Феде найти любой подходящий массив минимальной длины.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждая строка каждого набора входных данных содержит два целых числа \(x\) и \(y\) (\(-10^{9} \le y < x \le 10^{9}\)) — сумму локальных максимумов и сумму локальных минимумов, соотвественно.

Выходные данные

Для каждого набора входных данных в первой строке выведите одно число \(n\) — минимальную длину подходящего массива.

Во второй строке выведите \(n\) чисел \(a_1, a_2, \ldots, a_n\) (\(-10^{9} \leqslant a_i \leqslant 10^{9}\)) — элементы массива, такие что модуль разности каждой пары соседних равен \(1\).

Если существуют несколько решений, выведите любое из них.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^{5}\).

Примечание

В первом наборе входных данных локальными максимумами являются числа на позициях \(3, 7\) и \(10\), а локальными минимумами числа на позициях \(1, 6\) и \(8\). \(x = a_3 + a_7 + a_{10} = 2 + 0 + 1 = 3\), \(y = a_1 + a_6 + a_8 = 0 + (-1) + (-1) = -2\).

Во втором наборе входных данных локальными максимумами являются числа на позициях \(2\) и \(10\), а локальными минимумами числа на позициях \(1\) и \(3\). \(x = a_2 + a_{10} = -1 + 5 = 4\), \(y = a_1 + a_3 = -2 + (-2) = -4\).

В третьем наборе входных данных локальными максимумами являются числа на позициях \(1\) и \(5\), а локальными минимумами числа на позициях \(3\) и \(6\).

C. Даша и поиски

Конструктив Структуры данных *1200

Как вы знаете, девочка Даша постоянно что-то ищет. На этот раз ей дали перестановку, и она хочет найти такой её подотрезок, что ни один из элементов на его концах не является ни минимумом, ни максимумом всего подотрезка. Более формально, вас просят найти такие числа \(l\) и \(r\) \((1 \leq l \leq r \leq n)\), что \(a_l \neq \min(a_l, a_{l + 1}, \ldots, a_r)\), \(a_l \neq \max(a_l, a_{l + 1}, \ldots, a_r)\) и \(a_r \neq \min(a_l, a_{l + 1}, \ldots, a_r)\), \(a_r \neq \max(a_l, a_{l + 1}, \ldots, a_r)\).

Перестановкой длины \(n\) называется массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) является перестановкой, но \([1,2,2]\) не является перестановкой (\(2\) встречается дважды в массиве) и \([1,3,4]\) тоже не является перестановкой (\(n=3\), но \(4\) присутствует в массиве).

Помогите Даше найти такой подотрезок, либо скажите, что такого подотрезка не существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Для каждого набора входных данных в первой строке содержится одно целое число одно число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длина перестановки.

Вторая строка содержит \(n\) различных целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n\)) — элементы перестановки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(-1\), если искомого подотрезка не существует.

Иначе, выведите два индекса \(l, r\), такие что \([a_{l}, a_{l + 1}, \ldots, a_{r}]\) удовлетворяет всем условиям.

Если существует несколько решений, то выведите любое из них.

Примечание

В первом и четвертом наборе входных данных можно показать, что искомых отрезков нет.

Во втором наборе входных данных подотрезок \([1, 4]\) удовлетворяет всем условиям, потому что \(\max(a_1, a_2, a_3, a_4) = 4, \min(a_1, a_2, a_3, a_4) = 1\), и как мы видим, все условия выполняются .

В третьем наборе входных данных подотрезок \([2, 6]\) также удовлетворяет всем описанным условиям.

B. Не делится

жадные алгоритмы Конструктив математика *900

Вам дан массив из \(n\) целых положительных чисел \(a_1, a_2, \ldots, a_n\). За одну операцию вы можете выбрать любой элемент массива и увеличить его на \(1\).

Выполните не более \(2n\) операций, чтобы массив удовлетворял следующему свойству: \(a_{i+1}\) не делится на \(a_i\) для каждого \(i = 1, 2, \ldots, n-1\).

Вам не нужно минимизировать количество операций.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\))  — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1\le n\le 10^4\)) — длину заданного массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1\le a_i\leq 10^9\)) — заданный массив.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5\cdot 10^4\).

Выходные данные

Для каждого теста выведите ответ на отдельной строке.

В единственной строке выведите \(n\) целых чисел — итоговый массив \(a\) после применения не более чем \(2n\) операций.

Можно показать, что ответ всегда существует при заданных ограничениях. Если ответов несколько, выведите любой.

Примечание

В первом наборе входных данных массив \([4, 5, 6, 7]\) может быть получен путем применения \(2\) операций к первому элементу, \(1\) операции ко второму элементу, \(3\) операций к третьему элементу и \(1\) операции к четвертому элементу. Общее количество выполненных операций составляет \(7\), что меньше разрешенных \(8\) операций в данном случае.

Во втором наборе входных данных массив \([3, 2, 3]\) можно получить, применив две операции к первому элементу. Другой возможный результирующий массив может быть \([2, 3, 5]\), потому что общее количество операций не обязано быть минимальным.

В третьем тестовом примере, если не применять никакие операции, получится массив, удовлетворяющий свойству, описанному в условии. Обратите внимание, что выполнение операций не является обязательным.

F. Блокирующие фишки

Бинарный поиск Деревья жадные алгоритмы Конструктив поиск в глубину и подобное *2400

Задано дерево, состоящее из \(n\) вершин. На нем есть \(k\) фишек, расположенных в вершинах \(a_1, a_2, \dots, a_k\). Все \(a_i\) различны. Вершины \(a_1, a_2, \dots, a_k\) изначально покрашены в черный цвет. Остальные вершины белые.

Вы сыграете в игру, в ходе которой сделаете какое-то количество ходов (возможно, ноль). На \(i\)-м ходе (в \(1\)-индексации) вы подвинете фишку номер \(((i - 1) \bmod k + 1)\) из ее текущей вершины в соседнюю белую вершину и покрасите эту вершину в черный. То есть, если \(k=3\), то вы двигаете фишку \(1\) на ходе \(1\), фишку \(2\) на ходе \(2\), фишку \(3\) на ходе \(3\), фишку \(1\) на ходе \(4\), фишку \(2\) на ходе \(5\), и так далее. Если нет соседней белой вершины, то игра заканчивается.

Какое наибольшее количество ходов вы можете совершить?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество вершин дерева.

В каждой из следующих \(n - 1\) строк записаны два целых числа \(v\) и \(u\) (\(1 \le v, u \le n\)) — описания ребер. Данные ребра задают дерево.

В следующей строке записано одно целое число \(k\) (\(1 \le k \le n\)) — количество фишек.

В следующей строке записаны \(k\) целых чисел \(a_1, a_2, \dots, a_k\) (\(1 \le a_i \le n\)) — вершины с фишками. Все \(a_i\) различны.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — наибольшее количество ходов, которые вы можете совершить.

A. Li Hua и лабиринт

графы жадные алгоритмы Конструктив Потоки реализация *800

Имеется прямоугольный лабиринт размером \(n\times m\). Обозначим \((r,c)\) как клетку в \(r\)-й строке сверху и \(c\)-м столбце слева. Две клетки называются соседними, если они имеют общую сторону. Путь — это последовательность пустых клеток, в которой любые две подряд идущие клетки являются соседними.

Каждая клетка изначально пуста. Li Hua может выбрать несколько клеток (кроме \((x_1, y_1)\) и \((x_2, y_2)\)) и поместить в каждую из них препятствие. Он хочет узнать минимальное количество препятствий, которые нужно поставить, чтобы не существовало пути из \((x_1, y_1)\) в \((x_2, y_2)\).

Предположим, что вы Li Hua. Пожалуйста, решите эту задачу.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n,m\) (\(4\le n,m\le 10^9\)) — размер лабиринта.

Вторая строка каждого набора входных данных содержит четыре целых числа \(x_1,y_1,x_2,y_2\) (\(1\le x_1,x_2\le n, 1\le y_1,y_2\le m\)) — координаты начальной и конечной клетки.

Гарантируется, что \(|x_1-x_2|+|y_1-y_2|\ge 2\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество препятствий, которое нужно поставить на поле, чтобы не существовало пути из \((x_1, y_1)\) в \((x_2, y_2)\).

Примечание

В первом наборе входных данных можно поставить препятствия на \((1,3), (2,3), (3,2), (4,2)\). Тогда путь из \((2,2)\) в \((3,3)\) не будет существовать.

B. Li Hua и узор

жадные алгоритмы Конструктив *1100

У Li Hua есть узор размером \(n\times n\), каждая клетка которого либо синяя, либо красная. Он может выполнить ровно \(k\) операций. За одну операцию он выбирает клетку и меняет ее цвет с красного на синий или с синего на красный. Каждая клетка может быть выбрана сколько угодно раз. Можно ли сделать узор, который соответствует его же повороту на \(180^{\circ}\)?

Предположим, что вы Li Hua. Пожалуйста, решите эту задачу.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n,k\) (\(1\le n\le 10^3,0\le k \le 10^9\)) — размер шаблона и количество операций.

Каждая из следующих \(n\) строк содержит \(n\) целых чисел \(a_{i,j}\) (\(a_{i,j}\in\{0,1\}\)) — начальный цвет клетки: \(0\) для синей и \(1\) для красной.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^3\).

Выходные данные

Для каждого набора входных данных выведите «YES», если возможно получить узор, соответствующий его повороту на \(180^{\circ}\), применив ровно \(k\) операций, и «NO» в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных нельзя выполнить ни одной операции. Шаблон после вращения показан справа.

Во втором наборе входных данных можно выполнить операции над \((2,1),(3,2),(3,4)\). Шаблон после операций находится в середине, а шаблон после вращения — справа.

C. Li Hua и шахматы

жадные алгоритмы интерактив Конструктив *1600

Это интерактивная задача.

Li Ming и Li Hua играют в игру. У Li Hua есть шахматная доска размером \(n\times m\). Обозначим \((r, c)\) (\(1\le r\le n, 1\le c\le m\)) как клетку в \(r\)-й строке сверху и в \(c\)-м столбце слева. Li Ming поставил короля на шахматную доску, и Li Hua нужно угадать его позицию.

Li Hua может задавать Li Ming не более \(3\) вопросов. В каждом вопросе он может выбрать клетку и спросить минимальное количество шагов, необходимых для перемещения короля на выбранную клетку. Каждый вопрос является независимым, что означает, что король на самом деле не перемещается.

Король может переместиться из \((x,y)\) в \((x',y')\) тогда и только тогда, когда \(\max\{|x-x'|,|y-y'|\}=1\) (как показано на следующем рисунке).

Позиция короля выбирается перед взаимодействием.

Предположим, что вы Li Hua. Пожалуйста, решите эту задачу.

Протокол взаимодействия

Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^3\)).

Первая строка каждого набора входных данных содержит два целых числа \(n,m\) (\(1\le n,m\le 10^9\)) — размер шахматной доски, после чего начинается взаимодействие.

Чтобы задать вопрос, выведите «? \(r\) \(c\)» (без кавычек, \(1 \leq r \leq n, 1 \leq c \leq m\)). Затем вы должны ввести ответ со стандартного ввода — минимальное количество шагов, необходимое королю для перемещения в выбранную клетку.

Если ваша программа задала некорректный вопрос или вы задали больше трёх вопросов, интерактор немедленно завершится, а ваша программа получит вердикт Неправильный ответ.

Чтобы дать окончательный ответ, выведите «! \(r\) \(c\)» (без кавычек, \((r,c)\) - это начальная координата короля). Обратите внимание, что вывод ответа не учитывается в ограничение в \(3\) вопроса.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Для взлома используйте следующий формат.

Первая строка должна содержать одно целое число \(t\) (\(1 \le t \le 10^3\)).

Первая и единственная строка каждого набора входных данных должна содержать четыре целых числа \(n,m,r,c\) (\(1\le r\le n\le 10^9,1\le c\le m\le 10^9\)).

Примечание

В первом наборе входных данных король находится в точке \((2,2)\). Для перемещения в клетку \((2,3)\) требуется \(1\) шаг, а для перемещения в клетку \((2,4)\) — \(2\) шага.

Обратите внимание, что ваши запросы могут быть другими. Это просто пример запросов, которые вы можете сделать.

D. Шокирующая расстановка

жадные алгоритмы Конструктив математика *1600

Вам дан массив \(a_1, a_2, \ldots, a_n\), состоящий из целых чисел, такой что \(a_1 + a_2 + \ldots + a_n = 0\).

Переставьте элементы массива \(a\) таким образом, чтобы выполнялось следующее условие:

\(\)\max\limits_{1 \le l \le r \le n} \lvert a_l + a_{l+1} + \ldots + a_r \rvert < \max(a_1, a_2, \ldots, a_n) - \min(a_1, a_2, \ldots, a_n),\(\) где \(|x|\) обозначает модуль числа \(x\).

Более формально, вам нужно выяснить, существует ли такая перестановка \(p_1, p_2, \ldots, p_n\), что для массива \(a_{p_1}, a_{p_2}, \ldots, a_{p_n}\) выполняется условие выше, и найти полученный массив.

Напомним, что массив \(p_1, p_2, \ldots, p_n\) называется перестановкой, если для каждого числа \(x\) от \(1\) до \(n\) существует ровно одно \(i\) от \(1\) до \(n\) такое, что \(p_i = x\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 50\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 300\,000\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — элементы массива \(a\). Гарантируется, что сумма массива \(a\) равняется нулю, иными словами: \(a_1 + a_2 + \ldots + a_n = 0\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(300\,000\).

Выходные данные

Для каждого набора входных данных, если переставить элементы массива \(a\) требуемым образом невозможно, в единственной строке выведите «No».

Если же это возможно, в первой строке выведите «Yes», а далее в отдельной строке \(n\) чисел — элементы \(a_1, a_2, \ldots, a_n\), переставленные в нужном порядке (\(a_{p_1}, a_{p_2}, \ldots, a_{p_n}\)).

Если возможных ответов несколько, вы можете вывести любой из них.

Примечание

В первом наборе входных данных \(\max(a_1, \ldots, a_n) - \min(a_1, \ldots, a_n) = 9\). Поэтому элементы можно переставить следующим образом: \([-5, -2, 3, 4]\). Несложно видеть, что для такой расстановки значение \(\lvert a_l + \ldots + a_r \rvert\) всегда не больше \(7\), а значит и меньше \(9\).

Во втором наборе входных данных можно переставить элементы массива следующим образом: \([-3, 2, -3, 2, 2]\). Тогда максимальный модуль суммы будет достигаться на подмассиве \([-3, 2, -3]\), и будет равен \(\lvert -3 + 2 + -3 \rvert = \lvert -4 \rvert = 4\), что меньше чем \(5\).

В четвёртом тестовом примере любая перестановка массива \(a\) подойдёт в качестве ответа, в том числе и \([-1, 0, 1]\).

B. Уравняй делением

жадные алгоритмы Конструктив математика Перебор *1200

Вам дан массив \(a_1, a_2, \ldots, a_n\) положительных целых чисел.

Вы можете сделать следующую операцию несколько (возможно, ноль) раз:

  • Выбираются два индекса \(i\), \(j\) (\(1 \leq i, j \leq n\), \(i \neq j\)).
  • Приравнивается \(a_i := \lceil \frac{a_i}{a_j} \rceil\). Здесь \(\lceil x \rceil\) обозначает значение \(x\), округленное вверх до ближайшего целого числа \(\geq x\).

Можно ли сделать все элементы массива равными с помощью нескольких операций (возможно, нуля)? Если да, выведите любой способ сделать это за не более чем \(30n\) операций.

Можно доказать, что в ограничениях этой задачи если существует какой-нибудь способ сделать все элементы равными, существует способ, использующий не более \(30n\) операций.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Описания наборов входных данных следуют.

Первая строка описания каждого набора входных данных содержит единственное целое число \(n\) (\(1 \leq n \leq 100\)).

Вторая строка описания каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число \(q\) (\(-1 \leq q \leq 30n\)). Если \(q=-1\), то решения не существует, иначе \(q\) равняется количеству операций.

Если \(q \geq 0\), то следующие \(q\) строк содержат по два целых числа \(i\), \(j\) (\(1 \leq i, j \leq n\), \(i \neq j\)) — описания операций.

Если существует несколько решений, выведите любое.

Примечание

В первом, втором и четвертом наборах входных данных все числа равны, поэтому можно ничего не делать.

В третьем наборе входных данных невозможно сделать все числа равными с помощью операций.

В пятом наборе входных данных: \([\color{red}{4}, 3, \color{blue}{2}] \to [\color{blue}{2}, \color{red}{3}, 2] \to [2, 2, 2]\).

В шестом наборе входных данных: \([\color{blue}{3}, 3, \color{red}{4}, 4] \to [3, \color{blue}{3}, 2, \color{red}{4}] \to [\color{red}{3}, 3, \color{blue}{2}, 2] \to [2, \color{red}{3}, 2, \color{blue}{2}] \to [2, 2, 2, 2]\).

На примере красные числа это числа на позициях \(i\) (которые будут присвоены), синие числа это числа на позициях \(j\).

E. Объединение городов

геометрия жадные алгоритмы Конструктив математика поиск в глубину и подобное реализация снм *2300

Вам дана таблица \(n \times m\). Некоторые клетки заполнены, некоторые пустые.

Город — это максимальное (по включению) множество заполненных клеток, такое что можно дойти из любой клетки города до любой другой клетки города, перемещаясь в соседние по стороне клетки, только по клеткам города. Другими словами, город — это компонента связности заполненных клеток, где ребро проводится между соседними по стороне заполненными клетками.

Изначально в таблице находятся два города. Вы хотите поменять некоторые пустые клетки на заполненные, так что выполняются два условия:

  • В таблице находится один город.
  • Кратчайший путь между любыми двумя заполненными клетками, если можно перемещаться только по заполненным клеткам, равно манхеттенскому расстоянию между клетками.

Манхеттенское расстояние между двумя клетками \((a, b)\) и \((c, d)\) равняется \(|a - c| + |b - d|\).

Найдите способ заполнить некоторые клетки, чтобы все условия выполнялись и общее количество заполненных клеток было минимально.

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных. Описания наборов входных данных следуют.

В первой строке описания каждого набора входных данных находится два целых числа \(n\), \(m\) (\(1 \le n, m \le 50\), \(nm \geq 3\)).

Следующие \(n\) строк описывают таблицу. В \(i\)-й строке находится строка \(s_i\) длины \(m\). Символ \(s_{i,j}\) равен '#', если клетка \((i, j)\) заполнена, и '.', если клетка пустая.

Гарантируется, что изначально в таблице ровно два города.

Гарантируется, что сумма \(n\cdot m\) по всем наборам входных данных не превосходит \(25\,000\).

Выходные данные

Для каждого набора входных данных выведите \(n\) строк, каждая содержит строку длины \(m\) — описание таблицы, которую вы сделали в том же формате, что во входных данных.

Если существует несколько возможных способов заполнить некоторые пустые клетки, чтобы общее количество заполненных клеток было минимально, выведите любой.

Примечание

В первом наборе входных данных мы добавляем одну заполненную клетку между двумя городами, чтобы соединить их. Можно убедиться, что второе условие также выполняется.

Во втором наборе входных данных мы также соединяем города одной заполненной клеткой, также выполняя второе условие.

В третьем наборе входных данных, обратите внимание, что если мы заполним 3 клетки слева сверху, города будут соединены, однако второе условие не будет выполняться для пары клеток \((4, 2)\) и \((2, 4)\).

F. Задача про матанализ!

Конструктив математика реализация *1200

Студенты 199-ой группы очень плохо записывали лекции во время семестра. Подходит время экзамена по матанализу, поэтому надо как-то исправлять ситуацию. Будем считать, что студенты группы пронумерованы от 1 до n, а у каждого студента i (1 ≤ i ≤ n) есть его лучший друг p[i] (1 ≤ p[i] ≤ n). Так получилось, что каждый из студентов является лучшим другом ровно одного студента, иными словами все p[i] — различны. Возможно, в группе присутствуют такие «оригиналы», для которых i = p[i].

Каждый студент за семестр исписал ровно одну тетрадь. Известно, что студенты договорились действовать по следующему алгоритму:

  • в первый день подготовки каждый студент учит матанализ по своим лекциям,
  • утром каждого следующего дня каждый студент передает тетрадку с лекциями своему лучшему другу, но получает тетрадку от студента, чьим лучшим другом он является.

Так, во второй день тетрадка i-го студента находится у студента p[i] (1 ≤ i ≤ n), в третий день у студента p[p[i]] и так далее. В силу особенностей того, как дружат ребята (см. первый абзац), каждый день у каждого студента есть ровно одна тетрадь с лекциями.

Вам заданы две последовательности, описывающие ситуацию на третий и четвертый день подготовки:

  • a1, a2, ..., an, где ai обозначает студента, у кого в третий день подготовки находится тетрадь i-го студента;
  • b1, b2, ..., bn, где bi обозначает студента, у кого в четвертый день подготовки находится тетрадь i-го студента.

Вам неизвестен массив p, то есть неизвестно, кто является чьим лучшим другом. Напишите программу, которая по заданным последовательностям a и b находит p.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105) — количество студентов в группе. Вторая строка содержит последовательность различных целых чисел a1, a2, ..., an (1 ≤ ai ≤ n). Третья строка последовательность различных целых чисел b1, b2, ..., bn (1 ≤ bi ≤ n).

Выходные данные

Выведите последовательность n различных целых p[1], p[2], ..., p[n] (1 ≤ p[i] ≤ n). Гарантируется, что решение существует и оно единственно.

E1. Непростительное заклятие (простая версия)

графы жадные алгоритмы Конструктив Перебор снм Строки *1400

Это простая версия задачи. В этой версии \(k\) всегда равно \(3\).

Верховный чародей Визенгамота однажды поймал злого волшебника Drahyrt, но злой волшебник вернулся и хочет отомстить верховному чародею. Поэтому он украл у его ученика Гарри заклинание \(s\).

Заклинание — это строка длины \(n\), состоящая из строчных латинских букв.

Drahyrt хочет заменить заклинание на непростительное заклятие — строку \(t\).

Drahyrt с помощью древней магии может менять местами буквы на расстоянии \(k\) или \(k+1\) в заклинании сколько угодно раз. В этой версии задачи можно менять буквы на расстоянии \(3\) или \(4\). Другими словами, Drahyrt может поменять буквы на позициях \(i\) и \(j\) в заклинании \(s\) если \(|i-j|=3\) или \(|i-j|=4\).

Например, если \(s = \) «talant» и \(t = \) «atltna», то Drahyrt может действовать следующим образом:

  • поменять местами буквы на позициях \(1\) и \(4\), получив заклинание «aaltnt».
  • поменять местами буквы на позициях \(2\) и \(6\), получив заклинание «atltna».

Вам даны заклинания \(s\) и \(t\). Может ли Drahyrt изменить заклинание \(s\) на \(t\)?

Входные данные

В первой строке входных данных дано единственное целое число \(T\) (\(1 \le T \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

В первой строке содержится два целых числа \(n, k\) (\(1 \le n \le 2 \cdot 10^5\), \(k = 3\)) — длина заклинаний и число \(k\) такое, что Drahyrt может менять буквы в заклинании на расстоянии \(k\) или \(k+1\).

Во второй строке дано заклинание \(s\) — строка длины \(n\), состоящая из строчных латинских букв.

В третьей строке дано заклинание \(t\) — строка длины \(n\), состоящая из строчных латинских букв.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\). Обратите внимание, что ограничений на сумму значений \(k\) по всем наборам входных данных нет.

Выходные данные

Для каждого набора входных данных выведите в отдельной строке «YES» если Drahyrt может изменить заклинание \(s\) на \(t\) и «NO» иначе.

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

Первый пример разобран в условии.

Во втором примере можно действовать следующим образом:

  • Поменять местами буквы на позициях \(2\) и \(5\) (расстояние \(3\)), тогда получим заклинание «aaacbba».
  • Поменять местами буквы на позициях \(4\) и \(7\) (расстояние \(3\)), тогда получим заклинание «aaaabbc».

Во третьем примере можно показать, что из строки \(s\) невозможно получить строку \(t\) меняя местами буквы на расстоянии \(3\) или \(4\).

В четвертом примере подходит например следующая последовательность преобразований:

  • «accio» \(\rightarrow\) «aocic» \(\rightarrow\) «cocia» \(\rightarrow\) «iocca» \(\rightarrow\) «aocci» \(\rightarrow\) «aicco» \(\rightarrow\) «cicao».

В пятом примере можно показать, что невозможно получить из строки \(s\) строку \(t\).

В шестом примере достаточно поменять местами две крайние буквы.

E2. Непростительное заклятие (сложная версия)

графы жадные алгоритмы Конструктив Перебор поиск в глубину и подобное снм Строки *1500

Это сложная версия задачи. В этой версии нет дополнительных ограничений на число \(k\).

Верховный чародей Визенгамота однажды поймал злого волшебника Drahyrt, но злой волшебник вернулся и хочет отомстить верховному чародею. Поэтому он украл у его ученика Гарри заклинание \(s\).

Заклинание — это строка длины \(n\), состоящая из строчных латинских букв.

Drahyrt хочет заменить заклинание на непростительное заклятие — строку \(t\).

Drahyrt с помощью древней магии может менять местами буквы на расстоянии \(k\) или \(k+1\) в заклинании сколько угодно раз. Другими словами, Drahyrt может поменять буквы на позициях \(i\) и \(j\) в заклинании \(s\) если \(|i-j|=k\) или \(|i-j|=k+1\).

Например, если \(k = 3, s = \) «talant» и \(t = \) «atltna», то Drahyrt может действовать следующим образом:

  • поменять местами буквы на позициях \(1\) и \(4\), получив заклинание «aaltnt».
  • поменять местами буквы на позициях \(2\) и \(6\), получив заклинание «atltna».

Вам даны заклинания \(s\) и \(t\). Может ли Drahyrt изменить заклинание \(s\) на \(t\)?

Входные данные

В первой строке входных данных дано единственное целое число \(T\) (\(1 \le T \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

В первой строке содержится два целых числа \(n, k\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le k \le 2 \cdot 10^5\)) — длина заклинаний и число \(k\) такое, что Drahyrt может менять буквы в заклинании на расстоянии \(k\) или \(k+1\).

Во второй строке дано заклинание \(s\) — строка длины \(n\), состоящая из строчных латинских букв.

В третьей строке дано заклинание \(t\) — строка длины \(n\), состоящая из строчных латинских букв.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\). Обратите внимание, что ограничений на сумму значений \(k\) по всем наборам входных данных нет.

Выходные данные

Для каждого набора входных данных выведите в отдельной строке «YES» если Drahyrt может изменить заклинание \(s\) на \(t\) и «NO» иначе.

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

Первый пример разобран в условии.

Во втором примере можно менять соседние буквы местами, так что можем отсортировать строку например с помощью сортировки пузырьком.

Во третьем примере можно показать, что из строки \(s\) невозможно получить строку \(t\) меняя местами буквы на расстоянии \(6\) или \(7\).

В четвертом примере подходит например следующая последовательность преобразований:

  • «accio» \(\rightarrow\) «aocic» \(\rightarrow\) «cocia» \(\rightarrow\) «iocca» \(\rightarrow\) «aocci» \(\rightarrow\) «aicco» \(\rightarrow\) «cicao».

В пятом примере можно показать, что невозможно получить из строки \(s\) строку \(t\).

В шестом примере достаточно поменять местами две крайние буквы.

A. Очень красивое одеяло

битмаски Конструктив *1600

Кирилл хочет связать очень красивое одеяло, состоящее из \(n \times m\) одинакового размера квадратных лоскутков разных цветов. Каждому цвету он сопоставил некоторое неотрицательное целое число. Таким образом, в нашей задаче одеяло можно считать матрицей \(B\) размера \(n \times m\).

Кирилл считает одеяло очень красивым, если для каждой подматрицы \(A\) размера \(4 \times 4\) матрицы \(B\) верно:

  • \(A_{11} \oplus A_{12} \oplus A_{21} \oplus A_{22} = A_{33} \oplus A_{34} \oplus A_{43} \oplus A_{44},\)
  • \(A_{13} \oplus A_{14} \oplus A_{23} \oplus A_{24} = A_{31} \oplus A_{32} \oplus A_{41} \oplus A_{42},\)

где \(\oplus\) означает операцию побитового исключающего ИЛИ.

Кирилл просит Вас помочь ему соткать очень красивое одеяло, причем насколько можно более разноцветным!

Для этого он Вам дает два числа \(n\) и \(m\). Ваша задача — сгенерировать очень красивую матрицу \(B\) размера \(n \times m\), в которой количество различных чисел максимально.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных заданы два целых числа \(n\) и \(m\) \((4 \le n, \, m \le 200)\) — числа, задающие размер матрицы \(B\).

Гарантируется, что сумма по \(n \cdot m\) не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в первой строке выведите одно целое число \(cnt\) \((1 \le cnt \le n \cdot m)\) — максимальное количество различных чисел в матрице.

Затем выведите саму матрицу \(B\) \((0 \le B_{ij} < 2^{63})\) размера \(n \times m\). Если подходящих матриц несколько, разрешается вывести любую.

Можно показать, что если существует матрица с оптимальным количеством различных чисел, то существует среди подходящих матриц такая \(B\), что \((0 \le B_{ij} < 2^{63})\).

Примечание

Разберем первый пример. Здесь есть всего 4 подматрицы размера \(4 \times 4\). Рассмотрим подматрицу, левый верхний угол которой совпадает с левым верхним углом самой матрицы \(B\):

\( \left[ {\begin{array}{cccc} 9740 & 1549 & 9744 & 1553 \\ 1550 & 1551 & 1554 & 1555 \\ 10252 & 2061 & 10256 & 2065 \\ 2062 & 2063 & 2066 & 2067 \\ \end{array} } \right] \)

\(9740 \oplus 1549 \oplus 1550 \oplus 1551\) \(=\) \(10256 \oplus 2065 \oplus 2066 \oplus 2067\) \(=\) \(8192\);

\(10252 \oplus 2061 \oplus 2062 \oplus 2063\) \(=\) \(9744 \oplus 1553 \oplus 1554 \oplus 1555\) \(=\) \(8192\).

Таким образом, выбранная подматрица подходит под условие. Аналогично можно удостовериться в том, что другие три подматрицы тоже подходят под условие.

B. Мастер Mex-ов

жадные алгоритмы Конструктив *900

Вам дан массив \(a\) длины \(n\). Цена массива \(a\) — это MEX\(^{\dagger}\) массива \([a_1+a_2,a_2+a_3,\ldots,a_{n-1}+a_n]\). Найдите минимальную цену \(a\), если в нём разрешается переставлять элементы массива \(a\) местами. Обратите внимание, что вам не нужно искать массив \(a\), на котором достигается минимальная цена.

\(^{\dagger}\) MEX (minimum excluded, минимальное отсутствующее) массива — это наименьшее целое неотрицательное целое число, которое не принадлежит массиву. Например:

  • MEX массива \([2,2,1]\) равен \(0\), потому что \(0\) не принадлежит массиву.
  • MEX массива \([3,1,0,1]\) равен \(2\), потому что \(0\) и \(1\) принадлежат массиву, а \(2\) — нет.
  • MEX массива \([0,3,1,2]\) равен \(4\), потому что \(0\), \(1\), \(2\) и \(3\) принадлежат массиву, а \(4\) — нет.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно число \(n\) (\(2\le n\le 2\cdot10^5\)).

Вторая строка каждого набора содержит \(n\) чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 2\cdot 10^5\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальную цену \(a\) после перестановки элементов \(a\) в любом порядке.

Примечание

В первом наборе входных данных оптимальной является перестановка \(a\), равная \([0,0]\), ценой этого массива является MEX массива \([0+0]=[0]\), равный \(1\).

Во втором наборе оптимальной является перестановка \(a\) равная \([0,1,0]\), ценой этого массива является MEX массива \([0+1,1+0]=[1,1]\), равного \(0\).

C. Мастер последовательностей

Конструктив математика Перебор *1600

Для некоторого положительного целого числа \(m\) YunQian считает массив \(q\) из \(2m\) (возможно, отрицательных) целых чисел хорошим, если и только если для каждой подпоследовательности \(q\), имеющей длину \(m\), произведение \(m\) элементов в подпоследовательности равно сумме оставшихся \(m\) элементов. Формально, пусть \(U=\{1,2,\ldots,2m\}\). Для всех множеств \(S \subseteq U\) таких, что \(|S|=m\), должно выполняться \(\prod\limits_{i \in S} q_i = \sum\limits_{i \in U \setminus S} q_i\).

Определим расстояние между двумя массивами \(a\) и \(b\) длиной \(k\) как \(\sum\limits_{i=1}^k|a_i-b_i|\).

Вам дано целое положительное число \(n\) и массив \(p\) из \(2n\) целых чисел.

Найдите минимальное расстояние между \(p\) и \(q\) среди всех хороших массивов \(q\) длины \(2n\). Можно показать, что для всех положительных целых чисел \(n\) существует хотя бы один хороший массив. Обратите внимание, что вам не требуется предъявлять массив \(q\), который достигает этого минимального расстояния.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1\le n\le 2\cdot10^5\)).

Вторая строка каждого набора содержит \(2n\) целых чисел \(p_1, p_2, \ldots, p_{2n}\) (\(|p_i| \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора выведите минимальное расстояние между \(p\) и \(q\).

Примечание

В первом наборе оптимальный массив \(q=[6,6]\).

Во втором наборе оптимальный массив \(q=[2,2,2,2]\).

C. Суммы на подмассивах

жадные алгоритмы Конструктив математика *1500

Для массива \(a = [a_1, a_2, \dots, a_n]\) определим его подмассив \(a[l, r]\) как массив \([a_l, a_{l+1}, \dots, a_r]\).

Например, у массива \(a = [1, -3, 1]\) \(6\) непустых подмассивов:

  • \(a[1,1] = [1]\);
  • \(a[1,2] = [1,-3]\);
  • \(a[1,3] = [1,-3,1]\);
  • \(a[2,2] = [-3]\);
  • \(a[2,3] = [-3,1]\);
  • \(a[3,3] = [1]\).

Даны два целых числа \(n\) и \(k\). Постройте массив \(a\) из \(n\) целых чисел, такой, что:

  • все элементы \(a\) от \(-1000\) до \(1000\);
  • у массива \(a\) ровно \(k\) подмассивов с положительными суммами;
  • у каждого из остальных \(\dfrac{(n+1) \cdot n}{2}-k\) подмассивов \(a\) отрицательная сумма.
Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей два целых числа \(n\) и \(k\) (\(2 \le n \le 30\); \(0 \le k \le \dfrac{(n+1) \cdot n}{2}\)).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел — элементы массива, удовлетворяющего ограничениям задачи. Можно показать, что ответ всегда существует. Если ответов несколько, выведите любой из них.

D. Сортировка бинарной строки

жадные алгоритмы Конструктив *1800

Вам дана двоичная строка \(s\), состоящая только из символов 0 и/или 1.

Вы можете выполнить несколько (возможно, ноль) операций над строкой. Каждая операция имеет один из двух типов:

  • выбрать два соседних элемента строки и поменять их местами. Такой вид операции стоит \(10^{12}\) монет;
  • выбрать любой элемент строки и удалить его. Такой вид операции стоит \(10^{12}+1\) монет.

Ваша задача — определить минимальное количество монет, необходимое для сортировки строки \(s\) в порядке неубывания (т. е. преобразовать \(s\) таким образом, что \(s_1 \le s_2 \le \dots \le s_m\), где \(m\) — длина строки после применения всех операций). Пустая строка также считается отсортированной в порядке неубывания.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора содержит строку \(s\) (\(1 \le |s| \le 3 \cdot 10^5\)), состоящую только из символов 0 и/или 1.

Сумма длин всех заданных строк не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество монет, необходимое для сортировки строки \(s\) в порядке неубывания.

Примечание

В первом примере необходимо удалить \(1\)-й элемент, чтобы строка стала равной 00.

Во втором примере строка уже отсортирована.

В третьем примере необходимо поменять местами \(2\)-й и \(3\)-й элементы, чтобы строка стала равной 0011.

В четвертом примере необходимо поменять местами \(3\)-й и \(4\)-й элементы, чтобы строка стала равной 00011101, а затем удалить \(7\)-й элемент, чтобы строка стала равной 0001111.

В пятом примере необходимо удалить \(1\)-й элемент, чтобы строка стала равной 001101, а затем удалить \(5\)-й элемент, чтобы строка стала равной 00111.

В шестом примере строка уже отсортирована.

B. Конфеты

Конструктив математика теория чисел *800

Эта задача про конфеты. Изначально у вас есть \(1\) конфета, а вы хотите иметь ровно \(n\) конфет.

Вы можете использовать два следующих заклинания в любом порядке не более \(40\) раз суммарно.

  • Если у вас сейчас \(x\) конфет, то, используя первое заклинание, можно превратить \(x\) конфет в \(2x-1\) конфету.
  • Если у вас сейчас \(x\) конфет, то, используя второе заклинание, можно превратить \(x\) конфет в \(2x+1\) конфету.

Составьте список заклинаний так, чтобы после использования этих заклинаний по порядку у вас было ровно \(n\) конфет, или определите, что это невозможно.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных содержит одну строку с одним целым числом \(n\) (\(2 \le n \le 10^9\)) — окончательным количеством конфет.

Выходные данные

Для каждого набора входных данных выведите следующее.

Если есть возможность получить \(n\) конфет, использовав заклинания не более \(40\) раз, то в первой строке выведите одно целое число \(m\) (\(1 \le m \le 40\)) — количество использованных вами заклинаний.

Затем во второй строке выведите \(m\) целых чисел \(a_{1}, a_{2}, \ldots, a_{m}\) (\(a_{i}\) должно быть равно \(1\) или \(2\)), разделенных пробелами. Если \(a_{i} = 1\), это означает, что вы используете первое заклинание на \(i\)-м шаге. Если \(a_{i} = 2\), это означает, что вы используете второе заклинание на \(i\)-м шаге.

Обратите внимание, что вам не нужно минимизировать количество операций \(m\), и если есть несколько вариантов ответа, можно вывести любой.

Если ответа не существует, выведите \(-1\).

Примечание

Для \(n=3\) мы можем просто использовать второе заклинание один раз и получить \(2 \cdot 1 + 1 = 3\) конфеты.

Для \(n=7\) мы можем использовать второе заклинание дважды. Применив это один раз, мы получаем \(3\) конфеты, а применив его дважды, мы получаем \(2 \cdot 3 + 1 = 7\) конфет.

C. Восстанови массив

жадные алгоритмы Конструктив *1100

У Кристины был массив \(a\) длины \(n\), состоящий из неотрицательных целых чисел.

Она построила новый массив \(b\) длины \(n-1\), такой что \(b_i = \max(a_i, a_{i+1})\) (\(1 \le i \le n-1\)).

Например, пусть у Кристины был массив \(a\) = [\(3, 0, 4, 0, 5\)] длины \(5\). Тогда она сделала следующее:

  1. Посчитала \(b_1 = \max(a_1, a_2) = \max(3, 0) = 3\);
  2. Посчитала \(b_2 = \max(a_2, a_3) = \max(0, 4) = 4\);
  3. Посчитала \(b_3 = \max(a_3, a_4) = \max(4, 0) = 4\);
  4. Посчитала \(b_4 = \max(a_4, a_5) = \max(0, 5) = 5\).
В результате она получила массив \(b\) = [\(3, 4, 4, 5\)] длины \(4\).

Вам известен только массив \(b\). Найдите любой подходящий массив \(a\), который мог быть у Кристины изначально.

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

В первой строке каждого набора входных данных записано единственное целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество элементов в массиве \(a\), который был у Кристины изначально.

Во второй строке каждого набора входных данных записано ровно \(n-1\) целое неотрицательное число — элементы массива \(b\) (\(0 \le b_i \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2 \cdot 10^5\), и что массив \(b\) был получен корректным образом из некоторого массива \(a\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите ровно \(n\) целых неотрицательных чисел — элементы массива \(a\), который был у Кристины изначально.

Если возможных ответов несколько — выведите любой из них.

Примечание

Первый набор входных данных разобран в условии.

Во втором наборе входных данных мы действительно можем получить из массива \(a\) = [\(2, 2, 1, 1\)] массив \(b\) = [\(2, 2, 1\)]:

  • \(b_1 = \max(a_1, a_2) = \max(2, 2) = 2\);
  • \(b_2 = \max(a_2, a_3) = \max(2, 1) = 2\);
  • \(b_3 = \max(a_3, a_4) = \max(1, 1) = 1\).

В третьем наборе входных данных все элементы массива \(b\) являются нулями. Так как каждый \(b_i\) — максимум из двух соседних элементов массива \(a\), то массив \(a\) может состоять только целиком из нулей.

В четвертом наборе входных данных мы действительно можем получить из массива \(a\) = [\(0, 0, 3, 4, 3, 3\)] массив \(b\) = [\(0, 3, 4, 4, 3\)]:

  • \(b_1 = \max(a_1, a_2) = \max(0, 0) = 0\);
  • \(b_2 = \max(a_2, a_3) = \max(0, 3) = 3\);
  • \(b_3 = \max(a_3, a_4) = \max(3, 4) = 4\);
  • \(b_4 = \max(a_4, a_5) = \max(4, 3) = 4\);
  • \(b_5 = \max(a_5, a_6) = \max(3, 3) = 3\).

D. Умка и долгий перелёт

Конструктив математика реализация *1600

Девочка Умка любит путешествовать и участвовать в олимпиадах по математике. Однажды она летела самолетом на очередную олимпиаду и от скуки изучала огромный клетчатый лист бумаги.

Обозначим \(n\)-е число Фибоначчи как \(F_n = \begin{cases} 1, & n = 0; \\ 1, & n = 1; \\ F_{n-2} + F_{n-1}, & n \ge 2. \end{cases}\)

Клетчатый прямоугольник с высотой \(F_n\) и шириной \(F_{n+1}\) назовем прямоугольником Фибоначчи порядка \(n\).

У Умки есть прямоугольник Фибоначчи порядка \(n\). Кто-то закрасил в нём клетку на пересечении ряда \(x\) и столбца \(y\).

Необходимо разрезать этот прямоугольник ровно на \(n+1\) квадратов, чтобы

  • закрашенная клетка находилась в квадрате со стороной \(1\);
  • было не более одной пары квадратов с совпадающими сторонами;
  • сторона каждого квадрата являлась числом Фибоначчи.

Получится ли у Умки разрезать этот прямоугольник таким образом?

Входные данные

В первой строке дано целое число \(t\) (\(1 \le t \le 2 \cdot 10^5\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных даны целые числа \(n\), \(x\), \(y\) (\(1 \le n \le 44\), \(1 \le x \le F_n\), \(1 \le y \le F_{n+1}\)) — порядок прямоугольника Фибоначчи и координаты закрашенной клетки.

Выходные данные

Для каждого набора входных данных выведите «YES», если ответ положительный, и «NO» в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes» и «Yes» будут распознаны как положительный ответ).

Примечание
Первый, третий и четвёртый наборы входных данных.

D. Тривиальная гипотеза

*особая задача Конструктив математика теория чисел

\(\)f(n) = \left\{ \begin{array}{ll} \frac{n}{2} & n \equiv 0 \pmod{2}\\ 3n+1 & n \equiv 1 \pmod{2}\\ \end{array} \right.\(\)

Найдите целое число \(n\) такое, чтобы ни один из первых \(k\) членов последовательности \(n, f(n), f(f(n)), f(f(f(n))), \dots\) не равнялся \(1\).

Входные данные

В единственной строке дано целое число \(k\) (\(1 \leq k \leq \min(\textbf{[УДАЛЕНО]}, 10^{18})\)).

Выходные данные

Вывести одно целое число n таким образом, чтобы ни одно из первых \(k\) элементов последовательности \(n, f(n), f(f(n)), f(f(f(n))), \dots\) не равнялось \(1\).

Целое число \(n\) должно иметь не более \(10^3\) разрядов.

Примечание

В первом тесте последовательность, созданная с \(n = 5\), является \(5, 16, 8, 4, 2, 1, 4, \dots\), и ни один из первых \(k=1\) членов не равен \(1\).

Во втором тесте последовательность, созданная с \(n = 6\), является \(6, 3, 10, 5, 16, 8, 4, \dots\), и ни один из первых \(k=5\) членов не равен \(1\).

E. Не задача по геометрии

*особая задача *особая задача геометрия Конструктив математика

Входные данные

В единственной строке заданы три целых числа \(x\), \(y\), \(z\) (\(-1000 \le x, y, z \le 1000\)).

Выходные данные

Выведите одно вещественное число — ответ.

Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^6\). Формально, пусть ваш ответ равен \(a\), а ответ жюри равен \(b\). Ваш ответ будет зачтен, если и только если \(\frac{|a-b|}{\max(1,|b|)} \le 10^6\).

J. Не-загадочный язык

*особая задача Конструктив Строки

Существует не-загадочный язык. Вам следует отправить свое решение на этом языке, и судья прочитает вашу работу, чтобы определить, будет ли она принята.

Вы можете отправлять только на таинственном языке, который мы предоставили. Вы можете просмотреть ответ на вердикт на странице «Мои посылки».

C. Параллельный поиск

жадные алгоритмы Конструктив сортировки *1500

Допустим, у вас есть \(n\) коробок. В \(i\)-й коробке бесконечно много шариков цвета \(i\). Иногда вам нужно получить шарик какого-то определенного цвета; но вы слишком ленивы, чтобы брать шарик из коробки самостоятельно.

Вы купили двух роботов, которые будут приносить вам шарики. Теперь этих роботов надо запрограммировать. Для этого вы должны сформировать два списка \([a_1, a_2, \dots, a_k]\) и \([b_1, b_2, \dots, b_{n-k}]\), где список \(a\) — это список коробок, назначенных первому роботу, а список \(b\) — коробки, назначенные второму роботу. Каждое целое число от \(1\) до \(n\) должно принадлежать ровно одному из этих списков.

Когда вы даете роботам команду «принести шарик цвета \(x\)», они выполняют ее следующим образом. Каждый робот проходится по тому списку коробок, который был назначен этому роботу (в том порядке, в котором коробки находятся в списке), и просматривает содержимое каждой коробки. Первый робот тратит \(s_1\) секунд, чтобы просмотреть содержимое коробки; второй робот тратит \(s_2\) секунд. Как только какой-то робот найдет коробку с шарами цвета \(x\) и просмотрит ее содержимое, поиск завершается. Время поиска — это количество секунд, прошедшее от начала поиска до того, как один из роботов просмотрит содержимое коробки \(x\). Если робот просмотрел все коробки, назначенные ему, после этого он ничего не делает.

Например, пусть \(s_1 = 2\), \(s_2 = 3\), \(a = [4, 1, 5, 3, 7]\), \(b = [2, 6]\). Если вы запросите шарик цвета \(3\), произойдет следующее:

  • сначала первый робот начнет просматривать коробку \(4\), а второй — коробку \(2\);
  • в конце \(2\)-й секунды первый робот закончит просматривать коробку \(4\). Это не та коробка, которая нужна, поэтому робот начинает просматривать коробку \(1\);
  • в конце \(3\)-й секунды второй робот закончит просматривать коробку \(2\). Это не та коробка, которая нужна, поэтому робот начинает просматривать коробку \(6\);
  • в конце \(4\)-й секунды первый робот закончит просматривать коробку \(1\). Это не та коробка, которая нужна, поэтому робот начинает просматривать коробку \(5\);
  • в конце \(6\)-й секунды первый робот закончит просматривать коробку \(5\). Это не та коробка, которая нужна, поэтому робот начинает просматривать коробку \(3\). В тот же самый момент второй робот закончит просматривать коробку \(6\). Это не та коробка, которая нужна, и второй робот закончил просматривать все назначенные ему коробки, поэтому больше он ничего не делает;
  • в конце \(8\)-й секунды первый робот закончит просматривать коробку \(3\). Это та коробка, которая вам нужна, поэтому поиск завершается;
  • итак, время поиска равно \(8\) секундам.

Вы планируете запросить шарик цвета \(1\) \(r_1\) раз, шарик цвета \(2\)\(r_2\) раз, и так далее. Составьте списки \(a\) и \(b\) таким образом, чтобы суммарное время поиска было как можно меньше.

Входные данные

В первой строке выведите одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк:

  • в первой строке заданы три целых числа \(n\), \(s_1\), \(s_2\) (\(2 \le n \le 2 \cdot 10^5\); \(1 \le s_1, s_2 \le 10\));
  • во второй строке заданы \(n\) целых чисел \(r_1, r_2, \dots, r_n\) (\(1 \le r_i \le 10^6\)).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите две строки. В первой строке выведите список \(a\), во второй — список \(b\). Каждый список нужно вывести следующим образом: сначала размер списка, потом его элементы.

Если оптимальных ответов несколько, выведите любой из них.

B. Граф сумм

графы Деревья интерактив Конструктив кратчайшие пути Перебор реализация *2000

Это интерактивная задача.

Загадана перестановка \(p_1, p_2, \dots, p_n\).

Рассмотрим неориентированный граф с \(n\) вершинами и без рёбер. Вы можете делать два типа запросов:

  1. Укажите целое число \(x\) такое, что \(2 \le x \le 2n\). Тогда для всех целых чисел \(i\) (\(1 \le i \le n\)) таких, что \(1 \le x-i \le n\), будет добавлено ребро между вершинами \(i\) и \(x-i\).
  2. Запросить число рёбер в кратчайшем пути между вершинами \(p_i\) и \(p_j\). В качестве ответа вы получите количество рёбер на кратчайшем пути, если такой путь существует, или \(-1\), если такого пути нет.

Обратите внимание, что вы можете делать оба типа запросов в любом порядке.

Сделав \(2n\) запросов (включая тип \(1\) и тип \(2\)), угадайте две возможные перестановки, хотя бы одна из которых равна \(p_1, p_2, \dots, p_n\). Ваш ответ будет засчитан, если хотя бы одна из перестановок верна. Вы можете вывести одну и ту же перестановку дважды.

Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(2 \le n \le 10^3\)) — длина перестановки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^3\).

Протокол взаимодействия

Взаимодействие для каждого набора входных данных начинается после считывания \(n\).

Затем, сделайте не более \(2n\) запросов:

  • Если вы хотите сделать запрос типа \(1\), выведите «+ x». \(x\) должно быть целым числом от \(2\) до \(2n\) включительно. После этого считайте \(1\) или \(-2\). Если вы считали \(1\), то ваш запрос был корректным, иначе он был некорректным или вы превысили количество запросов, и ваша программа должна немедленно завершиться, чтобы получить вердикт Неправильный ответ.
  • Если вы хотите сделать запрос типа \(2\), выведите «? i j». \(i\) и \(j\) должны быть целыми числами от \(1\) до \(n\) включительно. После этого, считайте единственное целое число \(r\) (\(-1 \le r \le n\)) — ответ на ваш запрос. Если вы получили число \(−2\) вместо ответа, то ваша программа сделала некорректный запрос или превысила число запросов. Ваша программа должна немедленно завершиться для получения вердикта Неправильный ответ.

В любой момент взаимодействия, если вы хотите угадать две перестановки, выведите «! \(p_{1,1}\) \(p_{1,2}\) \(\dots\) \(p_{1,n}\) \(p_{2,1}\) \(p_{2,2}\) \(\dots\) \(p_{2,n}\)». Обратите внимание, что вы должны выводить две перестановки на одной и той же строке и без восклицательного знака между перестановками. После этого считайте \(1\) или \(-2\). Если вы считали \(1\), то ваш ответ был правильным, иначе он был неправильным, и ваша программа должна немедленно завершиться, чтобы получить вердикт Неправильный ответ. После этого, перейдите к следующему набору входных данных, или завершите программу, если такого нет. Обратите внимание, что вывод ответа не считается как запрос.

Обратите внимание, что даже если вы вывели правильную перестановку, вторая перестановка должна быть именно перестановкой, а не произвольным массивом.

В любой момент, если вы продолжите взаимодействие после считывания числа \(-2\), вы можете получить любой вердикт, так как программа продолжит чтение из закрытого потока.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Интерактор является неадаптивным. Это означает, что все перестановки зафиксированы до начала взаимодействия.

Взломы

Чтобы сделать взлом, используйте следующий формат.

Первая строка должна содержать единственное целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Первая строка каждого набора входных данных должна содержать единственное целое число \(n\) (\(2 \le n \le 10^3\)) — длину перестановки.

Вторая строка каждого набора входных данных должна содержать \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)) — загаданную перестановку.

Сумма \(n\) по всем наборам входных данных не превосходит \(10^3\).

Примечание

В первом наборе входных данных \(n=6\) и загадана перестановка \(p = [1,4,2,5,3,6]\).

Сначала сделаем запросы типа \(1\) с \(x=12, 2, 3\) соответственно. Это суммарно добавит в граф четыре ребра:

  • Ребро, соединяющее вершины \(6\) и \(6\).
  • Ребро, соединяющее вершины \(1\) и \(1\).
  • Ребро, соединяющее вершины \(1\) и \(2\).
  • Ребро, соединяющее вершины \(2\) и \(1\).

Поскольку все эти запросы корректны, интерактор вернул \(1\) после каждого из них.

Затем спросим количество рёбер на кратчайшем пути между вершинами \(p_1 = 1\) и \(p_3 = 2\), которое равно \(1\).

Затем сделаем запрос типа \(1\) с \(x=5\). Это суммарно добавит в граф четыре ребра:

  • Ребро, соединяющее вершины \(1\) и \(4\).
  • Ребро, соединяющее вершины \(2\) и \(3\).
  • Ребро, соединяющее вершины \(3\) и \(2\).
  • Ребро, соединяющее вершины \(4\) и \(1\).

Поскольку этот запрос корректен, интерактор вернул \(1\).

Затем спросим количество рёбер на кратчайшем пути между вершинами \(p_1 = 1\) и \(p_5 = 3\), которое равно \(2\).

Затем спросим количество рёбер на кратчайшем пути между вершинами \(p_4 = 5\) и \(p_5 = 3\). Такого пути не существует, поэтому интерактор вернёт \(-1\).

После этого, благодаря некоторой магии, две возможные перестановки, которые могут быть равны \(p\), определены: первая перестановка равна \([1,4,2,5,3,6]\), и вторая перестановка равна \([1,2,3,4,5,6]\). Так как первая перестановка равна загаданной перестановке, этот набор входных данных решён корректно. Всего \(7\) запросов использовано, что находится в пределах \(2 \cdot 6 = 12\) запросов.

Поскольку ответ правильный, интерактор вернул \(1\).

Во втором наборе входных данных \(n=2\) и загадана перестановка \(p = [2,1]\).

Так как есть только \(2! = 2\) возможные перестановки, никаких запросов не требуется. Достаточно просто вывести две перестановки \([1,2]\) и \([2,1]\). Всего \(0\) запросов использовано, что находится в пределах \(2 \cdot 2 = 4\) запросов.

Поскольку ответ правильный, интерактор вернул \(1\).

C. Между

графы жадные алгоритмы Конструктив поиск в глубину и подобное *2200

Вам дано целое число \(n\), а также \(m\) пар целых чисел \((a_i,b_i)\), где \(1\leq a_i , b_i \leq n\), \(a_i \ne b_i\).

Вы хотите построить последовательность, удовлетворяющую следующим требованиям:

  • Все элементы последовательности являются целыми числами между \(1\) и \(n\).
  • Есть ровно один элемент со значением \(1\) в последовательности.
  • Для каждого \(i\) (\(1 \le i \le m\)), между любыми двумя элементами (на различных позициях) в последовательности со значениями \(a_i\), есть хотя бы один элемент со значением \(b_i\).
  • Построенная последовательность имеет максимальную длину среди всех последовательностей, удовлетворяющий вышеуказанным свойствам.

Иногда возможно, что такая последовательность может быть сколь угодно длинной, в таком случае вам нужно вывести «INFINITE». Иначе, вам нужно вывести «FINITE» и саму последовательность. Если существует несколько возможных последовательностей с максимальной длиной, выведите любую из них.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 300\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 1500\), \(0 \le m \le 5000\)) — максимально возможное значение элемента последовательности и количество пар.

\(i\)-я из следующих \(m\) строк содержит два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i , b_i \le n\), \(a_i \ne b_i\)).

\((a_i, b_i) \ne (a_j, b_j)\) для всех \(1 \le i < j \le m\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(1500\) и сумма \(m\) по всем наборам входных данных не превосходит \(5000\).

Выходные данные

Для каждого набора входных данных на первой строке выведите «INFINITE», если последовательность может быть сколь угодно длинной, и «FINITE» иначе.

Если вы вывели «FINITE», то ваш вывод должен содержать ещё \(2\) строки.

Первая строка содержит целое число \(s\) — максимальную длину последовательности.

Вторая строка содержит \(s\) целых чисел, каждое со значением от \(1\) до \(n\) включительно, обозначающие элементы последовательности.

Если существует несколько последовательностей с максимальной длиной, выведите любую из них.

Можно доказать, что во всех наборах входных данных с ответом «FINITE», при данных ограничениях, максимально возможная сумма длин последовательностей в этих наборах входных данных не превосходит \(2\cdot10^6\).

Примечание

В первом наборе входных данных есть элемент \(1\) между двумя элементами со значением \(3\), и элемент \(1\) между двумя элементами со значением \(2\). Можно доказать, что не существует подходящих последовательностей длины более \(5\).

Во втором наборе входных данных \([1]\) является единственной возможной последовательностью, потому что должен быть ровно один элемент со значением \(1\) в последовательности.

В третьем наборе входных данных мы можем получить сколь угодно длинную последовательность вида \(1, 2, 2, 2, \ldots\).

F. OH NO1 (-2-3-4)

графы Конструктив математика *3500

Вам дан неориентированный граф с \(n\) вершинами и \(3m\) рёбрами. Граф может содержать кратные рёбра, но не содержит петель.

Граф удовлетворяет следующему условию: данные рёбра можно разделить на \(m\) групп по \(3\), таких что каждая группа является треугольником.

Треугольником являются три ребра \((a,b)\), \((b,c)\) и \((c,a)\) для некоторых трёх различных вершин \(a,b,c\) (\(1 \leq a,b,c \leq n\)).

Изначально каждая вершина \(v\) имеет неотрицательный целый вес \(a_v\). Для каждого ребра \((u,v)\) в графе вы должны выполнить следующую операцию ровно один раз:

  • Выбрать целое число \(x\) от \(1\) до \(4\). Затем увеличть \(a_u\) и \(a_v\) на \(x\).

После выполнения всех операций должно выполняться следующее условие: если \(u\) и \(v\) соединены ребром, то \(a_u \ne a_v\).

Можно доказать, что это всегда возможно при ограничениях задачи. Приведите способ, как это сделать, выводя выбор \(x\) для каждого ребра. Легко видеть, что порядок операций не имеет значения. Если существует несколько правильных ответов, выведите любой.

Входные данные

Первая строка содержит единственное целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(3 \le n \le 10^6\), \(1 \le m \le 4 \cdot 10^5\)), обозначающие граф с \(n\) вершинами и \(3m\) рёбрами.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(0 \leq a_i \leq 10^6\)) — изначальные веса каждой вершины.

Затем следуют \(m\) строк. \(i\)-я строка содержит три целых числа \(a_i\), \(b_i\), \(c_i\) (\(1 \leq a_i < b_i < c_i \leq n\)), обозначающие три ребра \((a_i,b_i)\), \((b_i,c_i)\) и \((c_i,a_i)\).

Обратите внимание, что граф может содержать кратные рёбра: пара \((x,y)\) может несколько раз встречаться в треугольниках.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\), и сумма \(m\) по всем наборам входных данных не превосходит \(4 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(m\) строк по \(3\) целых числа в каждой.

\(i\)-я строка должна содержать три целых числа \(e_{ab},e_{bc},e_{ca}\) (\(1 \leq e_{ab}, e_{bc} , e_{ca} \leq 4\)), обозначающие выбор значения \(x\) для рёбер \((a_i, b_i)\), \((b_i,c_i)\) and \((c_i, a_i)\) соответственно.

Примечание

В первом наборе входных данных изначальные веса равны \([0,0,0,0]\). Мы добавим значения следующим образом:

  • Добавили \(2\) к вершинам \(1\) и \(2\)
  • Добавили \(1\) к вершинам \(2\) и \(3\)
  • Добавили \(3\) к вершинам \(3\) и \(1\)

Итоговые веса равны \([5,3,4,0]\). Ответ корректен, потому что \(a_1 \neq a_2\), \(a_1 \neq a_3\), \(a_2 \neq a_3\), и все выбранные значения находятся между \(1\) и \(4\).

Во втором наборе входных данных изначальные веса равны \([0,0,0,0,0]\). Веса после операций равны \([12,5,6,7,6]\). Ответ корректен, потому что \(a_1 \neq a_2\), \(a_1 \neq a_3\), \(a_2 \neq a_3\), and that \(a_1 \neq a_4\), \(a_1 \neq a_5\), \(a_4 \neq a_5\), и все выбранные значения находятся между \(1\) и \(4\).

В третьем наборе входных данных изначальные веса равны \([3,4,5,6]\). Веса после операций равны \([19,16,17,20]\), поэтому все итоговые веса различны, что означает, что никакие две соседние вершины не имеют одинаковый вес.

A. Ян навещает Мэри

геометрия Конструктив теория чисел *800

Лягушки Ян и Мэри живут в точках целочисленной решётки декартовой координатной плоскости, Ян живёт в \((0,0)\), Мэри живёт в \((a,b)\).

Ян хочет навестить Мэри, прыгая по декартовой координатной плоскости. Каждую секунду он прыгает из его текущей позиции \((x_p, y_p)\) в другую целочисленную точку \((x_q, y_q)\), такую, что никакая другая целочисленная точка, кроме \((x_p, y_p)\) и \((x_q, y_q)\), не лежит на отрезке между точками \((x_p, y_p)\) и \((x_q, y_q)\).

Так как Ян хочет встретить Мэри как можно быстрее, он хочет допрыгать до точки \((a,b)\), используя не более \(2\) прыжков. К сожалению, Ян плох в математике. Можете ему помочь?

Точка целочисленной решётки определяется как точка, у которой \(x\)-координата и \(y\)-координата являются целыми числами.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов.

Первая и единственная строка каждого набора входных данных содержит два целых числа \(a\) и \(b\) (\(1\le a,b\le 10^9\)) — координаты целочисленной точки, где живёт Мэри.

Выходные данные

Для каждого набора входных данных выведите целое число \(n\) (\(1 \le n \le 2\)) в первой строке — количество прыжков, которые сделает Ян для встречи с Мэри. Обратите внимание, что вам не нужно минимизировать количество прыжков.

В \(i\)-й из следующих \(n\) строк, выведите два целых числа \(0 \le x_i,y_i \le 10^9\), разделённых пробелом, обозначающих координаты \((x_i,y_i)\) Яна после \(i\)-го прыжка. Должно выполняться условие \(x_n = a\), \(y_n = b\).

Начальное местоположение Яна и его местоположение после каждого из \(n\) прыжков не обязательно должны быть разными.

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных:

\((0,0) \to (3,4)\)

Во втором наборе входных данных:

\((0,0) \to (3,2) \to (4,4)\)

В третьем наборе входных данных:

\((0,0) \to (5,3) \to (3,6)\)

B. Реконструкция таблицы

жадные алгоритмы Конструктив *1000

Рассмотрим таблицу размера \(2 \times n\), где \(n\) является чётным числом. Вы можете разместить числа \(1, 2, \ldots, 2n\) в таблице, используя каждое число ровно один раз.

Путём называется последовательность клеток, полученная последовательным переходом из клетки \((1, 1)\) вправо или вниз, пока клетка \((2, n)\) не будет достигнута. При этом путь не должен выходить за пределы таблицы.

Стоимостью пути называется знакопеременная сумма чисел, написанных в клетках пути. Иными словами, пусть числами, написанными в клетках, являются \(a_1, a_2, \ldots, a_k\) (в порядке посещения), тогда стоимостью является \(a_1 - a_2 + a_3 - a_4 + \ldots = \sum_{i=1}^k a_i \cdot (-1)^{i+1}\).

Разместите числа \(1, 2, \ldots, 2n\) в таблице так, чтобы минимальная стоимость по всем путям от \((1, 1)\) до \((2, n)\) была максимальна. Если существует несколько таких таблиц с максимальным значением, выведите любую из них.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов.

Первая и единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 10^5\), \(n\) чётно) — количество столбцов в таблице.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(2\) строки, каждая из которых содержит \(n\) целых чисел — искомую таблицу. Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входные данных есть только два пути из клетки \((1, 1)\) в клетку \((2, 2)\). Их стоимости равны \(3-1+4=6\) и \(3-2+4=5\). Тогда минимальная стоимость равна \(5\), что является максимально возможным значением.

Во втором наборе входных данных есть четыре пути из клетки \((1, 1)\) в клетку \((2, 4)\). Их стоимости равны \(8-1+5-3+7=16\), \(8-2+5-3+7=15\), \(8-2+6-3+7=16\) и \(8-2+6-4+7=15\). Тогда минимальная стоимость равна \(15\), что является максимально возможным значением.

B. Граф-рыба

графы Конструктив Перебор поиск в глубину и подобное *1900

Дан простой неориентированный граф с \(n\) вершинами и \(m\) ребрами. Граф может не быть связным. Вершины графа пронумерованы от \(1\) до \(n\).

Граф-рыба — это граф, содержащий простой цикл с особой вершиной \(u\), принадлежащей циклу. Помимо ребер цикла, у графа должно быть ровно \(2\) дополнительных ребра. Оба ребра должны быть соединены с вершиной \(u\), но не должны быть соединены с любой другой вершиной цикла.

Определите, содержит ли данный граф подграф-рыбу, и если да, найдите любой такой подграф.

В этой задаче подграф определяется как граф, полученный путем выбора любого подмножества ребер исходного графа.

Визуализация примера 1. Красные ребра образуют один из возможных подграфов, который является графом-рыбой.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа, \(n\) и \(m\) (\(1 \le n, m \le 2\,000\)) — количество вершин и количество ребер.

Каждая из следующих \(m\) строк содержит описание ребра. Каждая строка содержит два целых числа \(u_i\) и \(v_i\) (\(1 \leq u_i, v_i \leq n\), \(u_i\neq v_i\)) — ребро соединяет вершину \(u_i\) с вершиной \(v_i\).

Гарантируется, что никакие два ребра не соединяют одну и ту же неупорядоченную пару вершин.

Кроме того, гарантируется, что сумма \(n\) и сумма \(m\) для всех наборов входных данных не превышает \(2\,000\).

Выходные данные

Для каждого набора входных данных выведите «YES», если граф содержит подграф-рыбу, в противном случае выведите «NO». Если ответ «YES», на следующих строках выведите описание подграфа.

Первая строка описания содержит одно целое число \(k\) — количество ребер подграфа.

В следующих \(k\) строках выведите ребра выбранного подграфа. Каждая из \(k\) строк должна содержать два целых числа \(u\) и \(v\) (\(1\le u, v\le n\), \(u\neq v\)) — ребро между \(u\) и \(v\) принадлежит подграфу. Порядок, в котором выводятся \(u\) и \(v\), не имеет значения, если эти две вершины соединены ребром в исходном графе. Порядок вывода ребер не имеет значения, если полученный подграф является графом-рыбой.

Если есть несколько решений, выведите любое.

Примечание

В первом примере возможный допустимый подграф содержит цикл \(1 \rightarrow 2 \rightarrow 3 \rightarrow 4 \rightarrow 1\). Особой вершиной этого цикла является вершина \(4\). Два дополнительных ребра \(4 - 5\) и \(4 - 6\) оба соединены с \(4\), образуя граф-рыбу.

Во втором примере возможный допустимый подграф содержит цикл \(1 \rightarrow 3 \rightarrow 4 \rightarrow 1\). Особой вершиной этого цикла является вершина \(3\). Два дополнительных ребра \(3 - 2\) и \(3 - 5\) оба соединены с \(3\), образуя граф-рыбу.

В последнем примере можно доказать, что у графа нет подграфа-рыбы.

D. Автомат с игрушками

игры Конструктив реализация *2700

Рассмотрим автомат с игрушками, в котором игрушки расположены в два ряда по \(n\) ячеек каждый (\(n\) — нечетное).

Начальное состояние для \(n=9\).

Изначально в верхнем ряду в неугловых ячейках размещены \(n-2\) игрушки. Нижний ряд изначально пуст, и его левая, правая и центральная ячейки заблокированы. Есть \(4\) кнопки для управления автоматом: влево, вправо, вверх и вниз, обозначенные буквами L, R, U и D соответственно.

При нажатии на L, R, U или D все игрушки будут одновременно двигаться в соответствующем направлении и остановятся, только если они столкнутся с другой игрушкой, стеной или заблокированной ячейкой. Ваша цель — переместить \(k\)-ю игрушку в крайнюю левую ячейку верхнего ряда. Игрушки пронумерованы с \(1\) по \(n-2\) слева направо. Вам даны \(n\) и \(k\), найдите решение, которое использует не более \(1\,000\,000\) нажатий кнопок.

Чтобы опробовать автомат, вы можете воспользоваться веб-страницей, позволяющей вам играть в описанную игру в режиме реального времени.

Входные данные

Первая и единственная строка содержит два целых числа \(n\) и \(k\) (\(5 \le n \le 100\,000\), \(n\) — нечетное, \(1 \le k \le n-2\)) — количество ячеек в ряду и номер игрушки, которую нужно переместить в крайнюю левую ячейку верхнего ряда.

Выходные данные

Выведите описание нажатий кнопок в виде строки из не более чем \(1\,000\,000\) символов. Строка должна содержать только символы L, R, U и D. \(i\)-й символ в строке соответствует \(i\)-й нажатой кнопке. После нажатия всех кнопок в указанной последовательности \(k\)-я игрушка должна быть в крайней левой ячейке верхнего ряда.

Если существует несколько решений, выведите любое из них. Количество нажатий кнопок не обязательно должно быть минимальным.

Примечание

В первом примере будет \(5-2 = 3\) игрушки. Первая игрушка должна оказаться в крайней левой ячейке верхнего ряда. Ходы RDL позволят достичь этого, см. картинку для лучшего понимания. Другим возможным решением было бы выполнить одно нажатие кнопки L.

Визуализация ходов для первого примера.

B. Неделимые отрезки

Конструктив *900

Дано положительное целое число \(n\).

Найдите перестановку \(a_1, a_2, \dots, a_n\) такую, что для любых \(1 \leq l < r \leq n\) сумма \(a_l + a_{l+1} + \dots + a_r\) не делится на \(r-l+1\).

Перестановка длины \(n\) — это массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) является перестановкой, но \([1,2,2]\) не является перестановкой (число \(2\) встречается дважды в массиве), и \([1,3,4]\) также не является перестановкой (при \(n=3\) в массиве есть число \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 100\)) — размер требуемой перестановки.

Выходные данные

Для каждого набора входных данных, если такой перестановки не существует, выведите \(-1\).

В противном случае выведите \(n\) различных целых чисел \(p_1, p_{2}, \dots, p_n\) (\(1 \leq p_i \leq n\)) — перестановку, удовлетворяющую условию, описанному в задаче.

Если есть несколько решений, выведите любое из них.

Примечание

В первом примере подходящих пар \(l < r\) нет совсем, из чего следует, что условие выполнено для всех возможных пар.

Во втором примере единственная допустимая пара — это \(l=1\) и \(r=2\), для которых \(a_1 + a_2 = 1+2=3\) не делится на \(r-l+1=2\).

В третьем примере, для \(l=1\) и \(r=3\) сумма \(a_1+a_2+a_3\) всегда равна \(6\). Она делится на \(3\), поэтому такой перестановки не существует.

C. Лисица и полный обход древа

Деревья дп Конструктив математика реализация *2400

Лисица Яэ забралась на древо Священной сакуры. Древом называют связный неориентированный граф, не содержащий циклов.

Для передвижения по древу лисица применяет свои магические способности. Яэ может прыгнуть из вершины \(v\) в другую вершину \(u\) тогда и только тогда, когда расстояние между этими вершинами не превосходит \(2\). Иными словами, за один прыжок Яэ может перепрыгнуть из вершины \(v\) в вершину \(u\), если вершины \(v\) и \(u\) соединены ребром, либо если существует такая вершина \(w\), что вершины \(v\) и \(w\) соединены ребром, а также вершины \(u\) и \(w\) соединены ребром.

После того, как Яэ смогла заполучить лепесток сакуры, она задумалась, существует ли циклический маршрут в древе \(v_1, v_2, \ldots, v_n\), такой что:

  • лисица может совершить прыжок из вершины \(v_i\) в вершину \(v_{i + 1}\),
  • лисица может совершить прыжок из вершины \(v_n\) в вершину \(v_1\),
  • все \(v_i\) попарно различны.

Помогите лисице определить, существует ли требуемый обход.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин древа.

Каждая из следующих \(n - 1\) строк содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \ne v\)) — вершины, соединенные ребром. Гарантируется, что данные ребра задают древо.

Выходные данные

В первой строке выведите «Yes» (без кавычек), если требуемый обход древа существует, либо «No» (без кавычек) в противном случае.

Если требуемый обход древа существует, во второй строке выведите \(n\) целых различных чисел \(v_1, v_2, \ldots, v_n\) (\(1 \le v_i \le n\)) — вершины древа в порядке обхода.

Если существует несколько корректных обходов, выведите любой из них.

Примечание

Древо из первого примера изображено ниже. Жирными стрелками обозначен маршрут лисицы.

Во втором примере любая последовательность из трёх различных вершин является корректным маршрутом, потому что лисица может совершить прыжок из любой вершины в любую.

Древо из третьего примера изображено ниже. Можно показать, что для него не существует требуемого маршрута.

D. Супер-перестановка

Конструктив математика *1200

Перестановка — это последовательность из \(n\) целых чисел, в которой каждое целое число от \(1\) до \(n\) встречается ровно по одному разу. Например, \([1]\), \([3,5,2,1,4]\), \([1,3,2]\) — перестановки, а \([2,3,2]\), \([4,3,1]\), \([0]\) — нет.

По перестановке \(a\) строится массив \(b\), где \(b_i = (a_1 + a_2 +~\dots~+ a_i) \bmod n\).

Перестановка чисел \([a_1, a_2, \dots, a_n]\) называется супер-перестановкой, если \([b_1 + 1, b_2 + 1, \dots, b_n + 1]\) также является перестановкой длины \(n\).

Грише стало интересно, существует ли супер-перестановка длины \(n\). Помогите ему справиться с этой нетривиальной задачей. Выведите любую супер-перестановку длины \(n\), если такая существует; в противном случае выведите \(-1\).

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных состоит из одной строки, в которой задано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина искомой перестановки.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите:

  • \(n\) целых чисел — супер-перестановку длины \(n\), если такая существует.
  • \(-1\), в противном случае.

Если существует несколько подходящих перестановок, выведите любую из них.

A. A-характеристика

Комбинаторика Конструктив математика *800

Рассмотрим массив \(a_1, a_2, \dots, a_n\) состоящий из чисел \(1\) и \(-1\). Назовем его \(A\)-характеристикой количество пар индексов \(1 \le i < j \le n\) таких, что \(a_i \cdot a_j = 1\).

Вам необходимо найти любой массив \(a\) заданной длины \(n\), \(A\)-характеристика которого равна заданному \(k\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \le n \le 100\); \(0 \le k \le \frac{(n-1) n}{2}\)) — длина искомого массива и искомая \(A\)-характеристика.

Выходные данные

Для каждого набора входных данных, если нет массива \(a\) с \(A\)-характеристикой равной \(k\), выведите NO.

Иначе выведите YES и \(n\) чисел \(1\) и \(-1\), которые формируют требуемый массив \(a\). Если есть несколько решений, выведите любой из них.

Примечание

В первом наборе есть лишь одна пара различных элементов в массиве, и их произведение \(a_1 \cdot a_2 = -1 \neq 1\), поэтому его \(A\)-характеристика равна \(0\).

Во втором наборе есть лишь одна пара различных элементов в массиве, и их произведение \(a_1 \cdot a_2 = 1\), поэтому его \(A\)-характеристика равна \(1\).

Во третьем наборе есть три пары различных элементов в массиве, и их произведение \(a_1 \cdot a_2 = -1\), \(a_1 \cdot a_3 = 1\), \(a_2 \cdot a_3 = -1\), поэтому его \(A\)-характеристика равна \(1\).

В четвертом наборе можно показать что не существует массива длины \(3\), \(A\)-характеристика которого равна \(2\).

D. Уникальные палиндромы

Конструктив математика Строки *1900

Палиндром — это строка, которая читается одинаково с обеих сторон. Например, строка abcba — палиндром, а строка abca — нет.

Пусть \(p(t)\) — это количество уникальных палиндромных подстрок строки \(t\), т.е. количество подстрок \(t[l \dots r]\), которые сами являются палиндромами. Даже если некоторые подстроки присутствуют в \(t\) несколько раз, они учитываются ровно один раз. (Вся строка \(t\) также является подстрокой \(t\)).

Например, строка \(t\) \(=\) abcbbcabcb имеет \(p(t) = 6\) уникальных палиндромных подстрок: a, b, c, bb, bcb и cbbc.

Теперь определим \(p(s, m) = p(t)\) где \(t = s[1 \dots m]\). Другими словами, \(p(s, m)\) это количество палиндромных подстрок префикса строки \(s\) длины \(m\). Например, \(p(\)abcbbcabcb\(, 5)\) \(=\) \(p(\)abcbb\() = 5\).

Вам даны целое число \(n\) и \(k\) «условий» (\(k \le 20\)). Назовем строку \(s\), состоящую из \(n\) строчных латинских букв, хорошей если все \(k\) условий удовлетворены одновременно. Условие — это пара \((x_i, c_i)\), обозначающая что:

  • \(p(s, x_i) = c_i\), то есть префикс строки \(s\) длины \(x_i\) содержит ровно \(c_i\) уникальных палидромных подстрок.
Найдите хорошую строку \(s\) или сообщите, что такой \(s\) нет.

Изучите примечание, если вам нужны дополнительные пояснения.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(3 \le n \le 2 \cdot 10^5\), \(1 \le k \le 20\)) — длина хорошей строки \(s\) и количество условий.

Вторая строка каждого набора входных данных содержит \(k\) целых чисел \(x_1, x_2, \dots, x_k\) (\(3 \le x_1 < x_2 < \dots < x_k = n\)) где \(x_i\) — это длина префикса в \(i\)-м условии.

Третья строка каждого набора входных данных содержит \(k\) целых чисел \(c_1, c_2, \dots, c_k\) (\(3 \le c_1 \le c_2 \le \dots \le c_k \le \min{\left(10^9, \frac{(n + 1) n}{2} \right)}\)) где \(c_i\) — это количество палиндромных подстрок в \(i\)-м условии.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10 ^ 5\).

Выходные данные

Для каждого набора входных данных если нет хорошей строки \(s\) длины \(n\), которая удовлетворяет всем запросам, выведите NO.

Иначе, выведите YES и строку \(s\) длины \(n\), состоящую из строчных латинских букв, которая удовлетворяет всем запросам. Если есть несколько ответов, выведите любой из них.

Примечание

В первом наборе строка \(s\) \(=\) abcbbcabcb удовлетворяет \(k = 2\) условиям:

  • \(p(s, x_1) = p(s, 5) =\) \(p(\)abcbb\() = 5 = s_1\). Палиндромные подстроки здесь: a, b, c, bb и bcb.
  • \(p(s, x_2) = p(s, 10) =\) \(p(\)abcbbcabcb\() = 6 = s_2\). Палиндромные подстроки здесь те же, что выше, и дополнительно подстрока cbbc.

Во втором наборе строка foo удовлетворяет \(k = 1\) условию:

  • \(p(\)foo\() = 3\). Палиндромные подстроки здесь f, o и oo.
Есть другие возможные ответы.

В третьем наборе строка ayda удовлетворяет \(k = 2\) условиям:

  • \(p(\)ayd\() = 3\). Палиндромные подстроки здесь a, y и d.
  • \(p(\)ayda\() = 3\). Палиндромные подстроки здесь те же.

В четвертом наборе строка wada удовлетворяет \(k = 2\) условиям:

  • \(p(\)wad\() = 3\). Палиндромные подстроки здесь w, a и d.
  • \(p(\)wada\() = 4\). Палиндромные подстроки здесь те же, и одна дополнительная подстрока ada.

В пятом наборе можно доказать, что нет строки длины \(4\) которая имеет \(5\) палиндромных подстрок.

В шестом наборе строке abcbcacbab удовлетворяет \(k = 3\) условиям:

  • \(p(\)abcb\() = 4\). Палиндромные подстроки здесь a, b, c и bcb.
  • \(p(\)abcbca\() = 5\). Палиндромные подстроки здесь те же, и одна дополнительная подстрока cbc.
  • \(p(\)abcbcacbab\() = 8\). Палиндромные подстроки здесь те же, и три дополнительные подстроки cac, bab и bcacb.

E. Автобусные маршруты

Бинарный поиск Деревья жадные алгоритмы Конструктив поиск в глубину и подобное *3400

Существует страна, состоящая из \(n\) городов и соединяющих их \(n - 1\) двунаправленных дорог, так что мы можем путешествовать между любыми двумя городами по этим дорогам. Другими словами, эти города и дороги образуют дерево.

Есть \(m\) автобусных маршрутов, соединяющих города между собой. Автобусный маршрут между городами \(x\) и \(y\) позволяет вам путешествовать между любыми двумя городами по простому пути между \(x\) и \(y\) по этому маршруту.

Определите, можно ли из каждой пары городов \(u\) и \(v\) проехать из \(u\) в \(v\), используя не более двух автобусных маршрутов.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Далее следует их описание.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \le n \le 5 \cdot 10^5, 0 \le m \le 5 \cdot 10^5\)) — количество городов и количество автобусных маршрутов.

Затем следует \(n - 1\) строка. Каждая строка содержит два целых числа \(u\) и \(v\), обозначающие дорогу, соединяющую города \(u\) и \(v\) (\(1 \le u, v \le n, u \neq v\)). Гарантируется, что эти города и дороги образуют дерево.

Далее следуют \(m\) строк. Каждая строка содержит два целых числа \(x\) и \(y\), обозначающие маршрут автобуса между городами \(x\) и \(y\) (\(1 \le x, y \le n\)).

Гарантируется, что сумма \(n\) по всем наборам тестов не превосходит \(5 \cdot 10^5\), а сумма \(m\) по всем наборам входных данных не превышает \(5 \cdot 10^5\).

Выходные данные

Для каждого теста выведите «YES», если вы можете путешествовать между любой парой городов, используя не более двух автобусных маршрутов.

В противном случае выведите «NO». В следующей строке выведите два города \(x\) и \(y\) (\(1 \le x, y \le n\)) такие, что до города \(y\) из города \(x\) невозможно добраться не более чем двумя автобусными маршрутами.

Вы можете вывести ответ в любом регистре (верхнем или нижнем). Например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительные. ответы.

Примечание

Ниже приведены иллюстрации к \(1\), \(2\) и \(4\) наборам входных данных:

F. Последовательные перестановки

жадные алгоритмы Конструктив Структуры данных *3500

Вам дана перестановка \(a_1,a_2,\ldots,a_n\) первых \(n\) натуральных чисел. Подмассив \([l,r]\) называется последовательным, если его можно переупорядочить так, чтобы он стал последовательностью последовательных целых чисел, или, более формально, если \(\)\max(a_l,a_{l+1},\ldots,a_r)-\min(a_l,a_{l+1},\ldots,a_r)=r-l\(\) Для каждого \(k\) в диапазоне \([0,n]\) выведите максимальное количество последовательных подмассивов массива \(a\) среди всех способов перестановки последних \(n-k\) элементов массива \(a\).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Далее следует их описание.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1\le n\le 2\cdot 10^5\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)). Гарантируется, что заданные числа образуют перестановку длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n+1\) целое число в качестве ответов для каждого \(k\) в диапазоне \([0,n]\).

Примечание

В первом наборе входных данных перестановки ответов для каждого \(k\): \([1,2,3,4,5]\), \([5,4,3,2,1]\), \([5,2,3,4,1]\), \([5,2,1,3,4]\), \([5,2,1,4,3]\), \([5,2,1,4,3]\).

Во втором наборе входных данных перестановки ответов для каждого \(k\): \([1,2,3,4]\), \([2,1,3,4]\), \([2,1,3,4]\) , \([2,1,4,3]\), \([2,1,4,3]\).

A. Делимый массив

Конструктив математика *800

Дано положительное целое число \(n\). Найдите массив \(a_1, a_2, \ldots, a_n\), который будет идеальным.

Идеальный массив \(a_1, a_2, \ldots, a_n\) удовлетворяет следующим критериям:

  • \(1 \le a_i \le 1000\) для всех \(1 \le i \le n\).
  • \(a_i\) делится на \(i\) для всех \(1 \le i \le n\).
  • \(a_1 + a_2 + \ldots + a_n\) делится на \(n\).
Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 200\)). Затем следует их описание.

Единственная строка каждого набора входных данных содержит одно положительное целое число \(n\) (\(1 \le n \le 200\)) — длину массива \(a\).

Выходные данные

Для каждого набора входных данных выведите массив \(a_1, a_2, \ldots, a_n\), который будет идеальным.

Мы можем показать, что ответ всегда существует. Если есть несколько решений, выведите любое.

Примечание

В третьем наборе входных данных:

  • \(a_1 = 1\) делится на \(1\).
  • \(a_2 = 2\) делится на \(2\).
  • \(a_3 = 3\) делится на \(3\).
  • \(a_1 + a_2 + a_3 = 1 + 2 + 3 = 6\) делится на \(3\).

В пятом наборе входных данных:

  • \(a_1 = 3\) делится на \(1\).
  • \(a_2 = 4\) делится на \(2\).
  • \(a_3 = 9\) делится на \(3\).
  • \(a_4 = 4\) делится на \(4\).
  • \(a_5 = 5\) делится на \(5\).
  • \(a_1 + a_2 + a_3 + a_4 + a_5 = 3 + 4 + 9 + 4 + 5 = 25\) делится на \(5\).

A. Штаб

Конструктив математика *1700

Сенсация, сенсация в двумерном государстве! Был пойман особо опасный преступник — один из членов знаменитой банды «Пихстеры». Как сообщает отдел по борьбе с преступностью, задержанный ехал на своей машине из главного штаба банды в киоск с мороженым, где и был пойман. Каждый объект двумерного государства (киоск с мороженым, машина, штаб) представляет собой точку на плоскости.

Машина преступника была оборудована GPS передатчиком. Данные передатчика показали, что на пути от штаба до киоска с мороженым машина совершила ровно n перемещений. За одно перемещение машина из точки (x, y) может попасть в одну из четырех точек: перемещение в точку (x - 1, y) будем обозначать буквой «L», в точку (x + 1, y) — «R», в точку (x, y - 1) — «D», в точку (x, y + 1) — «U».

Из-за большой погрешности GPS передатчик, установленный на машине, не сохраняет точную последовательность перемещений машины. Вместо точных перемещений в журнал GPS записываются возможные перемещения в виде одной из строк: «UL», «UR», «DL», «DR» или «ULDR». Каждая такая строка обозначает, что было совершено ровно одно перемещение, соответствующее какому-то одному символу строки. Например, строка «UL» обозначает, что было совершено либо перемещение «U», либо перемещение «L».

Вам задан журнал возможных перемещений преступника от штаба банды до киоска в хронологическом порядке. Зная, что киоск с мороженым находится в точке с координатами (0, 0), определите в скольки различных точках может находиться штаб банды (то есть, требуется найти количество возможных позиций старта машины).

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 2·105) — количество перемещений машины от штаба до киоска.

Каждая из следующих n строк обозначает возможное перемещение машины. Гарантируется, что каждое возможное перемещение это одна из строк: «UL», «UR», «DL», «DR» или «ULDR».

Все перемещения заданы в хронологическом порядке.

Выходные данные

Выведите единственное целое число — количество различных возможных положений штаба банды.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++, вместо него рекомендуется использовать потоки cin, cout, а также спецификатор %I64d.

Примечание

Рисунок ниже показывает девять возможных положений штаба банды из первого примера:

Например, из точки (1, 0), машина может доехать до точки (0, 0), совершая следующие перемещения:

A. Перестановки-близнецы

Конструктив *800

Дана перестановка\(^\dagger\) \(a\) длины \(n\).

Найдите любую перестановку \(b\) длины \(n\) такую, что \(a_1+b_1 \le a_2+b_2 \le a_3+b_3 \le \ldots \le a_n+b_n\).

Можно доказать, что перестановка \(b\), удовлетворяющая указанному условию, всегда существует.

\(^\dagger\) Перестановкой длины \(n\) называется массив из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — это перестановка, а \([1,2,2]\) — не перестановка (число \(2\) встречается дважды в массиве), и \([1,3,4]\) также не является перестановкой (\(n=3\), но в массиве есть число \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 2000\)) — количество наборов. Затем следует описание наборов.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — длину перестановок \(a\) и \(b\).

Вторая строка каждого набора содержит \(n\) различных целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le n\)) — элементы перестановки \(a\). Все элементы \(a\) различны.

Обратите внимание, что нет ограничений на сумму \(n\) по всем наборам входных данных.

Выходные данные

Для каждого набора входных данных выведите любую перестановку \(b\), которая удовлетворяет условиям. Можно доказать, что искомая перестановка \(b\), всегда существует.

Примечание

В первом наборе входных данных \(a=[1, 2, 4, 5, 3]\). Тогда перестановка \(b=[1, 2, 4, 3, 5]\) удовлетворяет условию, так как \(1 + 1 \le 2 + 2 \le 4 + 4 \le 5 + 3 \le 3 + 5\).

B. Слияние массивов

жадные алгоритмы Конструктив *1000

Даны два массива \(a\) и \(b\) длины \(n\).

Вы можете объединить\(^\dagger\) эти массивы, получив новый массив \(c\) длины \(2 \cdot n\). Необходимо найти максимальную длину подотрезка, состоящего из одинаковых значений, среди всех массивов \(c\), которые можно получить.

\(^\dagger\) В результате объединения двух массивов получается массив \(c\), составленный путем последовательного взятия первого элемента любого из массивов (если этот массив не пуст) и его удаления. После этого элемент добавляется в конец массива \(c\). Мы повторяем эту операцию до тех пор, пока это возможно (т.е. пока хотя бы один массив не пуст).

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов. Затем следует описание наборов.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина массивов \(a\) и \(b\).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le 2 \cdot n\)) — элементы массива \(a\).

Третья строка каждого набора содержит \(n\) целых чисел \(b_1,b_2,\ldots,b_n\) (\(1 \le b_i \le 2 \cdot n\)) — элементы массива \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите максимальную длину подотрезка массива, состоящего из одинаковых значений, среди всех возможных объединений.

Примечание

В первом наборе входных данных мы можем получить только \(c=[2,2]\), поэтому ответ равен \(2\).

Во втором наборе, так как все значения различны, ответ должен быть равен \(1\).

В третьем наборе входных данных массивы \(c\), которые мы можем получить, это \([1,2,1,2]\), \([1,2,2,1]\), \([2,1,1,2]\), \([2,1,2,1]\). Мы видим, что ответ равен \(2\) при \(c=[1,2,2,1]\).

D2. Красно-синие операции (сложная версия)

Бинарный поиск жадные алгоритмы Конструктив математика реализация *2400

Единственное отличие между простой и сложной версиями — максимальные значения \(n\) и \(q\).

Задан массив, состоящий из \(n\) целых чисел. Изначально все элементы красные.

К массиву можно несколько раз применить следующую операцию. На \(i\)-й операции вы выбираете элемент массива; затем:

  • если элемент красный, то он увеличивается на \(i\) и становится синим;
  • если элемент синий, то он уменьшается на \(i\) и становится красным.

Операции нумеруются с \(1\), т. е. на первой операции некоторый элемент изменяется на \(1\) и так далее.

К массиву задаются \(q\) запросов следующего вида:

  • дано целое число \(k\), какой может быть наибольший минимум в массиве после того как вы примените ровно \(k\) операций к нему?

Обратите внимание, что операции не изменяют массив между запросами, все запросы задаются к начальному массиву \(a\).

Входные данные

В первой строке записано два целых числа \(n\) и \(q\) (\(1 \le n, q \le 2 \cdot 10^5\)) — количество элементов массива и количество запросов.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

В третьей строке записаны \(q\) целых чисел \(k_1, k_2, \dots, k_q\) (\(1 \le k_j \le 10^9\)).

Выходные данные

На каждый запрос выведите одно целое число — наибольший минимум, который может быть в массиве после того как вы примените ровно \(k\) операций к нему.

D. Перевертыш

жадные алгоритмы Конструктив Перебор *1400

Вам дана перестановка \(p\) длины \(n\).

Перестановкой называется массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \(\{2,3,1,5,4\}\) является перестановкой, а \(\{1,2,2\}\) не является (\(2\) встречается дважды), и \(\{1,3,4\}\) тоже не является перестановкой (\(n=3\), но в массиве есть \(4\)).

К перестановке \(p\) нужно ровно один раз применить следующую операцию:

  • Сначала вы выбираете отрезок \([l, r]\) (\(1 \le l \le r \le n\), отрезок —непрерывная последовательность чисел \(\{p_l, p_{l+1}, \ldots, p_{r-1}, p_r\}\)) и переворачиваете его. Переворот отрезка означает, что меняются местами пары чисел \((p_l, p_r)\), \((p_{l+1}, p_{r-1})\), ..., \((p_{l + i}, p_{r - i})\) (где \(l + i \le r - i\)).
  • Затем вы меняете местами префикс и суффикс: \([r+1, n]\) и \([1, l - 1]\) (обратите внимание, что эти отрезки могут быть пустыми).

Например, \(n = 5, p = \{2, \color{blue}{3}, \color{blue}{1}, 5, 4\}\) и был выбран отрезок \([l = 2, r = 3]\), тогда после переворота отрезка \(p = \{\color{green}{2}, \color{blue}{1}, \color{blue}{3}, \color{green}{5}, \color{green}{4}\}\), затем поменяются местами отрезки \([4, 5]\) и \([1, 1]\). Тогда \(p = \{\color{green}{5}, \color{green}{4}, 1, 3, \color{green}{2}\}\). Можно показать, что это максимальный возможный ответ для данной перестановки.

Требуется вывести лексикографически максимальную перестановку, которую можно получить после применения ровно одной такой операции.

Перестановка \(a\) лексикографически больше перестановки \(b\), если существует \(i\) (\(1 \le i \le n\)) такое, что \(a_j = b_j\) для \(1 \le j < i\) и \(a_i > b_i\).

Входные данные

В первой строке входных данных задано единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных в тесте.

Далее следуют описания наборов входных данных.

В первой строке набора задано одно целое число \(n\) (\(1 \le n \le 2000\)) — размер перестановки.

Во второй строке задано \(n\) целых чисел: \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)) — сама перестановка \(p\).

Гарантируется, что сумма значений \(n\) по всем тестам не превышает \(2000\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите лексикографически максимальную перестановку длины \(n\), которую можно получить из \(p\), применив операцию, описанную в условии ровно один раз.

Примечание

Первый пример разобран в условии.

Во втором примере следует выбрать отрезок \([l = 9, r = 9]\).

В третьем примере следует выбрать отрезок \([l = 1, r = 1]\).

В четвертом примере следует выбрать отрезок \([l = 1, r = 2]\).

В пятом примере следует выбрать отрезок \([l = 5, r = 6]\).

В шестом примере следует выбрать отрезок \([l = 4, r = 4]\).

В седьмом примере следует выбрать отрезок \([l = 5, r = 5]\).

F. Ира и фламенко

Комбинаторика Конструктив математика реализация сортировки Структуры данных *1700

Ира очень любит испанский танец фламенко. Она решила основать собственную танцевальную студию и нашла \(n\) учеников, \(i\)-й из которых имеет уровень \(a_i\).

Ира может выбрать несколько своих учеников и поставить с ними танец. Таким образом она может поставить огромное количество танцев, но её интересуют только великолепные танцы. Танец называется великолепным, если выполнено следующее:

  • в танце участвуют ровно \(m\) учеников;
  • уровни всех танцоров попарно различны;
  • уровни любых двух танцоров отличаются строго меньше чем на \(m\).

Например, если \(m = 3\) и \(a = [4, 2, 2, 3, 6]\), следующие танцы являются великолепными (красным цветом выделены ученики, участвующие в танце): \([\color{red}{4}, 2, \color{red}{2}, \color{red}{3}, 6]\), \([\color{red}{4}, \color{red}{2}, 2, \color{red}{3}, 6]\). В то же время танцы \([\color{red}{4}, 2, 2, \color{red}{3}, 6]\), \([4, \color{red}{2}, \color{red}{2}, \color{red}{3}, 6]\), \([\color{red}{4}, 2, 2, \color{red}{3}, \color{red}{6}]\) не являются великолепными.

В танце \([\color{red}{4}, 2, 2, \color{red}{3}, 6]\) участвуют \(2\) ученика, хотя \(m = 3\).

В танце \([4, \color{red}{2}, \color{red}{2}, \color{red}{3}, 6]\) участвуют ученики с уровнями \(2\) и \(2\), хотя уровни всех танцоров должны быть попарно различны.

В танце \([\color{red}{4}, 2, 2, \color{red}{3}, \color{red}{6}]\) участвуют ученики с уровнями \(3\) и \(6\), но \(|3 - 6| = 3\), хотя \(m = 3\).

Помогите Ире посчитать количество великолепных танцев, которые она может поставить. Так как это число может быть очень большим, посчитайте его по модулю \(10^9 + 7\). Два танца считаются различными, если различны наборы учеников, участвующих в них.

Входные данные

В первой строке дано единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит целые числа \(n\) и \(m\) (\(1 \le m \le n \le 2 \cdot 10^5\)) — количество учеников Иры и количество танцоров в великолепном танце.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — уровни учеников.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число — количество великолепных танцев по модулю \(10^9 + 7\).

Примечание

В первом наборе входных данных Ира может поставить только такие великолепные танцы: \([\color{red}{8}, 10, 10, \color{red}{9}, \color{red}{6}, 11, \color{red}{7}]\), \([\color{red}{8}, \color{red}{10}, 10, \color{red}{9}, 6, 11, \color{red}{7}]\), \([\color{red}{8}, 10, \color{red}{10}, \color{red}{9}, 6, 11, \color{red}{7}]\), \([\color{red}{8}, 10, \color{red}{10}, \color{red}{9}, 6, \color{red}{11}, 7]\), \([\color{red}{8}, \color{red}{10}, 10, \color{red}{9}, 6, \color{red}{11}, 7]\).

Второй набор входных данных разобран в условии.

G. Ксюша и шиншилла

Деревья дп жадные алгоритмы Конструктив поиск в глубину и подобное реализация снм *1800

У Ксюши есть домашняя шиншилла, дерево на \(n\) вершинах и огромные ножницы. Деревом называется связный граф без циклов. Сейчас Ксюша сидит на скучном уроке физики и думает над тем, как развлечь своего питомца.

Шиншиллам нравится играть с веточками. Веточкой называется дерево из \(3\) вершин.

Веточка выглядит так.

Разрезом называется удаление некоторого (ещё не отрезанного) ребра в дереве. У Ксюши полно свободного времени, поэтому она может себе позволить сделать достаточно разрезов, чтобы дерево распалось на веточки. Другими словами, после нескольких (возможно нуля) разрезов, каждая вершина должна принадлежать ровно одной веточке.

Помогите Ксюше выбрать отрезаемые рёбра или сообщите, что сделать это невозможно.

Входные данные

В первой строке дано единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных дано единственное целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин в дереве.

Следующие \(n - 1\) строк каждого набора входных данных содержат целые числа \(v_i\) и \(u_i\) (\(1 \le v_i, u_i \le n\)) — номера вершин, которые соединяет \(i\)-е ребро.

Гарантируется, что данный набор рёбер образует дерево. Также гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите ответ для каждого набора входных данных.

Если искомого способа разрезать дерево не существует, выведите \(-1\).

В противном случае выведите целое число \(k\) — количество отрезаемых рёбер. В следующей строке выведите \(k\) различных целых чисел \(e_i\) (\(1 \le e_i < n\)) — номера отрезаемых рёбер. Если \(k = 0\), выведите вместо этого пустую строку.

Если решений несколько, вы можете вывести любое.

Примечание
Первый набор входных данных в первом тесте.

C. Галактики-близнецы

битмаски Конструктив математика Перебор Теория вероятностей *2600

Известный во всем мире астрофизик Млейл ваГрасс Тайсок недавно прочитал о существовании скоплений галактик-близнецов. Прежде чем поделиться этими знаниями с широкой аудиторией в своем подкасте под названием S.tarT-ok, он хочет доказать их существование самостоятельно. Млейл осознает, что просторы Вселенной поражают воображение (почти так же поражают, как и его наблюдательность), и решает попытать счастья и найти новое скопление галактик-близнецов.

Для этого он использует свой ТЛескоп для наблюдения за еще не исследованной человечеством частью ночного неба, в которой есть ровно \(2^{k + 1}\) галактик, расположенных в ряд. \(i\)-я из них состоит ровно из \(0 \le g_i < 4^k\) звезд.

Скопление галактик — это любой непустой непрерывный подотрезок галактик. Более того, считается, что её признак равен побитовому исключающему ИЛИ всех значений \(g_i\) в этом диапазоне.

Два скопления галактик считаются близнецами тогда и только тогда, когда они имеют равные признаки и их соответствующие отрезки не пересекаются.

Напишите программу, которая для многих сценариев будет читать описание участка ночного неба, наблюдаемого Млейлем, и выводить расположение двух отрезков, принадлежащих некоторой паре галактик-близнецов, или единственное значение \(-1\), если такой пары не существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(k\) (\(0 \le k \le 17\)).

Вторая строка содержит \(2^{k + 1}\) целых чисел \(g_1, g_2, \ldots, g_{2^{k+1}}\) (\(0 \le g_i < 4^k\)).

Гарантируется, что сумма значений \(2^{k + 1}\) по всем наборам входных данных не превосходит \(2^{18}\).

Выходные данные

Ответы для всех наборов входных данных должны содержаться в отдельных строках. Если существует пара галактик-близнецов, то выведите четыре целых числа \(a\), \(b\), \(c\) и \(d\), обозначающие их отрезки \([a, b]\) и \([c, d]\) (первый интервал не обязан начинаться раньше второго, но они должны быть непересекающимися). Если пары таких галактик не существует, выведите единственное значение \(-1\).

Примечание

В первом наборе входных данных мы выбираем интервалы \([2, 4]\) и \([6, 6]\) в качестве наших галактик-близнецов. Признак первого интервала равен \(15 \oplus 0 \oplus 7 = 8\), и признак второго интервала равен \(8\), так что эти скопления галактик действительно являются близнецами.

A. Кузнечик на прямой

Конструктив математика *800

Даны два целых числа \(x\) и \(k\). Кузнечик начинает в точке \(0\) на оси OX. За один ход он может прыгнуть на целое расстояние, которое не делится на \(k\), влево или вправо.

Какое наименьшее количество ходов может потребоваться кузнечику, чтобы достичь \(x\)? Какие это ходы?

Если существует несколько ответов, выведите любой из них.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных записаны два целых числа \(x\) и \(k\) (\(1 \le x \le 100\); \(2 \le k \le 100\)) — конечная точка и ограничение на прыжки, соответственно.

Выходные данные

На каждый набор входных данных выведите одно целое число \(n\) — наименьшее количество ходов, которое может потребоваться кузнечику, чтобы достичь \(x\).

Во второй строке выведите \(n\) целых чисел, каждое из них не должно делиться на \(k\). Положительное число означает прыжок направо, отрицательное число означает прыжок налево. Конечная точка после всех прыжков должна быть ровно \(x\).

Длина каждого прыжка должна быть от \(-10^9\) до \(10^9\). Можно показать, что для любого решение с наименьшим количеством прыжков, существует и решение с таким же количеством прыжков такое, что каждый прыжок от \(-10^9\) до \(10^9\).

Можно показать, что при данных ограничениях ответ всегда существует. Если существует несколько ответов, выведите любой из них.

C. Лучшая двоичная строка

жадные алгоритмы Конструктив *1000

Дана строка \(s\), состоящая из символов 0, 1 и/или ?. Назовем эту строку шаблоном.

Скажем, что двоичная строка (строка, где каждый символ равен либо 0, либо 1) соответствует шаблону, если возможно заменить каждый символ ? на 0 или 1 (для каждого символа выбор независим) так, чтобы строки стали равны. Например, 0010 соответствует ?01?, но 010 не соответствует ни 1??, ни ??, ни ????.

Давайте определим стоимость двоичной строки как минимальное количество операций вида «перевернуть произвольную непрерывную подстроку строки», необходимых, чтобы строка оказалась отсортированной в порядке неубывания.

Ваша задача — найти двоичную строку с минимально возможной стоимостью среди тех, которые соответствуют заданному шаблону. Если ответов несколько, выведите любой из них.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 3 \cdot 10^4\)) — количество наборов входных данных.

Первая и единственная строка каждого набора содержит строку \(s\) (\(1 \le |s| \le 3 \cdot 10^5\)), состоящую из символов 0, 1 и/или ?.

Сумма длин строк по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите двоичную строку с минимально возможной стоимостью среди тех, которые соответствуют заданному шаблону. Если ответов несколько, выведите любой из них.

Примечание

В первом наборе входных данных в примере из условия стоимость полученной строки равна \(0\).

Во втором наборе входных данных стоимость полученной строки равна \(2\): мы можем перевернуть подстроку с \(1\)-го символа по \(5\)-й, и мы получим строку 00101. Затем мы можем перевернуть подстроку с \(3\)-го по \(4\)-й символ, и мы получим строку 00011, которая отсортирована в порядке неубывания.

D. Раскраска скобок

жадные алгоритмы Конструктив *1400

Правильная скобочная последовательность — это скобочная последовательность, которую можно превратить в корректное арифметическое выражение, вставив символы «1» и «+» между исходными символами. Например:

  • скобочные последовательности «()()» и «(())» — правильные (из них можно получить выражения «(1)+(1)» и «((1+1)+1)»);
  • скобочные последовательности «)(», «(» и «)» — неправильные.

Последовательность скобок называется красивой, если выполняется одно из следующих условий:

  • она является правильной скобочной последовательностью;
  • если порядок символов в этой последовательности изменить на противоположный, то она станет правильной скобочной последовательностью.

Например, скобочные последовательности «()()», «(())», «))((», «))()((» являются красивыми.

Вам дана последовательность скобок \(s\). Вы должны раскрасить ее таким образом, чтобы:

  • каждая скобка была покрашена ровно в один цвет;
  • для каждого цвета существует хотя бы одна скобка, покрашенная в этот цвет;
  • для каждого цвета, если вы запишете последовательность скобок этого цвета в порядке, в котором они встречаются в строке, вы получите красивую скобочную последовательность.

Раскрасьте заданную последовательность скобок \(s\) в минимальное количество цветов в соответствии с этими ограничениями, или сообщите, что это невозможно.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк. В первой строке задано целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество символов в \(s\). Во второй строке задана \(s\) — строка из \(n\) символов, каждый из которых либо «(», либо «)».

Дополнительное ограничение на входные данные: сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ следующим образом:

  • если нельзя покрасить строку так, чтобы раскраска соответствовала условию задачи, выведите \(-1\);
  • в противном случае выведите две строки. В первой из них выведите одно целое число \(k\) (\(1 \le k \le n\)) — минимальное количество цветов. Во второй выведите \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le k\)), где \(c_i\) — цвет \(i\)-й скобки. Если ответов несколько, выведите любой из них.

A. Список на доске

Конструктив математика *800

На доске были написаны два целых числа. После этого следующая операция была выполнена \(n-2\) раза:

  • Выбрать на доске любые два целых числа и написать на доске модуль их разности.

После завершения этого процесса список из \(n\) целых чисел был перемешан. Вам даётся итоговый список. Восстановите одно из двух начальных чисел. Второе восстанавливать не нужно.

Гарантируется, что данный вам массив может быть получен с помощью вышеописанного процесса.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 100\)) — размер конечного списка.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots a_n\) (\(-10^9 \le a_i \le 10^9\)) — перемешанный список чисел, записанный на доске.

Гарантируется, что входные данные были получены с помощью процесса, описанного выше.

Выходные данные

Для каждого набора входных данных выведите одно целое число \(x\) — одно из двух начальных чисел на доске.

Если существует несколько решений, выведите любое из них.

Примечание

Для первого набора входных данных, \(a\) можно получить, начав либо с \(9\) и \(2\), а затем записав \(|9-2|=7\), либо начав с \(9\) и \(7\) и записав \(|9-7|=2\). Этот список нельзя получить, начав с \(2\) и \(7\). Поэтому в любом случае \(9\) должно было быть одним из начальных чисел. Обратите внимание, что \(2\) и \(7\) также являются корректными ответами.

Для второго набора входных данных можно показать, что два начальных числа должны были быть \(-4\) и \(11\).

Для четвертого набора входных данных начальными числами могли быть либо \(3\) и \(3\), либо \(3\) и \(0\). В любом случае одно из них было \(3\).

Для пятого набора входных данных мы можем показать, что начальными числами были \(8\) и \(16\).

B. Минимизация подотрезков перестановки

Конструктив математика *1100

Вам дана перестановка \(p\) длины \(n\). Вы хотите минимизировать количество подотрезков \(p\), которые являются перестановками. Для этого вы должны выполнить следующую операцию ровно один раз:

  • Выбрать целые числа \(i\), \(j\), где \(1 \le i, j \le n\), затем
  • Поменять местами \(p_i\) и \(p_j\).

Например, если \(p = [5, 1, 4, 2, 3]\) и мы выбираем \(i = 2\), \(j = 3\), то итоговый массив будет равен \([5, 4, 1, 2, 3]\). Если вместо этого мы выберем \(i = j = 5\), то итоговый массив будет \([5, 1, 4, 2, 3]\).

При каком выборе \(i\) и \(j\) количество подотрезков, являющихся перестановками, будет минимальным?

Перестановка длины \(n\) — это массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) является перестановкой, но \([1,2,2]\) не является перестановкой (\(2\) дважды встречается в массиве), и \([1,3,4]\) также не является перестановкой (\(n=3\), но в массиве есть \(4\)).

Массив \(a\) является подотрезком массива \(b\), если \(a\) можно получить из \(b\) путем удаления нескольких (возможно, нуля или всех) элементов из начала и нескольких (возможно, нуля или всех) элементов из конца.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 2\cdot 10^5\)) — размер перестановки.

Вторая строка каждого набора входных данных содержит \(n\) целых \(p_1, p_2, \ldots p_n\) (\(1 \le p_i \le n\), все \(p_i\) различны) — элементы перестановки \(p\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите два целых числа \(i\) и \(j\) (\(1 \le i, j \le n\)) — индексы, которые нужно поменять местами в \(p\).

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере после замены возможны четыре массива:

  • Если мы поменяем местами \(p_1\) и \(p_2\), то получим массив \([2, 1, 3]\), который имеет 3 подотрезка, которые являются перестановками (\([1]\), \([2, 1]\), \([2, 1, 3]\)).
  • Если поменять местами \(p_1\) и \(p_3\), то получим массив \([3, 2, 1]\), который имеет 3 подотрезка, которые являются перестановками (\([1]\), \([2, 1]\), \([3, 2, 1]\)).
  • Если поменять местами \(p_2\) и \(p_3\), мы получим массив \([1, 3, 2]\), который имеет 2 подотрезка, которые являются перестановками (\([1]\), \([1, 3, 2]\)).
  • Если поменять любой элемент местами с самим собой, мы получим массив \([1, 2, 3]\), который имеет 3 подотрезка, которые являются перестановками (\([1]\), \([1, 2]\), \([1, 2, 3]\)).
Поэтому лучше всего поменять местами элементы на позициях \(2\) и \(3\).

В третьем примере, после того, как мы поменяем местами элементы на позициях \(2\) и \(5\), итоговый массив будет равняться \([1, 4, 2, 5, 3]\). Единственными подотрезками, которые являются перестановками, будут \([1]\) и \([1, 4, 2, 5, 3]\). Мы можем показать, что это минимально возможное количество.

C. Без простых разностей

Конструктив математика теория чисел *1400

Вам даны целые числа \(n\) и \(m\). Заполните таблицу размером \(n\) на \(m\) целыми числами от \(1\) до \(n\cdot m\) таким образом, чтобы для любых двух соседних клеток сетки модуль разности значений в этих клетках не был простым числом. Две клетки в таблице считаются соседними, если они имеют общую сторону.

Можно показать, что при заданных ограничениях решение всегда существует.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(4 \le n, m \le 1000\)) — размеры таблицы.

Гарантируется, что сумма \(n\cdot m\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите \(n\) строк по \(m\) целых чисел в каждой, представляющих итоговую таблицу. Каждое число от \(1\) до \(n\cdot m\) должно появиться в таблице ровно один раз.

Дополнительные пробелы и пустые строки в приведенном ниже примере вывода присутствуют только для удобства чтения и не являются обязательными.

Если существует несколько решений, выведите любое из них.

Примечание

Первый пример соответствует картинке выше. Единственными абсолютными разностями между соседними элементами в этой таблице являются числа \(1\), \(4\), \(6\), \(8\) и \(9\), ни одно из которых не является простым.

F. Застрявший конвейер

Бинарный поиск интерактив Конструктив *3000

Это интерактивная задача.

Имеется сетка конвейерных лент размером \(n\) на \(n\), расположенных в позициях с \((1, 1)\) по \((n, n)\) координатной плоскости. Все остальные клетки плоскости пусты. Каждый конвейер может быть настроен на перемещение коробок вверх ('^'), вниз ('v'), влево ('<') или вправо ('>'). Если клетка перемещается на пустую клетку, она прекращает движение.

Однако, одна из \(n^2\) лент застряла, и всегда будет перемещать ящики в одном и том же направлении, независимо от того, как она настроена. Ваша цель - провести серию тестов, чтобы определить, какая лента застряла, и в каком направлении она посылает предметы.

Для достижения этой цели вы можете провести до \(25\) тестов. В каждом тесте вы задаете направление всем \(n^2\) лентам, ставите коробку на одну из них, а затем включаете все конвейеры.

Один из возможных результатов запроса с \(n=4\). В этом случае ящик начинается с \((2, 2)\). Если бы не было застрявшего конвейера, она бы закончилась в \((5, 4)\), но из-за застрявшего конвейера '>' в \((3, 3)\) она попадает в бесконечный цикл.

Конвейеры перемещают коробку слишком быстро, чтобы вы могли ее увидеть, поэтому единственная информация, которую вы получаете от теста - это то, остановилась ли коробка в конце концов, и если да, то координаты ее конечного положения.

Протокол взаимодействия

Вы начинаете взаимодействие с чтения одного целого числа \(n\) (\(2 \le n\le 100\)) — количество строк и столбцов в сетке.

Затем вы можете сделать не более \(25\) запросов.

Каждый запрос должен начинаться со строки вида ?r c, где r и c - начальные строка и столбец ячейки, соответственно.

Следующие \(n\) строк запроса должны содержать по \(n\) символов. \(j\)-й символ \(i\)-й строки должен быть одним из '^', 'v', '<' или '>', указывая направление конвейера \((i, j)\) для данного запроса.

После каждого запроса вы получите два целых числа \(x\) и \(y\). Если \(x = y = -1\), то ящик вошел в бесконечный цикл. В противном случае его конечное положение было \((x, y)\).

Если вы сделаете слишком много запросов или сделаете неправильный запрос, вы получите вердикт Неправильный ответ.

После того как вы нашли застрявший конвейер и его направление, выведите единственную строку ! r c dir, где r и c - строка и столбец застрявшего конвейера соответственно, а dir - один из символов '^', 'v', '<' или '>', указывающий направление застрявшего конвейера. Обратите внимание, что вывод ответа не засчитывается в \(25\) запросов. После вывода этой строки ваша программа должна завершиться.

Интерактор является неадаптивным. Это означает, что местоположение и направление застрявшего конвейера фиксировано в начале взаимодействия и не меняется после выполнения запросов.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Чтобы сделать взлом, используйте следующий формат.

Первая строка должна содержать одно целое число \(n\) (\(1 \le n \le 100\)) — количество строк и столбцов в сетке.

Следующая строка должна содержать два целых числа \(r\) и \(c\) (\(1 \le r, c \le n\)), а также символ \(\mathrm{dir}\) (\(\mathrm{dir}\) - одно из '^', 'v', '<', '>') — положение застрявшего конвейера и его фиксированное направление. Эти значения должны быть разделены пробелами.

Примечание

В первом запросе первого примера ящик стартует на \((2, 2)\) и входит в бесконечный цикл, содержащий строки \(2\) и \(3\). Поскольку застрявший конвейер находится в ряду \(1\), он не влияет на результат запроса.

Во втором запросе первого примера конвейеры настроены аналогичным образом, но ящик стартует с \((1, 1)\). Если бы не было застрявшего конвейера, он попал бы в бесконечный цикл между \((1, 2)\) и \((1, 3)\). Однако застрявший конвейер перенаправляет его на \((0, 2)\).

После этих двух запросов программа определяет, что застрявший конвейер находится в точке \((1, 2)\) и направляет предметы вверх.

Запрос для второго примера соответствует картинке выше. После запроса существует множество вариантов застрявшего конвейера, но программа правильно определяет, что он находится в точке \((3, 3)\) и направляет предметы вправо.

C. Вставить ноль и инвертировать префикс

Конструктив *1300

У вас есть последовательность \(a_1, a_2, \ldots, a_n\) длины \(n\), состоящая из \(0\) и \(1\). Также у вас есть последовательность \(b\), изначально пустая.

Вы выполните \(n\) операций, каждая из которых увеличивает длину последовательности \(b\) на \(1\).

  • На \(i\)-й операции вы выбираете целое число \(p\) от \(0\) до \(i-1\). Вы вставляете \(0\) в \(b\) на позицию \(p+1\) (после \(p\) первых элементов), после чего инвертируете \(p\) первых элементов \(b\).
  • Более формально: пусть перед \(i\)-й (\(1 \le i \le n\)) операцией последовательность \(b\) равна \(b_1, b_2, \ldots, b_{i-1}\). На \(i\)-й операции вы выбираете целое число \(p\) от \(0\) до \(i-1\) и заменяете \(b\) на \(\overline{b_1}, \overline{b_2}, \ldots, \overline{b_{p}}, 0, b_{p+1}, b_{p+2}, \ldots, b_{i-1}\). Здесь \(\overline{x}\) обозначает двоичную инверсию. Таким образом, \(\overline{0} = 1\) и \(\overline{1} = 0\).

Примеры применения операций приведены в примечании.

Определите, существует ли последовательность операций, после применения которой \(b\) будет равна \(a\). Если такая последовательность операций существует, найдите её.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В первой строке дано одно целое число \(n\) (\(1 \le n \le 10^5\)) — длина последовательности \(a\).

Во второй строке даны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 1\)) — последовательность \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных

  • выведите «NO», если невозможно сделать \(b\) равной \(a\) с помощью операций из условия;
  • иначе, выведите «YES» в первой строке, а во второй строке выведите \(n\) чисел \(p_1, p_2, \ldots, p_n\) (\(0 \le p_i \le i-1\)) — описание последовательности операций, делающей \(b\) равной \(a\). Здесь \(p_i\) должно быть равно числу, которое следует выбрать на \(i\)-й операции в найденной вами последовательности операций. Если существует несколько решений, выведите любое из них.
Примечание

В первом наборе входных данных,

  1. Перед первой операцией, \(b = [\,]\). Вы выбираете \(p = 0\), после чего заменяете \(b\) на \([\, \underline{0} \,]\)
  2. На второй операции вы выбираете \(p = 0\) и заменяете \(b\) на \([\, \underline{0}, 0 \,]\).
  3. На третьей операции вы выбираете \(p = 2\) и заменяете \(b\) на \([\, 1, 1, \underline{0} \,]\).
  4. На четвёртой операции вы выбираете \(p = 1\) и заменяете \(b\) на \([\, 0, \underline{0}, 1, 0 \,]\).
  5. На пятой операции вы выбираете \(p = 3\) и заменяете \(b\) на \([\, 1, 1, 0, \underline{0}, 0 \,]\).

Таким образом, последовательность \(b\) изменяется следующим образом: \([\,]\) \(\xrightarrow{p \, = \, 0}\) \([\, \underline{0} \,]\) \(\xrightarrow{p \, = \, 0}\) \([\, \underline{0}, 0 \,]\) \(\xrightarrow{p \, = \, 2}\) \([\, 1, 1, \underline{0} \,]\) \(\xrightarrow{p \, = \, 1}\) \([\, 0, \underline{0}, 1, 0 \,]\) \(\xrightarrow{p \, = \, 3}\) \([\, 1, 1, 0, \underline{0}, 0 \,]\). Итоговая последовательность \(b\) равна последовательности \(a\), поэтому такой способ сделать операции является одним из корректных ответов.

Во втором наборе входных данных \(n = 1\) и единственная последовательность \(b\), которую вы можете получить, это \([\, 0 \, ]\).

В третьем наборе входных данных существует всего 6 последовательностей операций. Вот они:

  1. \([\,]\) \(\xrightarrow{p \, = \, 0}\) \([\, \underline{0} \,]\) \(\xrightarrow{p \, = \, 0}\) \([\, \underline{0}, 0 \,]\) \(\xrightarrow{p \, = \, 0}\) \([\, \underline{0}, 0, 0 \,]\).
  2. \([\,]\) \(\xrightarrow{p \, = \, 0}\) \([\, \underline{0} \,]\) \(\xrightarrow{p \, = \, 0}\) \([\, \underline{0}, 0 \,]\) \(\xrightarrow{p \, = \, 1}\) \([\, 1, \underline{0}, 0 \,]\).
  3. \([\,]\) \(\xrightarrow{p \, = \, 0}\) \([\, \underline{0} \,]\) \(\xrightarrow{p \, = \, 0}\) \([\, \underline{0}, 0 \,]\) \(\xrightarrow{p \, = \, 2}\) \([\, 1, 1, \underline{0} \,]\).
  4. \([\,]\) \(\xrightarrow{p \, = \, 0}\) \([\, \underline{0} \,]\) \(\xrightarrow{p \, = \, 1}\) \([\, 1, \underline{0} \,]\) \(\xrightarrow{p \, = \, 0}\) \([\, \underline{0}, 1, 0 \,]\).
  5. \([\,]\) \(\xrightarrow{p \, = \, 0}\) \([\, \underline{0} \,]\) \(\xrightarrow{p \, = \, 1}\) \([\, 1, \underline{0} \,]\) \(\xrightarrow{p \, = \, 1}\) \([\, 0, \underline{0}, 0 \,]\).
  6. \([\,]\) \(\xrightarrow{p \, = \, 0}\) \([\, \underline{0} \,]\) \(\xrightarrow{p \, = \, 1}\) \([\, 1, \underline{0} \,]\) \(\xrightarrow{p \, = \, 2}\) \([\, 0, 1, \underline{0} \,]\).

Ни одна из них не делает последовательность \(b\) равной \([\, 0, 1, 1 \,]\), поэтому ответ — «NO».

E. Игра в уменьшения

дп жадные алгоритмы интерактив Конструктив поиск в глубину и подобное *2400

Это интерактивная задача.

Рассмотрим следующую игру для двух игроков:

  • Изначально на доску выписывается массив целых чисел \(a_1, a_2, \ldots, a_n\) длины \(n\).
  • Игра состоит из раундов. На каждом раунде происходит следующее:
    • Первый игрок выбирает любое \(i\), такое, что \(a_i \gt 0\). Если такого \(i\) не существует, первый игрок проигрывает (второй игрок выигрывает) и игра заканчивается.
    • Второй игрок выбирает любое \(j \neq i\), такое, что \(a_j \gt 0\). Если такого \(j\) не существует, второй игрок проигрывает (первый игрок выигрывает) и игра заканчивается.
    • Вычисляется \(d = \min(a_i, a_j)\). Значения \(a_i\) и \(a_j\) одновременно уменьшаются на \(d\), после чего начинается следующий раунд.

Можно показать, что игра всегда заканчивается после конечного числа раундов.

Выберите, за кого вы хотите сыграть (за первого игрока или за второго) в эту игру, и выиграйте за него.

Входные данные

В первой строке задано целое число \(n\) (\(1 \le n \le 300\)) — длина массива \(a\).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 300\)) — массив \(a\).

Протокол взаимодействия

Взаимодействие начинается после считывания \(n\) и массива \(a\).

Вы должны начать взаимодействие с вывода одной строки «First» или «Second», обозначающей игрока, за которого вы будете играть.

На каждом раунде происходит следующее:

  • Если вы выбрали первого игрока, то вы должны вывести одно целое число \(i\) (\(1 \le i \le n\)) в отдельной строке. После этого вы должны считать одно целое число \(j\) (\(-1 \le j \le n\)), выведенное в отдельной строке.

    Если \(j = -1\), то это значит, что вы сделали некорректный ход. В таком случае вы должны немедленно завершить вашу программу.

    Если \(j = 0\), то это значит, что второй игрок не может сделать корректный ход, и, соответственно, вы выигрываете игру. В этом случае вы также должны завершить вашу программу.

    Иначе \(j\) равняется индексу, выбранному вторым игроком, и вы должны перейти к следующему раунду.

  • Если вы выбрали второго игрока, то вы должны считать одно целое число \(i\) (\(-1 \le i \le n\)), выведенное в отдельной строке.

    Если \(i = -1\), то это значит, что вы сделали некорректный ход на предыдущем раунде. В этом случае вы должны немедленно завершить вашу программу.

    Если \(i = 0\), то это значит, что первый игрок не может сделать корректный ход и вы выигрываете игру. В этом случае вы также должны завершить вашу программу.

    Иначе \(i\) равняется индексу, выбранному первым игроком. В таком случае вы должны вывести одно целое число \(j\) (\(1 \le j \le n\)) в отдельной строке и перейти к следующему раунду.

После вывода \(i\) или \(j\) не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

В этой задаче отключены взломы.

Примечание

В первом примере \(n = 4\) и массив \(a\) равен \([\, 10, 4, 6, 3 \,]\). Ход игры будет следующим:

  • После считывания массива \(a\) программа участника выбирает первого игрока и выводит «First».
  • Первый раунд: первый игрок выбирает \(i = 1\), второй игрок выбирает \(j = 3\). Считается \(d = \min(a_1, a_3) = \min(10, 6) = 6\). Элементы \(a_1\) и \(a_3\) уменьшаются на \(6\). Массив \(a\) становится равен \([\, 4, 4, 0, 3 \,]\).
  • Второй раунд: первый игрок выбирает \(i = 2\), второй игрок выбирает \(j = 1\). Считается \(d = \min(a_2, a_1) = \min(4, 4) = 4\). Элементы \(a_2\) и \(a_1\) уменюшаются на \(4\). Массив \(a\) становится равен \([\, 0, 0, 0, 3 \,]\).
  • Третий раунд: первый игрок выбирает \(i = 4\). Не существует \(j \neq 4\), такого, что \(a_j > 0\), поэтому второй игрок не может сделать ход и первый игрок выигрывает. Интерактор выводит \(j = 0\), после считывания которого программа участника завершается.

Во втором примере \(n = 6\) и массив \(a\) равен \([\, 4, 5, 5, 11, 3, 2 \,]\). Ход игры будет следующим:

  • Программа участника выбирает второго игрока и выводит «Second».
  • Первый раунд: \(i = 2\), \(j = 4\), \(a = [\, 4, 0, 5, 6, 3, 2 \,]\).
  • Второй раунд: \(i = 5\), \(j = 4\), \(a = [\, 4, 0, 5, 3, 0, 2 \,]\).
  • Третий раунд: \(i = 4\), \(j = 3\), \(a = [\, 4, 0, 2, 0, 0, 2 \,]\).
  • Четвертый раунд: \(i = 6\), \(j = 1\), \(a = [\, 2, 0, 2, 0, 0, 0 \,]\).
  • Пятый раунд: \(i = 1\), \(j = 3\), \(a = [\, 0, 0, 0, 0, 0, 0 \,]\).
  • Шестой раунд: первый игрок не может сделать ход и второй игрок выигрывает. Интерактор выводит \(i = 0\), после считывания которого программа участника завершается.

Обратите внимание, что лишние переводы строки в примерах приведены только для удобства и в действительности вам не нужно их выводить. Программа жюри также не будет выводить лишних переводов строки.

G1. В поисках истины (простая версия)

meet-in-the-middle интерактив Конструктив математика Теория вероятностей *2200

Единственное отличие между версиями — максимальное количество запросов. В этой версии вы можете сделать не более \(2023\) запросов.

Это интерактивная задача.

Вы играете в игру. Круг разделен на \(n\) секторов, секторы пронумерованы от \(1\) до \(n\) в некотором порядке. Вы находитесь в соседней комнате и не знаете ни количество секторов, ни порядка их нумерации. Также есть стрелка, которая изначально указывает на какой-то сектор. Изначально ведущий сообщает вам номер сектора, на который указывает стрелка. После этого вы можете попросить ведущего переместить стрелку на \(k\) секторов по часовой стрелке или против часовой стрелки не более чем \(2023\) раза. И каждый раз вам сообщается номер сектора, на который указывает стрелка.

Ваша задача определить число \(n\) — количество секторов, используя не более чем \(2023\) запроса.

Гарантируется, что \(1 \le n \le 10^6\).

Входные данные

Входные данные состоят из одного целого числа \(x\) (\(1 \le x \le n\)) — номер начального сектора.

Выходные данные

После того, как вы определите число \(n\) — количество секторов, выведите «! n» (\(1 \le n \le 10^6\)). После этого программа должна немедленно завершиться.

Обратите внимание, что вывод ответа не считается запросом.

Гарантируется, что число \(n\) и номера секторов зафиксированы изначально и не будут меняться программой жюри в зависимости от запросов.

Протокол взаимодействия

После описания ввода вы можете задавать запросы. Запросы могут быть двух типов:

  1. «+ k» (\(0 \le k \le 10^9\)) — попросить переместить стрелку на \(k\) секторов по часовой стрелке.
  2. «- k» (\(0 \le k \le 10^9\)) — попросить переместить стрелку на \(k\) секторов против часовой стрелки.

После каждого запроса вы должны считать целое число \(x\) (\(1 \le x \le n\)) — номер текущего сектора, на который указывает стрелка.

Всего вы можете сделать не более \(2023\) запросов.

Если вы сделаете слишком много запросов, вы получите вердикт Wrong answer.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.
Примечание

Взломы

Для взломов используйте следующий формат теста.

В первой строке выведите одно целое число \(n\) (\(1 \le n \le 10^6\)) — количество секторов.

Во второй строке выведите \(n\) различных целых чисел \(1 \le a_1, a_2, \dots, a_n \le n\) — номера секторов по часовой стрелке, стрелка изначально указывает на сектор с номером \(a_1\).

G2. В поисках истины (сложная версия)

meet-in-the-middle интерактив Конструктив математика Теория вероятностей *2500

Единственное отличие между версиями — максимальное количество запросов. В этой версии вы можете сделать не более \(1000\) запросов.

Это интерактивная задача.

Вы играете в игру. Круг разделен на \(n\) секторов, секторы пронумерованы от \(1\) до \(n\) в некотором порядке. Вы находитесь в соседней комнате и не знаете ни количество секторов, ни порядка их нумерации. Также есть стрелка, которая изначально указывает на какой-то сектор. Изначально ведущий сообщает вам номер сектора, на который указывает стрелка. После этого вы можете попросить ведущего переместить стрелку на \(k\) секторов по часовой стрелке или против часовой стрелки не более чем \(1000\) раз. И каждый раз вам сообщается номер сектора, на который указывает стрелка.

Ваша задача определить число \(n\) — количество секторов, используя не более чем \(1000\) запросов.

Гарантируется, что \(1 \le n \le 10^6\).

Входные данные

Входные данные состоят из одного целого числа \(x\) (\(1 \le x \le n\)) — номер начального сектора.

Выходные данные

После того, как вы определите число \(n\) — количество секторов, выведите «! n» (\(1 \le n \le 10^6\)). После этого программа должна немедленно завершиться.

Обратите внимание, что вывод ответа не считается запросом.

Гарантируется, что число \(n\) и номера секторов зафиксированы изначально и не будут меняться программой жюри в зависимости от запросов.

Протокол взаимодействия

После описания ввода вы можете задавать запросы. Запросы могут быть двух типов:

  1. «+ k» (\(0 \le k \le 10^9\)) — попросить переместить стрелку на \(k\) секторов по часовой стрелке.
  2. «- k» (\(0 \le k \le 10^9\)) — попросить переместить стрелку на \(k\) секторов против часовой стрелки.

После каждого запроса вы должны считать целое число \(x\) (\(1 \le x \le n\)) — номер текущего сектора, на который указывает стрелка.

Всего вы можете сделать не более \(1000\) запросов.

Если вы сделаете слишком много запросов, вы получите вердикт Wrong answer.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.
Примечание

Взломы

Для взломов используйте следующий формат теста.

В первой строке выведите одно целое число \(n\) (\(1 \le n \le 10^6\)) — количество секторов.

Во второй строке выведите \(n\) различных целых чисел \(1 \le a_1, a_2, \dots, a_n \le n\) — номера секторов по часовой стрелке, стрелка изначально указывает на сектор с номером \(a_1\).

A. Игра на доске

игры Конструктив *800

Алиса и Боб играют в игру. У них есть доска; изначально на ней написано \(n\) целых чисел, каждое из которых равно \(1\).

Алиса и Боб ходят по очереди; первым ходит Алиса. В свой ход игрок должен выбрать несколько (как минимум два) равных чисел на доске, стереть их и написать новое число, равное их сумме.

Например, если на доске сейчас написаны числа \(\{1, 1, 2, 2, 2, 3\}\), то возможны следующие ходы:

  • выбрать два числа, равных \(1\), стереть их и написать число \(2\), тогда доска станет \(\{2, 2, 2, 2, 3\}\);
  • выбрать два числа, равных \(2\), стереть их и написать число \(4\), тогда доска станет \(\{1, 1, 2, 3, 4\}\);
  • выбрать три числа, равных \(2\), стереть их и написать число \(6\), тогда доска станет \(\{1, 1, 3, 6\}\).

Если игрок не может сделать ход (все числа на доске различны), то этот игрок выигрывает в игре.

Определите, кто выиграет, если оба игрока будут играть оптимально.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 99\)) — количество тестов.

Каждый тест состоит из одной строки, содержащей одно целое число \(n\) (\(2 \le n \le 100\)) — количество чисел, равных \(1\), на доске.

Выходные данные

Для каждого теста выведите Alice, если Алиса выиграет (с учетом того, что оба игрока будут играть оптимально). Иначе выведите Bob.

Примечание

В первом наборе входных данных \(n = 3\), поэтому на доске изначально написаны числа \(\{1, 1, 1\}\). Мы можем показать, что Боб всегда может выиграть. У Алисы есть два возможных первых хода:

  • если Алиса выбирает два числа, равных \(1\), стирает их и пишет \(2\), то доска становится \(\{1, 2\}\). Боб не может сделать ход, поэтому он выигрывает;
  • если Алиса выбирает три числа, равных \(1\), стирает их и пишет \(3\), то доска становится \(\{3\}\). Боб не может сделать ход, поэтому он выигрывает.

Во втором наборе входных данных \(n = 6\), поэтому на доске изначально написаны числа \(\{1, 1, 1, 1, 1, 1\}\). Алиса может выиграть, например, выбрав на первом ходу два числа, равных \(1\), стерев их и написав \(2\). Тогда доска станет \(\{1, 1, 1, 1, 2\}\), и у Боба будет три возможных ответных хода:

  • если Боб выберет четыре числа, равных \(1\), сотрет их и напишет \(4\), то доска станет \(\{2,4\}\). Алиса не может сделать ход, поэтому она выигрывает;
  • если Боб выберет три числа, равных \(1\), сотрет их и напишет \(3\), то доска станет \(\{1,2,3\}\). Алиса не может сделать ход, поэтому она выигрывает;
  • если Боб выберет два числа, равных \(1\), сотрет их и напишет \(2\), то доска станет \(\{1, 1, 2, 2\}\). Алиса может продолжить, например, выбрав два числа, равных \(2\), стерев их и написав \(4\). Тогда доска станет \(\{1,1,4\}\). Единственный возможный ответ для Боба — выбрать два числа, равных \(1\), и написать вместо них \(2\); тогда доска станет \(\{2,4\}\), Алиса не может сделать ход, поэтому она выигрывает.

D. Тенцинг и его друзья животные

графы жадные алгоритмы Конструктив *1900

Расскажи историю обо мне и моих друзьях животных.

У Тенцинга есть \(n\) друзей животных. Он пронумеровал их от \(1\) до \(n\).

Однажды Тенцинг захотел поиграть со своими друзьями. Для этого Тенцинг устроит несколько игр.

В рамках одной игры он выберет множество \(S\), которое является подмножеством \(\{1,2,3,...,n\}\) и выберет целое число \(t\). Затем он будет играть в игру с животными из \(S\) в течение \(t\) минут.

Но есть некоторые ограничения:

  1. Тенцинг очень любит друга \(1\), поэтому \(1\) должен быть элементом \(S\).
  2. Тенцинг не любит друга \(n\), поэтому \(n\) не должен быть элементом \(S\).
  3. Существует m дополнительных ограничений. \(i\)-е специальное ограничение описывается целыми числами \(u_i\), \(v_i\) и \(y_i\). Предположим, что \(x\) — это общее время, в течение которого ровно один из \(u_i\) и \(v_i\) играет с Тенцингом. Тенцинг должен гарантировать, что \(x\) меньше или равно \(y_i\). Иначе будет несчастье.

Тенцинг хочет узнать максимальное общее время, которое он может играть со своими друзьями животными. Пожалуйста, найдите максимальное общее время, которое Тенцинг может играть со своими друзьями животными, и способ организации игр, при котором достигается это максимальное общее время, или сообщите, что он может играть со своими друзьями животными бесконечное количество времени. Кроме того, Тенцинг не хочет устраивать очень много игр, поэтому он устроит не более \(n^2\) игр.

Входные данные

Первая строка входных данных содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 100\), \(0 \leq m \leq \frac{n(n-1)}{2}\)) — количество друзей животных и количество специальных ограничений.

В \(i\)-й из следующих \(m\) строк ввода содержится три целых числа \(u_i\), \(v_i\) и \(y_i\) (\(1\leq u_i<v_i\leq n\), \(0\leq y_i\leq 10^9\)), описывающих \(i\)-е ограничение. Гарантируется, что для \(1 \leq i < j \leq m\), \((u_i,v_i) \neq (u_j,v_j)\).

Выходные данные

Если Тенцинг может играть со своими друзьями-животными бесконечное количество времени, выведите «inf» (без кавычек).

Иначе, в первой строке выведите общее время \(T\) (\(0 \leq t \leq 10^{18}\)) и количество игр \(k\) (\(0 \leq k \leq n^2\)).

В следующих \(k\) строках вывода выведите двоичную строку \(s\) длины \(n\) и целое число \(t\) (\(0 \leq t \leq 10^{18}\)) — представление множества \(S\) и количество минут, в течение которых будет играться эта игра. Если \(s_i=\texttt{1}\), то \(i \in S\), иначе, если \(s_i=\texttt{0}\), то \(i \notin S\).

При ограничениях этой задачи можно доказать, что если Тенцинг может играть со своими друзьями только конечное количество времени, то он может играть с ними не более \(10^{18}\) минут.

Примечание

В первом примере:

  1. Тенцинг проведёт игру с другом \(\{1\}\) в течение \(1\) минуты.
  2. Тенцинг проведёт игру с друзьями \(\{1,4\}\) в течение \(1\) минуты.
  3. Тенцинг проведёт игру с друзьями \(\{1,3\}\) в течение \(1\) минуты.
  4. Тенцинг проведёт игру с друзьями \(\{1,2,3,4\}\) в течение \(1\) минуты.

Если после этого Тенцинг проведет еще одну игру с друзьями \(\{1,2\}\) в течение \(1\) минуты, то время пребывания ровно одного из друзей \(2\) или \(3\) с Тенцинг станет \(2\) минуты, что не будет удовлетворять \(3\)-му ограничению.

Во втором наборе никаких специальных ограничений нет. Поэтому Тенцинг может играть с другом \(\{1\}\) в течение бесконечного количества времени.

A. Игра в вычитание

игры Конструктив *800

Вам даны два положительных целых числа \(a\) и \(b\) (\(a < b\)).

Два игрока играют в игру с кучей из \(n\) камней для некоторого положительного целого \(n\). Они ходят по очереди, на каждом ходу убирая из кучи ровно \(a\) или ровно \(b\) камней. Проигрывает тот, кто не может сделать ход.

Найдите какое-нибудь положительное целое \(n\), при котором игрок, ходящий вторым, имеет выигрышную стратегию. Это означает, что какие бы ходы ни делал первый игрок, второй игрок всегда сможет правильно выбрать ответные ходы (возможно, в зависимости от ходов первого), чтобы гарантировать свою победу.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(a\) и \(b\) (\(1 \le a < b \le 100\)).

Выходные данные

Для каждого набора входных данных выведите произвольное положительное целое число \(n\) (\(1 \le n \le 10^6\)), для которого игрок, ходящий вторым, выигрывает.

Можно доказать, что \(n\), удовлетворяющее всем ограничениям задачи, всегда существует.

Примечание

В первом наборе входных данных при \(n = 2\) первый игрок своим первым ходом обязан удалить \(a = 1\) камень. Второй игрок может ответить удалением \(a = 1\) камня. Теперь первый игрок не может сделать ход, значит, второй выигрывает.

Во втором наборе входных данных при \(n = 6\) у первого игрока есть два варианта действий:

  • Если он удаляет из кучи \(b = 5\) камней, то второй игрок может в ответ удалить \(a = 1\) камень. Теперь первый игрок не может сделать ход, значит, второй выигрывает.
  • Если он удаляет \(a = 1\) камень, то второй вновь может в ответ удалить \(a = 1\) камень. Затем игроки могут лишь по очереди удалять по \(a = 1\) камню из кучи. Второй игрок удалит последний камень, а потому победит.

Поскольку второй игрок имеет выигрышную стратегию вне зависимости от действий первого, это корректный ответ.

В третьем наборе входных данных при \(n = 3\) первый игрок не может сделать ни одного хода, значит, второй сразу же побеждает.

B. Перестановки и простые числа

Конструктив математика *1000

Вам дано целое положительное число \(n\).

В этой задаче через \(\operatorname{MEX}\) для набора целых чисел \(c_1,c_2,\dots,c_k\) обозначим наименьшее положительное целое число \(x\), которое не встречается в наборе \(c\).

Простотой массива \(a_1,\dots,a_n\) назовём количество пар \((l,r)\), таких что \(1 \le l \le r \le n\) и \(\operatorname{MEX}(a_l,\dots,a_r)\) является простым числом.

Найдите произвольную перестановку чисел \(1,2,\dots,n\) с максимально возможным значением простоты среди всех перестановок \(1,2,\dots,n\).

Обратите внимание:

  • Целое число, не меньшее \(2\), называется простым, если его целыми положительными делителями являются только \(1\) и оно само. Например, \(2,5,13\) — простые числа, а \(1\) и \(6\) не простые.
  • Перестановкой чисел \(1,2,\dots,n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел, задающих перестановку \(1,2,\dots,n\), на которой достигается максимально возможная простота.

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных есть всего \(3\) пары \((l,r)\) с \(1 \le l \le r \le 2\), из которых \(2\) имеют простое значение \(\operatorname{MEX}(a_l,\dots,a_r)\):

  • \((l,r) = (1,1)\): \(\operatorname{MEX}(2) = 1\), что не является простым.
  • \((l,r) = (1,2)\): \(\operatorname{MEX}(2,1) = 3\), что является простым.
  • \((l,r) = (2,2)\): \(\operatorname{MEX}(1) = 2\), что является простым.
Отсюда, простота равна \(2\).

Во втором наборе входных данных \(\operatorname{MEX}(1) = 2\) является простым, так что простота равна \(1\).

В третьем наборе входных данных максимально возможная простота равна \(8\).

D. Построчная склейка

жадные алгоритмы Конструктив математика Строки теория чисел *1400

Пусть дана таблица символов \(A\), которая имеет размеры \(r \times c\). Её построчной склейкой назовём строку, получаемую конкатенацией всех её строк, т. е. \(\) A_{11}A_{12} \dots A_{1c}A_{21}A_{22} \dots A_{2c} \dots A_{r1}A_{r2} \dots A_{rc}. \(\)

Таблицу символов \(A\) назовём плохой, если в каких-то двух её соседних клетках (в клетках, имеющих общую сторону) записаны одинаковые символы.

Вам дано целое положительное число \(n\). Рассмотрим все строки \(s\), состоящие только из маленьких латинских букв, которые при это не являются построчной склейкой никакой плохой таблицы. Найдите произвольную такую строку, в которой число различных символов минимально среди всех таких строк длины \(n\).

Можно доказать, что строка, удовлетворяющая всем условиям задачи, всегда существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 10^6\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите строку с минимальным числом различных символов среди всех подходящих строк длины \(n\).

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных есть \(3\) способа, как можно построчно вписать строку \(s\) в матрицу, причём все они не являются плохими:

tththat
hat
a
t
Можно доказать, что меньше чем \(3\) различными символами обойтись нельзя.

Во втором наборе входных данных есть \(2\) способа, как можно построчно вписать строку \(s\) в матрицу, причём все они не являются плохими:

iis
s
Можно доказать, что меньше чем \(2\) различными символами обойтись нельзя.

В третьем наборе входных данных есть всего \(1\) способ, как можно построчно вписать строку \(s\) в матрицу, причём он не является плохим.

В четвёртом наборе входных данных есть \(4\) способа, как можно построчно вписать строку \(s\) в матрицу, причём все они не являются плохими:

ttotomtomato
omaato
mto
a
t
o
Можно доказать, что меньше чем \(4\) различными символами обойтись нельзя. Обратите внимание, что, например, строка «orange» не является корректным ответом, поскольку в ней \(6 > 4\) различных символов, строка же «banana» не является корректным ответом, потому что она является построчной склейкой следующей плохой таблицы:
ba
na
na

E. Прекрасные таблицы

2-sat графы Конструктив поиск в глубину и подобное снм *2400

Таблицу размерами \(n \times m\), состоящую из символов, назовём прекрасной, если она удовлетворяет следующим трём условиям:

  • Каждый символ — это 'A', 'B' или 'C'.
  • В любой непрерывной подтаблице размерами \(2 \times 2\) каждая из трёх букв встречается хотя бы один раз.
  • В любых двух клетках, имеющих общую сторону, записаны разные буквы.

Через \((x,y)\) обозначим клетку на пересечении \(x\)-й сверху строки и \(y\)-го слева столбца.

Вы хотите построить прекрасную таблицу, которая бы также удовлетворяла \(k\) ограничениям. Каждое ограничение задаёт условие на две клетки — \((x_{i,1},y_{i,1})\) и \((x_{i,2},y_{i,2})\), которые имеют ровно один общий угол. Вы хотите, чтобы в вашей таблице в клетках \((x_{i,1},y_{i,1})\) и \((x_{i,2},y_{i,2})\) были записаны одинаковые буквы.

Определите, существует ли прекрасная таблица, удовлетворяющая всем ограничениям.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа: \(n\), \(m\) и \(k\) (\(2 \le n,m \le 2 \cdot 10^3\), \(1 \le k \le 4 \cdot 10^3\)).

Каждая из следующих \(k\) строк содержит по четыре целых числа: \(x_{i,1}\), \(y_{i,1}\), \(x_{i,2}\) и \(y_{i,2}\) (\(1 \le x_{i,1} < x_{i,2} \le n\), \(1 \le y_{i,1},y_{i,2} \le m\)). Гарантируется, что \((x_{i,2},y_{i,2}) = (x_{i,1}+1,y_{i,1}+1)\) или \((x_{i,2},y_{i,2}) = (x_{i,1}+1,y_{i,1}-1)\).

Пары клеток попарно различны, т. е. для всех \(1 \le i < j \le k\) неверно, что \(x_{i,1} = x_{j,1}\), \(y_{i,1} = y_{j,1}\), \(x_{i,2} = x_{j,2}\) и \(y_{i,2} = y_{j,2}\) одновременно.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^3\).

Гарантируется, что сумма значений \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^3\).

Гарантируется, что сумма значений \(k\) по всем наборам входных данных не превосходит \(4 \cdot 10^3\).

Выходные данные

Для каждого набора входных данных выведите «YES», если существует прекрасная таблица, удовлетворяющая всем ограничениям. Иначе выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных следующая прекрасная таблица удовлетворяет всем ограничениям:

BABC
CBCA
ACAB

Во втором наборе входных данных два ограничения означают, что в клетках \((1,1)\) и \((2,2)\) записаны одинаковые буквы, а также в клетках \((1,2)\) и \((2,1)\) записаны одинаковые буквы. Поэтому невозможно сделать так, чтобы единственная подтаблица \(2 \times 2\) содержала бы все три буквы хотя бы по разу.

F1. Перестановка минимальной стоимости (простая версия)

жадные алгоритмы Конструктив математика Перебор *2600

Единственное отличие между этой задачей и сложной версией — в ограничениях на \(t\) и \(n\).

Вам дан массив из \(n\) положительных целых чисел \(a_1,\dots,a_n\), а также целое (возможно, отрицательное) число \(c\).

Среди всех возможных перестановок \(b_1,\dots,b_n\) массива \(a_1,\dots,a_n\), рассмотрим минимально возможное значение \(\)\sum_{i=1}^{n-1} |b_{i+1}-b_i-c|.\(\) Найдите лексикографически наименьшую перестановку \(b\) массива \(a\), на которой достигается этот минимум.

Последовательность \(x\) лексикографически меньше последовательности \(y\), если и только если выполняется один из следующих пунктов:

  • \(x\) — префикс \(y\), но \(x \ne y\);
  • в первой позиции, где \(x\) и \(y\) различны, в последовательности \(x\) находится элемент, меньший соответствующего элемента \(y\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа: \(n\) и \(c\) (\(1 \le n \le 5 \cdot 10^3\), \(-10^9 \le c \le 10^9\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,\dots,a_n\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^3\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(b_1,\dots,b_n\), задающих лексикографически наименьшую перестановку \(a\), на которой достигается минимум \(\sum\limits_{i=1}^{n-1} |b_{i+1}-b_i-c|\).

Примечание

В первом наборе входных данных можно доказать, что минимальное значение \(\sum\limits_{i=1}^{n-1} |b_{i+1}-b_i-c|\) равно \(27\), а перестановка \(b = [9,3,1,4,5,1]\) является лексикографически наименьшей перестановкой \(a\), на которой достигается этот минимум: \(|3-9-(-7)|+|1-3-(-7)|+|4-1-(-7)|+|5-4-(-7)|+|1-5-(-7)| = 1+5+10+8+3 = 27\).

Во втором наборе входных данных минимально возможное значение \(\sum\limits_{i=1}^{n-1} |b_{i+1}-b_i-c|\) равно \(0\), при этом \(b = [1,3,5]\) является лексикографически наименьшей перестановкой \(a\), на которой достигается этот минимум.

В третьем наборе входных данных существует всего одна перестановка \(b\).

F2. Перестановка минимальной стоимости (сложная версия)

Бинарный поиск жадные алгоритмы Конструктив математика сортировки Структуры данных *2800

Единственное отличие между этой задачей и простой версией — в ограничениях на \(t\) и \(n\).

Вам дан массив из \(n\) положительных целых чисел \(a_1,\dots,a_n\), а также целое (возможно, отрицательное) число \(c\).

Среди всех возможных перестановок \(b_1,\dots,b_n\) массива \(a_1,\dots,a_n\), рассмотрим минимально возможное значение \(\)\sum_{i=1}^{n-1} |b_{i+1}-b_i-c|.\(\) Найдите лексикографически наименьшую перестановку \(b\) массива \(a\), на которой достигается этот минимум.

Последовательность \(x\) лексикографически меньше последовательности \(y\), если и только если выполняется один из следующих пунктов:

  • \(x\) — префикс \(y\), но \(x \ne y\);
  • в первой позиции, где \(x\) и \(y\) различны, в последовательности \(x\) находится элемент, меньший соответствующего элемента \(y\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа: \(n\) и \(c\) (\(1 \le n \le 2 \cdot 10^5\), \(-10^9 \le c \le 10^9\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,\dots,a_n\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(b_1,\dots,b_n\), задающих лексикографически наименьшую перестановку \(a\), на которой достигается минимум \(\sum\limits_{i=1}^{n-1} |b_{i+1}-b_i-c|\).

Примечание

В первом наборе входных данных можно доказать, что минимальное значение \(\sum\limits_{i=1}^{n-1} |b_{i+1}-b_i-c|\) равно \(27\), а перестановка \(b = [9,3,1,4,5,1]\) является лексикографически наименьшей перестановкой \(a\), на которой достигается этот минимум: \(|3-9-(-7)|+|1-3-(-7)|+|4-1-(-7)|+|5-4-(-7)|+|1-5-(-7)| = 1+5+10+8+3 = 27\).

Во втором наборе входных данных минимально возможное значение \(\sum\limits_{i=1}^{n-1} |b_{i+1}-b_i-c|\) равно \(0\), при этом \(b = [1,3,5]\) является лексикографически наименьшей перестановкой \(a\), на которой достигается этот минимум.

В третьем наборе входных данных существует всего одна перестановка \(b\).

G. Дерево с весами

битмаски Деревья Конструктив математика матрицы поиск в глубину и подобное реализация Структуры данных теория чисел *3000

Дано дерево на \(n\) вершинах, пронумерованных числами \(1,2,\dots,n\). \(i\)-е ребро соединяет вершины \(u_i\) и \(v_i\) и имеет некоторый неизвестный целый положительный вес \(w_i\). Вам также известны расстояния \(d_i\) между вершинами \(i\) и \(i+1\) для всех \(1 \le i \le n-1\) (это расстояние равно сумме весов рёбер на простом пути между вершинами дерева \(i\) и \(i+1\)).

Найдите вес каждого ребра. Если существует несколько решений, выведите любое из них. Если не существует весов \(w_i\), согласующихся со всеми данными, выведите одно целое число \(-1\).

Входные данные

Первая строка содержит целое число \(n\) (\(2 \le n \le 10^5\)).

В \(i\)-й из следующих \(n-1\) строк содержатся по два числа: \(u_i\) и \(v_i\) (\(1 \le u_i,v_i \le n\), \(u_i \ne v_i\)).

В последней строке содержится \(n-1\) целых чисел \(d_1,\dots,d_{n-1}\) (\(1 \le d_i \le 10^{12}\)).

Гарантируется, что заданные ребра образуют дерево.

Выходные данные

Если решения не существует, выведите одно целое число \(-1\). В противном случае выведите \(n-1\) строку, содержащую веса \(w_1,\dots,w_{n-1}\).

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере дерево выглядит следующим образом:

Во втором примере вес \(w_2\) не может быть равен \(0\), поскольку должен быть целым положительным числом. Поэтому решения нет.

В третьем примере дерево выглядит следующим образом:

A. Запрещенное число

Конструктив математика реализация теория чисел *800

Дано целое число \(n\), которое вы хотите получить. У вас есть бесконечный запас каждого целого числа от \(1\) до \(k\), кроме числа \(x\) (числа \(x\) нет ни одной штуки).

Разрешается взять произвольное количество каждого из этих чисел (возможно, ноль). Можете ли вы сделать так, чтобы сумма взятых чисел была равна \(n\)?

Если существует несколько ответов, то выведите любой из них.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных записаны три целых числа \(n, k\) и \(x\) (\(1 \le x \le k \le n \le 100\)).

Выходные данные

На каждый набор входных данных в первой строке выведите «YES» или «NO» — можете ли вы взять произвольное количество каждого из чисел от \(1\) до \(k\), кроме \(x\), так, чтобы их сумма была равна \(n\).

Если можете, то во второй строке должно быть записано одно целое число \(m\) — суммарное количество взятых чисел. В третьей строке должны быть записаны \(m\) целых чисел — каждое от \(1\) до \(k\), не равно \(x\), а их сумма равна \(n\).

Если существует несколько ответов, то выведите любой из них.

Примечание

Другой возможный ответ на первый набор входных данный — это \([3, 3, 3, 1]\). Обратите внимание, что не требуется минимизировать количество взятых чисел. Существуют и другие ответы.

Во втором наборе у вас есть только бесконечный запас чисел \(2\). Невозможно собрать сумму \(5\) только из них.

В пятом наборе вообще нет доступных чисел, поэтому невозможно собрать никакую положительную сумму.

C. Рудольф и очередное соревнование

дп жадные алгоритмы Конструктив сортировки Структуры данных *1200

Рудольф зарегистрировался на соревнование по спортивному программированию, которое пройдет по правилам ICPC. Правила подразумевают, что за каждую решенную задачу дается \(1\) балл, а также начисляется штрафное время, равное количеству минут, пройденному с начала соревнования к моменту решения задачи. В итоговой таблице выше находится участник набравший больше баллов, а при равенстве баллов выше тот, у которого меньше штрафное время.

Всего на соревнование зарегистрировалось \(n\) участников. Рудольф имеет номер \(1\). Известно, что будет предложено \(m\) задач. А длиться соревнование будет \(h\) минут.

Мощный искусственный интеллект предсказал значения \(t_{i, j}\) — количество минут, за которое \(i\)-й участник решит \(j\)-ю задачу.

Рудольф понял, что порядок решения задач повлияет на итоговый результат. Например, если \(h = 120\), а время решения задач равны [\(20, 15, 110\)], тогда если Рудольф будет решать задачи в порядке:

  • \({3, 1, 2}\), то он успеет решить только третью задачу и получит \(1\) балл и \(110\) штрафных минут.
  • \({1, 2, 3}\), то первую задачу он решит через \(20\) минут после начала, вторую через \(20+15=35\) минут, а третью не успеет. Таким образом он получит \(2\) балла и \(20+35=55\) штрафных минут.
  • \({2, 1, 3}\), то вторую задачу он решит через \(15\) минут после начала, первую через \(15+20=35\) минут, а третью не успеет. Таким образом он получит \(2\) балла и \(15+35=50\) штрафных минут.

Рудольфу стало интересно какое место он займет на соревановании, если каждый участник будет решать задачи в оптимальном порядке исходя из предсказаний искусственного интеллекта. Будем считать, что при равенстве баллов и штрафных минут Рудольф займет наилучшее место.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных.

Далее следуют описания наборов.

Первая строка набора содержит три целых числа \(n, m, h\) (\(1 \le n \cdot m \le 2 \cdot 10^5, 1 \le h \le 10^6\)) — количество участников, количество задач и продолжительность соревнования, соответственно.

Далее идут \(n\) строк по \(m\) чисел \(t_{i, j}\) (\(1 \le t_{i, j} \le 10^6\)) — количество минут, за которое \(i\)-й участник решает \(j\)-ю задачу.

Сумма \(n \cdot m\) по всем наборам данным не превосходит \(2 \cdot 10^5\)

Выходные данные

Для каждого набора входных данных выведите целое число — место Рудольфа в таблице результатов, если все участники будут решать задачи в оптимальном порядке.

Примечание

В первом примере Рудольф наберет \(2\) балла и \(50\) штрафных минут. Второй участник решит только одну задачу и наберет \(1\) балл и \(90\) штрафных минут. И третий участник успеет решить все \(3\) задачи и наберет \(3\) балла и \(240\) штрафных минут. Таким образом Рудольф займет второе место.

Во втором примере оба наберут \(1\) балл и \(30\) штрафных минут. При равенстве баллов Рудольфу достается лучшая позиция, поэтому он займет первое место.

В третьем примере Рудольф единственный участник, поэтому он займет первое место.

В четвёртом примере все участники могут решить две задачи со штрафом в \(25 = 8 + (8 + 9)\), \(24 = 7 + (7 + 10)\) и \(26 = 8 + (8 + 10)\), соответственно, благодаря штрафу второй участник получит первое место, а Рудольф второе.

D. Рудольф и елочка

геометрия Конструктив математика *1200

Рудольф нарисиовал красивую елочку и решил распечатать рисунок. Но краска в картридже часто заканчивается в самый неподходящий момент. Поэтому Рудольф хочет заранее посчитать, сколько зеленой краски ему понадобится.

Елочка представляет собой вертикальный ствол, на котором на разной высоте располагаются одинаковые треугольные ветки. Толщина ствола пренебрежимо мала.

Каждая ветка представляет собой равнобедренный треугольник с основанием \(d\) и высотой \(h\), основание которого перпендикулярно стволу. Треугольники располагаются углом вверх, и ствол проходит ровно посередине. Основание \(i\)-го треугольника находится на высоте \(y_i\).

На рисунке изображен пример елочки с \(d = 4, h = 2\) и тремя ветками с основаниями в координатах \([1, 4, 5]\).

Помогите Рудольфу вычислить суммарную площадь веток елочки.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Далее следуют описания наборов.

Первая строка набора содержит три целых числа \(n, d, h\) (\(1 \le n, d, h \le 2 \cdot 10^5\)) — количество веток елочки, длина основания и высота веток, соответственно.

Вторая строка набора содержит \(n\) целых чисел \(y_i\) \((1 \le y_i \le 10^9, y_1 < y_2 < ... < y_n)\) — координаты оснований веток.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите одно вещественное число — суммарная площадь веток елочки. Ответ будет считаться правильным, если его абсолютная или относительная ошибка не превосходит \(10^{-6}\).

F. Рудольф и мимик

интерактив Конструктив реализация *1800

Это интерактивная задача.

Рудольф — ученый, изучающий инопланетную форму жизни. Перед Рудольфом находится комната, в которой раскидано \(n\) различных объектов. Среди объектов есть ровно одно поразительное существо — мимик, умеющий превращаться в любой объект. Он уже замаскировался в этой комнате и Рудольфу нужно найти его при помощи эксперимента.

Эксперимент проходит в несколько этапов. На каждом этапе происходит следующее:

  • Сначала Рудольф осматривает все объекты в комнате и записывает их типы. Тип каждого объекта обозначается цифрой, может быть несколько объектов одного типа.
  • После осмотра Рудольф может указать на объект, который по его мнению является мимиком. После этого эксперимент завершается. У Рудольфа есть только одна попытка, поэтому, если он не уверен в положении мимика, он вместо этого выполняет следующий пункт.
  • Рудольф может убрать любое количество объектов из комнаты(возможно ноль). Затем Рудольф выходит из комнаты и в это время все объекты, включая мимика, перемешиваются между собой, меняется их порядок, а мимик может превратиться в любой другой объект(даже в тот, которого нет в комнате).
  • После этого Рудольф возвращается в комнату и повторяет этап. Мимик может не изменять свой вид, но он не может оставаться тем же объектом больше двух этапов подряд.

Задача Рудольфа обнаружить мимика не более чем за пять этапов.

Входные данные

Первая строка содержит одно целое число \(t\) \((1 \le t \le 1000)\) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) \((2 \le n \le 200)\) — количество объектов в комнате.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1\),\(a_2\),...,\(a_n\) \((1 \le a_i \le 9)\) — типы объектов.

Протокол взаимодействия

После того, как вы считали описание набора входных данных, вы должны сделать не более чем \(5\) запросов. Считывание входных данных считается началом первого этапа, и мимик уже может начать изменяться.

Запрос является строкой. Первый символ строки означает тип запроса. Чтобы удалить объекты, выведите символ «-». После этого выведите число \(k\) — сколько объектов вы хотите убрать. После идут \(k\) чисел — номера объектов в их текущем расположении. Индексация начинается с единицы. Вы можете удалить мимика, но в таком случае вы не сможете указать на него и получите вердикт «Неправильный ответ».

В ответ на запрос придет строка, содержащая целые числа — оставшиеся в комнате объекты после удаления и перемешивания.

Чтобы указать положение мимика выведите символ «!», после этого выведите номер объекта, который является мимиком.

Задача будет считаться решенной, если положение мимика указано верно.

Если вы сделаете больше пяти запросов или сделаете некорректный запрос, решение получит вердикт «Неправильный ответ».

После вывода запроса или ответа не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Для взлома используйте следующий формат.

Первая строка содержит одно целое число \(t\) \((1 \le t \le 1000)\) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\), \(k\) (\(2 \le n \le 200, 1 \le k \le n\)) — количество объектов и позиция мимика.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1\), \(a_2\),...,\(a_n\) (\(1 \le a_i \le 9\)) — изначальный массив объектов.

Примечание

Пояснение к первому тесту: изначальный массив \(x_1\), \(x_2\), \(x_3\), \(x_4\), \(x_5\). Мимик находится на первой позиции.

  • Удаляем пятый объект. После этого позиция перемешиваются, и мимик выбрал не менять свой вид. Позиции объектов становятся \(x_4\), \(x_1\), \(x_2\), \(x_3\).
  • Удаляем третий объект. Мимик вынужден превратится в другой объект, потому что он уже два этапа находился в виде \(1\). Мимик выбрал превратиться в \(2\), объекты перемешиваются и становятся \(x_3\), \(x_4\), \(x_1\).
  • Удаляем первый и второй объекты. Позиции объектов становятся \(x_1\). Остается только мимик, и он остается объектом \(2\).
  • Указываем на первый объект.

D. Покраска массива

жадные алгоритмы Конструктив *1700

Дан массив из \(n\) целых чисел, каждое из которых — \(0\), \(1\) или \(2\). Изначально каждый элемент массива покрашен в синий цвет.

Ваша цель — покрасить все элементы в красный цвет. Для этого вы можете выполнять операции двух типов:

  • заплатить одну монету, выбрать синий элемент и покрасить его в красный цвет;
  • выбрать красный элемент, не равный \(0\), и соседний с ним синий элемент, уменьшить выбранный красный элемент на \(1\), а выбранный синий элемент покрасить в красный цвет.

Какое минимальное количество монет вам придется потратить, чтобы покрасить все элементы в красный?

Входные данные

В первой строке задано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Во второй строке заданы \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 2\)).

Выходные данные

Выведите одно целое число — минимальное количество монет, которое вам придется потратить, чтобы покрасить все элементы массива в красный цвет.

Примечание

В первом примере из условия можно покрасить все элементы в красный за одну монету следующим образом:

  1. покрасить \(2\)-й элемент в красный за одну монету;
  2. уменьшить \(2\)-й элемент на \(1\) и покрасить \(1\)-й элемент в красный;
  3. уменьшить \(2\)-й элемент на \(1\) и покрасить \(3\)-й элемент в красный.

Во втором примере из условия можно покрасить все элементы в красный за две монеты следующим образом:

  1. покрасить \(4\)-й элемент в красный за одну монету;
  2. уменьшить \(4\)-й элемент на \(1\) и покрасить \(3\)-й элемент в красный;
  3. покрасить \(1\)-й элемент в красный за одну монету;
  4. уменьшить \(3\)-й элемент на \(1\) и покрасить \(2\)-й элемент в красный.

A. Разговоры на эскалаторе

Конструктив математика Перебор *800

Однажды Владу в метро стало интересно, с кем из пассажиров он может поговорить на эскалаторе. Всего есть \(n\) пассажиров. На эскалаторе всего \(m\) ступенек, все ступеньки пронумерованы от \(1\) до \(m\) и \(i\)-я ступенька имеет высоту \(i \cdot k\).

Влад имеет рост \(H\) сантиметров. Два человека с ростом \(a\) и \(b\) могут поговорить на эскалаторе, если они стоят на разных ступеньках и разница в росте между ними равна разнице высот между ступеньками.

Например, если два человека имеют рост \(170\) и \(180\) сантиметров, и при этом \(m = 10, k = 5\) то они могут встать на ступеньки с номерами \(7\) и \(5\), тогда разница высот между ступеньками равна разнице в росте двух людей: \(k \cdot 2 = 5 \cdot 2 = 10 = 180 - 170\). Есть и другие возможные способы.

Дан массив \(h\) размера \(n\), \(h_i\) означает рост \(i\)-го человека. Владу интересно, со сколькими людьми он может поговорить на эскалаторе по отдельности.

Например, если \(n = 5, m = 3, k = 3, H = 11\), и \(h = [5, 4, 14, 18, 2]\). Влад сможет поговорить с человеком с ростом \(5\) (Влад встанет на ступеньку \(1\), а второй встанет на ступеньку с номером \(3\)) и с человеком с ростом \(14\) (например Влад может встать на ступеньку с номером \(3\), а второй встанет на ступеньку с номером \(2\)). С человеком с ростом \(2\) Влад не сможет поговорить, так как даже если они встанут на крайние ступени эскалатора, разница между ними будет \(6\), а их разница в росте составляет \(9\). С остальными людьми Влад не сможет поговорить на эскалаторе, таким образом, ответ для данного примера: \(2\).

Входные данные

В первой строке содержится единственное целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Далее следуют описания наборов входных данных.

В первой строке каждого набора записаны целые числа: \(n, m, k, H\) (\(1 \le n,m \le 50\), \(1 \le k,H \le 10^6\)). Где \(n\) — количество людей, \(m\) — количество ступенек, \(k\) — разница высот между соседними ступеньками, \(H\) — рост Влада.

Во второй строке записано \(n\) целых чисел: \(h_1, h_2, \ldots, h_n\) (\(1 \le h_i \le 10^6\)). \(h_i\) означает рост \(i\)-го человека.

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество человек, с которыми Влад сможет поговорить на эскалаторе по отдельности.

Примечание

Первый пример разобран в условии.

Во втором примере Влад сможет поговорить с человеком с ростом \(11\).

В третьем примере Влад сможет поговорить с людьми с ростом: \(44, 74, 98, 62\). Таким образом, ответ \(4\).

В четвертом примере Влад сможет поговорить с человеком с ростом \(73\).

B. Несбалансированные массивы

графы жадные алгоритмы Конструктив математика сортировки *1800

Ntarsis придумал массив \(a\) из \(n\) неотрицательных целых чисел.

Массив \(b\) из \(n\) целых чисел называется несбалансированным, если он удовлетворяет следующим условиям:

  • \(-n\le b_i\le n\), \(b_i \ne 0\),
  • не существует двух индексов \((i, j)\) (\(1 \le i, j \le n\)), таких что \(b_i + b_j = 0\),
  • для каждого \(1 \leq i \leq n\), существует ровно \(a_i\) индексов \(j\) (\(1 \le j \le n\)) таких, что \(b_i+b_j>0\), где \(i\) и \(j\) не обязательно различны.

Дан массив \(a\). Ntarsis хочет, чтобы вы построили любой несбалансированный массив. Помогите ему решить эту задачу или определите, что это невозможно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)).

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq n\)).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «NO», если не существует несбалансированного массива.

В противном случае выведите «YES». Затем, на следующей строке, выведите \(n\) целых чисел \(b_1, b_2, \ldots, b_n\), где \(b_i \neq 0\) для всех \(1 \leq i \leq n\) — допустимый несбалансированный массив.

Примечание

Для первого набора входных данных, \(b = [1]\) является допустимым несбалансированным массивом: для \(i = 1\) существует ровно одно \(j\) (\(j = 1\)), где \(b_1 + b_j > 0\).

Для второго набора можно показать, что не существует допустимого несбалансированного массива.

Для третьего набора, \(a = [0, 1, 0]\). Массив \(b = [-3, 1, -2]\) является допустимым несбалансированным массивом.

  • Для \(i = 1\) и \(i = 3\) не существует индекса \(j\) такого, что \(b_i + b_j > 0\).
  • Для \(i = 2\) существует только один индекс \(j = 2\), такой что \(b_i + b_j > 0\) (\(b_2 + b_2 = 1 + 1 = 2\)).
Другой возможный ответ на третий пример — \(b = [-2, 1, -3]\).

D. Мириан и спички

дп жадные алгоритмы Конструктив *2800

Спички Мириана представляют собой таблицу размером \(2 \times n\), которую необходимо заполнить символами A или B.

Он уже заполнил первую строку таблицы и хотел бы, чтобы вы заполнили вторую строку. Вы должны сделать это таким образом, чтобы количество пар соседних клеток, имеющих различные буквы\(^\dagger\) было равно \(k\). Если это невозможно, сообщите об этом.

\(^\dagger\) Пара соседних клеток, имеющая различные буквы — это пара ячеек \((r_1, c_1)\) и \((r_2, c_2)\) (\(1 \le r_1, r_2 \le 2\), \(1 \le c_1, c_2 \le n\)), таких что \(|r_1 - r_2| + |c_1 - c_2| = 1\) и символы в \((r_1, c_1)\) и \((r_2, c_2)\) различаются.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \leq n \leq 2 \cdot 10^5, 0 \leq k \leq 3 \cdot n\)) — количество столбцов спички и требуемое количество пар соседних клеток, имеющих различные буквы.

Вторая строка каждого набора содержит строку \(s\) из \(n\) символов (\(s_i\) может быть либо A, либо B) — верхняя строка спички Мирианы.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора, если нет способа заполнить вторую строку так, чтобы количество пар соседних клеток, имеющих различные буквы, было равно \(k\), выведите «NO».

В противном случае выведите «YES». Затем выведите \(n\) символов, которые представляют собой допустимую нижнюю строку для спички Мириана. Если есть несколько ответов, выведите любой из них.

Примечание

В первом наборе можно доказать, что нет возможного способа заполнить \(2\) строку сетки так, чтобы \(k = 1\).

Для второго теста BABB — один из возможных ответов.

Таблица ниже является результатом заполнения BABB второй строкой.

\(\begin{array}{|c|c|} \hline A & A & A & A \cr \hline B & A & B & B \cr \hline \end{array}\)

Пары различных символов следующие:

\(\begin{array}{|c|c|} \hline \color{red}{A} & A & A & A \cr \hline \color{red}{B} & A & B & B \cr \hline \end{array}\)

—————————————————

\(\begin{array}{|c|c|} \hline A & A & \color{red}{A} & A \cr \hline B & A & \color{red}{B} & B \cr \hline \end{array}\)

—————————————————

\(\begin{array}{|c|c|} \hline A & A & A & \color{red}{A} \cr \hline B & A & B & \color{red}{B} \cr \hline \end{array}\)

—————————————————

\(\begin{array}{|c|c|} \hline A & A & A & A \cr \hline \color{red}{B} & \color{red}{A} & B & B \cr \hline \end{array}\)

—————————————————

\(\begin{array}{|c|c|} \hline A & A & A & A \cr \hline B & \color{red}{A} & \color{red}{B} & B \cr \hline \end{array}\)

Всего \(5\) пар, что равняется \(k\).

E. Соперничества

жадные алгоритмы Конструктив Структуры данных *3400

У Ntarsis есть массив \(a\) длины \(n\).

Мощность подотрезка \(a_l \dots a_r\) (\(1 \leq l \leq r \leq n\)) определяется следующим образом:

  • Наибольшее значение \(x\), такое что \(a_l \dots a_r\) содержит \(x\), и ни \(a_1 \dots a_{l-1}\), ни \(a_{r+1} \dots a_n\) не содержат \(x\).
  • Если такого \(x\) не существует, мощность равна \(0\).

Массив \(b\) называется соперником для \(a\), если выполняются следующие условия:

  • Длина и \(a\), и \(b\) равна \(n\).
  • Для всех \(l, r\), где \(1 \leq l \leq r \leq n\), мощность \(a_l \dots a_r\) равна мощности \(b_l \dots b_r\).
  • Элементы \(b\) являются положительными числами.

Ntarsis хочет найти соперника \(b\) для \(a\) такого, что сумма \(b_i\) (\(1 \leq i \leq n\)) будет максимальной. Помогите ему с этой задачей!

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \leq n \leq 10^5\)).

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) — допустимого соперника для \(a\) такого, что сумма \(b_1 + b_2 + \cdots + b_n\) будет максимальной.

Если существует несколько соперников с максимальной суммой, выведите любого из них.

Примечание

Для первого набора одним из соперников с максимальной суммой является \([2, 4, 2, 3, 3]\).

Можно показать, что \([2, 4, 2, 3, 3]\) является соперником для \([1, 4, 1, 3, 3]\).

Ниже перечислены все возможные подмассивы \(a\) и \(b\) и их соответствующие мощности:

  • Мощность \(a[1:1] = [1] = 0\), мощность \(b[1:1] = [2] = 0\).
  • Мощность \(a[1:2] = [1, 4] = 4\), мощность \(b[1:2] = [2, 4] = 4\).
  • Мощность \(a[1:3] = [1, 4, 1] = 4\), мощность \(b[1:3] = [2, 4, 2] = 4\).
  • Мощность \(a[1:4] = [1, 4, 1, 3] = 4\), мощность \(b[1:4] = [2, 4, 2, 3] = 4\).
  • Мощность \(a[1:5] = [1, 4, 1, 3, 3] = 4\), мощность \(b[1:5] = [2, 4, 2, 3, 3] = 4\).
  • Мощность \(a[2:2] = [4] = 4\), мощность \(b[2:2] = [4] = 4\).
  • Мощность \(a[2:3] = [4, 1] = 4\), мощность \(b[2:3] = [4, 2] = 4\).
  • Мощность \(a[2:4] = [4, 1, 3] = 4\), мощность \(b[2:4] = [4, 2, 3] = 4\).
  • Мощность \(a[2:5] = [4, 1, 3, 3] = 4\), мощность \(b[2:5] = [4, 2, 3, 3] = 4\).
  • Мощность \(a[3:3] = [1] = 0\), мощность \(b[3:3] = [2] = 0\).
  • Мощность \(a[3:4] = [1, 3] = 0\), мощность \(b[3:4] = [2, 3] = 0\).
  • Мощность \(a[3:5] = [1, 3, 3] = 3\), мощность \(b[3:5] = [2, 3, 3] = 3\).
  • Мощность \(a[4:4] = [3] = 0\), мощность \(b[4:4] = [3] = 0\).
  • Мощность \(a[4:5] = [3, 3] = 3\), мощность \(b[4:5] = [3, 3] = 3\).
  • Мощность \(a[5:5] = [3] = 0\), мощность \(b[5:5] = [3] = 0\).

Можно показать, что не существует соперника с большей суммой, чем \(2 + 4 + 2 + 3 + 3 = 14\).

A1. Dual (простая версия)

Конструктив математика *1400

Единственное различие между двумя версиями этой задачи — ограничение на максимальное количество операций. Делать взломы можно только в том случае, если решены обе версии задачи.

Вам дан массив \(a_1, a_2,\dots, a_n\) целых чисел (положительных, отрицательных или \(0\)). Вы можете выполнить над массивом несколько операций (возможно, \(0\)).

Операция производится так: выбираются \(i, j\) (\(1 \leq i, j \leq n\), они могут быть равны) и задается \(a_i := a_i + a_j\) (т.е. к \(a_i\) прибавляется \(a_j\)).

Сделайте массив неубывающим (т.е. \(a_i \leq a_{i+1}\) для \(1 \leq i \leq n-1\)) не более чем за \(50\) операций. Минимизировать количество операций не требуется.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 20\)) — длину массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-20 \le a_i \le 20\)) — массив перед выполнением операций.

Выходные данные

Для каждого набора входных данных выведите свои операции в следующем формате:

Первая строка должна содержать целое число \(k\) (\(0 \le k \le 50\)) — количество операций.

Следующие \(k\) строк представляют собой \(k\) операций по порядку. Каждая из этих \(k\) строк должна содержать два целых числа \(i\) и \(j\) (\(1 \leq i, j \leq n\)) — соответствующая операция заключается в прибавлении \(a_j\) к \(a_i\).

После всех операций массив \(a_1, a_2,\dots, a_n\) должен быть неубывающим.

Примечание

В первом наборе входных данных, добавив к \(a_2\) \(a_1 = 2\), получим массив \([2, 3]\), который является неубывающим.

Во втором наборе входных данных массив изменяется следующим образом:

  • \([1, 2, -10, 3]\)
  • \([1, 2, -10, 6]\)
  • \([1, 2, -10, 12]\)
  • \([1, 2, 2, 12]\)

В третьем наборе входных данных итоговый массив имеет вид \([2, 3, 3, 3, 3]\).

A2. Dual (сложная версия)

Конструктив математика *1900

Единственное различие между двумя версиями этой задачи — ограничение на максимальное количество операций. Делать взломы можно только в том случае, если решены обе версии задачи.

Вам дан массив \(a_1, a_2,\dots, a_n\) целых чисел (положительных, отрицательных или \(0\)). Вы можете выполнить над массивом несколько операций (возможно, \(0\)).

Операция производится так: выбираются \(i, j\) (\(1 \leq i, j \leq n\), они могут быть равны) и задается \(a_i := a_i + a_j\) (т.е. к \(a_i\) прибавляется \(a_j\)).

Сделайте массив неубывающим (т.е. \(a_i \leq a_{i+1}\) для \(1 \leq i \leq n-1\)) не более чем за \(31\) операций. Минимизировать количество операций не требуется.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 20\)) — длину массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-20 \le a_i \le 20\)) — массив перед выполнением операций.

Выходные данные

Для каждого набора входных данных выведите свои операции в следующем формате:

Первая строка должна содержать целое число \(k\) (\(0 \le k \le 31\)) — количество операций.

Следующие \(k\) строк представляют собой \(k\) операций по порядку. Каждая из этих \(k\) строк должна содержать два целых числа \(i\) и \(j\) (\(1 \leq i, j \leq n\)) — соответствующая операция заключается в прибавлении \(a_j\) к \(a_i\).

После всех операций массив \(a_1, a_2,\dots, a_n\) должен быть неубывающим.

Примечание

В первом наборе входных данных, добавив к \(a_2\) \(a_1 = 2\), получим массив \([2, 3]\), который является неубывающим.

Во втором наборе входных данных массив изменяется следующим образом:

  • \([1, 2, -10, 3]\)
  • \([1, 2, -10, 6]\)
  • \([1, 2, -10, 12]\)
  • \([1, 2, 2, 12]\)

В третьем наборе входных данных итоговый массив имеет вид \([2, 3, 3, 3, 3]\).

E. Комплекты игр

дп жадные алгоритмы Конструктив математика Перебор *3000

Риши разрабатывает игры в 2D-метаверсе и хочет предлагать своим клиентам комплекты игр. Каждая игра имеет соответствующее значение удовольствия. Комплект игр состоит из подмножества игр, суммарное удовольствие которых составляет \(60\).

Ваша задача — выбрать \(k\) игр, где \(1 \leq k \leq 60\), и соответствующие им значения удовольствия \(a_1, a_2, \dots, a_k\) таким образом, чтобы сформировать ровно \(m\) различных комплектов игр.

Входные данные

На вход подается одно целое число \(m\) (\(1 \le m \le 10^{10}\)) — желаемое количество комплектов игр.

Выходные данные

Первая строка должна содержать целое число \(k\) (\(1 \le k \le 60\)) — количество игр.

Вторая строка должна содержать \(k\) целых чисел, \(a_1, a_2, \dots, a_k\) (\(1 \le a_1, a_2, \dots, a_k \le 60\)) — значения удовольствия данных \(k\) игр.

Примечание

В первом примере любое подмножество размера \(3\) является комплектом игр. Таких подмножеств \(4\).

C. Очередная задача на перестановки

жадные алгоритмы Конструктив математика теория чисел *1000

Леше подарили новую игру «НОД-перестановки». Каждый раунд этой игры проходит следующим образом:

  • Сначала Леша выбирает перестановку\(^{\dagger}\) \(a_1, a_2, \ldots, a_n\) целых чисел от \(1\) до \(n\).
  • После этого для всех \(i\) от \(1\) до \(n\) вычисляется целое число \(d_i = \gcd(a_i, a_{(i \bmod n) + 1})\).
  • Счёт раунда равен количеству различных чисел среди \(d_1, d_2, \ldots, d_n\).

Лёша уже сыграл несколько раундов и ему захотелось найти такую перестановку \(a_1, a_2, \ldots, a_n\), что его счёт будет максимально возможным.

Напомним, что \(\gcd(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\), а \(x \bmod y\) обозначает остаток от деления \(x\) на \(y\).

\(^{\dagger}\)Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Первая строка входных данных содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит целое число \(n\) (\(2 \le n \le 10^5\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) различных целых чисел \(a_{1},a_{2},\ldots,a_{n}\) (\(1 \le a_i \le n\)) — искомую перестановку.

Если существует несколько перестановок, на которых достигается максимальный счёт, вы можете вывести любую.

Примечание

В первом наборе входных данных Леше надо найти перестановку чисел от \(1\) до \(5\). Для перестановки \(a=[1,2,4,3,5]\) массив \(d\) равен \([1,2,1,1,1]\). Он содержит \(2\) различных числа, что является максимумом среди всех перестановок из \(5\) чисел. Существуют и другие ответы для этого набора входных данных.

Во втором наборе входных данных Леше надо найти перестановку чисел от \(1\) до \(2\). Всего существует две такие перестановки — \(a=[1,2]\) и \(a=[2,1]\). В обоих случаях массив \(d\) равен \([1,1]\), поэтому обе перестановки являются корректным ответом.

В третьем наборе входных данных Леше надо найти перестановку чисел от \(1\) до \(7\). Для перестановки \(a=[1,2,3,6,4,5,7]\) массив \(d\) равен \([1,1,3,2,1,1,1]\). Он содержит \(3\) различных числа, а значит и счёт раунда с такой перестановкой равен \(3\). Можно показать, что не существует перестановки чисел от \(1\) до \(7\), счёт которой будет больше \(3\).

A. Вместе мы сила

Конструктив математика теория чисел *800

Дан массив \(a\) длины \(n\), содержащий целые числа. Также есть два изначально пустых массива \(b\) и \(c\). Вам нужно каждый элемент массива \(a\) добавить ровно в один из массивов \(b\) или \(c\), чтобы выполнялись следующие условия:

  • Каждый из массивов \(b\) и \(c\) непустой. Более формально, пусть \(l_b\) — длина массива \(b\), \(l_c\) — длина массива \(c\). Тогда \(l_b, l_c \ge 1\).
  • Для любых двух индексов \(i\) и \(j\) (\(1 \le i \le l_b, 1 \le j \le l_c\)) число \(c_j\) не является делителем \(b_i\).

Выведите массивы \(b\) и \(c\), которые могут получиться, или выведите \(-1\), если их не существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке содержится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 100\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива \(a\).

Выходные данные

Для каждого набора входных данных выведите одно целое число \(-1\), если решения не существует.

Иначе, в первой строке выведите два целых числа \(l_b\) и \(l_c\) — длины массивов \(b\) и \(c\) соответственно.

Во второй строке выведите \(l_b\) целых чисел \(b_1, b_2, \ldots, b_{l_b}\) — элементы массива \(b\).

В третьей строке выведите \(l_c\) целых чисел \(c_1, c_2, \ldots, c_{l_c}\) — элементы массива \(c\).

Если существует несколько возможных решений, выведите любое из них. Элементы массивов можно выводить в любом порядке.

Примечание

В первом наборе входных данных решения не существует.

Во втором наборе входных данных мы можем получить \(b = [1, 3, 5]\) и \(c = [2, 4]\). Тогда элементы \(2\) и \(4\) не делят элементы \(1, 3\) и \(5\).

В пятом наборе входных данных мы можем получить \(b = [4, 8, 4]\) и \(c = [12, 12]\).

B. Оля и игра с массивами

жадные алгоритмы Конструктив математика сортировки *1000

Артём предложил девочке Оле сыграть в следующую игру. Есть список из \(n\) массивов, \(i\)-й массив содержит \(m_i \ge 2\) целых положительных чисел \(a_{i,1}, a_{i,2}, \ldots, a_{i,m_i}\).

Оля может переместить из каждого массива не более одного (возможно, \(0\)) числа в другой массив. Обратите внимание, перемещать числа из одного массива можно не более одного раза, однако добавлять числа в один массив можно несколько раз, а также, все перемещения выполняются одновременно.

Назовем красотой списка массивов величину \(\sum_{i=1}^n \min_{j=1}^{m_i} a_{i,j}\). Иными словами, для каждого массива мы находим значение минимального элемента в нём, после чего суммируем получившиеся значения.

Суть игры — сделать красоту списка массивов максимально возможной. Помогите Оле победить в этой нелегкой игре!

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 25000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора данных содержит одно целое число \(n\) (\(1 \le n \le 25000\)) — количество массивов в списке.

Далее следуют описания массивов. Каждое описание массива состоит из двух строк.

Первая строка содержит одно целое число \(m_i\) (\(2 \le m_i \le 50000\)) — количество чисел в \(i\)-м массиве.

В следующей строке даны \(m_i\) целых чисел \(a_{i, 1}, a_{i, 2}, \ldots, a_{i, m_i}\) (\(1 \le a_{i,j} \le 10^9\)) — элементы \(i\)-го массива.

Гарантируется, что сумма \(m_i\) по всем наборам входных данных не превосходит \(50000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальную красоту списка массивов, которую Оля может получить.

Примечание

В первом наборе входных данных можно переместить число \(3\) из второго массива в первый. Тогда красота равна \(\min(1, 2, 3) + \min(4) = 5\). Можно показать, что это максимально возможная красота.

Во втором наборе входных данных есть всего один массив, поэтому независимо от перемещений красота равна \(\min(100, 1, 6) = 1\).

A. Не подстрока

Конструктив Строки *900

Скобочная последовательность — это строка из символов «(» и/или «)». Правильная скобочная последовательность — это скобочная последовательность, которую можно превратить в корректное арифметическое выражение, вставив символы «1» и «+» между исходными символами. Например:

  • скобочные последовательности «()()» и «(())» — правильные (из них можно получить выражения «(1)+(1)» и «((1+1)+1)», соответственно);
  • скобочные последовательности «)(», ( и ) — неправильные.

Вам задана скобочная последовательность \(s\); обозначим ее длину за \(n\). Вы должны найти такую правильную скобочную последовательность \(t\) длины \(2n\), что \(s\) не входит в \(t\) как непрерывная подстрока, или сказать, что это невозможно.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Единственная строка каждого набора содержит строку \(s\) (\(2 \le |s| \le 50\)), состоящую из символов «(» и/или «)».

Выходные данные

Для каждого набора входных данных выведите ответ на него. Если требуемой правильной скобочной последовательности не существует, выведите NO в отдельной строке. В противном случае выведите YES в первой строке, а во второй строке выведите требуемую правильную скобочную последовательность \(t\). Если ответов несколько — выведите любой из них.

A. Простое удаление

Конструктив математика *800

Простое число — это положительное целое число, у которого ровно два различных положительных делителя: \(1\) и само число. Например, \(2\), \(3\), \(13\) и \(101\) — простые числа; \(1\), \(4\), \(6\) и \(42\) не являются простыми числами.

Вам задана последовательность цифр от \(1\) до \(9\), в которой каждая цифра от \(1\) до \(9\) встречается ровно один раз.

Вы можете применять следующую операцию несколько (возможно, ноль) раз: выбрать любую цифру из последовательности и удалить ее. Однако вы не можете применять эту операцию, если в последовательности осталось только две цифры.

Ваша цель — получить последовательность цифр, являющуюся простым числом. Обратите внимание, что менять порядок цифр нельзя.

Выведите итоговую последовательность или сообщите, что получить простое число описанными в условии операциями невозможно.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей \(9\) цифр (без символов-разделителей между ними). Каждая цифра от \(1\) до \(9\) входит в эту строку ровно один раз.

Выходные данные

Для каждого набора входных данных выведите ответ в отдельной строке следующим образом:

  • если невозможно получить простое число описанными в условии операциями, выведите \(-1\);
  • иначе выведите любую последовательность цифр, которая соответствует простому числу и которую можно получить, проведя описанную в условии операцию несколько (возможно, ноль) раз. Если есть несколько различных последовательностей, выведите любую из них.

B. Две бинарных строки

дп жадные алгоритмы Конструктив *1000

Вам даны две строки \(a\) и \(b\) одинаковой длины, состоящих только из символов 0 и/или 1; обе строки начинаются с символа 0 и заканчиваются символом 1.

Вы можете применять следующую операцию любое количество раз (возможно ноль раз):

  • выбрать какую-то строку и два равных символа в ней; затем превратить все символы между этими двумя в эти символы.

Формально, вы выбираете одну из двух строк (обозначим ее как \(s\)), затем выбираете два символа \(l\) и \(r\), такие, что \(1 \le l < r \le |s|\) и \(s_l = s_r\), затем заменяете все символы \(s_i\), такие что \(l < i < r\) на \(s_l\).

Например, если выбранная строка это 010101, вы можете превратить ее в описанные ниже строки за одну операцию:

  • 000101, если выберете \(l = 1\) и \(r = 3\);
  • 000001, если выберете \(l = 1\) и \(r = 5\);
  • 010001, если выберете \(l = 3\) и \(r = 5\);
  • 010111, если выберете \(l = 4\) и \(r = 6\);
  • 011111, если выберете \(l = 2\) и \(r = 6\);
  • 011101, если выберете \(l = 2\) и \(r = 4\).

Вам нужно определить, можно ли сделать эти две строки одинаковыми при помощи применения к ним любого количества описанной выше операции.

Входные данные

Первая строка содержит одно число \(t\) (\(1 \le t \le 2000\))  — количество наборов входных данных.

Каждый набор входных данных содержит две строки:

  • в первой содержится строка \(a\) (\(2 \le |a| \le 5000\)), состоящая только из символов 0 и/или 1.
  • во второй содержится строка \(b\) (\(2 \le |b| \le 5000\)), состоящая только из символов 0 и/или 1.

Дополнительные ограничения на входные данные:

  • в каждом наборе входных данных \(|a| = |b|\) (строки имеют одинаковую длину);
  • в каждом наборе данных любая из двух строк начинается с символа 0 и заканчивается символом 1;
  • суммарная длина строк \(a\) по всем наборам входных данных не превосходит \(5000\).
Выходные данные

Для каждого набора входных данных выведите YES, если возможно сделать строки равными. Иначе выведите NO. Символы в ответе могут быть в любом регистре.

Примечание

В первом наборе входных данных мы можем выполнить следующие операции:

  1. выбрать строку \(a\), \(l = 2\), \(r = 4\); после этой операции \(a\) равна 01110001, \(b\) равна 01110101;
  2. выбрать строку \(b\), \(l = 5\), \(r = 7\); после этой операции \(a\) равна 01110001, \(b\) равна 01110001.

Во втором наборе входных данных строки уже равны.

В третьем наборе входных данных мы можем выполнить следующие операции:

  1. выбрать строку \(a\), \(l = 4\), \(r = 6\); после этой операции \(a\) равна 000111, \(b\) равна 010111;
  2. выбрать строку \(b\), \(l = 1\), \(r = 3\); после этой операции \(a\) равна 000111, \(b\) равна 000111;

В четвертом и пятом наборах входных данных невозможно сделать строки равными.

B. Игра в последовательность

Конструктив *800

Тёма и Вика играют в следующую игру.

Сперва Вика придумывает последовательность натуральных чисел \(a\) длины \(m\) и выписывает её на листочек. Затем она берёт новый листочек и выписывает на него последовательность \(b\) по следующему правилу:

  • Сначала выписывается \(a_1\)
  • Затем только такие \(a_i\) (\(2 \le i \le m\)), что \(a_{i - 1} \le a_i\), обозначим длину этой последовательности как \(n\).

Так, например из последовательности \(a=[4, 3, 2, 6, 3, 3]\), Вика получит последовательность \(b=[4, 6, 3]\).

После чего она отдаёт листочек с последовательностью \(b\) Тёме. Он в свою очередь пытается угадать последовательность \(a\).

Тёма считает победу в такой игре очень маловероятной, но всё же хочет найти хотя бы одну последовательность \(a\), которая могла бы быть изначально загадана Викой. Помогите ему и выведите любую такую последовательность.

Обратите внимание, что длина выводимой вами последовательности не должна превышать последовательность из входных данных более, чем в два раза.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке входных данных содержится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержится единственное целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина последовательности \(b\).

Во второй строке набора содержатся \(n\) натуральных чисел \(b_1, b_2, b_3, \dots, b_n\) (\(1 \le b_i \le 10^9\)) — элементы последовательности.

Cумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите две строки. В первой из них выведите одно натуральное число \(m\) — длину последовательности (\(n \le m \le 2 \cdot n\)). Во второй строке выведите \(m\) натуральных чисел \(a_1, a_2, a_3, \dots, a_m\) (\(1 \le a_i \le 10^9\)) — предполагаемая последовательность, которую Вика могла записать на первом листочке.

Если существует несколько подходящих последовательностей, вы можете вывести любую из них.

Примечание

Первый пример разобран в условии.

Во втором примере, Вика могла загадать исходную последовательность.

D. Шарики мороженого

Бинарный поиск Комбинаторика Конструктив математика *1300

Тёма решил увлечься приготовлением мороженого. Он достаточно преуспел в этом деле и научился хорошо делать мороженое в рожке ровно из двух шариков.

До увлечения мороженым Тёма увлекался математикой. Поэтому он заинтересовался, какое минимальное количество шариков ему нужно иметь, чтобы из них можно было приготовить ровно \(n\) различных видов мороженого.

Шарики мороженого бывают разных вкусов: \(1, 2, 3, \dots\). Тёма может приготовить мороженое из двух шариков любого вкуса (возможно, одинакового).

Два мороженых считаются различными, если множества вкусов их шариков отличаются. Например \(\{1, 2\} = \{2, 1\}\), но \(\{1, 1\} \neq \{1, 2\}\).

Например, имея следующие шарики мороженого: \(\{1, 1, 2\}\), можно приготовить всего два вида мороженого: \(\{1, 1\}\) и \(\{1, 2\}\).

Обратите внимание, что Теме не нужно делать все стаканчики мороженого одновременно. Это означает, что он делает стаканчики мороженого независимо друг от друга. Также, чтобы сделать следующий стаканчик \(\{x, x\}\) для некоторого \(x\), Теме нужно иметь как минимум \(2\) шарика типа \(x\).

Помогите Тёме ответить на этот вопрос. Можно показать, что ответ всегда существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке входных содержится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержится единственное целое число \(n\) (\(1 \le n \le 10^{18}\)) — количество видов мороженого, которое хочет получить Тёма.

Выходные данные

Для каждого набора входных данных выведите единственное число — минимальное количество шариков, которое необходимо купить Тёме.

Примечание

В первом примере достаточно иметь следующие типы шариков: \(\{1, 1\}\). Обратите внимание, что множество \(\{1\}\) недостаточно, так как нам нужно как минимум \(2\) шарика типа \(1\), чтобы сделать такой стаканчик \(\{1, 1\}\).

Во втором примере невозможно сделать это с \(2\) шариками, но это можно сделать с помощью следующих шариков: \(\{1, 2, 3\}\).

В третьем примере оптимальным ответом является \(\{1, 2, 3, 4\}\), поэтому мы можем получить следующие стаканчики мороженого: \(\{1, 2\}\), \(\{1, 3\}\), \(\{1, 4\}\), \(\{2, 3\}\), \(\{2, 4\}\), \(\{3, 4\}\).

E. Коля и кинотеатр

жадные алгоритмы Конструктив Структуры данных *1600

Недавно Коля узнал, что скоро в его городе откроется новый кинотеатр, который будет показывать новый фильм каждый день на протяжении \(n\) дней. Так, в день номер \(1 \le i \le n\), кинотеатр покажет премьеру \(i\)-го фильма. Коля узнал расписание фильмов и сопоставил каждому фильму его интересность — целую величину \(a_i\).

Однако даже самые интересные фильмы не будут казаться такими, если фильмы долго не смотреть, поэтому интересность очередного фильма снизится на \(d \cdot cnt\), где \(d\) — заранее определенная величина, а \(cnt\) — кол-во дней с последнего посещения кинотеатра. Также известно, что Коля успел посетить другой кинотеатр за день до открытия нового — в день номер \(0\). Так, если мы впервые посетим кинотеатр в день с номером \(i\), то \(cnt\) — кол-во дней с последнего посещения кинотеатра будет равно \(i\).

Так, например, если \(d = 2\), а \(a = [3, 2, 5, 4, 6]\), то посетив фильмы с номерами \(1\) и \(3\), значение \(cnt\) для дня номер \(1\) будет равно \(1 - 0 = 1\), а значение \(cnt\) для дня номер \(3\) будет равно \(3 - 1 = 2\), так суммарная интересность фильмов будет \(a_1 - d \cdot 1 + a_3 - d \cdot 2 = 3 - 2 \cdot 1 + 5 - 2 \cdot 2 = 2\).

К несчастью, у Коли есть время только на то, чтобы посетить не более \(m\) фильмов. Помогите ему составить план посещения кинотеатра так, чтобы суммарная интересность всех посещенных им фильмов была максимальна.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\) и \(d\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le m \le n\), \(1 \le d \le 10^9\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — интересность фильмов.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное число — максимальную суммарную интересность просмотренных фильмов.

Примечание

Первый пример разобран в условии.

Во втором примере, оптимально не посещать никакие фильмы.

В третьем наборе входных данных оптимально посетить фильмы с номерами \(2\), \(3\), \(5\), \(6\), тогда суммарная интересность посещенных фильмов составит \(45 - 6 \cdot 2 + 1 - 6 \cdot 1 + 39 - 6 \cdot 2 + 11 - 6 \cdot 1 = 60\).

D. Двухцветные доминошки

жадные алгоритмы Конструктив *1400

Доска \(n\times m\) разделена на клетки. На этой доске также расположено несколько доминошек. Каждая доминошка покрывает две соседние клетки (то есть две клетки с общей стороной), и никакие две доминошки не пересекаются.

Пит считает, что эта доска очень скучная и что её надо покрасить. Он покрасит клетки доминошек в чёрный и белый цвета. Полученную раскраску он назовёт красивой, если будут выполнены все следующие условия:

  • у каждой доминошки одна клетка покрашена в чёрный цвет, а другая — в белый;
  • для каждой строки число чёрных клеток в этой строке равно числу белых клеток в этой строке;
  • для каждого столбца число чёрных клеток в этом столбце равно числу белых клеток в этом столбце.

Заметьте, что клетки, не покрытые доминошками, не покрашены вовсе и не считаются ни чёрными, ни белыми.

Помогите Питу получить красивую раскраску или скажите, что это невозможно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2\le n, m\le 500\)).

Следующие \(n\) строк описывают покрытие доски доминошками, ряд за рядом сверху вниз. Каждая из этих строк содержит \(m\) символов, описывающих клетки в соответствующем ряду слева направо. Каждый символ равен U, D, L, R или ., если клетка покрыта верхней, нижней, левой, правой половиной доминошки или не покрыта доминошкой, соответственно. Гарантируется, что заданное покрытие корректно.

Гарантируется, что сумма значений \(n \cdot m\) по всем наборам входных данных не превосходит \(250\,000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число \(-1\), eсли красивой раскраски не существует. В противном случае выведите \(n\) строк, каждая из которых состоит из \(m\) символов и описывает цвета клеток в соответствующем ряду красивой раскраски. Каждый символ, соответствующий клетке, не покрытой доминошками, должен равняться . (точке), а каждый другой символ должен быть равен B, если соответствующая клетка чёрная, или W, если она белая.

Если существует несколько решений, выведите любое из них.

Примечание

Ответ к первому набору входных данных изображён ниже:

Во втором наборе входных данных не существует правильной раскраски клеток.

I. Избыточные маршруты

Деревья дп Конструктив *3500

Дано дерево из \(n\) вершин, пронумерованных числами \(1, 2, \ldots, n\). Длина простого пути в дереве равна числу вершин в нём.

Вам нужно выбрать некоторое множество простых путей длины хотя бы \(2\) каждый, причём нельзя одновременно выбрать два разных пути, один из которых содержится в другом. Найдите наибольший возможный размер такого множества.

Формально, множество вершин \(S\) называется маршрутом, если в нём по крайней мере две вершины, при этом оно является множеством вершин некоторого простого пути в дереве. Набор попарно различных маршрутов называется расписанием. Маршрут \(S\) в расписании \(T\) называется избыточным, если есть какой-то другой маршрут \(S' \in T\), такой что \(S \subset S'\). Расписание называется эффективным, если в нём нет избыточных маршрутов. Найдите наибольшее возможное количество маршрутов в эффективном расписании.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 3000\)).

Далее следуют \(n - 1\) строк, \(i\)-я из которых содержит два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\), \(u_i \neq v_i\)) — номера вершин, соединённых \(i\)-м ребром.

Гарантируется, что заданные ребра образуют дерево.

Выходные данные

Выведите единственное число — ответ на задачу.

Примечание

В первом примере возможными эффективными расписаниями являются \(\{\{1, 2\}, \{1, 3\}, \{1, 4\}\}\) и \(\{\{1, 2, 3\}, \{1, 2, 4\}, \{1, 3, 4\}\}\).

Во втором примере можно выбрать \(\{ \{1, 2, 3\}, \{2, 3, 4\}, \{3, 4, 6\}, \{2, 3, 5\}, \{3, 4, 5\}, \{3, 4, 7\}, \{4, 6, 7\}\}\).

A. Возрастание и убывание

жадные алгоритмы Конструктив математика реализация *800

Даны три целых числа \(x\), \(y\), и \(n\).

Вам нужно построить массив \(a\), состоящий из \(n\) целых чисел, который удовлетворял бы следующим условиям:

  1. \(a_1=x\), \(a_n=y\);
  2. \(a\) строго возрастает (т.е. \(a_1 < a_2 < \ldots < a_n\));
  3. если обозначать \(b_i=a_{i+1}-a_{i}\) для всех \(1 \leq i \leq n-1\), то \(b\) строго убывает (т.е. \(b_1 > b_2 > \ldots > b_{n-1}\)).

Если искомого массива \(a\) не существует, выведите одно целое число \(-1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит три целых числа \(x\), \(y\), \(n\) (\(1 \le x < y \le 1000,3 \le n \le 1000\)).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(a_1,a_2,\ldots,a_n\). Если существует несколько решений, выведите любое из них.

Если решения не существует, выведите одно целое число \(-1\).

Примечание

В первом наборе входных данных \(a=[1,3,4]\), и этот массив строго возрастает. Далее, \(b_1=a_2-a_1=3-1=2\), \(b_2=a_3-a_2=4-3=1\), так что \(b=[2,1]\), и этот массив строго убывает.

Во втором наборе входных данных, не существует такого массива \(a\), который удовлетворял был всем вышеописанным условиям.

B. Обмен и разворот

жадные алгоритмы Конструктив сортировки Строки *1100

Дана строка \(s\) длины \(n\), состоящая из строчных латинских букв, а также целое число \(k\). За один шаг вы можете выполнить одну любую операцию из следующих двух:

  • Выбрать индекс \(i\) (\(1 \le i \le n - 2\)), затем поменять местами \(s_{i}\) и \(s_{i+2}\).
  • Выбрать индекс \(i\) (\(1 \le i \le n-k+1\)), затем развернуть порядок следования букв на отрезке \([i,i+k-1]\) строки. Формально, если строка в текущий момент равна \(s_1\ldots s_{i-1}s_is_{i+1}\ldots s_{i+k-2}s_{i+k-1}s_{i+k}\ldots s_{n-1}s_n\), то она заменяется на \(s_1\ldots s_{i-1}s_{i+k-1}s_{i+k-2}\ldots s_{i+1}s_is_{i+k}\ldots s_{n-1}s_n\).

Вы можете сделать произвольное (возможно, нулевое) число шагов. Найдите лексикографически наименьшую строку, которую можно получить после какого-либо числа шагов.

Строка \(a\) лексикографически меньше строки \(b\) такой же длины, если выполняется следующее:

  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k < n \le 10^5\)).

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(n\), состоящую из строчных латинских букв.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите лексикографически наименьшую строку, которую можно получить после какого-либо (возможно, нулевого) числа шагов.

Примечание

В первом наборе входных данных можно получить строку «aimn», выполняя следующие операции:

  1. Развернуть отрезок \([3,4]\). Строка превратится в «niam».
  2. Поменять местами \(s_1\) и \(s_3\). Строка превратится в «ainm».
  3. Развернуть отрезок \([3,4]\). Строка превратится в «aimn».

Можно доказать, что невозможно получить строку, лексикографически меньшую, чем «aimn». Значит, «aimn» и является ответом.

Во втором наборе входных данных можно получить строку «aandp», выполняя следующие операции:

  1. Поменять местами \(s_3\) и \(s_5\). Строка превратится в «paadn».
  2. Поменять местами \(s_1\) и \(s_3\). Строка превратится в «aapdn».
  3. Поменять местами \(s_3\) и \(s_5\). Строка превратится в «aandp».

Можно доказать, что невозможно получить строку, лексикографически меньшую, чем «aandp». Значит, «aandp» и является ответом.

C. Цепочка делителей

битмаски Конструктив математика теория чисел *1300

Дано целое число \(x\). Вам нужно уменьшить \(x\) до \(1\).

Для этого вы можете выполнять следующую операцию несколько (возможно, ноль) раз:

  • выбрать \(d\), являющееся делителем \(x\), затем заменить \(x\) на \(x-d\), т.е. уменьшить \(x\) на \(d\). (Мы называем \(d\) делителем \(x\), если \(d\) — положительное целое число, для которого существует целое \(q\), такое что \(x = d \cdot q\).)

Кроме того, есть дополнительное ограничение: вам нельзя выбирать одно и то же значение \(d\) более двух раз.

Например, для \(x=5\) следующая последовательность действий является недопустимой, поскольку в ней \(1\) использована более чем дважды: \(5\xrightarrow{-1}4\xrightarrow{-1}3\xrightarrow{-1}2\xrightarrow{-1}1\). Однако следующая последовательность действий является допустимой: \(5\xrightarrow{-1}4\xrightarrow{-2}2\xrightarrow{-1}1\).

Выведите произвольную последовательность действий, которая уменьшает \(x\) до \(1\) не более чем за \(1000\) операций. Можно доказать, что такая последовательность всегда существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(x\) (\(2\le x \le 10^{9}\)).

Выходные данные

Для каждого набора входных данных выведите две строки.

В первой строке выведите целое число \(k\) (\(1 \le k \le 1001\)).

Во второй строке через пробел выведите \(k\) целых чисел \(a_1,a_2,\ldots,a_k\), таких что:

  • \(a_1=x\);
  • \(a_k=1\);
  • для каждого \(2 \le i \le k\), величина \((a_{i-1}-a_i)\) является делителем \(a_{i-1}\). Каждое число может быть выбрано делителем не более чем дважды.
Примечание

В первом наборе входных данных можно выполнить следующую последовательность операций: \(3\xrightarrow{-1}2\xrightarrow{-1}1\).

В втором наборе входных данных можно выполнить следующую последовательность операций: \(5\xrightarrow{-1}4\xrightarrow{-2}2\xrightarrow{-1}1\).

В третьем наборе входных данных можно выполнить следующую последовательность операций: \(14\xrightarrow{-2}12\xrightarrow{-6}6\xrightarrow{-3}3\xrightarrow{-1}2\xrightarrow{-1}1\).

D. Матричный каскад

дп жадные алгоритмы Конструктив математика Перебор Структуры данных *1700

Дана матрица размера \(n \times n\), состоящая из 0 и 1. Строки матрицы пронумерованы от \(1\) до \(n\) сверху вниз, столбцы пронумерованы от \(1\) до \(n\) слева направо. Клетку на пересечении \(x\)-й строки и \(y\)-го столбца обозначим как \((x, y)\).

AquaMoon хочет превратить все элементы матрицы в 0. За один шаг она может выполнить следующую операцию:

  • выбрать произвольную клетку, пусть это \((i, j)\), затем инвертировать элемент в клетке \((i, j)\), а также инвертировать все элементы в клетках \((x, y)\), для которых \(x > i\) и \(x - i \ge \left|y - j\right|\). Инвертирование — это замена символа на противоположный: 0 на 1, 1 на 0.

Помогите AquaMoon определить наименьшее число шагов, необходимых для того, чтобы превратить все элементы матрицы в 0. Можно показать, что ответ всегда существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(2 \le n \le 3000\)).

В \(i\)-й из следующих \(n\) строк содержится бинарная строка, состоящая только из символов 0 и 1, имеющая длину \(n\).

Гарантируется, что сумма значений \(n^2\) по всем наборам входных данных не превосходит \(9\,000\,000\).

Выходные данные

Для каждого набора входных данных выведите наименьшее необходимое число шагов.

Примечание

В первом наборе входных данных можно действовать так:

  1. выполнить операцию для клетки \((1, 3)\).

Очевидно, изначально не все элементы матрицы равны 0, так что необходима как минимум одна операция. Значит, \(1\) и есть ответ.

В втором наборе входных данных можно действовать так:

  1. выполнить операцию для клетки \((3, 3)\);
  2. выполнить операцию для клетки \((1, 1)\).

Можно показать, что невозможно превратить все элементы в 0 за \(0\) шагов или за \(1\) шаг, так что ответ равен \(2\).

G. Волшебный квадрат

Комбинаторика Конструктив реализация *3100

У Aquamoon есть квадратик Рубика, который можно представить как матрицу размера \(n \times n\), причём элементы матрицы составляют перестановку чисел \(1, \ldots, n^2\).

Aquamoon можно производить над матрицей следующие операции:

  • Сдвиг строки, т.е. сдвиг некоторой строки матрицы на несколько позиций (хотя бы на \(1\) и не более чем на \(n-1\)) вправо. Элементы, выходящие за правую границу матрицы, сдвигаются в начало строки. Так, например, сдвиг строки \(\begin{pmatrix} a & b & c \end{pmatrix}\) на \(2\) позиции превратит её в \(\begin{pmatrix} b & c & a \end{pmatrix}\);
  • Сдвиг столбца, т.е. сдвиг некоторого столбца матрицы на несколько позиций (хотя бы на \(1\) и не более чем на \(n-1\)) вниз. Элементы, выходящие за нижнюю границу матрицы, сдвигаются в начало столбца. Так, например, сдвиг столбца \(\begin{pmatrix} a \\ b \\ c \end{pmatrix}\) на \(2\) позиции превратит его в \(\begin{pmatrix} b\\c\\a \end{pmatrix}\).

Строки матрицы пронумерованы от \(1\) до \(n\) сверху вниз, столбцы пронумерованы от \(1\) до \(n\) слева направо. Клетку на пересечении \(x\)-й строки и \(y\)-го столбца обозначим как \((x, y)\).

Aquamoon может выполнить несколько (возможно, ноль) операций, но она должна выполнять следующие ограничения:

  • каждая строка и каждый столбец могут быть сдвинуты не более чем по одному разу;
  • каждое число матрицы может быть сдвинуто не более чем дважды;
  • итоговые смещения любых двух чисел, сдвинутых дважды, должны быть попарно различны. Формально, пусть числа \(a\) и \(b\) были сдвинуты по два раза. Пусть \(a\) изменило свою позицию с \((x_1,y_1)\) на \((x_2,y_2)\), а \(b\) изменило позицию с \((x_3,y_3)\) на \((x_4,y_4)\). Тогда \(x_2-x_1 \not\equiv x_4-x_3 \pmod{n}\) или \(y_2-y_1 \not\equiv y_4-y_3 \pmod{n}\).

Aquamoon интересно, сколькими способами она может преобразовать исходное состояние квадратика в некоторое заданное конечно состояние. Два способа считаются различными, если последовательности применяемых операций в них различны. Поскольку ответ может быть очень большим, выведите его по модулю modulo \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 2\cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(3\le n \le 500\)).

В \(i\)-й из следующих \(n\) строк содержится \(n\) целых чисел \(a_{i1}, \ldots, a_{in}\), которые задают \(i\)-ю строчку исходной матрицы (\(1 \le a_{ij} \le n^2\)).

В \(i\)-й из следующих \(n\) строк содержится \(n\) целых чисел \(b_{i1}, \ldots, b_{in}\), которые задают \(i\)-ю строчку конечной матрицы (\(1 \le b_{ij} \le n^2\)).

Гарантируется, что элементы исходной матрицы, а также элементы конечной матрицы, образуют перестановки чисел \(1, \ldots, n^2\).

Гарантируется, что сумма значений \(n^2\) по всем наборам входных данных не превосходит \(250\,000\).

Выходные данные

Для каждого набора входных данных, если возможно преобразовать начальное состояние в конечное, соблюдая все условия, то выведите одно число — число способов это сделать по модулю \(998\,244\,353\).

Если решения не существует, выведите одно целое число \(0\).

Примечание

В первом наборе входных данных единственный способ преобразовать исходную матрицу в конечную — сдвинуть вторую строку на \(1\) вправо, а затем сдвинуть первый столбец на \(1\) вниз.

Во втором наборе входных данных можно показать, что нет ни одного корректного способа преобразовать матрицу, так что ответ равен \(0\).

A. green_gold_dog, массив и перестановка

Конструктив сортировки *800

У green_gold_dog есть массив \(a\) длины \(n\), он хочет найти перестановку \(b\) длины \(n\) такую, чтобы количество различных чисел в поэлементной разности массива \(a\) и перестановки \(b\) было максимально.

Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Поэлементная разность двух массивов \(a\) и \(b\) длины \(n\) — это массив \(c\) длины \(n\), где \(c_i\) = \(a_i - b_i\) (\(1 \leq i \leq n\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 4 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 4 \cdot 10^4\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(4 \cdot 10^4\).

Выходные данные

Для каждого набора входных данных выведете \(n\) чисел — подходящую перестановку \(b\). Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных поэлементная разность массивов равна [99999], тут один различный элемент, очевидно что в массиве длинны один не может быть более одного различного элемента

Во втором наборе входных данных поэлементная разность массивов равна [-1, 0], тут два различных элемента, очевидно что в массиве длинны два не может быть более двух различных элементов

В третьем наборе входных данных поэлементная разность массивов равна [9, 0, 1], тут три различных элемента, очевидно что в массиве длинны три не может быть более трёх различных элементов

B. Палиндромный XOR

битмаски Конструктив Строки *1100

Вам дана бинарная строка \(s\) длины \(n\) (строка - состоящая только из \(0\) и \(1\)). Число \(x\) является хорошим, если существует такая бинарная строка \(l\) длины \(n\), содержащая \(x\) единиц, что если каждый символ \(s_i\) заменить на \(s_i \oplus l_i\) (где \(\oplus\) обозначает операцию Побитового исключающего ИЛИ) то строка \(s\) станет палиндромом.

Нужно вывести бинарную строку \(t\) длины \(n+1\), где \(t_i\) (\(0 \leq i \leq n\)) равно \(1\) если число \(i\) хорошее, и \(0\) иначе.

Палиндром — это строка, которая читается одинаково как слева направо, так и справа налево. Например, строки 01010, 1111, 0110 — палиндромы.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)).

Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длины \(n\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку \(t\) длины \(n+1\) - ответ на задачу.

Примечание

Рассмотрим первый пример.

  • \(t_2 = 1\) так как можно выбрать \(l = \) 010100 тогда строка \(s\) станет равна 111111, что является палиндромом.
  • \(t_4 = 1\) так как можно выбрать \(l = \) 101011.
  • Можно показать, что для всех остальных \(i\) ответа не существует, поэтому остальные символы равны \(0\).

C. salyg1n и игра с MEX

жадные алгоритмы игры интерактив Конструктив Структуры данных *1300

Это интерактивная задача!

salyg1n подарил Алисе множество \(S\) из \(n\) различных целых чисел \(s_1, s_2, \ldots, s_n\) (\(0 \leq s_i \leq 10^9\)). Алиса решила сыграть против Боба в игру с этим множеством. Правила игры таковы:

  • Игроки ходят по очереди, первой ходит Алиса.

  • Алиса за один ход добавляет в множество \(S\) одно число \(x\) (\(0 \leq x \leq 10^9\)). Множество \(S\) не должно содержать число \(x\) на момент хода.
  • Боб за один ход удаляет из множества \(S\) одно число \(y\). Множество \(S\) должно содержать число \(y\) на момент хода. Также число \(y\) должно быть строго меньше последнего добавленного Алисой числа.
  • Игра заканчивается, когда Боб не может сделать ход или спустя \(2 \cdot n + 1\) ходов (в таком случае последним ходом будет ход Алисы).
  • Результатом игры назовем \(\operatorname{MEX}\dagger(S)\) (\(S\) на момент конца игры).
  • Алиса стремится максимизировать результат, а Боб минимизировать.

Пусть \(R\) — результат при оптимальной игре обоих игроков. В этой задаче вы играете за Алису против программы жюри, играющей за Боба. Ваша задача — реализовать стратегию Алисы, при которой результат игры всегда будет не меньше \(R\).

\(\dagger\) \(\operatorname{MEX}\) набора чисел \(c_1, c_2, \ldots, c_k\) определяется как наименьшее неотрицательное целое число \(x\), которое не встречается в наборе чисел \(c\). Например, \(\operatorname{MEX}(\{0, 1, 2, 4\})\) \(=\) \(3\).

Входные данные

В первой задано одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество тестовых случаев.

Протокол взаимодействия

Взаимодействие Вашей программы с программой жюри в каждом тестовом случае начинается со считывания целого числа \(n\) (\(1 \leq n \leq 10^5\)) — размера множества \(S\) до начала игры.

Затем считайте одну строку — \(n\) различных целых чисел \(s_i\) \((0 \leq s_1 < s_2 < \ldots < s_n \leq 10^9)\) — множество \(S\) подаренное Алисе.

Чтобы сделать ход выведите целое число \(x\) (\(0 \leq x \leq 10^9\)) — число которое вы хотите добавить в множество \(S\). \(S\) не должно содержать \(x\) на момент хода. Затем считайте одно целое число \(y\) \((-2 \leq y \leq 10^9)\).

  • Если \(0 \leq y \leq 10^9\) — Боб удаляет число \(y\) из множества \(S\). Ваш ход!
  • Если \(y\) \(=\) \(-1\) — игра закончена. После этого следует приступать к обработке следующего тестового случая или завершить программу, если это был последний тестовый случай.
  • Иначе \(y\) \(=\) \(-2\). Это значит, что вы сделали некорректный запрос. Ваша программа должна немедленно завершится, чтобы получить вердикт Неправильный ответ. Иначе она может получить любой другой вердикт.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.
Гарантируется, что сумма \(n\) по всем тестовым случаям не превосходит \(10^5\).

По этой задаче нельзя делать взломы.

Примечание

В первом наборе входных данных множество \(S\) менялось так:

{\(1, 2, 3, 5, 7\)} \(\to\) {\(1, 2, 3, 5, 7, 8\)} \(\to\) {\(1, 2, 3, 5, 8\)} \(\to\) {\(1, 2, 3, 5, 8, 57\)} \(\to\) {\(1, 2, 3, 8, 57\)} \(\to\) {\(0, 1, 2, 3, 8, 57\)}. В конце игры, \(\operatorname{MEX}(S) = 4\), \(R = 4\).

Во втором наборе входных данных множество \(S\) менялось так:

{\(0, 1, 2\)} \(\to\) {\(0, 1, 2, 3\)} \(\to\) {\(1, 2, 3\)} \(\to\) {\(0, 1, 2, 3\)}. В конце игры, \(\operatorname{MEX}(S) = 4\), \(R = 4\).

В третьем наборе входных данных множество \(S\) менялось так:

{\(5, 7, 57\)} \(\to\) {\(0, 5, 7, 57\)}. В конце игры, \(\operatorname{MEX}(S) = 1\), \(R = 1\).

D. Циклические операции

графы жадные алгоритмы Конструктив Перебор поиск в глубину и подобное реализация *1800

У Егора был массив \(a\) длины \(n\), изначально состоящий из нулей. Однако он захотел сделать из него другой массив \(b\) длины \(n\).

Поскольку Егор не ищет легких путей, разрешено использовать только такую операцию (возможно ноль или несколько раз):

  • выбрать массив \(l\) длины \(k\) (\(1 \leq l_i \leq n\), все \(l_i\) различны) и поменять каждый элемент \(a_{l_i}\) на \(l_{(i\%k)+1}\) (\(1 \leq i \leq k\)).

Ему стало интересно, а можно ли вообще получить массив \(b\) с помощью таких операций. Поскольку Егор еще только начинающий программист, он попросил Вас помочь ему решить эту задачу.

Операция \(\%\) означает взятие по модулю, то есть \(a\%b\) равно остатку от деления числа \(a\) на число \(b\).

Входные данные

В первой строке входных данных дано целое число \(t\) (\(1 \leq t \leq 10^5\)) - количество наборов входных данных.

Каждый набор состоит из двух строк. В первой строке даны целые числа \(n\) и \(k\) (\(1 \leq k \leq n \leq 10^5\)).

Во второй строке вводится массив \(b_1, b_2, \ldots, b_n\) (\(1 \leq b_i \leq n\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если существует способ получить массив \(b\), используя только заданную операцию. Иначе выведите «NO» (без кавычек). Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Рассмотрим первый пример:

  • Применим операцию с \(l\) = \([1,2,3]\). Теперь \(a\) = \([2,3,1,0,0]\).
  • Применим операцию с \(l\) = \([3,5,4]\). Теперь \(a\) = \([2,3,5,3,4]\) = \(b\).
Мы видим, что получить массив \(b\) можно. Следовательно ответ YES.

Во втором примере можно доказать, что массив \(b\) получить нельзя, следовательно ответ NO.

E1. salyg1n и массив (простая версия)

интерактив Конструктив математика *2000

Это простая версия задачи. Единственное различие между версиями - ограничение на количество запросов. В этой версии вы можете сделать не более 100 запросов. Вы можете делать взломы, только если решены обе версии задачи.

Это интерактивная задача!

salyg1n дал вам целое положительное число \(k\) и решил сыграть с вами в игру. Он загадал массив из \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)). Вы должны вывести \(a_1 \oplus a_2 \oplus \ldots \oplus a_n\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ. Вы можете делать запросы вида:

  • \(?\) \(i\): в ответ на этот запрос вы получите \(a_i \oplus a_{i + 1} \oplus \ldots \oplus a_{i + k - 1}\). Также после этого запроса подотрезок \(a_i, a_{i + 1}, \ldots, a_{i + k - 1}\) развернется, то есть загаданный массив \(a\) станет таким: \(a_1, a_2, \ldots a_{i - 1}, a_{i + k - 1}, a_{i + k - 2}, \ldots, a_{i + 1}, a_i, a_{i + k}, \ldots, a_n\).

Вы можете сделать не более \(100\) запросов чтобы дать ответ на задачу.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 1000\)) – количество тестовых случаев.

Протокол взаимодействия

Взаимодействие Вашей программы с программой жюри в каждом тестовом случае начинается со считывания двух целых положительных четных чисел \(n\) и \(k\) (\(1 \leq k \leq n \leq k^2 \leq 2500\)) – длины загаданного массива и длины подотрезка запроса соответственно.

Чтобы узнать значение \(a_i \oplus a_{i + 1} \oplus \ldots \oplus a_{i + k - 1}\), выведите запрос в формате \(?\) \(i\) (\(1 \leq i \leq n - k + 1\)). Затем считайте одно целое число – ответ на ваш запрос.

Вы можете сделать не более \(100\) запросов. Когда вы будете готовы сообщить ответ, выведите его в формате \(!\) \(x\). После этого следует приступать к обработке следующего тестового случая или завершить программу, если это был последний тестовый случай. Вывод ответа не считается как один из \(100\) запросов.

Если ваша программа сделает более \(100\) запросов для одного набора входных данных, или сделает некорректный запрос, то ответом на запрос будет -1, после получения такого ответа ваша программа должна немедленно завершится, чтобы получить вердикт Неправильный ответ. Иначе она может получить любой другой вердикт.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.
Гарантируется, что сумма \(n\) по всем тестовым случаям не превосходит \(10000\). Интерактор в этой задаче не является адаптивным.

Взломы:

Чтобы сделать взлом, используйте следующий формат:

В первой строке находится одно целое число \(t\) – количество тестовых случаев.

Описание каждого тестового случая должно состоять из двух строк. В первой строке находятся числа \(n\) и \(k\) – длина загаданного массива и длина подотрезка запроса соответственно. Во второй строке находятся \(n\) чисел \(a_1, a_2, \ldots, a_n\) – массив, который должно загадать жюри в данном тестовом случае.

Примечание

В первом тестовом случае жюри загадало массив \(a\) \(=\) \([4, 2, 5, 1]\)

Во втором тестовом случае жюри загадало массив \(a\) \(=\) \([5, 7, 1, 3, 3, 7]\)

E2. salyg1n и массив (сложная версия)

интерактив Конструктив *2200

Это сложная версия задачи. Единственное различие между версиями - ограничение на количество запросов. В этой версии вы можете сделать не более 57 запросов. Вы можете делать взломы, только если решены обе версии задачи.

Это интерактивная задача!

salyg1n дал вам целое положительное число \(k\) и решил сыграть с вами в игру. Он загадал массив из \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)). Вы должны вывести \(a_1 \oplus a_2 \oplus \ldots \oplus a_n\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ. Вы можете делать запросы вида:

  • \(?\) \(i\): в ответ на этот запрос вы получите \(a_i \oplus a_{i + 1} \oplus \ldots \oplus a_{i + k - 1}\). Также после этого запроса подотрезок \(a_i, a_{i + 1}, \ldots, a_{i + k - 1}\) развернется, то есть загаданный массив \(a\) станет таким: \(a_1, a_2, \ldots a_{i - 1}, a_{i + k - 1}, a_{i + k - 2}, \ldots, a_{i + 1}, a_i, a_{i + k}, \ldots, a_n\).

Вы можете сделать не более \(57\) запросов чтобы дать ответ на задачу.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 1000\)) – количество тестовых случаев.

Протокол взаимодействия

Взаимодействие Вашей программы с программой жюри в каждом тестовом случае начинается со считывания двух целых положительных четных чисел \(n\) и \(k\) (\(1 \leq k \leq n \leq k^2 \leq 2500\)) – длины загаданного массива и длины подотрезка запроса соответственно.

Чтобы узнать значение \(a_i \oplus a_{i + 1} \oplus \ldots \oplus a_{i + k - 1}\), выведите запрос в формате \(?\) \(i\) (\(1 \leq i \leq n - k + 1\)). Затем считайте одно целое число – ответ на ваш запрос.

Вы можете сделать не более \(57\) запросов. Когда вы будете готовы сообщить ответ, выведите его в формате \(!\) \(x\). После этого следует приступать к обработке следующего тестового случая или завершить программу, если это был последний тестовый случай. Вывод ответа не считается как один из \(57\) запросов.

Если ваша программа сделает более \(57\) запросов для одного набора входных данных, или сделает некорректный запрос, то ответом на запрос будет -1, после получения такого ответа ваша программа должна немедленно завершится, чтобы получить вердикт Неправильный ответ. Иначе она может получить любой другой вердикт.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.
Гарантируется, что сумма \(n\) по всем тестовым случаям не превосходит \(10000\). Интерактор в этой задаче не является адаптивным.

Взломы:

Чтобы сделать взлом, используйте следующий формат:

В первой строке находится одно целое число \(t\) – количество тестовых случаев.

Описание каждого тестового случая должно состоять из двух строк. В первой строке находятся числа \(n\) и \(k\) – длина загаданного массива и длина подотрезка запроса соответственно. Во второй строке находятся \(n\) чисел \(a_1, a_2, \ldots, a_n\) – массив, который должно загадать жюри в данном тестовом случае.

Примечание

В первом тестовом случае жюри загадало массив \(a\) \(=\) \([4, 2, 5, 1]\)

Во втором тестовом случае жюри загадало массив \(a\) \(=\) \([5, 7, 1, 3, 3, 7]\)

F. Максимально не похожее дерево

жадные алгоритмы Конструктив Перебор поиск в глубину и подобное хэши *2700

Дано дерево с \(n\) вершинами с корнем в вершине \(1\), обозначим его за \(G\). Также обозначим за \(P(G)\) мультимножество поддеревьев всех вершин дерева \(G\). Вам надо найти дерево \(G'\) размера \(n\) с корнем в вершине \(1\) такое, что количество поддеревьев в \(P(G')\) к которым есть изоморфные в \(P(G)\) было минимально.

Поддерево вершины \(v\) - это граф, который содержит все вершины, для которых вершина \(v\) лежит на пути от корня дерева до нее самой, а так же все ребра между этими вершинами.

Два корневых дерева считаются изоморфными если можно так перенумеровать вершины одного из них, чтобы оно стало равно второму, при этом корень первого дерева должен получить номер корня второго дерева.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 10^6\)) - количество вершин в дереве \(G\). Каждая из следующих \(n-1\) строк содержит два целых числа \(a\) и \(b\) \((1 \leq a,b \leq n)\), означающие, что между вершинами \(a\) и \(b\) в дереве есть ребро.

Выходные данные

Выведите \(n-1\) строку, каждая строка содержит два числа \(a\), \(b\) \((1 \leq a,b \leq n)\) - рёбра дерева \(G'\). Если существует несколько оптимальных ответов, выведите любой.

A. Заполните матрицу

Конструктив реализация *1300

Имеется пустая матрица \(M\) размера \(n\times m\).

Экзамен закончился, и Daniel хотел бы заняться головоломками. Он собирается заполнить матрицу \(M\) перестановками длины \(m\). То есть каждая строка \(M\) должна быть перестановкой длины \(m^\dagger\).

Определим значение \(i\)-го столбца в \(M\) как \(v_i=\operatorname{MEX}(M_{1,i},M_{2,i},\ldots,M_{n,i})^\ddagger\). Поскольку Daniel любит разнообразие, то красота \(M\) равна \(s=\operatorname{MEX}(v_1,v_2,\cdots,v_m)\).

Вы должны помочь Daniel заполнить матрицу \(M\) и максимизировать её красоту.

\(^\dagger\) Перестановка длины \(m\) — это массив, состоящий из \(m\) различных целых чисел от \(0\) до \(m-1\), расположенных в произвольном порядке. Например, \([1,2,0,4,3]\) является перестановкой, но \([0,1,1]\) не является перестановкой (\(1\) встречается в массиве дважды), и \([0,1,3]\) также не является перестановкой (\(m-1=2\), но в массиве есть \(3\)).

\(^\ddagger\) \(\operatorname{MEX}\) массива — это наименьшее неотрицательное целое число, не принадлежащее массиву. Например, \(\operatorname{MEX}(2,2,1)=0\), так как \(0\) не принадлежит массиву, и \(\operatorname{MEX}(0,3,1,2)=4\), так как \(0\), \(1\), \(2\) и \(3\) в массиве есть, а \(4\) нет.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1\le t\le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1\le n,m\le 2\cdot 10^5\)) — размер матрицы.

Гарантируется, что сумма \(n\cdot m\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных в первой строке выведите одно целое число — максимальную красоту \(M\).

Затем выведите матрицу \(M\) размера \(n\times m\) — матрицу, которую вы нашли.

Если существует несколько решений, вы можете вывести любое из них.

Примечание

В первом наборе входных данных:

  • \(v_1=\operatorname{MEX}(1,0,1,0)=2\);
  • \(v_2=\operatorname{MEX}(0,2,0,2)=1\);
  • \(v_3=\operatorname{MEX}(2,1,2,1)=0\).

Таким образом, \(s=\operatorname{MEX}(2,1,0)=3\).

Можно доказать, что \(3\) является максимально возможной красотой \(M\).

Во втором наборе входных данных при любой перестановке \(s=2\).

В третьем наборе входных данных:

  • \(v_1=\operatorname{MEX}(3,5,1,4,4,2)=0\);
  • \(v_2=\operatorname{MEX}(0,2,3,1,2,4)=5\);
  • \(v_3=\operatorname{MEX}(1,1,2,3,5,0)=4\);
  • \(v_4=\operatorname{MEX}(4,0,4,2,3,5)=1\);
  • \(v_5=\operatorname{MEX}(2,4,5,5,0,1)=3\);
  • \(v_6=\operatorname{MEX}(5,3,0,0,1,3)=2\).

Таким образом, \(s=\operatorname{MEX}(0,5,4,1,3,2)=6\).

B1. Конфетная вечеринка (простая версия)

битмаски графы жадные алгоритмы Конструктив математика реализация *1700

Это простая версия задачи. Единственное отличие состоит в том, что в этой версии каждый должен дать конфеты ровно одному человеку и получить конфеты ровно от одного человека. Обратите внимание, что посылка не может пройти обе версии задачи одновременно. Вы можете делать взломы, только если обе версии задачи решены.

После экзамена Daniel и его друзья собираются устроить вечеринку. Все придут с конфетами.

На вечеринке будут присутствовать \(n\) человек. Изначально у \(i\)-го человека есть \(a_i\) конфет. Во время вечеринки они будут обмениваться конфетами. Для этого они выстроятся в произвольном порядке и каждый из них сделает следующее ровно один раз:

  • Выберет целое число \(p\) (\(1 \le p \le n\)) и неотрицательное целое число \(x\), затем даст \(2^{x}\) конфет \(p\)-му человеку. Заметим, что человек не может отдать больше конфет, чем у него есть в данный момент (он мог получить конфеты от кого-то другого), и он не может отдать конфеты самому себе.

Daniel любит справедливость, поэтому он будет счастлив тогда и только тогда, когда каждый получит конфеты от ровно одного человека. В то же время его друг Tom любит среднее, поэтому он будет счастлив тогда и только тогда, когда у всех людей будет одинаковое количество конфет после всех обменов.

Определите, существует ли способ обменяться конфетами так, чтобы Daniel и Tom были счастливы после обменов.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1\le t\le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2\le n\le 2\cdot 10^5\)) — количество человек на вечеринке.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1\le a_i\le 10^9\)) — количество конфет у каждого человека.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «Yes» (без кавычек), если существует способ обменяться конфетами так, чтобы Daniel и Tom были счастливы, и выведите «No» (без кавычек) в противном случае.

Вы можете вывести ответ в любом регистре (верхнем или нижнем). Например, строки «yEs», «yes», «Yes», и «YES» будут распознаны как положительный ответ.

Примечание

В первом наборе входных данных:

  • Первый человек даёт \(1\) конфету третьему человеку;
  • Второй человек даёт \(2\) конфеты первому человеку;
  • Третий человек даёт \(1\) конфету второму человеку.

Тогда у всех трёх человек есть по \(3\) конфеты.

Во втором наборе входных данных:

  • Пятый человек даёт \(4\) конфеты первому человеку, и теперь у первого человека есть \(5\) конфет;
  • Первый человек даёт \(2\) конфеты третьему человеку;
  • Третий человек даёт \(2\) конфеты пятому человеку;
  • Четвёртый человек даёт \(2\) конфеты второму человеку;
  • Второй человек даёт \(1\) конфету четвёртому человеку.

Тогда у всех трёх людей есть по \(3\) конфеты. Обратите внимание, что вначале первый человек не может дать \(2\) конфеты третьему человеку, потому что у него есть только \(a_1=1\) конфета. Но после того, как пятый человек дал ему \(4\) конфеты, он может это сделать, потому что сейчас у него есть \(1+4=5\) конфет.

В третьем наборе входных данных невозможно сделать так, чтобы у всех людей было одинаковое количество конфет.

В четвёртом наборе входных данных первый человек даёт второму человеку \(1024\) конфеты, и второй также даёт \(1024\) конфеты первому человеку.

B2. Конфетная вечеринка (сложная версия)

битмаски дп жадные алгоритмы Конструктив математика реализация *2100

Это сложная версия задачи. Единственное отличие состоит в том, что в этой версии каждый должен дать конфеты не более чем одному человеку и получить конфеты не более чем от одного человека. Обратите внимание, что посылка не может пройти обе версии задачи одновременно. Вы можете делать взломы, только если обе версии задачи решены.

После экзамена Daniel и его друзья собираются устроить вечеринку. Все придут с конфетами.

На вечеринке будут присутствовать \(n\) человек. Изначально у \(i\)-го человека есть \(a_i\) конфет. Во время вечеринки они будут обмениваться конфетами. Для этого они выстроятся в произвольном порядке и каждый из них сделает следующее не более одного раза:

  • Выберет целое число \(p\) (\(1 \le p \le n\)) и неотрицательное целое число \(x\), затем даст \(2^{x}\) конфет \(p\)-му человеку. Заметим, что человек не может отдать больше конфет, чем у него есть в данный момент (он мог получить конфеты от кого-то другого), и он не может отдать конфеты самому себе.

Daniel любит справедливость, поэтому он будет счастлив тогда и только тогда, когда каждый получит конфеты от не более чем одного человека. В то же время его друг Tom любит среднее, поэтому он будет счастлив тогда и только тогда, когда у всех людей будет одинаковое количество конфет после всех обменов.

Определите, существует ли способ обменяться конфетами так, чтобы Daniel и Tom были счастливы после обменов.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1\le t\le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2\le n\le 2\cdot 10^5\)) — количество человек на вечеринке.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1\le a_i\le 10^9\)) — количество конфет у каждого человека.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «Yes» (без кавычек), если существует способ обменяться конфетами так, чтобы Daniel и Tom были счастливы, и выведите «No» (без кавычек) в противном случае.

Вы можете вывести ответ в любом регистре (верхнем или нижнем). Например, строки «yEs», «yes», «Yes», и «YES» будут распознаны как положительный ответ.

Примечание

В первом наборе входных данных второй человек даёт \(1\) конфету первому человеку, поэтому у всех людей есть по \(3\) конфеты.

Во втором наборе входных данных четвёртый человек даёт \(1\) конфету второму человеку, пятый человек даёт \(2\) конфеты первому человеку, третий человек ничего не делает. После всех обменов у каждого есть по \(3\) конфеты.

В третьем наборе входных данных невозможно сделать так, чтобы у всех людей было одинаковое количество конфет.

В четвёртом наборе входных данных двум людям не нужно ничего делать.

D. Цветочное псевдодерево

графы Деревья жадные алгоритмы Конструктив реализация *3000

Псевдодеревом называется связный граф, который имеет ровно один цикл и не имеет петель. Обратите внимание, что псевдодерево может содержать кратные рёбра. Можно доказать, что псевдодерево с \(n\) вершинами всегда содержит \(n\) рёбер.

После удаления всех рёбер на цикле в псевдодереве образуется лес\(^{\dagger}\). Можно доказать, что каждое дерево в лесу будет содержать ровно одну вершину, которая находится на цикле до удаления рёбер. Если все деревья в лесу имеют одинаковую глубину\(^{\ddagger}\) при выборе вершины на цикле в качестве корня, мы называем исходное псевдодерево цветочным.

У нашего друга sszcdjr, было цветочное псевдодерево с \(n\) вершинами и \(n\) рёбрами. Однако, он забыл все рёбра в псевдодереве. К счастью, он все ещё помнит степени вершин. В частности, степень \(i\)-й вершины равна \(d_i\).

Вы должны помочь sszcdjr построить возможное цветочное псевдодерево с \(n\) вершинами, где степень \(i\)-й вершины строго равна \(d_i\), или сообщить ему, что это невозможно.

\(^{\dagger}\) Лесом называется граф, в котором все компоненты связности являются деревьями. Деревом называется связный граф без циклов и петель.

\(^{\ddagger}\) Глубиной дерева с корнем называется максимальное расстояние от корня до вершины этого дерева.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1\leq t\leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2\leq n\leq 10^6\)) — количество вершин.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(d_1,d_2,\ldots,d_n\) (\(1\leq d_i\leq n\)) — степень каждой вершины.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных, если существует возможное цветочное псевдодерево:

  • Выведите «Yes» (без кавычек) в первой строке.
  • Затем выведите \(n\) строк, в каждой строке выведите два целых числа \(u_i\) и \(v_i\) — две вершины, которые соединяет \(i\)-е ребро.

Если есть несколько ответов, вы можете вывести любой из них.

В противном случае, выведите «No» (без кавычек) в единственной строке вывода.

Вы можете выводить первую строку для каждого набора входных данных в любом регистре (верхнем или нижнем). Например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительные ответы.

Примечание

В первом наборе входных данных единственным возможным цветочным псевдодеревом является:

После удаления всех рёбер на цикле в псевдодереве каждое дерево имеет глубину \(0\).

Во втором наборе входных данных можно доказать, что не существует такого цветочного псевдодерева.

В третьем наборе входных данных одним из возможных цветочных псевдодеревьев является:

E. Min-Sum-Max

дп жадные алгоритмы Конструктив *3500

Tom ожидает результатов экзамена. Чтобы разрядить напряженную обстановку, его друг Daniel решил сыграть с ним в игру. Игра называется «Раздели массив».

В игре есть массив \(a\), состоящих из \(n\) целых чисел. Обозначим \([l,r]\) как подотрезок, состоящий из целых чисел \(a_l,a_{l+1},\ldots,a_r\).

Tom разобьет массив на подряд идущие подотрезки \([l_1,r_1],[l_2,r_2],\ldots,[l_m,r_m]\), такие, что каждое число находится ровно в одном подотрезке. Более формально:

  • Для всех \(1\le i\le m\), \(1\le l_i\le r_i\le n\);
  • \(l_1=1\), \(r_m=n\);
  • Для всех \(1< i\le m\), \(l_i=r_{i-1}+1\).

Обозначим \(s_{i}=\sum_{k=l_i}^{r_i} a_k\), то есть \(s_i\) — сумма целых чисел в \(i\)-м подотрезке. Для всех \(1\le i\le j\le m\) должно выполняться следующее условие:

\(\) \min_{i\le k\le j} s_k \le \sum_{k=i}^j s_k \le \max_{i\le k\le j} s_k. \(\)

Tom считает, что чем на большее количество подотрезков будет разбит массив \(a\), тем лучший результат он получит. Поэтому он просит Daniel найти максимальное количество подотрезков среди всех возможных способов разделить массив \(a\). Вы должны помочь ему найти это число.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1\le t\le 50\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1\le n\le 300\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(-10^9\le a_i\le 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество подотрезков среди всех возможных способов разделить массив \(a\).

Примечание

В первом наборе входных данных Daniel может разделить массив на \([-1]\) и \([5,4]\), и \(s=[-1,9]\). Можно видеть, что при любых \(i=j\), условие выполняется, и для \(i=1,j=2\), мы имеем \(\min(-1,9)\le (-1)+9\le \max(-1,9)\).

Во втором наборе входных данных, если Daniel разделит массив на \([2023]\) и \([2043]\), то для \(i=1,j=2\) мы имеем \(2023+2043>\max(2023,2043)\), поэтому максимальное количество подотрезков равно \(1\).

В третьем наборе входных данных оптимальным способом разделить массив является \([1,4,7],[-1],[5,-4]\).

В четвёртом наборе входных данных оптимальным способом разделить массив является \([-4,0,3,-18],[10]\).

В пятом наборе входных данных Daniel может получить только один подотрезок.

A. Сделайте это нулём

Конструктив *900

Во время экзамена Reycloer встретил интересную задачу, но он не смог сразу придумать решение. Время истекает! Пожалуйста, помогите ему.

Изначально вам дан массив \(a\), состоящий из \(n \ge 2\) целых чисел, и вы хотите заменить все элементы в нём на \(0\).

За одну операцию вы выбираете два индекса \(l\) и \(r\) (\(1\le l\le r\le n\)) и делаете следующее:

Вы можете использовать указанную выше операцию в любом порядке не более \(8\) раз в общей сложности.

Найдите такую последовательность операций, что после выполнения операций в этом порядке, все элементы в \(a\) станут равными \(0\). Можно доказать, что решение всегда существует.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1\le t\le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2\le n\le 100\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(0\le a_i\le 100\)) — элементы массива \(a\).

Выходные данные

Для каждого набора входных данных в первой строке выведите одно целое число \(k\) (\(0\le k\le 8\)) — количество операций, которые вы используете.

Затем выведите \(k\) строк, в \(i\)-й строке выведите два целых числа \(l_i\) и \(r_i\) (\(1\le l_i\le r_i\le n\)), обозначающие, что вы выбираете \(l_i\) и \(r_i\) в \(i\)-й операции.

Обратите внимание, что вам не нужно минимизировать \(k\). Если существует несколько решений, вы можете вывести любое из них.

Примечание

В первом наборе входных данных, так как \(1\oplus2\oplus3\oplus0=0\), после выполнения операции на отрезке \([1,4]\), все элементы в массиве станут равными \(0\).

Во втором наборе входных данных после первой операции массив станет равным \([3,1,4,15,15,15,15,6]\), после второй операции массив станет равным \([0,0,0,0,0,0,0,0]\).

В третьем наборе входных данных:

Операция\(a\) до\(a\) после
\(1\)\([\underline{1,5},4,1,4,7]\)\(\rightarrow\)\([4,4,4,1,4,7]\)
\(2\)\([4,4,\underline{4,1},4,7]\)\(\rightarrow\)\([4,4,5,5,4,7]\)
\(3\)\([4,4,5,5,\underline{4,7}]\)\(\rightarrow\)\([4,4,5,5,3,3]\)
\(4\)\([\underline{4,4,5},5,3,3]\)\(\rightarrow\)\([5,5,5,5,3,3]\)
\(5\)\([5,5,5,\underline{5,3,3}]\)\(\rightarrow\)\([5,5,5,5,5,5]\)
\(6\)\([\underline{5,5,5,5,5,5}]\)\(\rightarrow\)\([0,0,0,0,0,0]\)

В четвертом наборе входных данных исходный массив содержит только \(0\), поэтому нам не нужно выполнять никаких операций с ним.

A. МЕХанизированный массив

жадные алгоритмы Конструктив математика *800

Вам даны три целых неотрицательных числа \(n\), \(k\) и \(x\). Найдите максимальную возможную сумму элементов массива, состоящего из целых неотрицательных чисел, который состоит из \(n\) элементов, его MEX равен \(k\), и все его элементы не превосходят \(x\). Если такого массива не существует, то выведите \(-1\).

MEX (minimum excluded, минимальное отсутствующее) массива — это наименьшее целое неотрицательное целое число, которое не принадлежит массиву. Например:

  • MEX массива \([2,2,1]\) равен \(0\), потому что \(0\) не принадлежит массиву.
  • MEX массива \([3,1,0,1]\) равен \(2\), потому что \(0\) и \(1\) принадлежат массиву, а \(2\) — нет.
  • MEX массива \([0,3,1,2]\) равен \(4\), потому что \(0\), \(1\), \(2\) и \(3\) принадлежат массиву, а \(4\) — нет.
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит три целых числа \(n\), \(k\) и \(x\) (\(1 \leq n, k, x \leq 200\)).

Выходные данные

На каждый набор входных данных выведите одно число — максимальную сумму элементов подходящего массива, или \(-1\), если такого массива не существует.

Примечание

В первом наборе входных данных максимальная сумма равна \(7\), один из подходящих массивов — это \([0, 1, 2, 2, 2]\).

Во втором наборе входных данных не существует подходящих массивов длины \(n\).

В третьем наборе входных данных максимальная сумма равна \(57\), один из подходящих массивов — это \([0, 1, 28, 28]\).

G. ABBC или BACB

жадные алгоритмы Конструктив *1500

Дана строка \(s\), состоящая из символов \(\texttt{A}\) и \(\texttt{B}\). Изначально у вас нет монет. Вы можете выполнять два типа операций:

  • Выберите подстроку\(^\dagger\) \(\texttt{AB}\), замените ее на \(\texttt{BC}\) и получите монету.
  • Выберите подстроку\(^\dagger\) \(\texttt{BA}\), замените ее на \(\texttt{CB}\) и получите монету.
Какое максимальное количество монет вы можете получить?

\(^\dagger\) Подстрока длины \(2\) - это последовательность из двух соседних символов строки.

Входные данные

Ввод состоит из нескольких наборов входных данных. Первая строка ввода содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных.

Единственная строка каждого набора содержит строку \(s\) (\(1 \leq |s| \leq 2 \cdot 10^5\)). Все символы \(s\) являются либо \(\texttt{A}\), либо \(\texttt{B}\).

Сумма длин \(s\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество монет, которое вы можете получить.

Примечание

В первом примере вы можете выполнить следующие операции, чтобы получить \(2\) монеты: \(\)\color{red}{\texttt{AB}}\texttt{BA} \to \texttt{BC}\color{red}{\texttt{BA}} \to \texttt{BCCB}\(\)

Во втором примере вы можете выполнить следующую операцию, чтобы получить \(1\) монету: \(\)\color{red}{\texttt{AB}}\texttt{A} \to \texttt{BCA}\(\)

В третьем примере вы можете выполнить следующие операции, чтобы получить \(3\) монеты: \(\)\color{red}{\texttt{BA}}\texttt{ABA} \to \texttt{CBA}\color{red}{\texttt{BA}} \to \texttt{C}\color{red}{\texttt{BA}}\texttt{CB} \to \texttt{CCBCB}\(\)

C. Автосинтез

графы жадные алгоритмы Конструктив поиск в глубину и подобное сортировки *2100

Ханека написала массив \(a\) из \(n\) целых положительных чисел. Изначально ни один элемент не обведён. За одну операцию Ханека может обвести один элемент. Один и тот же элемент можно обвести несколько раз.

После выполнения всех операций Ханека составляет последовательность \(r\), состоящую из всех не обведенных элементов \(a\) в порядке возрастания их индексов.

Также Ханека составляет другую последовательность \(p\), длина которой равна количеству выполненных операций, а \(p_i\) — индекс элемента, обведенного в кружок при выполнении \(i\)-й операции.

Ханека хочет выполнить несколько операций так, чтобы последовательность \(r\) была равна последовательности \(p\). Помогите ей добиться этого или сообщите, если это невозможно! Обратите внимание, что если решений несколько, то можно вывести любое из них.

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \leq n \leq 2\cdot10^5\)) — размер массива \(a\).

Вторая строка содержит \(n\) целых чисел \(a_1,a_2,a_3,\ldots,a_n\) (\(1\leq a_i\leq n\)).

Выходные данные

Выведите одно число \(-1\), если это невозможно.

В противном случае вывод состоит из двух строк. Первая строка содержит целое число \(z\), равное количеству выполненных операций. Вторая строка содержит \(z\) целых чисел, причем \(i\)-е целое число представляет собой индекс элемента, обведенного кружком в \(i\)-й операции. Если решений несколько, то можно вывести любое из них.

Примечание

В первом примере выполнение операций, аналогичных приведенным в примере, дает следующие результаты:

  • Элемент \(a_2\) обводится \(1\) раз.
  • Элемент \(a_3\) обводится \(2\) раза.
  • Необведёнными элементами (упорядоченными по индексам) являются \(a_1\), \(a_4\) и \(a_5\). Таким образом, \(r=[3,2,3]\).
  • \(p=[3,2,3]\)

Следовательно, \(r=p\).

Во втором примере это невозможно.

E. Шаро-стек

Деревья дп Конструктив Структуры данных *3300

С таким названием задача точно не может быть задачей на графы...

У Чанеки есть граф с \(n\) вершинами и \(n-1\) ребрами. Некоторые ребра являются направленными, а некоторые — неориентированными. Ребро \(i\) соединяет вершину \(u_i\) с вершиной \(v_i\). Если \(t_i=0\), то ребро \(i\) является ненаправленным. Если \(t_i=1\), то ребро \(i\) направлено в сторону от \(u_i\) к \(v_i\). Известно, что если сделать все ребра ненаправленными, то граф превратится в дерево\(^\dagger\).

Чанека хочет направить все ненаправленные ребра и раскрасить каждое ребро (разные ребра могут иметь один и тот же цвет).

После этого, предположим, что Чанека начинает прогулку из произвольной вершины \(x\) в произвольную вершину \(y\) (возможно, что \(x=y\)), проходя через одно или несколько ребер. Ей разрешается проходить через каждое ребро, следуя направлению ребра или в противоположную от направления сторону. Также ей разрешается посещать вершину или ребро более одного раза. Во время прогулки Чанека хранит стек шаров, который изначально пуст до начала прогулки. Каждый раз, когда Чанека проходит через ребро, она делает следующее:

  • Если Чанека проходит его в правильном направлении, она кладет на вершину стека новый шар, цвет которого совпадает с цветом ребра.
  • Если Чанека проходит по нему в обратном направлении, то она убирает шар, находящийся на вершине стека.

Прогулка называется стековой тогда и только тогда, когда стек не пуст перед каждым проходом Чанеки по ребру в обратном направлении.

Прогулка называется шаро-стековой тогда и только тогда, когда она стековая и каждый раз, когда Чанека проходит через ребро в обратном направлении, цвет шарика, вынутого из стека, совпадает с цветом пройденного ребра.

Можно ли направить все неориентированные ребра и раскрасить все рёбра так, чтобы все стековые прогулки были также шаро-стековыми? Если это возможно, то найдите пример, в котором используется максимальное количество различных цветов среди всех допустимых способов направления и раскраски. Если таких решений несколько, выведите любое из них.

\(^\dagger\) Дерево — это связный граф, не имеющий циклов.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2\leq n\leq10^5\)) — количество вершин в графе.

В \(i\)-й из следующих \(n-1\) строк содержится три целых числа \(u_i\), \(v_i\) и \(t_i\) (\(1 \leq u_i,v_i \leq n\); \(0\leq t_i\leq1\)) — ненаправленное ребро, соединяющее вершины \(u_i\) и \(v_i\), если \(t_i=0\), или направленное ребро из вершины \(u_i\) в вершину \(v_i\), если \(t_i=1\). Если сделать все ребра ненаправленными, то граф станет деревом.

Выходные данные

Выведите одно число \(-1\), если искомой конструкции не существует.

В противном случае вывод состоит из \(n\) строк, описывающих вашу конструкцию. Первая строка содержит целое число \(z\), равное количеству используемых цветов. В \(i\)-й из следующих \(n-1\) строк содержится три целых числа \(p\), \(q\) и \(c\) (\(1\leq p,q\leq n\); \(1\leq c\leq z\)) — ребро, соединяющее вершины \(p\) и \(q\) в графе, направлено от вершины \(p\) к вершине \(q\) и окрашено в цвет \(c\). Если таких решений несколько, выведите любое из них.

Обратите внимание, что поскольку в вашей конструкции должно быть \(z\) различных цветов, это означает, что каждый цвет от \(1\) до \(z\) должен встречаться в графе хотя бы один раз.

Примечание

Ниже приведен заданный граф.

Чанека может направить все неориентированные ребра и раскрасить каждое ребро следующим образом:

В качестве примера рассмотрим путь \(3→1→5→2→5→4→5\). Покажем, что этот путь является шаро-стековым.

  1. Чанека начинается в вершине \(3\). Стеком является \([]\).
  2. Чанека переходит в вершину \(1\). Она кладет шар цвета \(3\). В стеке \([3]\).
  3. Чанека перемещается в вершину \(5\). Она кладет шар цвета \(2\). В стеке \([3,2]\).
  4. Чанека перемещается в вершину \(2\). Она убирает шар цвета \(2\) (того же цвета, что и ребро). В стеке оказывается \([3]\).
  5. Чанека перемещается в вершину \(5\). Она кладет шар цвета \(2\). В стеке \([3,2]\).
  6. Чанека перемещается в вершину \(4\). Она кладет шар цвета \(1\). В стеке \([3,2,1]\).
  7. Чанека перемещается в вершину \(5\). Она убирает шар цвета \(1\) (того же цвета, что и ребро). В стеке оказывается \([3,2]\).

Поскольку каждый раз, когда Чанека снимает шар со стека, он имеет тот же цвет, что и пройденное ребро, то вышеописанная прогулка является шаро-стековой. Можно показать, что если мы направим и раскрасим ребра так, как показано выше, то любая возможная стековая прогулка будет также шаро-стековой.

B. Алекса и стек

Конструктив математика *800

После Сербской олимпиады по информатике Алекса был очень грустен, потому что он не выиграл медаль (он не знал о стеке), поэтому Василий пришёл и дал ему легкую задачу, чтобы сделать его день лучше.

Василий дал Алексе положительное целое число \(n\) (\(n \ge 3\)) и попросил его построить строго возрастающий массив размера \(n\) из положительных целых чисел так, чтобы

  • \(3\cdot a_{i+2}\) не делилось на \(a_i+a_{i+1}\) для каждого \(i\) (\(1\le i \le n-2\)).

Обратите внимание, что строго возрастающий массив \(a\) размера \(n\) - это массив, где \(a_i < a_{i+1}\) для каждого \(i\) (\(1 \le i \le n-1\)).

Поскольку Алекса думает, что он плохой программист, он попросил вас помочь ему найти такой массив.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Затем следует описание наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(3 \le n \le 2 \cdot 10^5\)) — количество элементов в массиве.

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(a_1, a_2, a_3, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Можно доказать, что решение существует для любого \(n\). Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных примера \(a_1=6\), \(a_2=8\), \(a_3=12\), поэтому \(a_1+a_2=14\), и \(3 \cdot a_3=36\), поэтому \(a_1+a_2\) не делит \(3 \cdot a_3\).

B. Фишки на доске

жадные алгоритмы Конструктив *900

У вас есть доска размером \(n \times n\) (\(n\) строк и \(n\) столбцов) и два массива положительных целых чисел \(a\) и \(b\) размера \(n\).

Ваша задача — разместить фишки на этой доске таким образом, чтобы для каждой клетки \((i, j)\) выполнялось следующее условие:

  • есть хотя бы одна клетка с фишкой либо в том же столбце, либо в той же строке, что и \((i, j)\). Иными словами, существует такая клетка с фишкой \((x, y)\), что \(x = i\) или \(y = j\) (или выполняются оба условия).

Стоимость размещения фишки в клетке \((i, j)\) равна \(a_i + b_j\).

Например, для \(n=3\), \(a=[1, 4, 1]\) и \(b=[3, 2, 2]\) один из способов расставить фишки следующий:

Свободные клетки обозначены белым цветом

Суммарная стоимость для такого размещения равна \((1+3) + (1+2) + (1+2) = 10\).

Вычислите минимально возможную суммарную стоимость размещения фишек в соответствии с вышеописанными правилами.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого теста содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \dots, b_n\) (\(1 \le b_i \le 10^9\)).

Сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимально возможную суммарную стоимость размещения фишек в соответствии с правилами.

Примечание

Первый набор входных данных примера разобран в условии.

E. Интерактивная игра с раскраской

графы Деревья интерактив Конструктив Перебор поиск в глубину и подобное реализация *2400

Это интерактивная задача. Не забывайте о том, что ваша программа должна каждый раз после вывода запроса сбрасывать буфер вывода. Для сброса буфера вывода можно использовать fflush(stdout) в C++, system.out.flush() в Java, stdout.flush() в Python или flush(output) в Pascal. Если вы используете другой язык программирования, посмотрите в его документации, как выполняется эта операция. Также рекомендуем вам прочесть руководство по интерактивным задачам: https://cf.m27.workers.dev/blog/entry/45307.

Дано дерево с \(n\) вершинами; вершина \(1\) является корнем дерева. Для каждого \(i \in [2, n]\) вам дан родитель \(i\)-й вершины \(p_i\); для каждой вершины соблюдается \(p_i < i\).

Вам предстоит раскрасить все ребра дерева, используя минимально возможное количество цветов, таким образом, чтобы выиграть в игру на этом дереве (каждое ребро должно быть окрашено в ровно один цвет).

Игра, в которую мы собираемся играть, будет проходить следующим образом. После того как вы раскрасите ребра и выведите их цвета, жюри поместит фишку в одну из вершин дерева (кроме корня). Ваша цель — переместить эту фишку в корень ровно за \(d\) ходов, где \(d\) — расстояние от вершины до корня (расстояние равно количеству ребер на пути). Если фишка достигает корня за \(d\) ходов, вы выигрываете. В противном случае вы проигрываете.

Жюри не сообщит вам, где находится фишка. Вы даже не будете знать значение \(d\) заранее. Однако в начале каждого хода вам будет сообщено, сколько ребер каждого цвета инцидентно текущей вершине (это включает как ребро, ведущее вверх по дереву, так и ребра, ведущие вниз). Вы должны выбрать один из этих цветов, и фишка будет перемещена вдоль ребра выбранного цвета (если есть несколько ребер с этим цветом, жюри выбирает одно из них). После перемещения фишки вам снова будет сообщена та же информация о текущей вершине, и игра продолжается, пока вы не достигнете корня или не сделаете \(d\) ходов, не достигнув корня.

Интерактор для этой задачи является адаптивным. Это означает, что начальная вершина и текущая вершина не фиксированы и могут изменяться «на ходу» в зависимости от вывода вашей программы. Однако состояние игры всегда будет согласовано с информацией, которую вы получаете: всегда будет как минимум одна начальная вершина и как минимум один путь вашей фишки из этой вершины, согласующийся как с информацией о цветах, которую вы получаете, так и с цветами, которые вы выбирали во время ходов.

Входные данные

Первая строка содержит одно целое число \(n\) (\(3 \le n \le 100\)) — количество вершин в дереве.

Вторая строка содержит \(n-1\) целых чисел \(p_2, p_3, \dots, p_n\) (\(1 \le p_i < i\)), где \(p_i\) — родитель \(i\)-й вершины в дереве.

Протокол взаимодействия

Сначала вы должны вывести выбранную вами раскраску ребер следующим образом:

  • в первой строке выведите одно целое число \(k\) (\(1 \le k \le n - 1\)) — количество используемых вами цветов;
  • во второй строке выведите \(n-1\) целых чисел \(c_2, c_3, \dots, c_n\) (\(1 \le c_i \le k\)), где \(c_i\) — цвет ребра, соединяющего вершины \(p_i\) и \(i\).

Затем начинается игра. В начале каждого хода программа жюри выводит что-то одно из следующего:

  • целое число \(1\) на отдельной строке, указывающее, что фишка достигла корня, и вы выиграли;
  • целое число \(-1\) на отдельной строке, указывающее, что вы не достигли корня за \(d\) ходов и проиграли, или вы сделали что-то неправильно (либо раскраска, которую вы предоставили, не соответствует ограничениям, либо ваш предыдущий ход невозможен);
  • или целое число \(0\) на отдельной строке, за которым следует строка, содержащая \(k\) целых чисел \(e_1, e_2, \dots, e_k\), где \(e_i\) — количество ребер с цветом \(i\), инцидентных текущей вершине.

Если вы получаете \(1\) или \(-1\), ваша программа должна немедленно завершиться, в противном случае вердикт для вашей посылки может быть неопределенным. Если вы получаете \(0\), за которым следуют \(k\) целых чисел \(e_1, e_2, \dots, e_k\), вы должны вывести одно целое число, указывающее цвет, который вы выбираете во время хода (конечно, \(e_i\) для этого цвета не должно быть равно \(0\)).

Не забывайте сбрасывать буфер вывода каждый раз, когда что-то выводите!

Примечание

В первом примере каждая вершина от \(2\) до \(n\) соединена с корнем. Поэтому мы можем покрасить все ребра в один цвет \(1\), и когда игра начнется, будет только одно ребро, инцидентное текущей вершине (и оно будет вести к корню).

Во втором примере дерево представляет собой путь из \(4\) вершин. Мы должны покрасить его ребра в разные цвета, потому что можно показать, что у нас нет выигрышной стратегии с двумя цветами.

B. Объединение множеств

битмаски жадные алгоритмы Конструктив Перебор *1300

Даны \(n\) множеств \(S_{1}, S_{2}, \ldots, S_{n}\), состоящих из целых чисел. Назовём множество \(S\) доступным, если можно выбрать некоторые из множеств \(S_{1}, S_{2}, \ldots, S_{n}\) (возможно, ни одного) так, что \(S\) равно их объединению\(^{\dagger}\). Если ни одно из множеств \(S_{1}, S_{2}, \ldots, S_{n}\) не выбрано, то объединение равно пустому множеству.

Найдите наибольшее возможное число элементов в доступном \(S\), таком что \(S \neq S_{1} \cup S_{2} \cup \ldots \cup S_{n}\).

\(^{\dagger}\) Объединение множеств \(A_1, A_2, \ldots, A_k\) определяется как множество элементов, присутствующих по крайней мере в одном из этих множеств. Результат обозначается через \(A_1 \cup A_2 \cup \ldots \cup A_k\). Например, \(\{2, 4, 6\} \cup \{2, 3\} \cup \{3, 6, 7\} = \{2, 3, 4, 6, 7\}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 50\)).

Следующие \(n\) строк каждого набора входных данных описывают множества \(S_1, S_2, \ldots, S_n\). В \(i\)-й из этих строк содержится целое число \(k_{i}\) (\(1 \le k_{i} \le 50\)) — число элементов в \(S_{i}\), а затем \(k_{i}\) целых чисел \(s_{i, 1}, s_{i, 2}, \ldots, s_{i, k_{i}}\) (\(1 \le s_{i, 1} < s_{i, 2} < \ldots < s_{i, k_{i}} \le 50\)) — элементы \(S_{i}\).

Выходные данные

Для каждого набора входных данных выведите одно число — наибольшее возможное число элементов в доступном \(S\), таком что \(S \neq S_{1} \cup S_{2} \cup \ldots \cup S_{n}\).

Примечание

В первом наборе входных данных \(S = S_{1} \cup S_{3} = \{1, 2, 3, 4\}\) — самое большое доступное множество, не равное \(S_1 \cup S_2 \cup S_3 = \{1, 2, 3, 4, 5\}\).

Во втором наборе входных данных можно выбрать \(S = S_{2} \cup S_{3} \cup S_{4} = \{2, 3, 4, 5, 6\}\).

В третьем наборе входных данных можно выбрать \(S = S_{2} \cup S_{5} = S_{2} \cup S_{3} \cup S_{5} = \{3, 5, 6, 8, 9, 10\}\).

В четвёртом наборе входных данных единственным доступным множеством является \(S = \varnothing\).

E1. Две перестановки (простая версия)

жадные алгоритмы Конструктив Перебор теория чисел *2400

Это простая версия задачи. Различие между двумя версиями заключается в том, что в этой версии не нужно минимизировать число выполняемых операций. Делать взломы можно только в том случае, если решены обе версии задачи.

Даны две перестановки\(^{\dagger}\) \(p_{1}, p_{2}, \ldots, p_{n}\) (чисел от \(1\) до \(n\)) и \(q_{1}, q_{2}, \ldots, q_{m}\) (чисел от \(1\) до \(m\)). Изначально \(p_{i}=a_{i}\) для всех \(i=1, 2, \ldots, n\), а также \(q_{j} = b_{j}\) для всех \(j = 1, 2, \ldots, m\). Вы можете применять к перестановкам следующую операцию несколько раз (возможно, ни одного).

За одну операцию \(p\) и \(q\) меняются в соответствии с тремя следующими шагами:

  • Вы выбираете целые числа \(i\), \(j\), такие что \(1 \le i \le n\) and \(1 \le j \le m\).
  • Перестановка \(p\) разбивается на три части, получающиеся пр и рассмотрении \(p_i\) в качестве разделителя: левая часть состоит из \(p_1, p_2, \ldots, p_{i-1}\) (эта часть может быть пустой), средняя часть состоит из одного числа \(p_i\), а правая часть состоит из \(p_{i+1}, p_{i+2}, \ldots, p_n\) (эта часть может быть пустой). Далее, нужно переставить местами левую и правую часть в этом разбиении. Формально, после этого шага \(p\) становится равной \(p_{i+1}, p_{i+2}, \ldots, p_{n}, p_{i}, p_{1}, p_{2}, \ldots, p_{i-1}\). Элементы вновь образованной \(p\) нумеруются заново, начиная с \(1\).
  • Проделайте то же преобразование над \(q\) с индексом \(j\). Формально, после этого шага \(q\) становится равной \(q_{j+1}, q_{j+2}, \ldots, q_{m}, q_{j}, q_{1}, q_{2}, \ldots, q_{j-1}\). Элементы вновь образованной \(q\) нумеруются заново, начиная с \(1\).

Ваша цель — добиться одновременного выполнения равенств \(p_{i}=i\) для всех \(i=1, 2, \ldots, n\), а также \(q_{j} = j\) для всех \(j = 1, 2, \ldots, m\).

Найдите произвольный способ добиться этого, используя не более \(10\,000\) операций, или сообщите, что это невозможно. Обратите внимание: вам не нужно минимизировать число выполненных операций.

Можно показать, что если цель достижима, то существует способ добиться её, используя не более \(10\,000\) операций.

\(^{\dagger}\) Перестановкой длины \(k\) является массив, состоящий из \(k\) различных целых чисел от \(1\) до \(k\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(k=3\), но в массиве встречается \(4\)).

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2500\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)).

Третья строка содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(1 \le b_i \le m\)).

Гарантируется, что \(a\) и \(b\) являются перестановками.

Выходные данные

Если решения не существует, выведите одно целое число \(-1\).

Иначе сначала выведите целое число \(k\) (\(0 \le k \le 10\,000\)) — число выполняемых операций, а в каждой из последующих \(k\) строк выведите два числа \(i\) и \(j\) (\(1 \le i \le n\), \(1 \le j \le m\)) — числа, выбранные на очередной итерации.

Если существует несколько решений, выведите любое из них.

Обратите внимание: вам не нужно минимизировать число выполненных операций.

Примечание

В первом тесте можно достичь цели за \(2\) операции:

  1. На первой операции выбрать \(i = 3\), \(j = 4\). После этого \(p\) станет \([3, 2, 1]\), а \(q\) станет \([3, 4, 5, 2, 1]\).
  2. На второй операции выбрать \(i = 2\), \(j = 4\). После этого \(p\) станет \([1, 2, 3]\), а \(q\) станет \([1, 2, 3, 4, 5]\).

В третьем тесте достичь цели невозможно.

E2. Две перестановки (сложная версия)

Конструктив *3100

Это сложная версия задачи. Различие между двумя версиями заключается в том, что в этой версии нужно минимизировать число выполняемых операций. Делать взломы можно только в том случае, если решены обе версии задачи.

Даны две перестановки\(^{\dagger}\) \(p_{1}, p_{2}, \ldots, p_{n}\) (чисел от \(1\) до \(n\)) и \(q_{1}, q_{2}, \ldots, q_{m}\) (чисел от \(1\) до \(m\)). Изначально \(p_{i}=a_{i}\) для всех \(i=1, 2, \ldots, n\), а также \(q_{j} = b_{j}\) для всех \(j = 1, 2, \ldots, m\). Вы можете применять к перестановкам следующую операцию несколько раз (возможно, ни одного).

За одну операцию \(p\) и \(q\) меняются в соответствии с тремя следующими шагами:

  • Вы выбираете целые числа \(i\), \(j\), такие что \(1 \le i \le n\) and \(1 \le j \le m\).
  • Перестановка \(p\) разбивается на три части, получающиеся пр и рассмотрении \(p_i\) в качестве разделителя: левая часть состоит из \(p_1, p_2, \ldots, p_{i-1}\) (эта часть может быть пустой), средняя часть состоит из одного числа \(p_i\), а правая часть состоит из \(p_{i+1}, p_{i+2}, \ldots, p_n\) (эта часть может быть пустой). Далее, нужно переставить местами левую и правую часть в этом разбиении. Формально, после этого шага \(p\) становится равной \(p_{i+1}, p_{i+2}, \ldots, p_{n}, p_{i}, p_{1}, p_{2}, \ldots, p_{i-1}\). Элементы вновь образованной \(p\) нумеруются заново, начиная с \(1\).
  • Проделайте то же преобразование над \(q\) с индексом \(j\). Формально, после этого шага \(q\) становится равной \(q_{j+1}, q_{j+2}, \ldots, q_{m}, q_{j}, q_{1}, q_{2}, \ldots, q_{j-1}\). Элементы вновь образованной \(q\) нумеруются заново, начиная с \(1\).

Ваша цель — добиться одновременного выполнения равенств \(p_{i}=i\) для всех \(i=1, 2, \ldots, n\), а также \(q_{j} = j\) для всех \(j = 1, 2, \ldots, m\).

Найдите произвольный способ добиться этого, используя наименьшее возможное число операций, или сообщите, что это невозможно. Обратите внимание: вам нужно минимизировать число выполненных операций.

\(^{\dagger}\) Перестановкой длины \(k\) является массив, состоящий из \(k\) различных целых чисел от \(1\) до \(k\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(k=3\), но в массиве встречается \(4\)).

Входные данные

Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 2500\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)).

Третья строка содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(1 \le b_i \le m\)).

Гарантируется, что \(a\) и \(b\) являются перестановками.

Выходные данные

Если решения не существует, выведите одно целое число \(-1\).

Иначе сначала выведите целое число \(k\) — число выполняемых операций, а в каждой из последующих \(k\) строк выведите два числа \(i\) и \(j\) (\(1 \le i \le n\), \(1 \le j \le m\)) — числа, выбранные на очередной итерации.

Если существует несколько решений, выведите любое из них.

Обратите внимание: вам нужно минимизировать число выполненных операций.

Примечание

В первом тесте можно достичь цели за \(2\) операции:

  1. На первой операции выбрать \(i = 3\), \(j = 4\). После этого \(p\) станет \([3, 2, 1]\), а \(q\) станет \([3, 4, 5, 2, 1]\).
  2. На второй операции выбрать \(i = 2\), \(j = 4\). После этого \(p\) станет \([1, 2, 3]\), а \(q\) станет \([1, 2, 3, 4, 5]\).

В третьем тесте достичь цели невозможно.

A. Сумма трех

Конструктив математика Перебор *800

У Монокарпа есть целое число \(n\).

Он хочет представить свое число в виде суммы трех различных целых положительных чисел \(x\), \(y\) и \(z\). При этом Монокарп хочет, чтобы никакое из чисел \(x\), \(y\) и \(z\) не было кратно трем, то есть ни одно из этих чисел не делилось нацело на \(3\).

Перед вами стоит задача помочь Монокарпу и найти любую подходящую тройку различных целых положительных чисел \(x\), \(y\) и \(z\), либо сообщить, что такой тройки не существует.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 10^{9}\)).

Выходные данные

На каждый набор входных данных, если не существует подходящей тройки \(x\), \(y\) и \(z\), в первую строку выведите NO.

В противном случае, в первую строку выведите YES. Во вторую строку выведите подходящую тройку различных целых положительных чисел \(x\), \(y\) и \(z\) таких, что \(x + y + z = n\), и никакое из выведенных чисел не кратно числу \(3\). Если подходящих троек несколько, выведите любую из них.

Примечание

В первом наборе входных данных одна из подходящих троек \(x = 4\), \(y = 5\), \(z = 1\). Никакое из этих чисел не кратно трем, а \(4 + 5 + 1 = 10\).

Во втором наборе не существует ни одной подходящей тройки чисел.

В третьем наборе одна из подходящих троек \(x = 2\), \(y = 8\), \(z = 5\). Никакое из этих чисел не кратно трем, а \(2 + 8 + 5 = 15\).

В четвертом наборе не существует ни одной подходящей тройки чисел.

E. I Wanna be the Team Leader

битмаски дп жадные алгоритмы Конструктив математика сортировки *2400

Монокарп является руководителем команды в крупной IT-компании.

Его команде программистов поручены \(m\) проектов, пронумерованных от \(1\) до \(m\). У \(i\)-го проекта уровень сложности \(b_i\).

В команде \(n\) программистов, пронумерованных от \(1\) до \(n\). У \(j\)-го программиста уровень стрессоустойчивости \(a_j\).

Монокарп хочет назначить программистов на проекты таким образом, чтобы:

  • каждый программист был назначен на не более чем один проект;
  • на каждый проект был назначен хотя бы один программист;
  • пусть на \(i\)-й проект назначены \(k\) программистов; тогда все назначенные программисты должны иметь уровень стрессоустойчивости, больший или равный \(\frac{b_i}{k}\).

Помогите Монокарпу назначить программистов на проекты. Если есть несколько ответов, выведите любой из них.

Входные данные

В первой строке записаны два целых числа \(n\) и \(m\) (\(1 \le n \le 2 \cdot 10^5\); \(1 \le m \le 20\)) — количество программистов и количество проектов.

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)) — уровень стрессоустойчивости каждого программиста.

В третьей строке записаны \(m\) целых чисел \(b_1, b_2, \dots, b_m\) (\(1 \le b_i \le 10^9\)) — уровень сложности каждого проекта.

Выходные данные

Если нельзя назначить программистов, выведите «NO».

В противном случае, в первой строке выведите «YES». В \(i\)-й из следующих \(m\) строк выведите список программистов, назначенных на \(i\)-й проект: сначала количество программистов, затем их индексы в произвольном порядке.

Если есть несколько ответов, выведите любой из них.

C. Минимальный массив

Бинарный поиск жадные алгоритмы Конструктив Перебор Структуры данных хэши *2400

Дан массив \(a\) длины \(n\), состоящий из целых чисел. Далее к нему последовательно \(q\) раз применяют следующую операцию:

  • Выбирают индексы \(l\) и \(r\) (\(1 \le l \le r \le n\)) и целое число \(x\);
  • Ко всем элементам массива \(a\) на отрезке \([l, r]\) прибавляют \(x\). Более формально, присваивают \(a_i := a_i + x\) для всех \(l \le i \le r\).

Пусть \(b_j\) — массив \(a\), полученный после применения первых \(j\) операций (\(0 \le j \le q\)). Обратите внимание, что \(b_0\) — это массив \(a\) до применения всех операций.

Вам нужно найти лексикографически минимальный\(^{\dagger}\) массив среди всех \(b_j\).

\(^{\dagger}\)Массив \(x\) лексикографически меньше чем массив \(y\), если есть индекс \(i\) такой, что \(x_i < y_i\), и \(x_j = y_j\) для всех \(j < i\). Иными словами, для первого такого индекса \(i\), где массивы различны, \(x_i < y_i\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \le a_i \le 10^9\)) — элементы массива \(a\).

Третья строка каждого набора входных данных содержит одно целое число \(q\) (\(0 \le q \le 5 \cdot 10^5\)) — количество операций с массивом.

В каждой из следующих \(q\) строк находятся по три целых числа \(l_j\), \(r_j\) и \(x_j\) \((1 \le l_j \le r_j \le n, -10^9 \le x_j \le 10^9)\) — описание каждой операции. Операции следуют в порядке их применения.

Гарантируется, что сумма \(n\) по всем наборам входных данных и сумма \(q\) по всем наборам входных данных не превосходят \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите лексикографически минимальный массив среди всех \(b_j\).

Примечание

В первом наборе входных данных:

  • \(b_0 = [1,2,3,4]\);
  • \(b_1 = [1,2,3,4]\);
  • \(b_2 = [-99,-98,-97,4]\).

Таким образом, лексикографически минимальным является массив \(b_2\).

Во втором наборе входных данных лексикографически минимальным является массив \(b_0\).

E. Хорошие раскраски

Бинарный поиск графы интерактив Конструктив *3100

Алиса предложила Бобу сыграть в игру. Бобу эта идея не понравилась, но отказать Алисе он не смог, а потому попросил вас написать программу, которая будет играть вместо него.

Игра начинается с того, что Алиса достает клетчатый лист размера \(n \times n\), клетки которого изначально не закрашены. После этого она закрашивает какие-то \(2n\) различных клеток в цвета \(1,2,\ldots, 2n\), соответственно, и сообщает об этих клетках Бобу.

За один ход Боб может указать на какую-то ещё не закрашенную клетку и попросить Алису закрасить эту клетку. Алиса закрашивает эту клетку в один из \(2n\) цветов по своему выбору, сообщая при этом Бобу выбранный цвет. Боб может сделать не более \(10\) ходов, после чего ему требуется найти хорошую четвёрку клеток.

Четвёрка клеток называется хорошей, если выполняются следующие условия:

  • Все клетки из четвёрки закрашены;
  • Никакие две клетки из четвёрки не раскрашены в один и тот же цвет;
  • Центры клеток образуют прямоугольник, стороны которого параллельны линиям сетки.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 200\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 1000\)) — размер поля.

\(i\)-я из следующих \(2n\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\)) — координаты клетки, покрашенной в \(i\)-й цвет.

Гарантируется, что все координаты \((x_i, y_i)\) попарно различны для одного набора входных данных.

После считывания входных данных для каждого набора продолжите взаимодействие описанным ниже образом.

Протокол взаимодействия

Вы можете совершить не более \(10\) ходов. Чтобы сделать ход, выведите «? \(x\) \(y\)» (\(1 \leq x,y \leq n\)). В ответ на это программа жюри в единственной строке выведет единственное целое число от \(1\) до \(2n\) — цвет клетки \((x,y)\).

После всех ходов (не обязательно делать все \(10\) ходов и не обязательно делать хотя бы один ход) выведите строку в формате «! \(x_1\) \(x_2\) \(y_1\) \(y_2\)» (\(1 \leq x_1, x_2, y_1, y_2 \leq n, x_1 \ne x_2, y_1 \ne y_2\)). Если клетки \((x_1, y_1)\), \((x_1, y_2)\), \((x_2, y_1)\), \((x_2, y_2)\) раскрашены в различные цвета, то программа жюри выведет «OK». После этого переходите к следующему набору входных данных или завершите программу, если наборов больше не осталось.

В ином случае, если какие-то из указанных клеток раскрашены в один цвет или одна из клеток ещё не раскрашена, то программа жюри выведет вам «ERROR». В таком случае ваша программа должна немедленно завершить своё исполнение, чтобы получить вердикт Неправильный ответ. В противном случае вы можете получить произвольный вердикт.

После каждого хода или ответа не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Обратите внимание, что интерактор является адаптивным, то есть цвет, в который Алиса будет закрашивать клетки при ходах Боба, не фиксирован заранее.

Взломы

Вы не можете делать взломы в этой задаче.

Примечание

В первом наборе входных данных:

Во втором наборе входных данных клетки с координатами \((1, 1), (1, 2), (2, 1), (2, 2)\) изначально раскрашены Алисой в различные цвета.

F. Минимальные отрезки

Конструктив *3400

У вас была последовательность \(a_1, a_2, \ldots, a_n\), состоящая из целых чисел от \(1\) до \(n\), не обязательно различных. По неизвестной причине вы решили посчитать следующую характеристику последовательности:

  • Пусть \(r_i\) (\(1 \le i \le n\)) равно наименьшему \(j \ge i\), такому, что на подотрезке \(a_i, a_{i+1}, \ldots, a_j\) встречаются все различные числа из последовательности \(a\). Более формально, для любого \(k \in [1, n]\) существует \(l \in [i, j]\), такое, что \(a_k = a_l\). Если такого \(j\) не существует, \(r_i\) полагается равным \(n+1\).
  • Характеристикой последовательности \(a\) назовем последовательность \(r_1, r_2, \ldots, r_n\).
К сожалению, последовательность \(a\) потерялась, но у вас осталась её характеристика \(r\). Вы хотите восстановить любую последовательность \(a\), подходящую под характеристику, или определить, что в характеристику закралась ошибка, и такой последовательности не существует.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина потерянной последовательности \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(r_1, r_2, \ldots, r_n\) (\(i \le r_i \le n+1\)) — характеристика потерянной последовательности \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите следующее:

  • Если не существует последовательности \(a\) с характеристикой \(r\), то выведите «No».
  • Иначе, в первой строке выведите «Yes», а во второй строке выведите любую последовательность целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)), подходящую под характеристику \(r\).
Вы можете выводить «Yes» и «No» в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).
Примечание

В первом наборе входных данных подходит последовательность \(a = [1, 2, 1]\). На подотрезках \([1, 2]\) и \([2, 3]\) встречаются числа \(1\) и \(2\).

Во втором наборе входных данных можно показать, что подходящей последовательности \(a\) не существует.

A. Циншань любит строки 2

жадные алгоритмы Конструктив реализация *1300

У Циншань есть строка \(s\), которая содержит только \(\texttt{0}\) и \(\texttt{1}\).

Строка \(a\) длины \(k\) является хорошей тогда и только тогда, когда

  • \(a_i \ne a_{k-i+1}\) для всех \(i=1,2,\ldots,k\).

Для участников Div. 2: обратите внимание, что это условие отличается от условия в задаче B.

Например, \(\texttt{10}\), \(\texttt{1010}\), \(\texttt{111000}\) — хорошие строки, а \(\texttt{11}\), \(\texttt{101}\), \(\texttt{001}\), \(\texttt{001100}\) — плохие.

Циншань хочет сделать \(s\) хорошей. Для этого она может проделать следующую операцию не более \(300\) раз (возможно, ноль):

  • вставить \(\texttt{01}\) в любое место строки \(s\) (получив новую строку \(s\)).

Скажите, возможно ли сделать \(s\) хорошей. Если это возможно, то приведите последовательность операций, которая делает строку \(s\) хорошей.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n\le 100\)) — длину строки \(s\), соответственно.

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(n\).

Гарантируется, что \(s\) состоит только из \(\texttt{0}\) и \(\texttt{1}\).

Выходные данные

Для каждого набора входных данных, если невозможно сделать \(s\) хорошей, выведите \(-1\).

В противном случае в первой строке выведите \(p\) (\(0 \le p \le 300\)) — количество операций.

Затем выведите \(p\) целых чисел во второй строке. Целое число \(i\) должно быть индексом \(x_i\) (\(0 \le x_i \le n+2i-2\)) — позицией, в которую необходимо вставить \(\texttt{01}\) в текущем \(s\). Если \(x_i=0\), то \(\texttt{01}\) вставляется в начало \(s\). В противном случае, \(\texttt{01}\) вставляется сразу после \(x_i\)-го символа \(s\).

Можно показать, что при данных ограничениях, если ответ существует, то всегда найдется ответ, требующий не более \(300\) операций.

Примечание

В первом наборе входных данных можно выполнить ноль операций и получить \(s=\texttt{01}\), что является хорошей строкой.

Другим правильным решением является выполнение одной операции: (вставленная \(\texttt{01}\) подчеркнута)

  1. \(\texttt{0}\underline{\texttt{01}}\texttt{1}\)

получаем \(s = \texttt{0011}\), что является хорошей строкой.

Во втором и третьем наборах входных данных сделать \(s\) хорошей невозможно.

В четвертом наборе входных данных можно выполнить две операции:

  1. \(\texttt{001110}\underline{\texttt{01}}\)
  2. \(\texttt{0011100}\underline{\texttt{01}}\texttt{1}\)

и получить \(s = \texttt{0011100011}\), что является хорошей строкой.

B. План подключения от Дореми

жадные алгоритмы Конструктив математика сортировки *1700

Дореми живёт в стране, состоящей из \(n\) городов, пронумерованных от \(1\) до \(n\), причём в \(i\)-м городе живёт \(a_i\) человек. Страну можно смоделировать в виде неориентированного графа с \(n\) вершинами.

Изначально в графе нет рёбер. Дореми хочет сделать граф связным.

Для этого она может добавить ребро между \(i\) и \(j\), если

\(\) \sum_{k \in S} a_k \ge i\cdot j \cdot c, \(\)

где \(S\) — множество всех вершин, которые в данный момент находятся в одной компоненте связности либо с \(i\) или с \(j\), а \(c\) — фиксированная константа.

Может ли Дореми сделать граф связным?

Две вершины \((i, j)\) находятся в одной компоненте связности, если существует путь из \(i\) в \(j\). Граф является связным, если все его вершины находятся в одной компоненте связности.

Входные данные

Входные данные состоят из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка содержит два целых числа \(n\), \(c\) (\(2\le n\le 2\cdot 10^5\), \(1 \le c \le 10^6\)) — количество вершин и константу.

Вторая строка каждого набора входных данных содержит \( n \) целых чисел \( a_1,a_2,\ldots,a_n \) (\(0 \le a_i \le 10^{12}\)) — количество людей, проживающих в \(i\)-м городе.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если возможно сделать граф связным, и «NO» (без кавычек) в противном случае.

Буквы можно выводить в любом регистре (верхнем или нижнем).

Примечание

В первом наборе входных данных Дореми может добавлять ребра в следующем порядке:

  1. Добавить \((1,2)\). Эта операция допустима, так как \(a_1 + a_2 = 20 \ge i\cdot j \cdot c = 20\).
  2. Добавить \((1,3)\). Эта операция допустима, так как \(a_1 + a_2 + a_3 = 35 \ge i \cdot j \cdot c = 30\).
  3. Добавить \((1,4)\). Эта операция допустима, так как \(a_1 + a_2 + a_3 + a_4 = 45 \ge i \cdot j \cdot c = 40\).

Во втором наборе входных данных Дореми может добавить ребро \((1,2)\), так как \(a_1 + a_2 =2 \ge 1 \cdot 2 \cdot 1\). После этого граф становится связным.

В третьем наборе входных данных Дореми может добавлять ребра в порядке \((5,4)\), \((5,3)\), \((5,2)\) и \((5,1)\).

В четвертом наборе входных данных Дореми вообще не может добавить ни одного ребра.

A. Краска Дореми №3

Конструктив *800

Массив целых положительных чисел \(b_1, b_2, \ldots, b_n\) называется хорошим, если все суммы двух соседних элементов равны одному и тому же значению. Более формально, массив является хорошим, если существует такое число \(k\), что \(b_1 + b_2 = b_2 + b_3 = \ldots = b_{n-1} + b_n = k\).

У Дореми есть массив \(a\) длины \(n\). Она может переставлять его элементы (менять их порядок) как угодно. Определите, сможет ли она сделать массив хорошим.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 100\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \( n \) целых чисел \( a_1,a_2,\ldots,a_n \) (\(1 \le a_i \le 10^5\)).

Ограничений на сумму \(n\) по всем наборам входных данных нет.

Выходные данные

Для каждого набора входных данных выведите «Yes» (без кавычек), если массив можно сделать хорошим, и «No» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных \([8,9]\) и \([9,8]\) являются хорошими.

Во втором наборе входных данных массив \([1,2,1]\) является хорошим, так как \(a_1+a_2=a_2+a_3=3\).

Для третьего набора входных данных можно показать, что ни одна перестановка не является хорошей.

B. Циншань любит строки

Конструктив реализация *800

У Циншань есть строка \(s\), а у Даниэля — строка \(t\). Обе строки содержат только символы \(\texttt{0}\) и \(\texttt{1}\).

Строка \(a\) длины \(k\) является хорошей тогда и только тогда, когда

  • \(a_i \ne a_{i+1}\) для всех \(i=1,2,\ldots,k-1\).

Например, строки \(\texttt{1}\), \(\texttt{101}\), \(\texttt{0101}\) — хорошие, а \(\texttt{11}\), \(\texttt{1001}\), \(\texttt{001100}\) — плохие.

Циншань хочет сделать \(s\) хорошей. Для этого она может выполнить следующую операцию любое количество раз (возможно, нулевое):

  • вставить \(t\) в любую позицию \(s\) (получив новую строку \(s\)).

Пожалуйста, скажите Циншань, можно ли сделать \(s\) хорошей.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(T\) (\(1\le T\le 2000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n,m \le 50\)) — длины строк \(s\) и \(t\) соответственно.

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(n\).

Третья строка каждого набора входных данных содержит строку \(t\) длины \(m\).

Гарантируется, что \(s\) и \(t\) содержат только \(\texttt{0}\) и \(\texttt{1}\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если можно сделать \(s\) хорошей, и «NO» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных строка \(s\) изначально хорошая, поэтому можно получить хорошую \(s\), выполнив ноль операций.

Во втором наборе входных данных можно выполнить следующие две операции (вставленная строка \(t\) подчеркнута):

  1. \(\texttt{1}\underline{\texttt{010}}\texttt{11}\)
  2. \(\texttt{10101}\underline{\texttt{010}}\texttt{1}\)

и получить \(s = \texttt{101010101}\), что является хорошей строкой.

В третьем наборе входных данных нет способа сделать \(s\) хорошей после любого количества операций.

A. Сортировка двойками

Конструктив сортировки *800

Дан массив целых чисел \(a_1, a_2, \ldots, a_n\). За одну операцию вы делаете следующее:

  • Выбираете неотрицательное целое число \(m\), такое что \(2^m \leq n\).
  • Вычитаете \(1\) из \(a_i\) для всех целых \(i\), таких что \(1 \leq i \leq 2^m\).

Вам нужно определить можно ли отсортировать массив по неубыванию, выполнив некоторое число (возможно ноль) операций?

Массив называется неубывающим, если \(a_i \leq a_{i + 1}\) для всех целых \(i\), таких что \(1 \leq i \leq n - 1\).

Входные данные

В первой строке содержится единственное число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 20\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) — элементы массива \(a\) (\(0 \leq a_i \leq 1000\)).

Выходные данные

Для каждого набора входных данных выведите «YES» если можно отсортировать массив, и «NO» иначе.

Примечание

В первом наборе входных данных массив уже отсортирован по неубыванию, к нему можно не применять никаких действий.

Во втором наборе входных данных можно выбрать \(m = 1\) два раза и получить массив \([4, 3, 3, 4, 4]\). Затем можно выбрать \(m = 0\) один раз и получить отсортированный по неубыванию массив \([3, 3, 3, 4, 4]\).

В третьем наборе входных данных можно выбрать \(m = 0\) один раз и получить массив \([5, 5, 5, 7, 5, 6, 6, 8, 7]\). Далее можно выбрать \(m = 2\) два раза и получить массив \([3, 3, 3, 5, 5, 6, 6, 8, 7]\). Затем выбрать \(m = 3\) один раз и получить отсортированный по неубыванию массив \([2, 2, 2, 4, 4, 5, 5, 7, 7]\).

В четвертом и пятом наборе входных данных можно доказать, что нельзя отсортировать массив этими операциями.

C. Смайло и монстры

Бинарный поиск жадные алгоритмы Конструктив сортировки *1500

Мальчик Смайло играет в новую игру! В игре есть \(n\) орд монстров, в \(i\)-й орде \(a_i\) монстров. Цель игры — уничтожить всех монстров. Для этого у вас есть два типа атак и счетчик комбо \(x\), изначально равный \(0\):

  • Первый тип атаки: вы выбираете число \(i\) от \(1\) до \(n\) такое, что в орде с номером \(i\) остался хотя бы один монстр. Затем вы убиваете одного монстра из орды с номером \(i\), и счетчик комбо \(x\) увеличивается на \(1\).
  • Второй тип атаки: вы выбираете число \(i\) от \(1\) до \(n\) такое, что в орде с номером \(i\) осталось хотя бы \(x\) монстров. Затем вы применяете ультимейт и убиваете \(x\) монстров из орды под номером \(i\). После этого \(x\) обнуляется.

Ваша задача — зачистить всех монстров, то есть сделать так, чтобы ни в одной орде не осталось ни одного монстра. Смайло хочет как можно скорее победить, поэтому скажите, какое минимальное число атак можно применить?

Входные данные

В первой строке содержится единственное число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — число орд монстров.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — количества монстров в каждой орде.

Гарантируется, что сумма \(n\) по всем тестовым наборам не превосходит \(2 \cdot {10^5}\).

Выходные данные

Для каждого набора входных данных выведите минимальное число атак, которое нужно, чтобы убить всех монстров.

Примечание

В первом наборе входных данных можно применить атаку первого типа по одному разу на \(1\)-ю, \(3\)-ю и \(4\)-ю орду, затем добить атакой второго типа \(2\)-ю орду. Итого нужно \(4\) атаки.

Во втором наборе входных данных можно применить атаку первого типа по одному разу на \(1\)-ю, \(3\)-ю орду, затем добить атакой второго типа \(2\)-ю орду, затем применить атаку первого типа один раз на \(4\)-ю орду. Итого нужно \(4\) атаки.

В четвёртом наборе входных данных можно применить атаку первого типа один раз на \(1\)-ю орду, два раза на \(2\)-ю орду, затем применить один раз атаку второго типа на \(2\)-ю орду, затем применить один раз атаку первого типа на \(2\)-ю орду. Итого нужно \(5\) атак.

B. Нейтральная тональность

жадные алгоритмы Конструктив сортировки *1700

Вам дан массив \(a\) из \(n\) целых положительных чисел, а также массив \(b\) из \(m\) целых положительных чисел.

Пусть \(\text{LIS}(c)\) обозначает длину самой длинной строго возрастающей подпоследовательности массива \(c\). Например, \(\text{LIS}([2, \underline{1}, 1, \underline{3}])\) = \(2\), \(\text{LIS}([\underline{1}, \underline{7}, \underline{9}])\) = \(3\), \(\text{LIS}([3, \underline{1}, \underline{2}, \underline{4}])\) = \(3\).

Вам нужно вставить числа \(b_1, b_2, \ldots, b_m\) в массив \(a\), в любые места, в любом порядке. Пусть после вставки массив будет равен \(c_1, c_2, \ldots, c_{n+m}\). Вам нужно выбрать места для вставки так, чтобы минимизировать \(\text{LIS}(c)\).

Формально, вам нужно найти такой массив \(c_1, c_2, \ldots, c_{n+m}\), для которого одновременно выполняются следующие условия:

  • Массив \(a_1, a_2, \ldots, a_n\) является подпоследовательностью массива \(c_1, c_2, \ldots, c_{n+m}\).
  • Массив \(c_1, c_2, \ldots, c_{n+m}\) состоит из чисел \(a_1, a_2, \ldots, a_n, b_1, b_2, \ldots, b_m\), возможно, переставленных в другом порядке.
  • Значение \(\text{LIS}(c)\) минимально возможное среди всех подходящих массивов \(c\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) \((1 \leq t \leq 10^4)\) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целые числа \(n, m\) \((1 \leq n \leq 2 \cdot 10^5, 1 \leq m \leq 2 \cdot 10^5)\) — длину массива \(a\) и длину массива \(b\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((1 \leq a_i \leq 10^9)\) — элементы массива \(a\).

Третья строка каждого набора входных данных содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) \((1 \leq b_i \leq 10^9)\) — элементы массива \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\), а также сумма \(m\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n + m\) чисел — элементы итогового массива \(c_1, c_2, \ldots, c_{n+m}\), для которого значение \(\text{LIS}(c)\) является минимальным из возможных. Если подходящих массивов несколько, вы можете вывести любой из них.

Примечание

В первом наборе входных данных \(\text{LIS}(a) = \text{LIS}([6, 4]) = 1\). Можно вставить число \(5\) между \(6\) и \(4\), тогда \(\text{LIS}(c) = \text{LIS}([6, 5, 4]) = 1\).

Во втором наборе входных данных \(\text{LIS}([\underline{1}, 7, \underline{2}, \underline{4}, \underline{5}])\) = \(4\). После вставки, \(c = [1, 1, 7, 7, 2, 2, 4, 4, 5, 5]\). Несложно видеть, что \(\text{LIS}(c) = 4\). Можно показать, что значения \(\text{LIS}(c)\), меньшего чем \(4\), добиться невозможно.

D. Разноцветный конструктив

жадные алгоритмы Конструктив Структуры данных *2600

У вас есть \(n\) цветных кубиков, \(i\)-й кубик имеет цвет \(a_i\).

Вам надо разложить все кубики по полкам. Всего есть \(m\) полок, \(i\)-я из которых вмещает \(s_i\) кубиков. Также, \(s_1 + s_2 + \ldots + s_m = n\).

Допустим, на полке размера \(k\) лежат, в этом порядке, кубики цветов \(c_1, c_2, \ldots, c_k\). Тогда определим разноцветность полки как минимальное расстояние между двумя разными кубиками одного цвета, лежащими на полке, а если все кубики на полке имеют различные цвета, то разноцветность считается равной размеру полки, то есть числу \(k\).

Более формально, разноцветность \(c_1, c_2, \ldots, c_k\) определяется следующим образом:

  • Если все цвета \(c_1, c_2, \ldots, c_k\) различны, разноцветность считается равной \(k\);
  • Иначе разноцветность определяется как минимальное целое число \(x \geq 1\), для которого найдётся индекс \(i\) \((1 \le i \le k - x)\) такой, что \(c_i = c_{i+x}\).

Для каждой полки вам задана минимальная необходимая разноцветность, то есть вам даны числа \(d_1, d_2, \ldots, d_m\), означающие, что необходимо, чтобы полка \(i\) имела разноцветность \(\geq d_i\) для всех \(i\).

Распределите имеющиеся кубики по полкам, чтобы обеспечить необходимую разноцветность, или сообщите, что это невозможно.

Входные данные

Каждый тест состоят из нескольких наборов входных данных. Первая строка содержит целое число \(t\) \((1 \leq t \leq 10^4)\) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целые числа \(n, m\) \((1 \leq m \leq n \leq 2 \cdot 10^5)\) — количество кубиков и количество полок, на которые их надо разложить.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((1 \leq a_i \leq n)\) — цвета кубиков.

Третья строка каждого набора входных данных содержит \(m\) целых чисел \(s_1, s_2, \ldots, s_m\) \((1 \leq s_i \leq n)\) — размеры полок. Гарантируется, что \(s_1 + \ldots + s_m = n\).

Четвёртая строка каждого набора входных данных содержит \(m\) целых чисел \(d_1, d_2, \ldots, d_m\) \((1 \leq d_i \leq s_i)\) — минимальные необходимые разноцветности полок.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(-1\), если невозможно распределить кубики по полкам, выполнив все требования. Иначе, выведите \(m\) строк, \(i\)-я из которых содержит \(s_i\) чисел — цвета кубиков, лежащих на \(i\)-й полке, в подходящем порядке.

B. Два из трёх

Конструктив *1000

Вам дан массив \(a_1, a_2, \ldots, a_n\). Вам нужно найти такой массив \(b_1, b_2, \ldots, b_n\), который состоит из чисел \(1\), \(2\), \(3\), и для него выполняются ровно два из следующих трёх условий:

  1. Существуют такие индексы \(1 \leq i, j \leq n\), для которых \(a_i = a_j\), \(b_i = 1\), \(b_j = 2\).
  2. Существуют такие индексы \(1 \leq i, j \leq n\), для которых \(a_i = a_j\), \(b_i = 1\), \(b_j = 3\).
  3. Существуют такие индексы \(1 \leq i, j \leq n\), для которых \(a_i = a_j\), \(b_i = 2\), \(b_j = 3\).

Если подходящего массива не существует, вы должны сообщить об этом.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) \((1 \leq t \leq 500)\) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) \((1 \leq n \leq 100)\) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) \((1 \leq a_i \leq 100)\) — элементы массива \(a\).

Выходные данные

Для каждого набора входных данных выведите -1, если ответа не существует. Иначе выведите \(b_1, b_2, \ldots, b_n\) — массив, состоящий из чисел \(1\), \(2\), \(3\) и подходящий под ровно два условия из трёх перечисленных. Если ответов несколько, вы можете вывести любой из них.

Примечание

В первом наборе входных данных \(b = [1, 2, 3, 1, 1, 1]\) подходит под условие \(1\) так как при \(i = 4\), \(j = 2\): \(a_i = a_j\), \(b_i = 1\), \(b_j = 2\). Подходит под условие \(2\) так как при \(i = 6\), \(j = 3\): \(a_i = a_j\), \(b_i = 1\), \(b_j = 3\), и не подходит под условие \(3\). Итого выполнено ровно два условия из трёх.

D. XOR-конструктив

битмаски Деревья Конструктив математика строковые суфф. структуры Структуры данных *1900

Даны \(n-1\) целых чисел \(a_1, a_2, \dots, a_{n-1}\).

Ваша задача — построить массив \(b_1, b_2, \dots, b_n\) такой, что:

  • каждое целое число от \(0\) до \(n-1\) встречается в \(b\) ровно один раз;
  • для каждого \(i\) от \(1\) до \(n-1\), \(b_i \oplus b_{i+1} = a_i\) (где \(\oplus\) обозначает побитовое исключающее ИЛИ).
Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)).

Вторая строка содержит \(n-1\) целых чисел \(a_1, a_2, \dots, a_{n-1}\) (\(0 \le a_i \le 2n\)).

Дополнительное ограничение на входные данные: возможно построить как минимум один допустимый массив \(b\) для заданной последовательности \(a\).

Выходные данные

Выведите \(n\) целых чисел \(b_1, b_2, \dots, b_n\). Если существует несколько массивов, подходящих под условие задачи, вы можете вывести любой из них.

C. Сопоставление массивов

Бинарный поиск жадные алгоритмы Конструктив сортировки *1400

Даны два массива \(a\) и \(b\) длины \(n\). Назовём красотой массивов \(a\) и \(b\) количество индексов \(i\) таких, что \(a_i > b_i\).

Вам также дано целое число \(x\). Определите, можно ли переставить элементы \(b\) так, чтобы красота массивов стала равна \(x\). Если это возможно, то выведите любой подходящий массив, который можно получить из \(b\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(x\) (\(1 \le n \le 2\cdot 10^5\), \(0 \le x \le n\)) — длину массивов \(a\) и \(b\) и желаемую красоту массивов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 2n\)) — элементы массива \(a\).

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le 2n\)) — элементы массива \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «NO», если невозможно переставить \(b\) так, чтобы красота массивов стала равна \(x\).

В противном случае выведите «YES». Затем, в следующей строке выведите \(n\) целых чисел, которые представляют собой перестановку массива \(b\).

Если существует несколько решений, выведите любое из них.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В наборах входных данных 1 и 2 красота массивов может быть равна только \(0\), так как \(a_1 = 1 \le 2 = b_1\).

В наборах входных данных 3, 4, 5 и 6 возможны следующие красоты массивов: \(x = 1\) и \(x = 2\). В частности, если \(b\) сделать равным \([2, 4, 1]\), то \(a_3 = 3 > 1 = b_3\), поэтому красота массивов равна \(1\). Если же \(b\) не менять, то \(a_2 = 4 > b_2 = 1\) и \(a_3 = 3 > 2 = b_3\), так что красота массивов равна \(2\).

F. Инвертирование скобок

жадные алгоритмы Конструктив математика реализация *2600

Дана бинарная строка \(s\) длины \(2n\), каждый элемент которой равняется \(\mathtt{0}\) или \(\mathtt{1}\). Вы можете выполнять следующую операцию:

  1. Выбрать правильную скобочную последовательность\(^\dagger\) \(b\) длины \(2n\).
  2. Пройти по всем индексам \(i\) от \(1\) до \(2n\) по порядку. Если \(b_i\) — открывающая скобка, то обозначим за \(p_i\) минимальный индекс такой, что \(b[i,p_i]\) — правильная скобочная последовательность. Тогда к подотрезку с \(i\) по \(p_i\) из бинарной строки \(s\) применяется операция инвертирования\(^\ddagger\). Заметим, что поскольку правильная скобочная последовательность длины \(2n\) будет иметь \(n\) открывающих скобок, то мы выполним \(n\) операций инвертирования подотрезка над \(s\).

Ваша задача — найти последовательность из не более чем \(10\) операций, изменяющую все элементы \(s\) на \(\mathtt{0}\), или определить, что это невозможно. Заметим, что минимизировать количество операций не обязательно.

При заданных ограничениях можно доказать, что если существует способ изменить все элементы \(s\) на \(\mathtt{0}\), то существует способ, требующий не более \(10\) операций.

\(^\dagger\) Скобочная последовательность называется правильной, если ее можно превратить в корректное математическое выражение, добавив символы \(+\) и \(1\). Например, последовательности «(()()», «()» и «(()(())» являются правильными, а «)(», «(()» и «(())(» — не являются.

\(^\ddagger\) Если мы выполним операцию инвертирования для подотрезка с \(l\) по \(r\) бинарной строки \(s\), то мы инвертируем все значения \(s_i\) такие, что \(l \leq i \leq r\). Если \(s_i\) инвертируется, то мы присваиваем \(s_i := \mathtt{0}\), если изначально было \(s_i = \mathtt{1}\), и наоборот. Например, если \(s=\mathtt{1000101}\) и мы выполняем операцию инвертирования подотрезка с \(3\) по \(5\), то \(s\) изменится на \(s=\mathtt{1011001}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2\cdot 10^5\)) — где \(2n\) — длина строки \(s\).

Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длины \(2n\) (\(s_i = \mathtt{0}\) или \(s_i = \mathtt{1}\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в единственной строке \(-1\), если невозможно изменить все элементы \(s\) на \(\mathtt{0}\).

В противном случае выведите одно целое число \(k\) (\(0 \le k \le 10\)), равняющееся количеству операций, необходимому для изменения всех элементов \(s\) на \(\mathtt{0}\). Затем в следующих \(k\) строках выведите правильные скобочные последовательности длины \(2n\), представляющие собой операции, необходимые для изменения всех элементов \(s\) на \(0\).

Если существует несколько способов изменить все элементы \(s\) на \(\mathtt{0}\), требующих не более \(10\) операций, то можно вывести любой из них.

Примечание

В первом наборе входных данных можно показать, что невозможно изменить все элементы \(s\) на \(\mathtt{0}\).

Во втором наборе входных данных первая операция с использованием последовательности скобок \(b = \mathtt{()()}\) преобразует двоичную строку \(s=\mathtt{0000}\) в \(s=\mathtt{1111}\). Затем вторая операция с использованием той же последовательности скобок \(b = \mathtt{()()}\) преобразует двоичную строку \(s=\mathtt{1111}\) обратно в \(s=\mathtt{0000}\). Заметим, что поскольку все элементы \(s\) изначально уже равнялись \(\mathtt{0}\), то использование \(0\) операций также является правильным ответом.

В третьем наборе входных данных одна операция с использованием последовательности скобок \(b = \mathtt{(())()}\) изменит все элементы \(s\) на \(\mathtt{0}\). Операция будет происходить следующим образом:

  1. \(b_1\) — открывающая скобка, а \(p_1 = 4\), так как \(b[1,4]=\mathtt{(())}\) — правильная скобочная последовательность. Следовательно, выполнив операцию инвертирования подотрезка с \(1\) по \(4\) на бинарной строке \(s = \mathtt{100111}\), мы получим \(s = \mathtt{011011}\).
  2. \(b_2\) является открывающей скобкой, а \(p_2 = 3\), так как \(b[2,3]=\mathtt{()}\) является правильной скобочной последовательностью. Следовательно, выполнив операцию инвертирования подотрезка с \(2\) по \(3\) на бинарной строке \(s = \mathtt{011011}\), мы получим \(s = \mathtt{000011}\).
  3. \(b_3\) не является открывающей скобкой, поэтому на этом шаге операция инвертирования не выполняется.
  4. \(b_4\) не является открывающей скобкой, поэтому на этом шаге операция инвертирования не выполняется.
  5. \(b_5\) является открывающей скобкой, а \(p_5 = 6\), так как \(b[5,6]=\mathtt{()}\) является правильной скобочной последовательностью. Следовательно, выполнив операцию инвертирования подотрезка с \(5\) по \(6\) для бинарной строки \(s = \mathtt{000011}\), мы получим \(s = \mathtt{000000}\).
  6. \(b_6\) не является открывающей скобкой, поэтому на этом шаге операция инвертирования не выполняется.

В четвертом наборе входных данных первая операция с использованием скобочной последовательности \(b = \mathtt{(((())))}\) преобразует бинарную строку \(s = \mathtt{01011100}\) в \(s = \mathtt{11111001}\). Затем, вторая операция с использованием скобочной последовательности \(b = \mathtt{()()(())}\) преобразует бинарную строку \(s = \mathtt{11111001}\) в \(s=\mathtt{00000000}\).

G. Гонка пепе

интерактив Конструктив реализация сортировки *3200

Это интерактивная задача.

В гонках участвует \(n^2\) пепе, пронумерованных \(1, 2, \ldots, n^2\), с попарно различными скоростями. Вы хотите устроить несколько гонок, чтобы выяснить относительную скорость всех пепе.

В одной гонке можно выбрать ровно \(n\) различных пепе и заставить их соревноваться друг с другом. После каждого заезда вы узнаете только самого быстрого пепе среди этих \(n\) пепе.

Сможете ли вы найти порядок \(n^2-n+1\) самых быстрых пепе за не более чем \(2n^2 - 2n + 1\) заездов? Заметим, что самые медленные \(n - 1\) пепе неотличимы друг от друга.

Заметим, что интерактор является адаптивным. То есть относительные скорости пепе изначально не фиксированы и могут зависеть от ваших запросов. Но гарантируется, что в любой момент времени существует хотя бы одна начальная конфигурация пепе такая, что все ответы на запросы корректны.

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указано количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 20\)) — количество пепе в одной гонке.

Для каждого набора входных данных после считывания целого числа \(n\) следует начать взаимодействие.

Гарантируется, что сумма \(n^3\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Протокол взаимодействия

Чтобы задать гонку, выведите строку следующего формата:

  • \(\mathtt{?}\,x_1\,x_2 \ldots x_n\) (\(1 \le x_i \le n^2\), \(x_i\) попарно различны) — номера пепе, которые должны участвовать в гонке.

После каждого заезда необходимо считать строку, содержащую единственное целое число \(p\) (\(1\le p\le n^2\)) — самого быстрого пепе в гонке.

Когда вы узнаете \(n^2-n+1\) самых быстрых пепе, выведите одну строку следующего формата:

  • \(\mathtt{!}\,p_1\,p_2 \ldots p_{n^2 - n + 1}\) (\(1 \le p_i \le n^2\), \(p_i\) попарно различны)
где \(p\) — последовательность номеров этих пепе в порядке убывания скорости.

После этого переходите к следующему набору входных данных или завершайте работу программы, если наборов входных данных больше не осталось.

Если ваша программа выполнит более \(2n^2 - 2n + 1\) заездов для одного набора входных данных или сделает некорректный заезд, то вы можете получить вердикт «Неправильный ответ».

После вывода запроса или ответа не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Формат взломов

Для взломов используйте следующий формат:

Первая строка должна содержать \(t\) — количество наборов входных данных.

Первая строка каждого набора входных данных должна содержать целое число \(n\), за которым следует строка manual.

Вторая строка каждого набора входных данных должна содержать перестановку \(a_1,a_2,\ldots,a_{n^2}\) целых чисел от \(1\) до \(n^2\). \(a_i > a_j\) тогда и только тогда, когда пепе \(i\) имеет скорость больше, чем пепе \(j\).

Например, формат взлома для примера имеет следующий вид: \(\mathtt{1}\\\mathtt{2}~\mathtt{manual}\\\mathtt{1}~\mathtt{2}~\mathtt{3}~\mathtt{4}\)

C. Разноцветная сетка

Конструктив *1700

У Лены есть сетка, образованная \(n\) горизонтальными прямыми и \(m\) вертикальными прямыми. Горизонтальные прямые пронумерованы числами от \(1\) до \(n\) сверху вниз, а вертикальные прямые пронумерованы числами от \(1\) до \(m\) слева направо. Для всех \(x\) и \(y\) (\(1 \leq x \leq n\), \(1 \leq y \leq m\)) обозначим за \((x, y)\) точку пересечения \(x\)-й горизонтальной прямой и \(y\)-й вертикальной прямой.

Две точки \((x_1,y_1)\) и \((x_2,y_2)\) являются соседними тогда и только тогда, когда выполняется \(|x_1-x_2| + |y_1-y_2| = 1\).

Сетка, образованная \(n=4\) горизонтальными прямыми и \(m=5\) вертикальными прямыми.

Лена называет последовательность точек \(p_1, p_2, \ldots, p_g\) длины \(g\) путем тогда и только тогда, когда выполняются все следующие условия:

  • Первой точкой \(p_1\) в этой последовательности является \((1, 1)\).
  • Последней точкой \(p_g\) в этой последовательности является \((n, m)\).
  • Для всех \(1 \le i < g\) точки \(p_i\) и \(p_{i+1}\) являются соседними.

Обратите внимание, что путь может содержать одну точку несколько раз. В частности, точки \((1, 1)\) и \((n, m)\) могут встречаться в пути несколько раз.

Существует \(n(m-1)+(n-1)m\) отрезков, соединяющих соседние точки в Лениной сетке. Лена хочет покрасить каждый из этих отрезков в синий или красный цвет таким образом, что существует путь \(p_1, p_2, \ldots, p_{k+1}\) длины \(k+1\), удовлетворяющая следующему условию:

  • среди \(k\) отрезков, соединяющих две последовательные точки в этом пути, никакие два последовательных отрезка не покрашены в один цвет (иными словами, для всех \(1 \le i < k\) цвет отрезка между точками \(p_i\) и \(p_{i+1}\) отличается от цвета отрезка между точками \(p_{i+1}\) и \(p_{i+2}\)).

Найдите любую такую раскраску или сообщите, что таких раскрасок не существует.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 32\)) — количество наборов входных данных. Далее следуют описания этих наборов.

В единственной строке даны три целых числа \(n\), \(m\) и \(k\) (\(3 \leq n,m \leq 16\), \(1 \leq k \leq 10^9\)) — размеры сетки и количество отрезков в требуемом пути.

Выходные данные

Для каждого набора входных данных выведите «NO», если не существует способа покрасить каждый из \(n(m-1)+(n-1)m\) отрезков в синий или красный цвет таким образом, что существует путь длины \(k+1\), удовлетворяющий требованиям из условия.

Иначе выведите «YES», а затем также приведите пример требуемой раскраски.

В каждой из первых \(n\) строк описания раскраски выведите \(m-1\) символ через пробел. \(j\)-й символ \(i\)-й из этих \(n\) строк должен обозначать цвет отрезка между точками \((i,j)\) и \((i,j+1)\). Используйте «B» для обозначения синего цвета и «R» для обозначения красного цвета.

В каждой из следующих \(n-1\) строк описания раскраски выведите \(m\) символов через пробел. \(j\)-й символ \(i\)-й из этих \(n-1\) строк должен обозначать цвет отрезка между точками \((i,j)\) и \((i+1,j)\). Используйте «B» для обозначения синего цвета и «R» для обозначения красного цвета.

Вы можете выводить каждую букву ответа в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ, а обе буквы «R» и «r» приняты как обозначение красного цвета.

Примечание

Одна из корректных раскрасок для первого набора входных данных приведена ниже. Путь длины \(12\), удовлетворяющий требованиям из условия выделен.

Во втором и третьем наборах входных данных можно показать, что не существует раскрасок, удовлетворяющих требованиям из условия.

F. Лёшины капризы

графы Деревья жадные алгоритмы Конструктив кратчайшие пути *1600

Дерево — связный граф без циклов. Можно показать, что любое дерево из \(n\) вершин имеет ровно \(n - 1\) ребро.

Лист — вершина в дереве, из которой выходит ровно одно ребро.

Расстояние между двумя вершинами \(u\) и \(v\) в дереве — минимальное количество рёбер, которое нужно пройти, чтобы из вершины \(u\) прийти в вершину \(v\).

У Лёши скоро день рождения, и Тимофею хотелось бы подарить ему дерево из \(n\) вершин. Однако Лёша очень капризный мальчик. Каждый день на протяжении \(q\) дней он будет выбирать целое число, обозначим выбранное в \(i\)-й день число \(d_i\). Если в \(i\)-й день в дереве не будет двух листов на расстоянии ровно \(d_i\), то Лёша будет разочарован.

Тимофей решил подарить Лёше конструктор, чтобы он сам мог менять своё дерево, как ему хочется. Тимофей знает, что Лёша ещё и ленив (ужас, а не человек), поэтому в начале каждого дня он может выполнить не более одной операции следующего вида:

  • Выбрать вершины \(u\), \(v_1\) и \(v_2\), такие, что между \(u\) и \(v_1\) есть ребро, а между \(u\) и \(v_2\) нет ребра. После этого удалить ребро между \(u\) и \(v_1\) и добавить ребро между \(u\) и \(v_2\). Эту операцию нельзя выполнить, если после неё граф перестанет быть деревом.

Чудесным образом Тимофею удалось узнать все \(d_i\). После этого его посетила ещё одна гениальная мысль — на всякий случай сделать инструкцию к набору, при этом такую, чтобы Лёша не был разочарован.

Тимофей не такой ленивый, как Лёша, но когда он увидел число \(n\), у него резко пропало желание разрабатывать инструкцию и придумывать изначальное дерево, поэтому он поручил эту задачу вам. Можно показать, что дерево и последовательность операций, удовлетворяющие описанным условиям, всегда существуют.

Вот пример операции, где были выбраны вершины: \(u\) — \(6\), \(v_1\) — \(1\), \(v_2\) — \(4\).

Входные данные

В первой строке дано целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

В первой строке каждого набора входных данных даны целые числа \(n\) (\(3 \leq n \leq 500\)) и \(q\) (\(1 \leq q \leq 500\)) — количество вершин в дереве и количество дней соответственно.

В \(i\)-й из следующих \(q\) строк дано целое число \(d_i\) (\(2 \leq d_i \leq n - 1\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(500\). То же самое гарантируется для \(q\).

Можно показать, что дерево и последовательность операций, удовлетворяющие описанным условиям, всегда существуют.

Выходные данные

Для каждого набора входных данных сначала выведите \(n - 1\) строку с описанием рёбер дерева. Если вы хотите, чтобы в дереве было ребро между вершинами \(u\) и \(v\), то среди этих \(n - 1\) строк должна быть строка \(v\) \(u\) или \(u\) \(v\).

В следующих \(q\) строках выведите по три целых числа \(u\) \(v_1\) \(v_2\) — описание операций. Если Лёше не нужно выполнять операцию, выведите \(-1\) \(-1\) \(-1\).

A. Заполните водой

жадные алгоритмы Конструктив реализация Строки *800

У Филиппа есть ряд клеток, некоторые из которых заблокированы, а остальные — пусты. Он хочет, чтобы во всех пустых клетках оказалась вода. Для этого он может применять 2 типа операций:

  • \(1\) — поместить воду в пустую клетку.
  • \(2\) — переместить воду из клетки с водой в любую другую пустую клетку. Обратите внимание, что при перемещении воды из одной клетки в другую Филипп удаляет воду из начальной клетки.

Если клетка \(i\) (\(2 \le i \le n-1\)) пустая, а клетки \(i-1\) и \(i+1\) содержат воду, то она заполняется водой.

Найдите минимальное количество раз, которое ему нужно выполнить операцию \(1\) типа, чтобы заполнить все пустые клетки водой.

Заметим, что минимизировать использование операций \(2\) типа не нужно. Также заметим, что заблокированные клетки не содержат воду, и Филипп не может поместить в них воду.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — количество клеток.

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(n\). \(i\)-й символ \(s\) равен '.', если клетка \(i\) пуста, и '#', если клетка \(i\) заблокирована.

Выходные данные

Для каждого набора входных данных выведите единственное число — минимальное количество операций \(1\) типа, необходимое для заполнения всех пустых клеток водой.

Примечание

Набор входных данных 1

В первом наборе входных данных Филипп может поместить воду в клетки \(1\) и \(3\). Поскольку клетка \(2\) находится между \(2\) клетками с водой, она тоже заполняется водой.

Набор входных данных 2

Во втором наборе он может поместить источники воды в клетки \(3\) и \(5\). В результате клетка \(4\) заполнится водой. Затем он удалит воду из клетки \(5\) и поместит ее в клетку \(6\). Поскольку соседи клетки \(5\) — клетки \(4\) и \(6\) — имеют воду, клетка \(5\) также заполняется водой. Иллюстрация этого процесса приведена ниже.

Операции во втором наборе входных данных. Белые клетки — пустые, серые — заблокированные, синие — вода.

Набор входных данных 3

В третьем наборе входных данных он может поместить воду во все пустые клетки. Для этого требуется \(5\) операций \(1\) типа.

Набор входных данных 4

В четвертом наборе пустых клеток нет. Следовательно, ни одной операции применять не нужно.

Набор входных данных 5

В пятом наборе входных данных существует последовательность операций, которая требует только \(2\) операции типа \(1\).

C. Прибавь, раздели и округли

жадные алгоритмы Конструктив математика *1400

Задан массив целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 10^9\)). За одну операцию можно выбрать целое число \(x\) (\(0 \le x \le 10^{18}\)) и заменить \(a_i\) на \(\lfloor \frac{a_i + x}{2} \rfloor\) (\(\lfloor y \rfloor\) означает округление \(y\) вниз до ближайшего целого числа) для всех \(i\) от \(1\) до \(n\). Обратите внимание, что каждая операция затрагивает все элементы массива.

Выведите наименьшее количество операций, необходимое, чтобы сделать все элементы массива равными.

Если количество операций меньше или равно \(n\), то выведите выбранный \(x\) для каждой операции. Если есть несколько правильных ответов, то выведите любой из них.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le 10^9\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите наименьшее количество операций, необходимое, чтобы сделать все элементы массива равными.

Если количество операций меньше или равно \(n\), то выведите выбранный \(x\) для каждой операции. Если есть несколько правильных ответов, то выведите любой из них.

Примечание

В первом наборе входных данных все элементы уже равны, поэтому достаточно \(0\) операций. Не важно, выведете ли вы потом пустую строку или нет.

Во втором наборе нельзя сделать меньше \(2\) операций. Ответов несколько, рассмотрим последовательность ответов \([2, 5]\). После применения операции с \(x = 2\) массив станет равен \([\lfloor \frac{4 + 2}{2} \rfloor, \lfloor \frac{6 + 2}{2} \rfloor] = [3, 4]\). После применения операции с \(x = 5\) массив станет равен \([\lfloor \frac{3 + 5}{2} \rfloor, \lfloor \frac{4 + 5}{2} \rfloor] = [4, 4]\). Оба элемента одинаковые, поэтому мы закончили.

В последнем наборе нельзя сделать меньше \(6\) операций. Так как \(6\) больше \(n\), не требуется выводить их. Одна из возможных последовательностей ответов — \([0, 0, 0, 0, 0, 0]\). Мы просто делим второй элемент на \(2\) каждый раз и не изменяем первый элемент.

A. Двоичный дисбаланс

Конструктив *800

Вам дана строка \(s\), состоящая только из символов '0' и/или '1'.

За одну операцию вы выбираете позицию \(i\) от \(1\) до \(|s| - 1\), где \(|s|\) — текущая длина строки \(s\). Затем вы вставляете символ между \(i\)-м и \((i+1)\)-м символами строки \(s\). Если \(s_i = s_{i+1}\), вы вставляете '1'. Если \(s_i \neq s_{i+1}\), вы вставляете '0'.

Возможно ли сделать количество нулей в строке строго больше количества единиц, используя любое количество операций (возможно, ни одной)?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 100\)).

Во второй строке записана строка \(s\) длиной ровно \(n\), состоящая только из символов '0' и/или '1'.

Выходные данные

На каждый набор входных данных выведите «YES», если возможно сделать количество нулей в \(s\) строго больше количества единиц, используя любое количество операций (возможно, ни одной). В противном случае выведите «NO».

Примечание

В первом наборе входных данных количество нулей уже больше количества единиц.

Во втором наборе невозможно вставить ни одного нуля в строку.

В третьем наборе вы можете выбрать \(i = 1\), чтобы вставить ноль между \(1\)-м и \(2\)-м символами. Так как \(s_1 \neq s_2\), вставляется '0'. Получившаяся строка — «100». В ней два нуля и только одна единица, так что ответ «YES».

C. Вставь и приравняй

жадные алгоритмы Конструктив математика Перебор теория чисел *1300

Задан массив целых чисел \(a_1, a_2, \dots, a_n\), все его элементы различны.

Сначала вы вставляете в этот массив еще одно целое число \(a_{n+1}\). \(a_{n+1}\) не должно быть равно ни одному из \(a_1, a_2, \dots, a_n\).

Затем все элементы массива надо будет сделать равными. Для этого вы выбираете положительное целое число \(x\) (\(x > 0\)). После этого за одну операцию вы прибавляете \(x\) ровно к одному элементу массива. Обратите внимание, что \(x\) одинаковый для всех операций.

Какое наименьшее количество операций вам потребуется, чтобы сделать все элементы равными, после выбора \(a_{n+1}\) и \(x\)?

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Во второй строке записаны \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(-10^9 \le a_i \le 10^9\)). Все \(a_i\) различны.

Сумма \(n\) по всем тестам не превышает \(2 \cdot 10^5\).

Выходные данные

На каждый набор входных данных выведите одно целое число — наименьшее количество операций, которое вам потребуется, чтобы сделать все элементы равными, после выбора целых чисел \(a_{n+1}\) и \(x\).

Примечание

В первом наборе входных данных вы можете выбрать \(a_{n+1} = 4\), массив станет \([1, 2, 3, 4]\). Затем вы можете выбрать \(x = 1\) и применить операцию \(3\) раза к первому элементу, \(2\) раза ко второму элементу, \(1\) раз к третьему элементу и \(0\) раз к четвертому элементу.

Во втором наборе вы можете выбрать \(a_{n+1} = 13, x = 4\).

В третьем наборе вы можете выбрать \(a_{n+1} = 9, x = 1\). Затем применить операцию один раз к \(a_{n+1}\).

B. ХранИЛИще

битмаски жадные алгоритмы Конструктив Перебор *1200

На Кипре стоит довольно жаркая погода. Поэтому Теофанис увидел в этом возможность создать компанию по производству мороженого.

Он хранит мороженое в безопасности от других производителей мороженого, запирая его в больших складских помещениях. Однако он забыл пароль. К счастью, у замка есть специальная функция для забывчивых людей!

Дана таблица \(M\) с \(n\) строками и \(n\) столбцами неотрицательных целых чисел, и, чтобы открыть замок, вам нужно найти массив \(a\) из \(n\) элементов такой, что:

  • \(0 \le a_i < 2^{30}\), и
  • \(M_{i,j} = a_i | a_j\) для всех \(i \neq j\), где \(|\) обозначает операцию побитового ИЛИ.

Замок может иногда выдавать таблицы, для которых нет решения. В этом случае мороженое останется замороженным до конца времен.

Сможете ли вы найти массив, чтобы открыть замок?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^{3}\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^{3}\)) — размер искомого массива.

Следующие \(n\) строк описывают строки таблицы \(M\), строка \(i\) содержит значения \(M_{i,1}, M_{i,2}, \ldots, M_{i,n}\) (\(0 \le M_{i,j} < 2^{30}\)).

Гарантируется, что \(M_{i,i} = 0\) и \(M_{i,j} = M_{j,i}\) для всех \(1 \le i,j \le n\).

Также гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^{3}\).

Выходные данные

Для каждого набора входных данных, если существует решение, выведите в отдельных строках YES и искомый массив, в противном случае выведите NO.

Если существует несколько решений, выведите любое из них.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

C. Кошмар Теофаниса

жадные алгоритмы Конструктив *1400

Теофанис легко зацикливается на задачах перед сном, и они часто снятся ему в кошмарах. Чтобы справиться с этим, он обратился к своему врачу, доктору Эмиксу.

В последнем кошмаре у него был массив \(a\) длины \(n\), и он хотел разбить его на непустые подмассивы\(^{\dagger}\) так, чтобы каждый элемент находился ровно в одном из подмассивов.

Например, массив \([1,-3,7,-6,2,5]\) можно разбить на \([1] [-3,7] [-6,2] [5]\).

Киприотское значение такого разбиения равняется \(\Sigma_{i=1}^{k} i \cdot \mathrm{sum}_i\), где \(k\) — количество подмассивов, на которое мы разделили массив, а \(\mathrm{sum}_i\) — сумма \(i\)-го подмассива.

Киприотское значение разбиения массива \([1] [-3,7] [-6,2] [5] = 1 \cdot 1 + 2 \cdot (-3 + 7) + 3 \cdot (-6 + 2) + 4 \cdot 5 = 17\).

Теофанису интересно, каково максимальное киприотское значение среди всех разбиений массива.

\(^{\dagger}\) Массив \(b\) является подмассивом массива \(a\), если \(b\) может быть получен из \(a\) удалением нескольких (возможно, нуля или всех) элементов из начала и нескольких (возможно, нуля или всех) элементов из конца. В частности, массив является подмассивом самого себя.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^{5}\)) — размер массива.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^8 \le a_i \le 10^{8}\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^{5}\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное киприотское значение среди всех разбиений массива \(a\).

Примечание

В первом наборе входных данных для получения максимального киприотского значения мы разобьём массив на \([1][-3][7][-6][2][5]\), что даст нам: \(\Sigma_{i=1}^{k} i \cdot \mathrm{sum}_i = 1 \cdot 1 + 2 \cdot (-3) + 3 \cdot 7 + 4 \cdot (-6) + 5 \cdot 2 + 6 \cdot 5 = 32\).

Аналогично, во втором наборе входных данных мы разбиваем массив на \([2][9,-5,-3]\), что дает нам \(\Sigma_{i=1}^{k} i \cdot \mathrm{sum}_i = 1 \cdot 2 + 2 \cdot (9 + (-5) + (-3)) = 4\).

D1. Присвоить максимум (простая версия)

жадные алгоритмы Конструктив Перебор *1600

Это простая версия задачи. Единственное различие между двумя версиями — это ограничение на \(n\) и ограничение по времени. Вы можете делать взломы, только если обе версии задачи решены.

Вам даны два массива \(a\) и \(b\) длины \(n\).

Вы можете выполнить следующую операцию несколько (возможно, ноль) раз:

  1. выбрать \(l\) и \(r\) такие, что \(1 \leq l \leq r \leq n\).
  2. пусть \(x=\max(a_l,a_{l+1},\ldots,a_r)\).
  3. для всех \(l \leq i \leq r\), присвоить \(a_i := x\).

Определите, можно ли сделать массив \(a\) равным массиву \(b\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 1000\)) — длину массивов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — элементы массива \(a\).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le n\)) — элементы массива \(b\).

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если вы можете превратить \(a\) в \(b\) с помощью данных операций, и «NO» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных мы можем получить массив \(b\), применив единственную операцию: \((l,r)=(2,3)\).

Во втором наборе входных данных можно показать, что мы не можем получить массив \(b\) ни при каком количестве операций.

В третьем наборе входных данных массив \(b\) можно получить, применив две операции: \((l,r)=(2,5)\) и \((l,r)=(1,3)\).

В четвертом и пятом наборах входных данных можно показать, что массив \(b\) не может быть получен ни при каком количестве операций.

D2. Присвоить максимум (сложная версия)

жадные алгоритмы Конструктив разделяй и властвуй реализация сортировки Структуры данных *1800

Это сложная версия задачи. Единственное различие между двумя версиями — это ограничение на \(n\) и ограничение по времени. Вы можете делать взломы, только если обе версии задачи решены.

Вам даны два массива \(a\) и \(b\) длины \(n\).

Вы можете выполнить следующую операцию несколько (возможно, ноль) раз:

  1. выбрать \(l\) и \(r\) такие, что \(1 \leq l \leq r \leq n\).
  2. пусть \(x=\max(a_l,a_{l+1},\ldots,a_r)\).
  3. для всех \(l \leq i \leq r\), присвоить \(a_i := x\).

Определите, можно ли сделать массив \(a\) равным массиву \(b\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину массивов.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — элементы массива \(a\).

Третья строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le n\)) — элементы массива \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если вы можете превратить \(a\) в \(b\) с помощью данных операций, и «NO» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных мы можем получить массив \(b\), применив единственную операцию: \((l,r)=(2,3)\).

Во втором наборе входных данных можно показать, что мы не можем получить массив \(b\) ни при каком количестве операций.

В третьем наборе входных данных массив \(b\) можно получить, применив две операции: \((l,r)=(2,5)\) и \((l,r)=(1,3)\).

В четвертом и пятом наборах входных данных можно показать, что массив \(b\) не может быть получен ни при каком количестве операций.

A. Конструктивные задачи

Конструктив математика *800

Гридландия была затронута наводнением, и теперь в ней придётся восстанавливать все города. Гридландию можно описать матрицей размера \(n \times m\).

Изначально все её города находятся в экономическом кризисе. Правительство может выбрать определённые города и восстановить их. Кроме того, любой разрушенный город, у которого есть хотя бы один соседний по вертикали восстановленный город и хотя бы один соседний по горизонтали восстановленный город, может попросить помощи у них и стать восстановленным без помощи правительства. Формально, разрушенный город, находящийся на позиции \((i, j)\), может быть восстановлен, если оба из следующих условий выполнены:

  • Хотя бы один из городов на позициях \((i + 1, j)\) и \((i - 1, j)\) восстановлен;
  • Хотя бы один из городов на позициях \((i, j + 1)\) и \((i, j - 1)\) восстановлен.

Если город находится на границе матрицы и имеет только один соседний по горизонтали или по вертикали город, то мы рассматриваем только этот город.

Иллюстрация двух возможных способов восстановления городов при помощи соседних. Белые ячейки — разрушенные города, желтые ячейки — изначально восстановленные города (либо правительством, либо при помощи соседних), и оранжевые ячейки — восстановленные города при помощи соседних.

Правительство хочет знать минимальное количество городов, которые ему нужно восстановить, чтобы через некоторое время все города были восстановлены.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Затем следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \le n, m \le 100\)) — размеры Гридландии.

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальное количество городов, которые правительству нужно восстановить.

Примечание

В первом наборе входных данных достаточно, чтобы правительство восстановило города \((1, 2)\) и \((2, 1)\).

Во втором наборе входных данных достаточно, чтобы правительство восстановило города \((1, 4)\), \((2, 2)\), \((3, 1)\), \((3, 6)\), \((4, 3)\), \((5, 5)\), \((5, 7)\).

B. Button Pressing

битмаски Конструктив хэши *2600

You are given \(N\) buttons (numbered from \(1\) to \(N\)) and \(N\) lamps (numbered from \(1\) to \(N\)). Each lamp can either be on or off. Initially, lamp \(i\) is on if \(A_i = 1\), and off if \(A_i = 0\).

Button \(i\) is connected to lamp \(i - 1\) (if \(i > 1\)) and lamp \(i + 1\) (if \(i < N\)). In one move, you can press a button \(i\) only if lamp \(i\) is on. When a button is pressed, the state of the lamps connected to this button is toggled. Formally, the lamps will be on if it was off previously, and the lamps will be off if it was on previously. Note that lamp \(i\) is not connected to button \(i\), thus, the state of lamp \(i\) does not change if button \(i\) is pressed.

After zero or more moves, you want lamp \(i\) to be on if \(B_i = 1\), and off if \(B_i = 0\). Determine if it is possible to achieve this task.

Input

This problem has multiple test cases. The first line consists of an integer \(T\) (\(1 \leq T \leq 1000\)), which represents the number of test cases. Each test case consists of three lines.

The first line of each test case consists of an integer \(N\) (\(3 \le N \le 200\,000\)). The sum of \(N\) over all test cases does not exceed \(200\,000\).

The second line of each test case consists of a string \(A\) of length \(N\). Each character of \(A\) can either be 0 or 1. The \(i\)-th character represents the initial state of lamp \(i\).

The third line of each test case consists of a string \(A\) of length \(N\). Each character of \(B\) can either be 0 or 1. The \(i\)-th character represents the desired final state of lamp \(i\).

Output

For each test case, output YES in a single line if the final state of all lamps can be reached after zero or more moves, or NO otherwise.

Note

Explanation for the sample input/output #1

For the first test case, by pressing the buttons \(4, 2, 4, 3, 1, 2\) in sequence, the condition of the buttons changes as: \(0101 \rightarrow 0111 \rightarrow 1101 \rightarrow 1111 \rightarrow 1010 \rightarrow 1110 \rightarrow 0100\).

For the second test case, you are unable to press any button, hence it is impossible to reach the final state.

E. Merge Not Sort

дп Конструктив *1900

You are currently researching the Merge Sort algorithm. Merge Sort is a sorting algorithm that is based on the principle of Divide and Conquer. It works by dividing an array into two subarrays of equal length, sorting each subarrays, then merging the sorted subarrays back together to form the final sorted array.

You are particularly interested in the merging routine. Common merge implementation will combine two subarrays by iteratively comparing their first elements, and move the smaller one to a new merged array. More precisely, the merge algorithm can be presented by the following pseudocode.


Merge(A[1..N], B[1..N]):
C = []
i = 1
j = 1
while i <= N AND j <= N:
if A[i] < B[j]:
append A[i] to C
i = i + 1
else:
append B[j] to C
j = j + 1
while i <= N:
append A[i] to C
i = i + 1
while j <= N:
append B[j] to C
j = j + 1
return C

During your research, you are keen to understand the behaviour of the merge algorithm when arrays \(A\) and \(B\) are not necessarily sorted. For example, if \(A = [3, 1, 6]\) and \(B = [4, 5, 2]\), then \(\text{Merge}(A, B) = [3, 1, 4, 5, 2, 6]\).

To further increase the understanding of the merge algorithm, you decided to work on the following problem. You are given an array \(C\) of length \(2 \cdot N\) such that it is a permutation of \(1\) to \(2 \cdot N\). Construct any two arrays \(A\) and \(B\) of the same length \(N\), such that \(\text{Merge}(A, B) = C\), or determine if it is impossible to do so.

Input

The first line consists of an integer \(N\) (\(1 \leq N \leq 1000\)).

The following line consists of \(2 \cdot N\) integers \(C_i\). The array \(C\) is a permutation of \(1\) to \(2 \cdot N\).

Output

If it is impossible to construct two arrays \(A\) and \(B\) of length \(N\) such that \(\text{Merge}(A, B) = C\), then output -1.

Otherwise, output the arrays \(A\) and \(B\) in two lines. The first line consists of \(N\) integers \(A_i\). The second line consists of \(N\) integers \(B_i\). If there are several possible answers, output any of them.

Note

Explanation for the sample input/output #1

The solution \(A = [3, 1, 4]\) and \(B = [5, 2, 6]\) is also correct.

Explanation for the sample input/output #2

The solution \(A = [1, 2, 3, 4]\) and \(B = [5, 6, 7, 8]\) is also correct.

L. Palindromic Parentheses

Конструктив *2500

Construct a parentheses sequence consisting of \(N\) characters such that it is balanced and the length of its longest palindromic subsequence (LPS) is exactly \(K\). Determine whether such a construction is possible. If there are several possible sequences, construct any of them.

A parentheses sequence consists of only character ( and ). A parentheses sequence is balanced if each character ( has a corresponding character ) and the pairs of parentheses are properly nested. For example, (), (()), (())(), and ((())()) are balanced. However, )(, ((), and ()) are not balanced.

A sequence is palindromic if it reads the same backwards as forwards. For example, ((, ), ())(, and (()(( are palindromic. However, (), )(, and (()) are not palindromic.

A subsequence can be derived from another sequence by removing zero or more characters without changing the order of the remaining characters. For example, (, ))), ())(, and (())() are subsequence of (())(). However, )(( and ((())) are not subsequence of (())().

The longest palindromic subsequence (LPS) of a sequence is a subsequence with the maximum number of characters, derived from that sequence and it is palindromic. For example, the LPS of sequence (())() is ())(, which can be obtained by removing the second and sixth characters. Therefore, the length of the LPS of (())() is \(4\).

Input

Input consists of two integers \(N\) \(K\) (\(2 \leq N \leq 2000; 1 \leq K \leq N\)). \(N\) is an even number.

Output

If there is no such parentheses sequence such that it is balanced and the length of its LPS is exactly \(K\), then output -1.

Otherwise, output a string of \(N\) characters, representing the parentheses sequence. If there are several possible answers, output any of them.

Note

Explanation for the sample input/output #2

The LPS of (()()) is either ((( by removing all ) characters, or ))) by removing all ( characters.

The output ((())) also satisfies the requirements.

Explanation for the sample input/output #3

The only possible balanced parentheses sequences are (()) and ()(). The length of the LPS of (()) and ()() are \(2\) and \(3\), respectively.

Explanation for the sample input/output #4

The LPS of ()((())()())() is )())()())(), which can be obtained by removing the first, fourth, and fifth characters.

C. Удаление некрасивых пар

жадные алгоритмы Конструктив математика Строки *1200

Влад нашёл строку \(s\) из \(n\) строчных латинских букв, и он хочет сделать её как можно короче.

Для этого он может любое число раз удалять из \(s\) любые два соседних символа, если они различны. Например, если \(s\)=racoon, то удалив одну пару символов, он может получить строку coon, roon, raon и raco, но не может получить racn (потому что удалённые буквы были одинаковы) или rcon (потому что удалённые буквы не были соседними).

Какой минимальной длины может добиться Влад, применив любое число удалений?

Входные данные

В первой строке входных данных содержится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину строки \(s\).

Вторая строка каждого набора содержит строку \(s\) из \(n\) строчных латинских букв.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора выведите единственное число — минимальную длину строки \(s\), после удаления пар соседних символов, значения которых различны.

Примечание

В первом наборе выходных данных примера нужно действовать следующим образом «aabc» \(\rightarrow\) «ac» \(\rightarrow\) «». Обратите внимание, что при другом порядке удалений строка не станет пустой.

D. Прыжки по отрезкам

Бинарный поиск Конструктив *1400

Поликарп разрабатывает уровень для игры. Уровень состоит из \(n\) отрезков на числовой прямой, \(i\)-й отрезок начинается в точке с координатой \(l_i\) и заканчивается в точке с координатой \(r_i\).

Игрок начинает уровень в точке с координатой \(0\). За один ход он может переместиться на любую точку, расстояние до которой не больше \(k\). После своего \(i\)-го хода игрок должен оказаться в \(i\)-м отрезке, то есть в такой координате \(x\), что \(l_i \le x \le r_i\). То есть:

  • После первого хода он должен оказаться внутри первого отрезка (от \(l_1\) до \(r_1\));
  • После второго хода он должен оказаться внутри второго отрезка (от \(l_2\) до \(r_2\));
  • ...
  • После \(n\)-го хода он должен оказаться внутри \(n\)-го отрезка (от \(l_n\) до \(r_n\)).

Уровень считается пройденным, если игрок добрался до \(n\)-го отрезка, следуя правилам, описанным выше. Немного подумав, Поликарп понял, что при некоторых \(k\) пройти уровень невозможно.

Поликарп не хочет, чтобы уровень был слишком простым, поэтому просит вас определить минимальное целое число \(k\), при котором его возможно пройти.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество отрезков на уровне.

Далее следуют \(n\) строк, \(i\)-я из которых содержит два числа \(l_i\) и \(r_i\) (\(0 \le l_i \le r_i \le 10^9\)) — границы \(i\)-го отрезка. Отрезки могут пересекаться.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальное целое \(k\), при котором возможно пройти уровень.

Примечание

В третьем примере игрок может сделать следующие ходы:

  • Переместиться из точки \(0\) в точку \(5\) (\(3 \le 5 \le 8\));
  • Переместиться из точки \(5\) в точку \(10\) (\(10 \le 10 \le 18\));
  • Переместиться из точки \(10\) в точку \(7\) (\(6 \le 7 \le 11\)).

Обратите внимание, что последним ходом игрок мог не перемещаться и всё равно пройти уровень.

G. Освещение

графы жадные алгоритмы Конструктив Перебор поиск в глубину и подобное реализация *2200

В конце дня Анне нужно выключить свет в офисе. Есть \(n\) ламп и \(n\) выключателей, но схема их работы довольно странная. Выключатель \(i\) меняет состояние лампы \(i\), но также меняет состояние другой лампы \(a_i\) (изменение состояния означает, что если лампа была включена, она выключается, и наоборот).

Помогите Анне выключить все лампы, используя минимальное количество выключателей, или скажите, что это невозможно.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора содержит целое число \(n\) (\(2 \le n \le 10^5\)) — количество ламп.

Вторая строка каждого набора содержит строку из \(n\) символов — начальное состояние ламп. Символ «0» означает, что соответствующая лампа выключена, а «1» означает, что она включена.

Третья строка каждого набора содержит \(n\) целых чисел \(a_i\) (\(1 \le a_i \le n\), \(a_i \neq i\)) — выключатель \(i\) меняет состояние лампы \(i\) и лампы \(a_i\).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2 \cdot 10^5\)

Выходные данные

Для каждого набора входных данных выведите целое число \(k\) — минимальное количество выключателей, которое нужно использовать, затем в отдельной строке выведите список из \(k\) выключателей.

Если невозможно выключить все лампы, выведите одно целое число \(-1\).

B. Сделать почти равными по модулю

битмаски Конструктив математика теория чисел *1200

Вам дан массив различных целых положительных чисел \(a_1, a_2, \dots, a_n\). Вы должны выполнить следующую операцию ровно один раз:

  • выбрать целое положительное число \(k\);
  • для каждого \(i\) от \(1\) до \(n\) заменить \(a_i\) на \(a_i \text{ mod } k^\dagger\).

Найдите такое значение \(k\), такое что \(1 \leq k \leq 10^{18}\), чтобы массив \(a_1, a_2, \dots, a_n\) содержал ровно \(2\) различных значения после применения операции. Можно показать, что при ограничениях задачи хотя бы одно такое \(k\) всегда существует. Если существует несколько решений, выведите любое из них.

\(^\dagger\) \(a \text{ mod } b\) обозначает остаток от деления \(a\) на \(b\). Например:

  • \(7 \text{ mod } 3=1\), так как \(7 = 3 \cdot 2 + 1\)
  • \(15 \text{ mod } 4=3\), так как \(15 = 4 \cdot 3 + 3\)
  • \(21 \text{ mod } 1=0\), так как \(21 = 21 \cdot 1 + 0\)
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 100\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^{17}\)) — начальные числа в массиве. Гарантируется, что все \(a_i\) различны.

Обратите внимание, что нет никаких ограничений на сумму \(n\) по всем наборам входных данных.

Выходные данные

Для каждого набора входных данных выведите одно целое число: значение \(k\) (\(1 \leq k \leq 10^{18}\)) такое, что массив \(a_1, a_2, \dots, a_n\) будет содержать ровно \(2\) различных значения после применения операции.

Примечание

В первом наборе входных данных можно выбрать \(k = 7\). Массив станет равным \([8 \text{ mod } 7, 15 \text{ mod } 7, 22 \text{ mod } 7, 30 \text{ mod } 7] = [1, 1, 1, 2]\) и будет содержать ровно \(2\) различных значения (\(\{1, 2\}\)).

Во втором наборе входных данных можно выбрать \(k = 30\). Массив станет равным \([0, 0, 8, 0, 8]\), то есть будет содержать ровно \(2\) различных значения (\(\{0, 8\}\)). Заметим, что выбор \(k = 10\) также будет корректным решением.

В последнем наборе входных данных можно выбрать \(k = 10^{18}\). Массив станет равным \([2, 1]\) и будет содержать ровно \(2\) различных значения (\(\{1, 2\}\)). Заметим, что выбор \(k = 10^{18} + 1\) не будет корректным, так как должно выполняться \(1 \leq k \leq 10^{18}\).

C. Тяжелые интервалы

жадные алгоритмы Конструктив математика снм сортировки Структуры данных *1400

У вас есть \(n\) интервалов \([l_1, r_1], [l_2, r_2], \dots, [l_n, r_n]\) таких, что \(l_i < r_i\) для каждого \(i\), и все конечные точки интервалов различны.

Вес \(i\)-го интервала составляет \(c_i\) на единицу длины. Поэтому вес \(i\)-го интервала равен \(c_i \cdot (r_i - l_i)\).

Вам не нравятся большие веса, поэтому вы хотите сделать сумму весов всех интервалов как можно меньше. Оказывается, вы можете выполнять следующие три типа операций:

  • переставить элементы массива \(l\) в любом порядке;
  • переставить элементы массива \(r\) в любом порядке;
  • переставить элементы массива \(c\) в любом порядке.

Однако после выполнения всех операций интервалы должны оставаться корректными (т.е. для каждого \(i\) должно выполняться условие \(l_i < r_i\)).

Какова минимально возможная сумма весов интервалов после выполнения этих операций?

Входные данные

Каждый тест содержит несколько наборов входных данных. В первой строке указано количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — количество интервалов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(l_1, l_2, \ldots, l_n\) (\(1 \le l_i \le 2 \cdot 10^5\)) — левые конечные точки начальных интервалов.

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(r_1, r_2, \ldots, r_n\) (\(l_i < r_i \le 2 \cdot 10^5\)) — правые конечные точки начальных интервалов.

Гарантируется, что все \(\{l_1, l_2, \dots, l_n, r_1, r_2, \dots, r_n\}\) различны.

Четвертая строка каждого набора входных данных содержит \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(1 \le c_i \le 10^7\)) — начальные веса интервалов на единицу длины.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: минимально возможную сумму всех весов интервалов после ваших операций.

Примечание

В первом наборе входных данных вы можете сделать так

  • \(l = [8, 3]\);
  • \(r = [23, 12]\);
  • \(c = [100, 100]\).

В этом случае будет два интервала:

  • интервал \([8, 23]\) с весом \(100\) на единицу длины, тогда вес интервала равняется \(100 \cdot (23-8) = 1500\);
  • интервал \([3, 12]\) с весом \(100\) на единицу длины, тогда вес интервала равняется \(100 \cdot (12-3) = 900\);

Сумма весов составляет \(2400\). Можно показать, что не существует конфигурации конечных интервалов, сумма весов которых меньше \(2400\).

Во втором наборе входных данных можно сделать так

  • \(l = [1, 2, 5, 20]\);
  • \(r = [3, 4, 10, 30]\);
  • \(c = [3, 3, 2, 2]\).

В этом случае будет четыре интервала:

  • интервал \([1, 3]\) с весом \(3\) на единицу длины, вес всего интервала равен \(3 \cdot (3-1) = 6\);
  • интервал \([2, 4]\) с весом \(3\) на единицу длины, вес всего интервала равен \(3 \cdot (4-2) = 6\);
  • интервал \([5, 10]\) с весом \(2\) на единицу длины, вес всего интервала равен \(2 \cdot (10-5) = 10\);
  • интервал \([20, 30]\) с весом \(2\) на единицу длины, вес всего интервала равен \(2 \cdot (30-20) = 20\).

Сумма весов равна \(42\). Можно показать, что не существует конфигурации конечных интервалов, сумма весов которых меньше \(42\).

E. Несколько ламп

битмаски Конструктив математика Перебор теория чисел *2400

У вас есть \(n\) ламп, пронумерованных от \(1\) до \(n\). Изначально все лампы выключены.

У вас также есть \(n\) кнопок. Кнопка \(i\) переключает все лампы, чей индекс кратен \(i\). Когда лампа переключается, если она была выключена, то она включается, а если была включена, то выключается.

Вы должны нажать несколько кнопок в соответствии со следующими правилами.

  • Вы должны нажать хотя бы одну кнопку.
  • Вы не можете нажимать одну и ту же кнопку несколько раз.
  • Вам даны \(m\) пар \((u_i, v_i)\). Если вы нажмете кнопку \(u_i\), вы также должны нажать кнопку \(v_i\) (либо до, либо после нажатия кнопки \(u_i\)). Обратите внимание, что если вы нажимаете кнопку \(v_i\), то вам не нужно нажимать кнопку \(u_i\).

Вы не хотите тратить слишком много электричества. Найдите способ нажимать кнопки так, чтобы в конце горело не более \(\lfloor n/5 \rfloor\) ламп, или выведите \(-1\), если это невозможно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq n \leq 2 \cdot 10^5\), \(0 \leq m \leq 2 \cdot 10^5\)) — количество ламп и количество пар, соответственно.

Каждая из следующих \(m\) строк содержит по два целых числа \(u_i\), \(v_i\) (\(1 \leq u_i, v_i \leq n\), \(u_i \neq v_i\)). Если вы нажимаете кнопку \(u_i\), вы также должны нажать кнопку \(v_i\). Гарантируется, что пары \((u_i, v_i)\) различны.

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных:

  • Если не существует набора кнопок, после нажатия на которые горят не более \(\lfloor n/5 \rfloor\) ламп, выведите одну строку, содержащую \(-1\).
  • В противном случае выведите две строки. Первая строка должна содержать целое число \(k\) (\(1 \le k \le n\)) — количество нажатых кнопок. Вторая строка должна содержать \(k\) целых чисел \(b_1, b_2, \dots, b_k\) (\(1 \le b_i \le n\)) — индексы нажатых кнопок (в любом порядке). Индексы \(b_i\) должны быть различными, и в конце должно быть включено не более \(\lfloor n/5 \rfloor\) ламп.
Примечание

В первом наборе входных данных требуется оставить включенными не более \(\lfloor 4/5 \rfloor\) ламп, а это значит, что ни одна лампа не может остаться включенной в конце. Можно показать, что при нажатии хотя бы одной кнопки в конце не может оказаться \(0\) включенных ламп.

Во втором наборе входных данных можно нажать кнопки \(3\), \(5\), \(1\), \(2\).

  • Изначально все лампы выключены;
  • после нажатия кнопки \(3\), лампы, чей индекс кратен \(3\) (т.е. \(3\)), переключаются, так что лампа \(3\) включается;
  • после нажатия кнопки \(5\), лампы, чей индекс кратен \(5\) (т.е. \(5\)) переключаются, поэтому лампы \(3\), \(5\) включены;
  • после нажатия кнопки \(1\), лампы, чей индекс кратен \(1\) (т.е. \(1\), \(2\), \(3\), \(4\), \(5\)) переключаются, поэтому становятся включенными лампы \(1\), \(2\), \(4\);
  • после нажатия кнопки \(2\), лампы, чей индекс кратен \(2\) (т.е. \(2\), \(4\)) переключаются, поэтому остается включенной только лампа \(1\).

Это решение корректно, потому что

  • вы нажали хотя бы одну кнопку;
  • вы нажали каждую кнопку не более одного раза;
  • вы нажали кнопку \(u_2 = 5\), что означает, что вы должны были также нажать кнопку \(v_2 = 1\), и кнопка \(1\) была нажата;
  • в конце горит только лампа \(1\).

В третьем наборе входных данных нажатие кнопок \(8\), \(9\), \(10\) включает только лампы \(8\), \(9\), \(10\).

H. Сортировка параллельными обменами

Конструктив Структуры данных *3500

Вам дана перестановка \(p_1, p_2, \dots, p_n\) элементов \([1, 2, \dots, n]\). Вы можете выполнить следующую операцию некоторое количество раз (возможно, \(0\)):

  • выбрать подмассив \([l, r]\) четной длины;
  • поменять местами \(a_l\), \(a_{l+1}\);
  • поменять местами \(a_{l+2}\), \(a_{l+3}\) (если \(l+3 \leq r\));
  • \(\dots\)
  • поменять местами \(a_{r-1}\), \(a_r\).

Отсортируйте перестановку не более чем за \(10^6\) операций. Вам не нужно минимизировать количество операций.

Входные данные

Первая строка содержит одно целое число \(n\) (\(2 \le n \le 3 \cdot 10^5\)) — длину перестановки.

Вторая строка содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\), \(p_i\) различны) — перестановку перед выполнением операций.

Выходные данные

Выведите свои операции в следующем формате.

Первая строка должна содержать целое число \(k\) (\(0 \le k \le 10^6\)) — количество операций.

Следующие \(k\) строк представляют \(k\) операций по порядку. Каждая из этих \(k\) строк должна содержать два целых числа \(l\) и \(r\) (\(1 \leq l < r \leq n\), \(r-l+1\) должно быть четным) — соответствующая операция заключается в выборе подмассива \([l, r]\) и перестановке его элементов в соответствии с постановкой задачи.

После всех операций для каждого \(i\) (\(1 \leq i \leq n\)) должно выполняться \(a_i = i\).

Примечание

В первом примере:

  • В начале, \(p = [2, 5, 4, 1, 3]\).
  • В первой операции можно выбрать \([l, r] = [1, 4]\). Тогда \((a_1, a_2)\) меняются местами и \((a_3, a_4)\) меняются местами. Новая перестановка — \(p = [5, 2, 1, 4, 3]\).
  • Во второй операции можно выбрать \([l, r] = [1, 2]\). Тогда \((a_1, a_2)\) меняются местами. Новая перестановка будет \(p = [2, 5, 1, 4, 3]\).
  • В третьей операции можно выбрать \([l, r] = [2, 5]\). Тогда \((a_2, a_3)\) поменяются местами и \((a_4, a_5)\) поменяются местами. Новая перестановка — \(p = [2, 1, 5, 3, 4]\).
  • В четвертой операции можно выбрать \([l, r] = [1, 4]\). Тогда \((a_1, a_2)\) поменяются местами и \((a_3, a_4)\) поменяются местами. Новая перестановка — \(p = [1, 2, 3, 5, 4]\).
  • В пятой операции можно выбрать \([l, r] = [4, 5]\). Тогда \((a_4, a_5)\) поменяются местами. Новая перестановка — \(p = [1, 2, 3, 4, 5]\) — отсортирована.

Во втором примере перестановка уже отсортирована, поэтому вам не нужно выполнять никаких операций.

B. Подготовка к соревнованию

Конструктив математика *800

Монокарп практикуется перед большим соревнованием. Он планирует решить \(n\) задач, чтобы убедиться, что он хорошо подготовлен. У каждой из этих задач есть уровень сложности: первая задача имеет уровень сложности \(1\), вторая задача имеет уровень сложности \(2\), и так далее до последней (\(n\)-й) задачи, которая имеет уровень сложности \(n\).

Монокарп выберет некоторый порядок, в котором он собирается решить все \(n\) задач. Каждый раз, когда он решает более сложную задачу, чем предыдущая решенная им, он радуется, так как ощущает свой прогресс. Монокарп никогда не радуется во время решения первой задачи в выбранном порядке.

Например, если Монокарп решает задачи в порядке \([3, \underline{5}, 4, 1, \underline{6}, 2]\), он радуется дважды (соответствующие задачи подчеркнуты).

Монокарп хочет порадоваться ровно \(k\) раз во время своей тренировочной сессии. Помогите ему выбрать порядок, в котором он должен решать задачи!

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей два целых числа \(n\) и \(k\) (\(2 \le n \le 50\); \(0 \le k \le n - 1\)).

Выходные данные

Для каждого теста выведите \(n\) различных целых чисел от \(1\) до \(n\), обозначающих порядок, в котором Монокарп должен решать задачи. Если существует несколько ответов, выведите любой из них.

Можно показать, что при ограничениях задачи ответ всегда существует.

A. 2023

Конструктив математика реализация теория чисел *800

В последовательности \(a\), произведение которой было равно \(2023\), удалили \(k\) чисел и осталась последовательность \(b\) длины \(n\). По получившейся последовательности \(b\) найдите любую подходящую последовательность \(a\) и выведите какие \(k\) элементов из нее удалили, либо скажите, что такой последовательности не могло существовать.

Обратите внимание, что вам не гарантируется, что такой массив существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) (\(1 \le n, k \le 5\)) — размер последовательности \(b\) и количество удаленных чисел из последовательности \(a\).

Во второй строке содержится \(n\) целых чисел \(b_1,b_2, \ldots,b_n\) (\(1 \leq b_i \leq 2023\)) — оставшаяся последовательность. Значения \(b_i\) могут не являться делителями \(2023\).

Выходные данные

Для каждого набора входных данных выведите «YES», если последовательность \(a\) существует, а также в следующей строке выведите \(k\) целых неотрицательных чисел, которые удалили из последовательности \(a\). Если же последовательности \(a\) не существует в единственной строке выведите «NO».

Вы можете вывести ответ в любом регистре (верхнем или нижнем). Например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительные ответы.

Примечание

В третьем наборе произведение равно \(289 \cdot 7 = 2023\).

В четвертом произведение уже равно \(2023\).

В седьмом произведение равно \(7 \cdot 17 \cdot 17 = 2023\).

B. Два делителя

Конструктив математика теория чисел *1000

Загадано некоторое число \(1 \le x \le 10^9\). Вам даны два целых числа \(a\) и \(b\), которые являются двумя наибольшими делителями числа \(x\). При этом выполняется условие \(1 \le a < b < x\).

По заданным числам \(a\), \(b\) от вас требуется узнать значение \(x\).

\(^{\dagger}\) Число \(y\) является делителем числа \(x\), если существует такое целое число \(k\), что \(x = y \cdot k\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(a\), \(b\) (\(1 \le a < b \le 10^9\)).

Гарантируется, что \(a\), \(b\) — два наибольших делителя для некоторого числа \(1 \le x \le 10^9\).

Выходные данные

Для каждого набора входных данных выведите число \(x\), такое что \(a\) и \(b\) — это два наибольших делителя числа \(x\).

Если существует несколько вариантов ответа, выведите любой.

Примечание

Для первого набора входных данных все делители меньшие \(6\) равны \([1, 2, 3]\), среди них двумя наибольшими будут являться \(2\) и \(3\).

Для третьего набора входных данных все делители меньшие \(33\) равны \([1, 3, 11]\), среди них двумя наибольшими будут являться \(3\) и \(11\).

Для пятого набора входных данных все делители меньшие \(20\) равны \([1, 2, 4, 5, 10]\), среди них двумя наибольшими будут являться \(5\) и \(10\).

Для шестого набора входных данных все делители меньшие \(12\) равны \([1, 2, 3, 4, 6]\), среди них двумя наибольшими будут являться \(4\) и \(6\).

C. Тренировка перед олимпиадой

жадные алгоритмы игры Конструктив математика реализация *1200

У Маши и Оли скоро важная командная олимпиада. В честь этого Маша, для разминки, предложила сыграть Оле в следующую игру:

Есть массив \(a\) размера \(n\). Первой ходит Маша, игроки ходят по-очереди. Каждый ход описывается следующей последовательностью действий:

\(\bullet\) Если размер массива равен \(1\) — игра завершается.

\(\bullet\) Игрок, который сейчас ходит, выбирает два различных индекса \(i\), \(j\) (\(1 \le i, j \le |a|\)), и проделывает следующую операцию — удаляет \(a_i\) и \(a_j\) из массива и добавляет в массив число равное \(\lfloor \frac{a_i + a_j}{2} \rfloor \cdot 2\). Иными словами, сначала делит сумму чисел \(a_i\), \(a_j\) на \(2\) с округлением вниз, после чего результат умножает на \(2\).

Маша стремится максимизировать итоговое число, Оля же — минимизировать.

Маша и Оля решили сыграть на каждом непустом префиксе первоначального массива \(a\), и попросили вас об одной помощи.

Для каждого \(k = 1, 2, \ldots, n\) ответьте на следующий вопрос. Пусть в игре присутствуют только первые \(k\) элементов массива \(a\), соответственно с индексами \(1, 2, \ldots, k\). Какое число тогда останется при оптимальной игре обоих игроков?

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 10^5\)) — размер массива.

Во второй строке содержится \(n\) целых чисел \(a_1,a_2, \ldots,a_n\) (\(1 \leq a_i \leq 10^9\)) — массив, на котором играют Маша и Оля.

Гарантируется, что сумма \(n\) по всем входным данным не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел. \(k\)-е из этих чисел должно быть равно числу, которое останется в конце при оптимальной игре обоих, на массиве, состоящем из первых \(k\) элементов массива \(a\).

Примечание

В третьем наборе входных данных для префикса длины \(1\) ответ \(3\). Для префикса длины \(2\) у Маши есть один вариант для хода, поэтому ответ \(12\). Для префикса длины \(3\) у Маши есть три возможных хода: она выбирает \(3\) и \(10\), тогда число в конце \(22\), \(3\) и \(11\), тогда число в конце \(24\), \(10\) и \(11\), тогда число в конце \(22\), значит Маша выберет \(3\) и \(11\) и получит \(24\).

D. Математическое задание

геометрия Конструктив математика Перебор *1700

Математикам 31 лицея было предложено следующее задание:

Вам дано нечетное число \(n\) и вам нужно подобрать \(n\) различных чисел, которые являются квадратами целых чисел. Но не всё так просто. Каждое число должно быть длины \(n\) (и при этом не иметь ведущих нулей) и мультимножество цифр всех чисел должно совпадать. Например, у \(\mathtt{234}\) и \(\mathtt{432}\), \(\mathtt{11223}\) и \(\mathtt{32211}\) мультимножества цифр совпадают, а у \(\mathtt{123}\) и \(\mathtt{112233}\) нет.

Математики не справились с этой задачей, а сможете ли вы?

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных.

Следующие \(t\) строк содержат одно целое нечетное число \(n\) (\(1 \leq n \leq 99\)) — количество чисел, которые нужно подобрать и их длина.

Гарантируется, что при заданных ограничениях решение существует.

Гарантируется, что сумма по \(n^2\) не превосходит \(10^5\).

Числа можно выводить в любом порядке.

Выходные данные

Для каждого набора нужно вывести \(n\) чисел длины \(n\) — ответ на задачу.

Если существует несколько вариантов ответа, выведите любой.

Примечание

Ниже показано квадратами каких чисел являются ответы для второго набора входных данных:

\(\mathtt{169}\) = \(\mathtt{13}^2\)

\(\mathtt{196}\) = \(\mathtt{14}^2\)

\(\mathtt{961}\) = \(\mathtt{31}^2\)

Ниже показано квадратами каких чисел являются ответы для третьего набора входных данных:

\(\mathtt{16384}\) = \(\mathtt{128}^2\)

\(\mathtt{31684}\) = \(\mathtt{178}^2\)

\(\mathtt{36481}\) = \(\mathtt{191}^2\)

\(\mathtt{38416}\) = \(\mathtt{196}^2\)

\(\mathtt{43681}\) = \(\mathtt{209}^2\)

F. Разделение на группы

графы жадные алгоритмы Конструктив поиск в глубину и подобное *2900

В \(31\) лицее существовало две группы олимпиадников: информатики и математики. Численность информатиков составляла \(n_1\), математиков — \(n_2\). Точно неизвестно кто какой именно группе принадлежал, но известно, что между некоторыми парами людей существовали дружественные связи (причем они могли образовываться как между парой людей одной группы, так и двух различных).

Связи были настолько крепкими, что даже если убрать одного человека, а вместе с ним убрать все его дружественные связи, то любая пара людей всё равно оставалась знакома либо напрямую, либо через общих приятелей.

\(^{\dagger}\) Более формально, два человека \((x, y)\) знакомы в следующем случае: найдутся такие люди \(a_1, a_2, \ldots,a_n\) (\(1 \le a_i \le n_1 + n_2\)), что одновременно выполняются следующие условия:

\(\bullet\) Человек \(x\) напрямую знаком с \(a_1\).

\(\bullet\) Человек \(a_n\) напрямую знаком с \(y\).

\(\bullet\) Человек \(a_i\) напрямую знаком с \(a_{i + 1}\) для любого (\(1 \le i \le n - 1\)).

Преподаватели были недовольны тем, что информатики дружат с математиками и наоборот, и поэтому они решили разделить школьников на две группы таким образом, чтобы выполнялось два условия:

\(\bullet\) В группе информатиков было \(n_1\) человек, а в группе математиков — \(n_2\) человек.

\(\bullet\) Любая пара информатиков должна быть знакома (допускается знакомство при участии общих знакомых, которые обязаны быть из той же группы, что и люди из этой пары), тоже самое должно выполняться и для математиков.

Помогите им разрешить эту задачу и найдите, кто к какой группе относится.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n_1\), \(n_2\) и \(m\) (\(1 \le n_1, n_2 \le 2000\), \(1 \le m \le 5000\)). \(n_1\), \(n_2\) являются размерами двух групп, описанных в задаче, \(m\) — количество дружественных связей изначально.

В следующих \(m\) строках дано описание дружественных связей: в \(i\)-й (\(1 \le i \le m\)) из них дана пара чисел \((a, b)\), которая означает, что человек с номером \(a\) дружит с человеком с номером \(b\) (и обратно).

Гарантируется, что для каждого набора входных данных все дружественные связи различные.

Гарантируется, что сумма \(n_1 + n_2\) по всем наборам входных данных не превосходит \(2000\), а сумма \(m\) по всем наборам входных данных не превосходит \(5000\).

Также гарантируется, что для каждого набора входных данных ответ существует.

Выходные данные

Для каждого набора входных данных выведите две строки.

В первой строке выведите \(n_1\) различных чисел \(a_i\) (\(1 \le a_i \le n_1 + n_2\)) — люди, принадлежащие первой группе.

Во второй строке выведите \(n_2\) различных чисел \(b_i\) (\(1 \le b_i \le n_1 + n_2\)) — люди, принадлежащие второй группе.

Все числа должны быть различные.

Если существует несколько вариантов ответа, выведите любой.

Примечание

Рассмотрим третий набор входных данных. Разделение на группы выглядит следующим образом:

В зелёный цвет покрашены школьники, которые были выбраны информатиками, в синий же цвет покрашены те, кто были выбраны математиками.

Рассмотрим все пары информатиков и то, как они знакомы:

Пары \((4, 5), (4, 6)\) знакомы напрямую.

Пара \((5, 6)\) знакома через информатика с номером \(4\).

Рассмотрим все пары математиков и то, как они знакомы:

Пары \((1, 2), (2, 3)\) знакомы напрямую.

Пара \((1, 3)\) знакома через математика с номером \(2\).

Получаем, что любая пара людей, принадлежащих одной группе, знакомы друг с другом, а значит разбиение на две группы верное.

A. Наименьшее произведение

Конструктив математика *800

Вам дан массив целых чисел \(a_1, a_2, \dots, a_n\). Вы можете выполнить следующую операцию любое количество раз (возможно, ноль):

  • Выбрать любой элемент \(a_i\) из массива и заменить его значение на любое целое число от \(0\) до \(a_i\) (включительно). Более формально, если \(a_i < 0\), заменить \(a_i\) на любое целое число из \([a_i, 0]\), иначе заменить \(a_i\) на любое целое число из \([0, a_i]\).

Пусть \(r\) — минимально возможное произведение всех \(a_i\) после выполнения операции любое число раз.

Найдите минимальное количество операций, необходимое для того, чтобы произведение стало равно \(r\). Также выведите одну такую кратчайшую последовательность операций. Если существует несколько ответов, можете вывести любой из них.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 100\)) — длину массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^9 \leq a_i \leq 10^9\)).

Выходные данные

Для каждого набора входных данных:

  • Первая строка должна содержать минимальное количество операций \(k\) (\(0 \leq k \leq n\)).
  • \(j\)-я из следующих \(k\) строк должна содержать два целых числа \(i\) и \(x\), которые описывают \(j\)-ю операцию. Эта операция заключается в замене \(a_i\) на \(x\).
Примечание

В первом примере мы можем заменить значение первого элемента на \(0\), и произведение станет \(0\), что является минимально возможным произведением.

Во втором примере изначально произведение целых чисел равно \(2 \cdot 8 \cdot (-1) \cdot 3 = -48\), что является минимально возможным произведением, поэтому в этом случае ничего делать не нужно.

E. Постройте матрицу

Конструктив математика *2500

Вам дано четное целое число \(n\) и целое число \(k\). Ваша задача — построить матрицу размера \(n \times n\), состоящую из чисел \(0\) и \(1\) таким образом, чтобы выполнялись следующие условия, или сообщить, что это невозможно:

  • сумма всех чисел в матрице равна ровно \(k\);
  • побитовый \(\texttt{XOR}\) всех чисел в строке \(i\) одинаков для каждого \(i\);
  • побитовый \(\texttt{XOR}\) всех чисел в столбце \(j\) одинаков для каждого \(j\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 130\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных описывается одной строкой, содержащей два целых числа \(n\) и \(k\) (\(2 \leq n \leq 1000\), \(n\) чётно, \(0 \leq k \leq n^2\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2000\).

Выходные данные

Для каждого набора входных данных выведите \(\texttt{Yes}\), если возможно построить матрицу, удовлетворяющую всем условиям задачи, и \(\texttt{No}\) в противном случае.

Если матрицу построить возможно, то \(i\)-я из следующих \(n\) строк должна содержать \(n\) целых чисел, представляющих элементы в \(i\)-й строке матрицы.

Примечание

В первом примере все условия выполнены:

  • сумма всех чисел в матрице равна ровно \(0\);
  • побитовый \(\texttt{XOR}\) всех чисел в строке \(i\) равен \(0\) для каждого \(i\);
  • побитовый \(\texttt{XOR}\) всех чисел в столбце \(j\) равен \(0\) для каждого \(j\).

В третьем примере можно показать, что найти матрицу, удовлетворяющую всем условиям задачи, невозможно.

F. Постройте дерево

битмаски Деревья дп Конструктив *2500

Вам дан массив целых чисел \(l_1, l_2, \dots, l_n\) и целое число \(d\). Можно ли построить дерево, удовлетворяющее следующим трем условиям?

  • Дерево содержит \(n + 1\) вершину.
  • Длина \(i\)-го ребра равна \(l_i\).
  • (Взвешенный) диаметр дерева равен \(d\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 250\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\), \(d\) (\(2 \leq n \leq 2000, 1 \leq d \leq 2000\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(l_1, l_2, \dots, l_n\) (\(1 \leq l_i \leq d\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2000\).

Выходные данные

Для каждого набора входных данных выведите \(\texttt{Yes}\), если возможно построить дерево, удовлетворяющее всем условиям, и \(\texttt{No}\) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Ниже приведены иллюстрации деревьев для первого и третьего наборов входных данных. Один из диаметров выделен путем окрашивания его ребер в красный цвет.

A. Кирпичная стена

жадные алгоритмы Конструктив математика реализация *800

Кирпич — это полоска \(1 \times k\), расположенная горизонтально или вертикально, где \(k\) может быть произвольным числом не менее \(2\) (\(k \ge 2\)).

Кирпичная стена размера \(n \times m\) — это такой способ разместить некоторое количество кирпичей внутри прямоугольника \(n \times m\), чтобы кирпичи располагались по клеткам горизонтально или вертикально, не вылезали за границы прямоугольника \(n \times m\), и чтобы каждая клетка принадлежала ровно одному кирпичу. Здесь \(n\) — это высота прямоугольника \(n \times m\), а \(m\) — ширина. Обратите внимание, что в одной кирпичной стене могут быть кирпичи с разными значениями k.

Устойчивость стены — это число кирпичей, расположенных горизонтально, минус число кирпичей, расположенных вертикально. Обратите внимание, что если вы использовали \(0\) горизонтальных кирпичей и \(2\) вертикальных, то получится устойчивость \(-2\), а не \(2\).

Какую максимальную устойчивость может иметь стена \(n \times m\)?

Гарантируется, что при ограничениях задачи существует хотя бы одна кирпичная стена \(n \times m\).

Входные данные

В первой строке находится единственное целое число \(t\) (\(1 \le t \le 10\,000\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \le n,\,m \le 10^4\)).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — максимальную устойчивость стены размера \(n \times m\).

Примечание

В 1-м тестовом случае максимальная прочность \(2\) получается, если положить два горизонтальных кирпича \(1 \times 2\) друг на друга.

Во 2-м тестовом случае можно получить максимальную прочность \(28\), если разместить в каждом из \(7\) рядов по \(4\) горизонтальных кирпича \(1 \times 2\).

B. Минимизируйте инверсии

жадные алгоритмы Конструктив реализация сортировки Структуры данных *900

Вам даны две перестановки \(a\) и \(b\) длины \(n\). Перестановкой называется массив из \(n\) элементов от \(1\) до \(n\), в котором все элементы различны. К примеру, массив [\(2,1,3\)] является перестановкой, а [\(0,1\)] и [\(1,3,1\)] не являются.

Вы можете сколько угодно раз выбрать два индекса \(i\) и \(j\), а затем поменять местами элементы \(a_i\) с \(a_j\) и \(b_i\) с \(b_j\) одновременно.

Вы ненавидите инверсии и поэтому хотите минимизировать суммарное число инверсий в обеих перестановках.

Инверсией в перестановке \(p\) называется пара индексов \((i, j)\), такая что \(i < j\) и \(p_i > p_j\). Например, если \(p=[3,1,4,2,5]\), то количество инверсий в этой перестановке равно \(3\) (искомые пары индексов: \((1,2)\), \((1,4)\) и \((3,4)\)).

Входные данные

В первой строке входных данных вводится одно число \(t\) (\(1 \leq t \leq 20\,000\)) — количество запросов.

Каждый набор входных данных состоит из трех строк. В первой строке вводится число \(n\) (\(1 \leq n \leq 2\cdot10^5\)) — длина перестановок \(a\) и \(b\). Во второй строке вводится \(n\) элементов \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n\)) — перестановка \(a\). В третьей строке в аналогичном формате вводится перестановка \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите две перестановки \(a'\) и \(b'\) — перестановки после применения операций. Суммарное количество инверсий в \(a'\) и \(b'\) должно быть минимально возможным среди всех пар перестановок, которые возможно получить с помощью операций из условия.

Если существует несколько решений, выведите любое из них.

Примечание

В первом тесте минимальное достижимое количество инверсий равно \(10\).

Во втором наборе входных данных можно отсортировать обе перестановки одновременно. Для этого можно применить следующие операции:

  • Поменять элементы на позициях \(1\) и \(3\) в обеих перестановках. После операции \(a =\) [\(2,1,3\)], \(b =\) [\(2,1,3\)].
  • Поменять элементы на позициях \(1\) и \(2\). После операции \(a\) и \(b\) отсортированы.

В третьем тесте минимальное достижимое количество инверсий равно \(7\).

E. ace5 и порядок задач

интерактив Конструктив разделяй и властвуй реализация сортировки Теория вероятностей *2200

Это интерактивная задача!

В новом раунде было \(n\) задач, сложности от \(1\) до \(n\). Координатор, решив сделать первый раунд с неотсортированными по сложности задачами, переставил задачи, получив перестановку сложностей от \(1\) до \(n\). После этого координатор предложил ace5 угадать перестановку следующим образом.

Координатор загадывает число \(x\) от \(1\) до \(n\).

ace5 может делать запросы типа: \(?\ i\). Ответом будет:

  • \(>\), если \(a_i > x\), после этого \(x\) увеличивается на \(1\).
  • \(<\), если \(a_i < x\), после этого \(x\) уменьшается на \(1\).
  • \(=\), если \(a_i = x\), после этого \(x\) не меняется.

Задача ace5 — отгадать перестановку не более чем за \(40n\) запросов. Так как ace5 слишком занят написанием анонса, он поручил эту задачу Вам.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество тестовых случаев.

Протокол взаимодействия

Взаимодействие Вашей программы с программой жюри в каждом тестовом случае начинается со считывания целого положительного числа \(n\) (\(1 \leq n \leq 2000\)) — длины загаданной перестановки.

Чтобы сделать запрос, выведите строку в формате «? i», где \(1 \leq i \leq n\).

В качестве ответа вы получите:

  • «>», если \(a_i\) > \(x\), после этого \(x\) увеличится на \(1\).
  • «<», если \(a_i\) < \(x\), после этого \(x\) уменьшится на \(1\).
  • «=», если \(a_i\) = \(x\), после этого \(x\) не изменится.

Вы можете сделать не более \(40n\) запросов. Чтобы вывести ответ, необходимо напечатать «! a_1 a_2 ... a_n», где \(1 \leq a_i \leq n\), все они различны. Вывод ответа не считается за запрос.

Если ваша программа сделает более \(40n\) запросов для одного набора входных данных, или сделает некорректный запрос, то ответом на запрос будет -1, после получения такого ответа ваша программа должна немедленно завершится, чтобы получить вердикт Неправильный ответ. Иначе она может получить любой другой вердикт.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.
Гарантируется, что сумма \(n\) по всем тестовым случаям не превосходит \(2000\).

Интерактор в этой задаче не является адаптивным.

Взломы:

Чтобы сделать взлом, используйте следующий формат:

В первой строке находится одно целое число \(t\) — количество тестовых случаев.

Описание каждого тестового случая должно состоять из двух строк. В первой строке находятся числа \(n\) и \(x\) (\(1 \leq x \leq n \leq 2000\)) — длина загаданной перестановки и изначальное значение числа \(x\). Во второй строке находятся \(n\) различных чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n\)) — перестановка, которую должно загадать жюри в данном тестовом случае.

Сумма \(n\) по всем запросам не должна превосходить \(2000\).

Примечание

В первом тесте загадана перестановка \(a\) = [\(2,4,1,5,3\)], и значение \(x\) изначально равно \(3\).

Во втором тесте загадана перестановка \(a\) = [\(2,1\)], \(x\) изначально равен \(1\).

G. Перестановка от исходного

Конструктив математика *2700

Вам дали всего одно число \(n\). Оно не показалось вам интересным, и вы задумались над вопросом: можно ли придумать такой массив длины \(n\) из целых чисел без нулей, что если каждый элемент массива заменить на сумму соседних (крайние элементы заменяются просто на соседние), получится перестановка чисел в исходном массиве.

Входные данные

Каждый набор входных данных содержит всего одно число \(n\) (\(2 \leq n \leq 10^6\)).

Выходные данные

Если ответ существует, выведите «YES» (без кавычек), а затем массив \(a\) (\(-10^9 \leq a_i \leq 10^9, a_i \neq 0\)), удовлетворяющий условию задачи. Если вариантов ответов несколько, выведите любой.

Если подходящего массива нет, выведите «NO» (без кавычек).

Слова «YES» и «NO» можно выводить в любом регистре, например, «YES», «Yes», «yEs», и так далее.

Примечание

В первом тесте массив [\(1, 2, -2, -1\)] подходит, так как если заменить каждый элемент на сумму соседних, то получится массив [\(2, -1, 1, -2\)], который является перестановкой от исходного.

Во втором тесте можно показать, что ответа не существует.

D. 01-дерево

Деревья жадные алгоритмы Конструктив снм сортировки Структуры данных *2100

Есть ребро-взвешенное полное двоичное дерево с \(n\) листьями. Полное двоичное дерево определяется как дерево, в котором каждая нелистовая вершина имеет ровно 2 дочерних вершины. Для каждой нелистовой вершины обозначим одного из ее детей как левого ребенка, а другого — как правого.

Это двоичное дерево обладает очень странным свойством. Для каждой нелистовой вершины одно из ребер к ее детям имеет вес \(0\), а другое ребро — вес \(1\). Обратите внимание, что ребро с весом \(0\) может идти как к левому ребенку, так и к правому.

Вы забыли, как выглядит дерево, но, к счастью, вы помните некоторую информацию о листьях в виде массива \(a\) длины \(n\). Для каждого \(i\) от \(1\) до \(n\), \(a_i\) представляет собой расстояние\(^\dagger\) от корня до \(i\)-го листа (в порядке обхода dfs\(^\ddagger\)). Определите, существует ли полное двоичное дерево, удовлетворяющее массиву \(a\). Обратите внимание, что восстанавливать дерево не нужно.

\(^\dagger\) Расстояние от вершины \(u\) до вершины \(v\) определяется как сумма весов ребер на пути от вершины \(u\) до вершины \(v\).

\(^\ddagger\) Порядок листьев в dfs определяется вызовом следующей функции \(\texttt{dfs}\) на корне бинарного дерева.


dfs_order = [] — порядок обхода dfs

функция dfs(v):
если v — лист:
добавить v в конец dfs_order
иначе:
dfs(левый ребенок v)
dfs(правый ребенок v)

dfs(корень)
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2\cdot 10^5\)) — длину массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le n - 1\)) — расстояние от корня до \(i\)-го листа.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если существует полное двоичное дерево, удовлетворяющее массиву \(a\), и «NO» в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных массиву удовлетворяет следующее дерево.

Для второго набора входных данных можно доказать, что не существует полного двоичного дерева, удовлетворяющего массиву.

E. Подсчёт префиксов

дп Комбинаторика Конструктив математика реализация *2600

Есть неизвестный массив \(a\) длины \(n\), состоящий только из \(1\) и \(-1\). Пусть \(p\) — массив префиксных сумм массива \(a\). Более формально, \(p\) — это массив длины \(n\), в котором \(p_i = a_1 + a_2 + \ldots + a_i\). После этого массив \(p\) сортируется в неубывающем порядке. Например, если \(a = [1, -1, -1, 1, 1]\), то \(p = [1, 0, -1, 0, 1]\) до сортировки и \(p = [-1, 0, 0, 1, 1]\) после сортировки.

Вам дан массив префиксных сумм \(p\) после сортировки, но вы не знаете, чему был равен массив \(a\). Ваша задача — посчитать количество исходных массивов \(a\), для которых в результате сортировки массива префиксных сумм получается заданный массив \(p\). Поскольку это число может быть большим, от вас требуется только найти его по модулю \(998\,244\,353\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 5000\)) — длину неизвестного массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(|p_i| \le n\)) — \(n\) префиксных сумм массива \(a\), отсортированных в порядке неубывания.

Гарантируется, что \(p_1 \le p_2 \le \ldots \le p_n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5000\).

Выходные данные

Для каждого набора входных данных выведите ответ по модулю \(998\,244\,353\).

Примечание

В первых двух наборах входных данных единственными возможными массивами \(a\) для \(n = 1\) являются \(a = [1]\) и \(a = [-1]\). Соответствующие им отсортированные массивы префиксных сумм \(p\) — \(p = [1]\) и \(p = [-1]\). Следовательно, не существует массива \(a\), который может привести к отсортированному массиву префиксных сумм \(p = [0]\). Но существует ровно \(1\) массив \(a\), который может привести к отсортированному массиву префиксных сумм \(p = [1]\).

В третьем наборе входных данных можно доказать, что не существует массива \(a\), который мог бы привести к отсортированному массиву префиксных сумм \(p = [-1, 1, 2]\).

В четвертом наборе входных данных существует \(3\) возможных массива \(a\), которые могут привести к отсортированному массиву префиксных сумм \(p = [-1, 0, 0, 1, 1]\).

  • \(a = [1, -1, 1, -1, -1]\). Массив префиксных сумм до сортировки равен \(p = [1, 0, 1, 0, -1]\), а после сортировки \(p = [-1, 0, 0, 1, 1]\).
  • \(a = [1, -1, -1, 1, 1]\). Массив префиксных сумм до сортировки равен \(p = [1, 0, -1, 0, 1]\), а после сортировки \(p = [-1, 0, 0, 1, 1]\).
  • \(a = [-1, 1, 1, -1, 1]\). Массив префиксных сумм до сортировки равен \(p = [-1, 0, 1, 0, 1]\), а после сортировки \(p = [-1, 0, 0, 1, 1]\).

Для пятого набора входных данных единственным возможным массивом \(a\), который может привести к отсортированному массиву префиксных сумм \(p = [-4, -3, -3, -2, -1]\), является \(a = [-1, -1, -1, -1, 1]\).

G. Легендарный древесный гроссмейстер

Деревья игры Конструктив разделяй и властвуй *3500

В мире деревьев есть популярная игра для двух игроков, которая проводится на дереве с \(n\) вершинами, пронумерованными от \(1\) до \(n\). В этой игре ведущие турнира сначала выбирают вершину, которая будет корнем дерева, и выбирают другую вершину (возможно, ту же самую, что и корень), на которую кладут монету. Затем каждый игрок по очереди перемещает монету в любую дочернюю\(^\dagger\) вершину вершины, на которой в данный момент находится монета. Первый игрок, который не может сделать ход, проигрывает.

Алиса хочет стать легендарным древесным гроссмейстером, поэтому она тратит много времени на изучение игры. Она записала матрицу \(s\) размером \(n\) на \(n\), где \(s_{i,j} = \mathtt{1}\), если первый игрок может выиграть, если корнем дерева выбрана вершина \(i\), а монета изначально была помещена на вершину \(j\). В противном случае \(s_{i, j} = \mathtt{0}\). Алиса — перфекционистка, поэтому она предполагает, что оба игрока играют идеально.

Однако по дороге на турнир она случайно ударилась головой и забыла, как выглядит дерево. Определите, существует ли дерево, которое удовлетворяет выигрышным и проигрышным состояниям, представленным матрицей \(s\), и если существует, постройте подходящее дерево.

\(^\dagger\) Вершина \(c\) является дочерней по отношению к вершине \(u\), если между \(c\) и \(u\) есть ребро, и \(c\) не лежит на единственном простом пути из корня в вершину \(u\).

Входные данные

Первая строка содержит одно целое число \(n\) (\(1 \le n \le 5000\))  — количество вершин в дереве.

Каждая из следующих \(n\) строк содержит строку из \(n\) символов, где \(j\)-й символ \(i\)-й строки равняется \(s_{i, j}\) (\(s_{i, j} \in \{\mathtt{0}, \mathtt{1}\}\)) — выигрышные и проигрышные состояния дерева.

Выходные данные

Если не существует дерева, удовлетворяющего выигрышным и проигрышным состояниям, представленным матрицей \(s\), выведите единственную строку, содержащую «NO».

В противном случае, если существует дерево, удовлетворяющее матрице \(s\), выведите «YES» в первой строке, а затем \(n - 1\) строку, каждая из которых содержит два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\)), означающих, что дерево имеет ребро между вершинами \(u\) и \(v\).

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Если существует несколько деревьев, удовлетворяющих матрице \(s\), выведите любое из них.

Примечание

В первом наборе входных данных граф \(1\!-\!4\!-\!2\!-\!3\) удовлетворяет выигрышным и проигрышным состояниям, представленным матрицей \(s\). Например, \(s_{3,3} = 1\), так как первый игрок может переместить монету из \(3\rightarrow 2\), затем второй игрок перемещает монету из \(2\rightarrow 4\), и, наконец, первый игрок перемещает монету из \(4\rightarrow 1\). В этот момент у вершины \(1\) нет детей, поэтому второй игрок не может сделать ход и проигрывает. С другой стороны, \(s_{1,3} = 0\), так как если \(1\) является корнем, то у \(3\) нет детей, поэтому первый игрок не может сделать первый ход и проигрывает.

Во втором наборе входных данных можно показать, что ни одно дерево не удовлетворяет матрице \(s\).

A. Необычный шаблон

Конструктив реализация Строки *800

Задано целое число \(n\) и три строки \(a, b, c\), каждая из которых состоит из \(n\) строчных латинских букв.

Назовем шаблоном строку \(t\), состоящую из \(n\) строчных и/или заглавных латинских букв. Строка \(s\) подходит под шаблон \(t\), если для всех \(i\) от \(1\) до \(n\) выполняются следующие условия:

  • если \(i\)-я буква шаблона строчная, то буква \(s_i\) должна совпадать с \(t_i\);
  • если \(i\)-я буква шаблона заглавная, то буква \(s_i\) должна отличаться от строчной версии буквы \(t_i\). Например, если в шаблоне в какой-то позиции находится символ 'A', то в этой позиции в строке не должно быть буквы 'a'.

Соответственно, строка не подходит под шаблон, если хотя бы для одного \(i\) условие не выполняется.

Определите, существует ли шаблон \(t\) такой, что строки \(a\) и \(b\) подходят под него, а строка \(c\) не подходит.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

В первой строке каждого набора входных данных записано одно целое число \(n\) (\(1 \le n \le 20\)) — длина заданных строк.

В следующих трех строках записаны строки \(a, b\) и \(c\). Каждая строка состоит из ровно \(n\) строчных латинских букв.

Выходные данные

На каждый набор входных данных выведите «YES», если существует такой шаблон \(t\), под который подходят строки \(a\) и \(b\), но не подходит строка \(c\). В противном случае выведите «NO».

Примечание

В первом наборе входных данных можно использовать шаблон «C». У строк \(a\) и \(b\) первая буква отличается от 'c', поэтому они подходят под шаблон. У строки \(c\) первая буква совпадает с 'c', поэтому она не подходит.

В третьем наборе можно использовать шаблон «CODEforces».

B. Формирование треугольников

Комбинаторика Конструктив математика сортировки *1200

У вас есть \(n\) палочек, пронумерованных от \(1\) до \(n\). Длина \(i\)-й палочки равна \(2^{a_i}\).

Вы хотите выбрать ровно \(3\) палочки из заданных \(n\) палочек и образовать из них невырожденный треугольник, используя палочки в качестве сторон треугольника. Треугольник называется невырожденным, если его площадь строго больше \(0\).

Вам нужно посчитать количество способов выбрать ровно \(3\) палочки, чтобы из них можно было образовать треугольник. Обратите внимание, что порядок выбора палочек не имеет значения (например, выбрать \(1\)-ю, \(2\)-ю и \(4\)-ю палочку — это то же самое, что и выбрать \(2\)-ю, \(4\)-ю и \(1\)-ю палочку).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк:

  • первая строка содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\));
  • вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i \le n\)).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого теста выведите одно целое число — количество способов выбрать ровно \(3\) палочки, чтобы из них можно было составить треугольник.

Примечание

В первом наборе входных данных примера можно выбрать любые три палочки из заданных \(7\).

Во втором наборе входных данных примера можно выбрать \(1\)-ю, \(2\)-ю и \(4\)-ю палочку, или \(1\)-ю, \(3\)-ю и \(4\)-ю палочку.

В третьем наборе входных данных примера нельзя образовать треугольник из заданных палочек длиной \(2\), \(4\) и \(8\).

E. Возрастающие подпоследовательности

битмаски жадные алгоритмы Конструктив математика разделяй и властвуй *1800

Напомним, что возрастающая подпоследовательность массива \(a\) — это последовательность, которую можно получить из массива, удалив некоторые элементы, не изменяя порядок оставшихся элементов, и оставшиеся элементы строго возрастают (т.е. \(a_{b_1} < a_{b_2} < \dots < a_{b_k}\) и \(b_1 < b_2 < \dots < b_k\)). Обратите внимание, что пустая подпоследовательность также является возрастающей.

Вам дано положительное целое число \(X\). Ваша задача — найти массив целых чисел длиной не более \(200\), такой, что у него ровно \(X\) возрастающих подпоследовательностей, или сообщить, что такого массива нет. Если есть несколько ответов, вы можете вывести любой из них.

Если две подпоследовательности состоят из одинаковых чисел, но позиции элементов исходного массива, входящих в подпоследовательность, отличаются, то эти подпоследовательности считаются различными (например, у массива \([2, 2]\) две разных подпоследовательности, равных \([2]\)).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Единственная строка каждого набора содержит одно целое число \(X\) (\(2 \le X \le 10^{18}\)).

Выходные данные

Для каждого набора входных данных выведите ответ для него. Если невозможно найти требуемый массив, выведите -1 в первой строке. В противном случае выведите положительное целое число \(n\) в первой строке — длину массива. Во второй строке выведите \(n\) целых чисел — элементы искомого массив. Если есть несколько ответов, вы можете вывести любой из них. Все элементы массива должны находиться в диапазоне \([-10^9; 10^9]\).

C. Найти B

жадные алгоритмы Конструктив *1400

Массив \(a\) длины \(m\) назовем красивым, если существует массив \(b\) из \(m\) целых чисел, для которого выполняются следующие условия:

  1. \(\sum\limits_{i=1}^{m} a_i = \sum\limits_{i=1}^{m} b_i\);
  2. \(a_i \neq b_i\) для каждого индекса \(i\) от \(1\) до \(m\);
  3. \(b_i > 0\) для каждого индекса \(i\) от \(1\) до \(m\).

Дан массив \(c\) длины \(n\). Каждый элемент этого массива больше \(0\).

Вам нужно ответить на \(q\) запросов. Во время \(i\)-го запроса вам нужно определить, является ли подмассив \(c_{l_{i}}, c_{l_{i}+1}, \dots, c_{r_{i}}\) красивым.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(q\) (\(1 \le n, q \le 3 \cdot 10^5\)) — длину массива \(c\) и количество запросов.

Вторая строка каждого набора содержит \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le 10^9\)).

Затем следуют \(q\) строк. \(i\)-я из них содержит два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — границы \(i\)-го подмассива.

Дополнительные ограничения на входные данные: сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\); сумма \(q\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого запроса выведите YES, если подмассив красивый. В противном случае выведите NO.

Вы можете выводить каждую букву в любом регистре (как строчную или как заглавную). Например, строки yEs, yes, Yes и YES будут приняты как положительный ответ.

D. Слизни

Бинарный поиск жадные алгоритмы Конструктив Структуры данных *1800

В линию расположено \(n\) слизней. Слизни нумеруются от \(1\) до \(n\) слева направо. Размер \(i\)-го слизня равен \(a_i\).

Каждую секунду происходит следующее: ровно один слизень съедает одного из своих соседей и увеличивает свой размер на значение размера соседа. Слизень может съесть своего соседа, только если он строго больше этого соседа. Если нет такого слизня, который больше хотя бы одного из его соседей — процесс завершается.

Например, предположим, что \(n = 5\), \(a = [2, 2, 3, 1, 4]\). Процесс может пройти следующим образом:

  • сначала \(3\)-й слизень съедает \(2\)-го. Размер \(3\)-го слизня становится равным \(5\), \(2\)-й слизень съеден.
  • затем \(3\)-й слизень съедает \(1\)-го (они соседи, так как \(2\)-й уже съеден). Размер \(3\)-го слизня становится равным \(7\), \(1\)-й слизень съеден.
  • затем \(5\)-й слизень съедает \(4\)-го. Размер \(5\)-го слизня становится равным \(5\), \(4\)-й слизень съеден.
  • затем \(3\)-й слизень съедает \(5\)-го (они соседи, так как \(4\)-й уже съеден). Размер \(3\)-го слизня становится равным \(12\), \(5\)-й слизень съеден.

Для каждого слизня вычислите минимальное количество секунд, за которое он может оказаться съеден каким-то другим слизнем (среди всех возможных вариантов, как может происходить процесс), или сообщите, что это невозможно.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — количество слизней.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le 10^9\)).

Сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел, где \(i\)-е число должно быть равно минимальному количеству секунд, необходимому для того, чтобы \(i\)-й слизень был съеден другим слизнем, или -1, если это невозможно.

A. Покрыли ли мы всё?

дп жадные алгоритмы Конструктив кратчайшие пути Строки *1500

Вам дано два целых числа \(n\) и \(k\) вместе со строкой \(s\).

Ваша задача состоит в том, чтобы проверить, входят ли все возможные строки длины \(n\), которые могут быть получены из первых \(k\) прописных букв латинского алфавита, как подпоследовательности в \(s\). Если ответ NO, вам необходимо также найти строку длины \(n\) из первых \(k\) прописных букв латинского алфавита такую, что она не входит как подпоследовательность в \(s\).

Если существует несколько ответов — выведите любой.

Примечание: Строка \(a\) называется подпоследовательностью другой строки \(b\), если \(a\) может быть получена удалением нескольких (возможно нуля) символов из \(b\) без изменения порядка оставшихся символов.

Входные данные

В первой строке содержится одно целое число \(t \, (1 \le t \le 10^5)\) количество наборов входных данных.

Первая строка каждого набора входных данных содержит \(3\) целых числа \(n \, (1 \le n \le 26), \: k \, (1 \le k \le 26), \: m \, (1 \le m \le 1000)\) где \(n\) и \(k\) означают то же, что и в условии, а \(m\) означает длину строки \(s\).

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(m\), состоящую только из первых \(k\) прописных букв латинского алфавита.

Гарантируется, что сумма \(m\) и сумма \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите YES если все возможные строки длины \(n\) состоящие только из первых \(k\) прописных букв латинского алфавита присутствуют как подпоследовательность в \(s\), а иначе выведите NO.

Если ваш ответ NO, дополнительно выведите строку длины \(n\), которая состоит только из первых \(k\) прописных букв латинского алфавита, и не входит как подпоследовательность \(s\), в следующей строке.

Вы можете писать каждую букву YES и NO в любом регистре (например, YES, yES, YeS будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных все возможные строки (aa, ab, ba, bb) длины \(2\), которые могут быть получены из первых \(2\) прописных букв латинского алфавита, присутствуют как подпоследовательности в строке abba.

Во втором наборе входных данных строка aa не является подпоследовательностью abb.

F. Анти-прокси посещаемость

дп интерактив Конструктив Тернарный поиск *3500

Это интерактивная задача!

Мистер 1048576 — один из тех преподавателей, который ненавидит тратить время на ведение посещаемости. Вместо того чтобы вести посещаемость традиционным способом, он решил попробовать что-то новое сегодня.

В его классе \(n\) студентов с номерами от \(1\) до \(n\). Он точно знает, что сегодня отсутствует ровно \(1\) студент. Чтобы определить, кто отсутствует, он может задать некоторые запросы классу. В каждом запросе он может указать два целых числа \(l\) и \(r\) (\(1\leq l\leq r\leq n\)), и все студенты, чьи номера от \(l\) до \(r\) (включительно), поднимут руки. Затем он подсчитывает их, чтобы определить, лежит ли номер отсутствующего студента между этими значениями.

Все было хорошо, пока его ассистент не заметил что-то странное — студенты нечестные! Некоторые студенты, чьи номера находятся в указанном диапазоне, могут не поднимать руки, в то время как другие студенты, чьи номера не находятся в указанном диапазоне, могут поднять руки и дать прокси-посещаемость за кого-то другого. Но они не хотят вызывать подозрений. Таким образом, возможны только следующие \(4\) случая для конкретного запроса \((l,r)\)

  1. Истинно положительный: присутствуют \(r-l+1\) студент и \(r-l+1\) студент подняли руки.
  2. Истинно отрицательный: присутствуют \(r-l\) студентов и \(r-l\) студентов подняли руки.
  3. Ложно положительный: присутствуют \(r-l\) студентов, но \(r-l+1\) студент поднял руку.
  4. Ложно отрицательный: присутствуют \(r-l+1\) студент, но \(r-l\) студентов поднял руку.

В первых двух случаях студенты считаются отвечающими честно, в то время как в последних двух случаях студенты считаются отвечающими нечестно. Студенты могут взаимно решить свою стратегию, неизвестную мистеру 1048576. Кроме того, студенты не хотят вызывать подозрений и в то же время хотят создать много путаницы. Поэтому их стратегия всегда соответствует следующим двум условиям —

  1. Студенты никогда не будут отвечать честно \(3\) раза подряд.
  2. Студенты никогда не будут отвечать нечестно \(3\) раза подряд.

Мистер 1048576 раздосадован таким поведением студентов. Поэтому он готов отметить как минимум \(2\) студентов как отсутствующих (хотя он знает, что отсутствует только один). Посещаемость считается успешной, если отсутствующий студент находится среди этих двух. Кроме того, из-за ограниченного времени на занятия, он может задать не более \(\lceil\log_{1.116}{n}\rceil-1\) запросов (странное число, но ладно). Помогите ему завершить успешную посещаемость.

Протокол взаимодействия

Сначала прочтите строку, содержащую одно целое число \(t\) (\(1\leq t\leq 2048\)), обозначающее количество независимых тестов, которые вы должны решить.

Для каждого теста сначала прочтите строку, содержащую одно целое число \(n\) (\(3\leq n\leq 10^5\)). Затем вы можете задать до \(\lceil\log_{1.116}{n}\rceil-1\) запросов.

Чтобы задать запрос, напечатайте одну строку в формате "? l r" (без кавычек) \((1\leq l\leq r\leq n)\). Затем прочтите одну строку, содержащую одно целое число \(x\) (\(r-l\leq x\leq r-l+1\)), обозначающее количество студентов, поднявших руки в ответ на запрос.

Чтобы отметить студента как отсутствующего, напечатайте одну строку в формате "! a" (без кавычек) \((1\leq a\leq n)\). Затем прочтите одно целое число \(y\) (\(y\in\{0,1\}\)). Если студент с номером \(a\) отсутствовал, \(y=1\), в противном случае, \(y=0\). Обратите внимание, что эта операция не считается запросом, но вы можете выполнить эту операцию не более \(2\) раз.

Чтобы завершить тест, напечатайте одну строку в формате "#" (без кавычек). Затем вы должны продолжить решать оставшиеся тесты.

Обратите внимание, что если вы зададите больше запросов, или запрос будет невалидным — вы получите вердикт Wrong answer.

Гарантируется, что сумма \(n\) по всем тестам не превышает \(10^5\).

После вывода ответов не забудьте вывести конец строки и очистить буфер вывода. В противном случае вы получите вердикт Idleness limit exceeded. Чтобы очистить буфер, используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • Прочтите документацию для других языков.

Формат ввода для взломов

Тесты для этой задачи используют как неадаптивные, так и адаптивные тесты. Вы можете использовать неадаптивный тест для проведения взломов.

Первая строка ввода содержит одно целое число \(t\) (\(1\leq t\leq 2048\)).

Первая строка каждого теста содержит три целых числа \(g\), \(n\) и \(x\), где \(g=1\) (для идентификации того, что этот тест должен использовать неадаптивный алгоритм), \(n\) (\(3\leq n\leq 10^5\)) означает количество студентов в классе, и \(x\) (\(1\leq x\leq n\)) означает номер студента, который отсутствует. Вы должны учесть, что сумма \(n\) по всем тестам не превышает \(10^5\).

Вторая строка каждого теста содержит одну строку \(S\) (\(1\leq\vert S\vert\leq 120, S_i\in \{\texttt{T},\texttt{F}\}\)). Эта строка представляет последовательность истины. Если \(S_{(i-1)\bmod \vert S\vert+1}= \texttt{T}\), студенты будут действовать честно во время \(i\)-го запроса, в противном случае они будут действовать нечестно. Вы также должны учесть, что не должно быть индекса \(i\), для которого \(S_{(i-1)\bmod \vert S\vert+1} = S_{i\bmod \vert S\vert+1} = S_{(i+1)\bmod \vert S\vert+1}\).

Примечание

Для первого теста отсутствует студент с номером \(2\), и последовательность истины (см. раздел для взломов) — TFFTFTTF. Во время выполнения вашего решения этот тест будет использовать неадаптивный алгоритм.

Для второго теста отсутствует студент с номером \(4\), и последовательность истины — FFTFTTFT. Во время выполнения вашего решения этот тест будет использовать адаптивный алгоритм. Таким образом, фактический ответ может измениться в зависимости от ваших запросов, но всегда будет согласован с ответом на предыдущие запросы.

A. Покрыть всё!

жадные алгоритмы Конструктив Строки *800

Вам дано два положительных целых числа \(n\) и \(k\).

Ваша задача найти строку \(s\) такую, что все возможные строки длины \(n\), которые состоят из первых \(k\) прописных букв латинского алфавита, присутствуют в \(s\) как подпоследовательность.

Если существует несколько ответов, выведите ответ минимальной длины. Если таких ответов существует несколько — можно вывести любой.

Примечание: Строка \(a\) называется подпоследовательностью другой строки \(b\), если \(a\) может быть получена удалением нескольких (возможно нуля) символов из \(b\) без изменения порядка оставшихся символов.

Входные данные

В первой строке содержится одно целое число \(t\) (\(1\leq t\leq 676\)) означающее количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей два целых числа \(n\) (\(1\leq n\leq 26\)) и \(k\) (\(1\leq k\leq 26\)).

Выходные данные

Для каждого набора входных данных выведите одну строку \(s\) которая удовлетворяет условиям. Если существует несколько ответов, выведите ответ минимальной длины. Если таких ответов существует несколько — можно вывести любой.

Примечание

В первом наборе входных данных существует две строки длины \(1\) которые могут быть получены используя первые \(2\) прописные буквы латинского алфавита, и они входят в \(s\) как подпоследовательности:

  • \(\texttt{a}: {\color{red}{\texttt{a}}}\texttt{b}\)
  • \(\texttt{b}: \texttt{a}{\color{red}{\texttt{b}}}\)

Во втором наборе входных данных существует только одна строка длины \(2\) которая может быть получена используя лишь первую прописную букву латинского алфавита, и она входит в \(s\) как подпоследовательность:

  • \(\texttt{aa}: {\color{red}{\texttt{aa}}}\)

В третьем наборе входных данных существует \(4\) строки длины \(2\) которые могут быть получены с использованием первых \(2\) прописных букв латинского алфавита, и они входят в \(s\) как подпоследовательности:

  • \(\texttt{aa}: \texttt{b}{\color{red}{\texttt{aa}}}\texttt{b}\)
  • \(\texttt{ab}: \texttt{ba}{\color{red}{\texttt{ab}}}\)
  • \(\texttt{ba}: {\color{red}{\texttt{ba}}}\texttt{ab}\)
  • \(\texttt{bb}: {\color{red}{\texttt{b}}}\texttt{aa}{\color{red}{\texttt{b}}}\)

В четвертом наборе входных данных существует \(9\) строк длины \(2\) которые могут быть получены с использованием первых \(3\) прописных букв латинского алфавита, и они входят в \(s\) как подпоследовательности:

  • \(\texttt{aa}: {\color{red}{\texttt{a}}}\texttt{bcb}{\color{red}{\texttt{a}}}\texttt{c}\)
  • \(\texttt{ab}: {\color{red}{\texttt{ab}}}\texttt{cbac}\)
  • \(\texttt{ac}: \texttt{abcb}{\color{red}{\texttt{ac}}}\)
  • \(\texttt{ba}: \texttt{abc}{\color{red}{\texttt{ba}}}\texttt{c}\)
  • \(\texttt{bb}: \texttt{a}{\color{red}{\texttt{b}}}\texttt{c}{\color{red}{\texttt{b}}}\texttt{ac}\)
  • \(\texttt{bc}: \texttt{a}{\color{red}{\texttt{bc}}}\texttt{bac}\)
  • \(\texttt{ca}: \texttt{ab}{\color{red}{\texttt{c}}}\texttt{b}{\color{red}{\texttt{a}}}\texttt{c}\)
  • \(\texttt{cb}: \texttt{ab}{\color{red}{\texttt{cb}}}\texttt{ac}\)
  • \(\texttt{cc}: \texttt{ab}{\color{red}{\texttt{c}}}\texttt{ba}{\color{red}{\texttt{c}}}\)

B. По следам строки

жадные алгоритмы Конструктив Строки *900

Поликарп потерял строку \(s\) из \(n\) строчных латинских букв, но у него остался её след.

Следом строки \(s\) называется массив \(a\) из \(n\) целых чисел, в котором \(a_i\) равен количеству таких \(j\) (\(j < i\)), что \(s_i=s_j\). Например, следом строки abracadabra является массив [\(0, 0, 0, 1, 0, 2, 0, 3, 1, 1, 4\)].

По заданному следу строки найдите любую строку \(s\), из которой он мог быть получен. Строка \(s\) должна состоять только из строчных латинских букв a-z.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длину потерянной строки.

Вторая строка каждого набора содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 \le a_i < n\)) — след строки. Гарантируется, что для заданного следа существует подходящая строка \(s\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите строку \(s\), которой соответствует данный след. Если таких строк \(s\) несколько, то выведите любую из них.

Строка \(s\) должна состоять из строчных латинских букв a-z.

Гарантируется, что для каждого набора входных данных ответ существует.

E. Каровная перестановка

Конструктив математика *1400

Вам даны два целых числа \(n\) и \(k\) (\(k \le n\)), причём число \(k\) — чётное.

Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([0,1,2]\) тоже не перестановка (\(n=3\), но в массиве не встречается \(3\)).

Ваша задача построить \(k\)-ровную перестановку длины \(n\).

Перестановка называется \(k\)-ровной, если среди всех сумм непрерывных отрезков длины \(k\) (которых, очевидно, ровно \(n - k + 1\)), любые две суммы отличаются не более чем на \(1\).

Более формально, чтобы определить, является ли перестановка \(p\) \(k\)-ровной, сначала построим массив \(s\) длины \(n - k + 1\), где \(s_i=\sum_{j=i}^{i+k-1} p_j\), то есть \(i\)-й элемент равен сумме \(p_i, p_{i+1}, \dots, p_{i+k-1}\).

Перестановка называется \(k\)-ровной, если \(\max(s) - \min(s) \le 1\).

Найдите любую \(k\)-ровную перестановку длины \(n\).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов.

Первая и единственная строка каждого набора содержит два целых числа \(n\) и \(k\) (\(2 \le k \le n \le 2 \cdot 10^5\), \(k\) — чётное число), где \(n\) — длина искомой перестановки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите любую \(k\)-ровную перестановку длины \(n\).

Гарантируется, что такая перестановка всегда существует при данных ограничениях.

Примечание

Во втором наборе входных данных примера:

  • \(p_1 + p_2 = 3 + 1 = 4\);
  • \(p_2 + p_3 = 1 + 2 = 3\).
Максимум среди сумм равен \(4\), а минимум равен \(3\).

E. Модообразная последовательность

графы дп жадные алгоритмы Конструктив математика Перебор теория чисел *2300

Даны два целых числа \(x\) и \(y\). Назовем последовательность \(a\) длины \(n\) модообразной, если \(a_1=x\), и для всех \(1 < i \le n\) значение \(a_{i}\) равно либо \(a_{i-1} + y\), либо \(a_{i-1} \bmod y\). Здесь \(x \bmod y\) обозначает остаток от деления \(x\) на \(y\).

Определите, существует ли модообразная последовательность длины \(n\), сумма элементов которой равна \(S\), и если существует, то найдите любую такую последовательность.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит четыре целых числа \(n\), \(x\), \(y\) и \(s\) (\(1 \le n \le 2 \cdot 10^5\), \(0 \le x \le 2 \cdot 10^5\), \(1 \le y \le 2 \cdot 10^5\), \(0 \le s \le 2 \cdot 10^5\)) — длина последовательности, параметры \(x\) и \(y\), и необходимая сумма элементов последовательности.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\), а также сумма \(s\) по всем наборам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если искомая последовательность существует, выведите в первой строке «Yes» (без кавычек). Далее, во второй строке выведите \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) через пробел — элементы последовательности \(a\). Если подходящих последовательностей несколько, выведите любую из них.

Если же последовательность не существует, выведите в единственной строке «No».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных условиям удовлетворяет последовательность \([8, 11, 2, 5, 2]\). Таким образом, \(a_1 = 8 = x\), \(a_2 = 11 = a_1 + 3\), \(a_3 = 2 = a_2 \bmod 3\), \(a_4 = 5 = a_3 + 3\), \(a_5 = 2 = a_4 \bmod 3\).

Во втором наборе входных данных первый элемент последовательности должен равняться \(5\), поэтому последовательность \([2, 2, 2]\) не подходит.

A. Саша и красивый массив

жадные алгоритмы Конструктив математика сортировки *800

Саша решил подарить своей девушке массив \(a_1, a_2, \ldots, a_n\). Он узнал, что его девушка оценивает красоту массива как сумму значений \((a_i - a_{i - 1})\) для всех целых чисел \(i\) от \(2\) до \(n\).

Помогите Саше и скажите, какую максимальную красоту массива \(a\) можно получить, если он может как угодно переставить местами его элементы.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 100\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — элементы массива \(a\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальную красоту массива \(a\), которую можно получить.

Примечание

В первом наборе входных данных можно переставить элементы массива \(a\) местами так, чтобы сделать \(a = [1, 2, 3]\). Тогда его красота будет равна \((a_2 - a_1) + (a_3 - a_2) = (2 - 1) + (3 - 2) = 2\).

Во втором наборе входных данных можно не переставлять местами элементы массива \(a\). Тогда его красота будет равна \(0\).

B. Саша и рисование

жадные алгоритмы Конструктив математика *800

Уже в детском саду Саше понравилась одна девочка. Поэтому он захотел подарить ей рисунок и привлечь её внимание.

В качестве рисунка он решил нарисовать клетчатый квадрат \(n \times n\), в котором закрашены некоторые клетки. Но закрашивать клетки сложно, поэтому он хочет закрасить как можно меньше клеток. При этом он хочет, чтобы хотя бы в \(k\) диагоналях была закрашена хотя бы одна клетка. Обратите внимание, что всего квадрат \(n \times n\) имеет \(4n - 2\) диагонали.

Помогите маленькому Саше влюбить в себя девочку и скажите, какое минимальное количество клеток ему нужно закрасить.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \leq n \leq 10^8\), \(1 \leq k \leq 4n - 2\))— размер квадрата и минимальное количество диагоналей, в которых должна быть хотя бы одна закрашенная клетка.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество клеток, которые нужно закрасить.

Примечание

На картинках снизу чёрным цветом отмечены закрашенные клетки, фиолетовым цветом отмечены все диагонали.

В первом наборе входных данных можно закрасить \(2\) клетки так, чтобы \(4\) диагонали содержали хотя бы одну закрашенную клетку:

В третьем наборе входных данных можно закрасить \(6\) клеток так, чтобы все \(10\) диагоналей содержали хотя бы одну закрашенную клетку:

C. Саша и казино

Бинарный поиск жадные алгоритмы игры Конструктив математика Перебор *1400

Саша решил подарить лучшую сумочку своей девушке, но, к несчастью для Саши, она очень дорогая. Поэтому Саша хочет на неё заработать. Посмотрев советы по заработку в интернете, он решил пойти в казино.

Саша знает, что казино работает по следующим правилам. Если Саша сделает ставку в \(y\) монет (где \(y\) — положительное целое число), то в случае победы он получит \(y \cdot k\) монет (то есть количество его монет увеличится на \(y \cdot (k - 1)\)). А в случае поражения он потеряет всю сумму ставки (то есть количество его монет уменьшится на \(y\)).

Обратите внимание, что сумма ставки всегда должна быть положительным (\(> 0\)) целым числом и не может превышать текущее количество монет у Саши.

Также Саше известно, что в казино действует акция: он не может проиграть более \(x\) раз подряд.

Изначально у Саши есть \(a\) монет. Ему интересно, может ли он делать ставки так, чтобы у него гарантированно получилось выиграть сколь угодно много монет. Другими словами, правда ли, что для любого целого числа \(n\), Саша сможет делать ставки так, чтобы при любых их результатах, не противоречащих описанным выше правилам, в какой-то момент времени у него было хотя бы \(n\) монет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит три целых числа \(k, x\) и \(a\) (\(2 \leq k \leq 30\), \(1 \leq x \leq 100\), \(1 \leq a \leq 10^9\)) — количество раз, в которое увеличивается ставка при выигрыше, максимальное количество проигрышей подряд и изначальное количество монет у Саши.

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если Саша сможет получить сколь угодно много монет и «NO» (без кавычек) в противном случае.

Вы можете выводить «YES» и «NO» в любом регистре (например, строки «yEs», «yes» и «Yes» будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных Саша может действовать следующим образом:

  • Если Саша делает ставку в первый раз или в предыдущий раз он выиграл, то он ставит \(1\) монету.
  • Если в предыдущий раз Саша проиграл, то он ставит \(2\) монеты.

Обратите внимание, что Саша не может проиграть более одного раза подряд.

Можно доказать, что при такой стратегии Саша может получить сколько угодно много монет.

Во втором наборе входных данных Саша может в первый раз поставить только \(1\) монету. Но в случае проигрыша он больше не сможет делать ставки, поэтому он не сможет сделать так, чтобы у него гарантированно оказалось сколь угодно много монет.

A. Разрезание фигуры

графы Деревья Конструктив *1700

Дан лист клетчатой бумаги n × m. Некоторые его клетки закрашены. Множество всех закрашенных клеток листа бумаги обозначим через A. Множество A является связным. Требуется найти минимальное количество клеток, которые можно удалить из множества A так, чтобы оно перестало быть связным.

Множество закрашенных клеток называется связным, если для каждых двух клеток из этого множества a и b найдется последовательность клеток множества, начинающаяся в a и заканчивающаяся в b, такая, что любая клетка этой последовательности, исключая последнюю, имеет общую сторону со следующей в последовательности клеткой. Пустое множество и множество, состоящее из одной клетки, по определению считаются связными.

Входные данные

В первой строке входного файла записаны через пробел два целых числа n и m (1 ≤ n, m ≤ 50) — размеры листа бумаги.

В следующих n строках содержится по m символов — описание листа бумаги: j-й символ i-й строки равен «#», если соответствующая клетка закрашена (принадлежит множеству A), или равен «.», если соответствующая клетка не закрашена (не принадлежит множеству A). Гарантируется, что множество всех закрашенных клеток A связно и не пусто.

Выходные данные

На первой строке выведите минимальное количество клеток, которые нужно удалить, чтобы лишить множество A связности или -1, если это невозможно.

Примечание

В первом примере можно удалить любые две клетки, не имеющие общей стороны и множество закрашенных клеток потеряет связность.

Пояснение ко второму примеру изображено на рисунке. Слева изображено изначальное множество клеток. Справа — множество с удаленными клетками. Удаленные клетки помечены крестиками.

C. Расстояние Хемминга

жадные алгоритмы Конструктив математика матрицы *2400

Расстоянием Хемминга между строками a и b равной длины называется число h(a, b) равное количеству различных целых i (1 ≤ i ≤ |a|) таких, что ai ≠ bi, где aii-й символ строки a, bii-й символ строки b. К примеру, расстояние Хемминга между строками «aba» и «bba» равно 1, в них различаются первые символы. Для строк «bbba» и «aaab» расстояние Хемминга равно 4.

У Джона Доу были записаны на бумажке четыре строки s1, s2, s3 и s4 равной длины. Каждая строка si состояла только из строчных букв «a» и «b». Джон нашел расстояния Хемминга между всеми парами имеющихся строк, после чего он потерял бумажку со строками. Расстояния Хемминга между всеми парами у него сохранились.

Помогите Джону восстановить строки; найдите какие-нибудь четыре строки s'1, s'2, s'3, s'4 равной длины, состоящие только из строчных букв «a» и «b», такие, что попарные расстояния Хемминга между ними такие же, как и у строк Джона. Более формально, набор s'i должен удовлетворять условию .

Чтобы строки было легче записать на бумажке, требуется из всех подходящих наборов строк выбрать набор, состоящий из строк минимальной длины.

Входные данные

В первой строке через пробел записаны целые числа h(s1, s2), h(s1, s3), h(s1, s4). Во второй строке через пробел записаны целые числа h(s2, s3) и h(s2, s4). В третьей строке записано единственное целое число h(s3, s4).

Все заданные целые числа h(si, sj) неотрицательные и не превосходят 105. Гарантируется, что хотя бы одно из чисел h(si, sj) положительно.

Выходные данные

Выведите -1, если подходящего набора строк не существует.

В противном случае выведите в первой строке число len — длину каждой из строк. В i-й из следующих четырех строк выведите строку s'i. Если возможных наборов с минимальной длиной строк несколько — выведите любой из них.

B. Печать перестановки

Конструктив математика Перебор *1000

Вам дано целое положительное число \(n\).

Найдите перестановку\(^\dagger\) \(p\) длины \(n\) такую, что не существует двух различных индексов \(i\) и \(j\) (\(1 \leq i, j < n\); \(i \neq j\)) таких, что \(p_i\) делит \(p_j\) и \(p_{i+1}\) делит \(p_{j+1}\).

Посмотрите примечание для примеров подходящих перестановок.

Можно доказать, что при ограничениях задачи существует по крайней мере одна подходящая перестановка \(p\).

\(^\dagger\) Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \leq n \leq 10^5\)) — длину перестановки \(p\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(p_1, p_2, \ldots, p_n\).

Если существует несколько решений, вы можете вывести любое из них.

Примечание

В первом наборе входных данных \(p=[4,1,2,3]\) является допустимой перестановкой. Однако перестановка \(p=[1,2,3,4]\) не является допустимой перестановкой, так как мы можем выбрать \(i=1\) и \(j=3\). Тогда \(p_1=1\) делит \(p_3=3\), а \(p_2=2\) делит \(p_4=4\). Отметим, что и перестановка \(p=[3, 4, 2, 1]\) не является допустимой, так как при выборе \(i=3\) и \(j=2\) будет верно: \(p_3=2\) делит \(p_2=4\) и одновременно \(p_4=1\) делит \(p_3=2\).

Во втором наборе входных данных \(p=[1,2,3]\) является допустимой перестановкой. На самом деле все \(6\) перестановок длины \(3\) являются допустимыми.

C. Лексикографически наибольший

Бинарный поиск жадные алгоритмы Конструктив сортировки Структуры данных *1700

У Стека есть массив \(a\) длины \(n\). У него также есть пустое множество \(S\). Заметим, что \(S\) не является мультимножеством.

Он выполнит следующую трехшаговую операцию ровно \(n\) раз:

  1. Выбрать индекс \(i\) такой, что \(1 \leq i \leq |a|\).
  2. Вставить\(^\dagger\) \(a_i + i\) в \(S\).
  3. Удалить \(a_i\) из \(a\). Обратите внимание, что индексы всех элементов справа от \(a_i\) уменьшаются на \(1\).

Обратите внимание, что после \(n\) операций массив \(a\) станет пустым.

После Стек построит новый массив \(b\), который является \(S\), отсортированным в порядке убывания. Формально, \(b\) — это массив длины \(|S|\), где \(b_i\) — \(i\)-й наибольший элемент \(S\) для всех \(1 \leq i \leq |S|\).

Найдите лексикографически наибольший\(^\ddagger\) массив \(b\), который может получить Стек.

\(^\dagger\) Множество может содержать только уникальные элементы. Вставка элемента, который уже присутствует в множестве, не изменит множество.

\(^\ddagger\) Массив \(p\) лексикографически больше массива \(q\) тогда и только тогда, когда выполняется одно из следующих условий:

  • \(q\) является префиксом \(p\), но \(p \ne q\); или
  • в первой позиции, где \(p\) и \(q\) различаются, массив \(p\) имеет больший элемент, чем соответствующий элемент в \(q\).

Заметим, что \([3,1,4,1,5]\) лексикографически больше, чем \([3,1,3]\), \([\,]\) и \([3,1,4,1]\), но не больше \([3,1,4,1,5,9]\), \([3,1,4,1,5]\) и \([4]\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 3 \cdot 10^5\)) — длину массивов \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_{n}\) (\(1 \leq a_i \leq 10^9\)) — элементы массива \(a\).

Сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите лексикографически наибольшее значение \(b\).

Примечание

В первом наборе входных данных выберите \(i=1\) в первой операции, вставьте \(a_1 + 1 = 3\) в \(S\) и удалите \(a_1\) из \(a\). После первой операции массив \(a\) станет \(a=[1]\). Во второй операции снова выберите \(i=1\) и вставьте \(a_1 + 1 = 2\) в \(S\). Таким образом, \(S=\{2, 3\}\), и \(b = [3, 2]\).

Обратите внимание, что если в первой операции выбрать \(i=2\), а во второй выбрать \(i=1\), то \(S=\{3\}\), так как \(3\) будет вставлено дважды, в результате чего \(b=[3]\).

Поскольку \([3,2]\) лексикографически больше \([3]\), то в первой операции следует выбрать \(i=1\).

Во втором примере в каждой операции нужно выбирать последний элемент.

H. Интерактивное дерево мексов

Деревья интерактив Конструктив поиск в глубину и подобное *3300

Это интерактивная задача.

У Алисы есть дерево \(T\), состоящее из \(n\) вершин, пронумерованных от \(1\) до \(n\). Алиса покажет дерево \(T\) Бобу. После того как Боб увидит \(T\), он должен назвать Алисе две перестановки \(p_1\) и \(p_2\) чисел \([1, 2, \ldots, n]\).

Затем Алиса сыграет \(q\) раундов следующей игры:

  • Алиса создаст массив \(a\), который является перестановкой чисел \([0,1,\ldots,n-1]\). Значение вершины \(v\) будет равно \(a_v\).
  • Алиса выберет две вершины \(u\) и \(v\) (\(1 \leq u, v \leq n\), \(u \neq v\)) из \(T\) и сообщит их Бобу. Бобу нужно будет найти \(\operatorname{MEX}^\dagger\) значений на единственном простом пути между вершинами \(u\) и \(v\).
  • Чтобы найти это значение, Боб может задать Алисе не более \(5\) запросов. В каждом запросе Боб должен дать Алисе три целых числа \(t\), \(l\) и \(r\), таких, что \(t\) равно \(1\) или \(2\), и \(1 \leq l \leq r \leq n\). После этого Алиса сообщит Бобу величину, равную \(\)\min_{i=l}^{r} a[p_{t,i}].\(\)

Обратите внимание, что все раунды независимы друг от друга. В частности, значения \(a\), \(u\) и \(v\) могут быть разными в разных раундах.

Боб озадачен, поскольку он знает только решение с HLD, которое требует \(O(\log(n))\) запросов в каждом раунде. Поэтому ему нужна ваша помощь, чтобы выиграть игру.

\(^\dagger\) \(\operatorname{MEX}\) набора чисел \(c_1, c_2, \ldots, c_k\) определяется как наименьшее неотрицательное целое число \(x\), которое не встречается в наборе чисел \(c\).

Протокол взаимодействия

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует взаимодействие по каждому набору входных данных.

Первая строка каждого набора входных данных содержит два положительных целых числа \(n\) и \(q\) (\(2 \leq n \leq 10^5\), \(1 \leq q \leq 10^4\)) — количество вершин в \(T\) и количество раундов соответственно.

Следующие \(n-1\) строк содержат по два целых числа \(u\) и \(v\) (\(1 \leq u, v \leq n\), \(u \neq v\)), обозначающие ребро между вершинами \(u\) и \(v\). Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что суммы \(n\) и \(q\) по всем наборам входных данных не превосходит \(10^5\) и \(10^4\) соответственно.

Также гарантируется, что сумма значений \(n \cdot q\) не превосходит \(3 \cdot 10^6\).

После завершения чтения ребер дерева необходимо вывести две перестановки \(p_1\) и \(p_2\) чисел \([1, 2, \ldots, n]\).

Для этого в отдельной строке выведите \(n\) целых чисел — перестановку \(p_1\).

В следующей строке выведите \(n\) целых чисел — перестановку \(p_2\).

Алиса начнет играть в игру.

Для каждого раунда необходимо считать два целых числа \(u\) и \(v\) (\(1 \leq u, v \leq n\), \(u \neq v\)). Вам нужно найти \(\operatorname{MEX}\) значений вершин на пути из \(u\) в \(v\).

Чтобы сделать запрос, выведите «? \(t\) \(l\) \(r\)» без кавычек, где \(t\) равно \(1\) или \(2\) и \(1 \leq l \leq r \leq n\). После этого вы должны прочитать одно целое число — ответ на ваш запрос \(\min_{i=l}^{r} a_{p_{t,i}}\). В каждом раунде можно сделать не более \(5\) таких запросов для каждого раунда.

Когда вы хотите вывести ответ, выведите «! \(x\)» (\(1 \leq x, y \leq n\)) без кавычек. После этого считайте одно целое число, которое в нормальной ситуации будет равно \(1\).

Если вместо корректного ответа вы получаете целое число \(-1\), это означает, что ваша программа сделала некорректный запрос, превысила лимит запросов или дала неправильный ответ на предыдущем наборе входных данных. Чтобы получить вердикт Неправильный ответ, ваша программа должна немедленно завершиться. В противном случае вы можете получить произвольный вердикт, поскольку ваше решение будет продолжать читать из закрытого потока.

После вывода запроса или ответа не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Чтобы сделать взлом, используйте следующий формат.

Первая строка должна содержать целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных должна содержать два целых числа \(n\) и \(q\) (\(2 \leq n \leq 10^5\); \(1 \leq q \leq 10^4\)) — количество вершин в \(T\) и количество раундов, соответственно.

Следующие \(n-1\) строк должны содержать по два целых числа \(u\) и \(v\) (\(1 \leq u, v \leq n\), \(u \neq v\)), означающие ребро между вершинами \(u\) и \(v\). Данные ребра должны образовывать дерево.

Для каждого из \(q\) раундов сначала выведите в отдельной строке перестановку чисел \([0, 1, 2, \ldots, n-1]\) — массив \(a\), который выберет Алиса в начале раунда.

В следующей строке выведите два различных целых числе \(u\) и \(v\) (\(1 \leq u, v \leq v\), \(u \neq v\)) — вершины, являющиеся концам пути, про который спросит Алиса.

Сумма значений \(n\) и сумма значений \(q\) по всем наборам входных данных не должны превышать \(10^5\) и \(10^4\) соответственно.

Сумма значений \(n \cdot q\) не должна превышать \(3 \cdot 10^6\).

Примечание

В первом примере взаимодействие происходит следующим образом.

Решениежюриобъяснение
1Имеется 1 набор входных данных.
3 1Дерево \(T\) состоит из \(3\) вершин, и Алиса будет играть только один раунд.
1 2Первое ребро \(T\)
2 3Второе ребро \(T\)
1 2 3Перестановка \(p_1\)
2 1 3Перестановка \(p_2\)
Алиса переставляет элементы \(a\) и получает \(a=[0,2,1]\), прежде чем выдать вершины для единственного раунда.
2 3Вершины для раунда
? 1 2 31\(\min(a_{p_{1,2}},a_{p_{1,3}})=\min(a_2,a_3)=1\)
? 2 1 30\(\min(a_{p_{2,1}},a_{p_{2,2}},a_{p_{2,3}})=\min(a_2,a_1,a_3)=0\)
! 01Учитывая ответы на запросы, очевидно, что \(\operatorname{MEX}\) равен \(0\). Поскольку вывод верен, жюри отвечает \(1\).

После каждого набора входных данных обязательно считывайте \(1\) или \(-1\).

D. Цепные остатки

жадные алгоритмы Конструктив математика сортировки теория чисел *1200

Дан массив \(a_1, a_2, \ldots, a_n\), определите, возможно ли переставить его элементы в \(b_1, b_2, \ldots, b_n\), так чтобы \(b_1 \bmod b_2 \bmod \ldots \bmod b_n \neq 0\).

Здесь \(x \bmod y\) обозначает остаток от деления \(x\) на \(y\). Кроме того, операции по модулю вычисляются слева направо. То есть, \(x \bmod y \bmod z = (x \bmod y) \bmod z\). Например, \(2024 \bmod 1000 \bmod 8 = (2024 \bmod 1000) \bmod 8 = 24 \bmod 8 = 0\).

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество тестов.

Первая строка каждого теста содержит одно целое число \(n\) (\(2 \le n \le 10^5\)).

Вторая строка каждого теста содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)).

Сумма \(n\) по всем тестам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого теста выведите «YES», если это возможно, в противном случае «NO».

Вы можете вывести ответ в любом регистре (верхний или нижний). Например, строки «yEs», «yes», «Yes», и «YES» будут распознаны как положительные ответы.

Примечание

В первом тесте, перестановка массива в \(b = [1, 2, 3, 4, 5, 6]\) (ничего не делая) приведет к \(1 \bmod 2 \bmod 3 \bmod 4 \bmod 5 \bmod 6 = 1\). Следовательно, это возможно.

Во втором тесте, массив \(b\) должен быть равен \([3, 3, 3, 3, 3]\), что приведет к \(3 \bmod 3 \bmod 3 \bmod 3 \bmod 3 = 0\). Следовательно, это невозможно.

В третьем тесте, перестановка массива в \(b = [3, 2, 2]\) приведет к \(3 \bmod 2 \bmod 2 = 1\). Следовательно, это возможно.

G. Магический рисунок королевской черепахи

битмаски Комбинаторика Конструктив математика Перебор поиск в глубину и подобное *2300

Черепаха Алиса в настоящее время разрабатывает коробку для печенья с предсказаниями, и она хотела бы включить в нее теорию Лоушу.

Коробку можно рассматривать как таблицу размера \(n \times m\) (\(n, m \ge 5\)), где строки нумеруются \(1, 2, \dots, n\), а столбцы нумеруются \(1, 2, \dots, m\). Каждая клетка может быть либо пустой, либо содержать одно печенье с предсказанием одной из следующих форм: круг или квадрат. Клетка на пересечении \(a\)-й строки \(b\)-го столбца обозначается как \((a, b)\).

Изначально вся таблица пуста. Затем Алиса выполняет \(q\) операций с коробкой для печенья. \(i\)-я операция (\(1 \le i \le q\)) выполняется следующим образом: указывается в настоящее время пустая клетка \((r_i,c_i)\) и форма (круг или квадрат), затем ставится печенье с предсказанием указанной формы в клетку \((r_i,c_i)\). Обратите внимание, что после \(i\)-й операции клетка \((r_i,c_i)\) больше не является пустой.

Перед всеми операциями и после каждой из \(q\) операций Алиса задается вопросом, сколько существует способов разместить печенья с предсказанием во всех оставшихся пустых клетках, так чтобы было удовлетворено следующее требование:

Не существует трёх последовательных клеток с печеньем одинаковой формы в одной строке, одном столбце или на одной диагонали. Формально:

  • Не существует \((i,j)\), удовлетворяющих \(1 \le i \le n, 1 \le j \le m-2\), таких, что в клетках \((i,j), (i,j+1), (i,j+2)\) есть печенье одинаковой формы.
  • Не существует \((i,j)\), удовлетворяющих \(1 \le i \le n-2, 1 \le j \le m\), таких, что в клетках \((i,j), (i+1,j), (i+2,j)\) есть печенье одинаковой формы.
  • Не существует \((i,j)\), удовлетворяющих \(1 \le i \le n-2, 1 \le j \le m-2\), таких, что в клетках \((i,j), (i+1,j+1), (i+2,j+2)\) есть печенье одинаковой формы.
  • Не существует \((i,j)\), удовлетворяющих \(1 \le i \le n-2, 1 \le j \le m-2\), таких, что в клетках \((i,j+2), (i+1,j+1), (i+2,j)\) есть печенье одинаковой формы.

Все ответы должны быть выведены по модулю \(998\,244\,353\). Также обратите внимание, что после некоторых операций требование уже может не быть удовлетворено с уже размещенными печеньями, в этом случае, вы должны выводить \(0\).

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n\), \(m\), \(q\) (\(5 \le n, m \le 10^9, 0 \le q \le \min(n \times m, 10^5)\)).

\(i\)-я из следующих \(q\) строк содержит два целых числа \(r_i\), \(c_i\) и одну строку \(\text{shape}_i\) (\(1 \le r_i \le n, 1 \le c_i \le m\), \(\text{shape}_i=\) «circle» или «square»), представляющих операции. Гарантируется, что клетка в \(r_i\)-й строке и \(c_i\)-м столбце изначально пуста. Это означает, что каждая \((r_i,c_i)\) появится не более одного раза в обновлениях.

Сумма \(q\) по всем наборам входных данных теста не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q+1\) строк. Первая строка вывода должна содержать ответ до операций, \(i\)-я строка (\(2 \le i \le q+1\)) должна содержать ответ после первых \(i-1\) операций. Все ответы должны быть взяты по модулю \(998\,244\,353\).

Примечание

Во втором примере, после размещения печенья в форме круга в клетках \((1,1)\), \((1,2)\) и \((1,3)\), Требование уже не удовлетворено. Поэтому вы должны вывести \(0\).

C. Найдите мину

Бинарный поиск геометрия жадные алгоритмы интерактив Конструктив математика *1700

Это интерактивная задача.

Вам дано клетчатое поле из \(n\) строк и \(m\) столбцов. Координаты \((x, y)\) обозначают клетку на поле, где \(x\) (\(1 \leq x \leq n\)) — номер строки, начиная сверху, и \(y\) (\(1 \leq y \leq m\)) — номер столбца, начиная слева. Гарантируется, что на поле ровно \(2\) мины в различных клетках, обозначенных \((x_1, y_1)\) и \((x_2, y_2)\). Вы можете сделать не более \(4\) запросов к интерактору, и после этих запросов вы должны предоставить расположение одной из мин.

В каждом запросе вы выбираете позицию на поле \((x, y)\), и в качестве ответа вы получите манхэтонское расстояние от выбранной позиции до ближайшей из двух мин, то есть значение \(\min(|x-x_1|+|y-y_1|, |x-x_2|+|y-y_2|)\).

Ваша задача — определить расположение одной из мин, сделав свои запросы.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 3 \cdot 10^{3}\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 10^{8}\), \(2 \leq m \leq 10^{8}\)) — количество строк и столбцов.

Протокол взаимодействия

Для каждого набора входных данных интеракция начинается с чтения \(n\) и \(m\).

Затем вы можете сделать не более \(4\) запросов следующим образом:

«? x y» (\(1 \leq x \leq n\) и \(1 \leq y \leq m\))

После каждого из них вы должны прочитать число \(d\), которое равняется \(\min(|x-x_1|+|y-y_1|, |x-x_2|+|y-y_2|)\).

Когда вы нашли расположение любой из мин, выведите в единственной строке «! x y» (без кавычек), обозначающие строку и столбец для этой мины. Вывод ответа не считается за запрос.

После вывода ответа ваша программа должна продолжить решать оставшиеся тестовые случаи или завершиться, если все тестовые случаи были решены.

Интерактор в этой задаче не является адаптивным: расположение мин зафиксировано заранее и не зависит от запросов.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы:

Чтобы сделать взлом, используйте следующий формат:

В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 3 \cdot 10^{3}\)) — количество наборов входных данных.

Описание каждого тестового случая должно состоять из трех строк.

Первая строка содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 10^{8}\), \(2 \leq m \leq 10^{8}\)) — количество строк и столбцов.

Вторая строка содержит координаты первой мины \(x_1\) и \(y_1\)(\(1 \leq x_1 \leq n\), \(1 \leq y_1 \leq m\)).

Третья строка содержит координаты второй мины \(x_2\) и \(y_2\)(\(1 \leq x_2 \leq n\), \(1 \leq y_2 \leq m\)).

Мины должны располагаться в различных позициях.

Примечание

В первом наборе входных данных мы сначала спрашиваем про верхний левый угол \((1, 1)\) и получаем результат \(3\), что означает, что есть мина на побочной диагонали, и нет мин над ней.

На картинке ниже каждая клетка содержит число, обозначающее расстояние до синей клетки. Зеленые клетки — кандидаты, в которых содержится ближайшая мина.

Затем мы спрашиваем три клетки на диагонали и в последнем запросе мы получаем результат \(0\), что означает, что одна из мин найдена на позиции \((2, 3)\).

Вторая мина располагалась на позиции \((3, 2)\).

Во втором наборе входных данных мы сначала спрашиваем нижний правый угол \((5, 5)\) и получаем результат \(1\), который означает, что одна из двух соседних клеток содержит мину, назовем ее миной \(1\).

Затем мы спрашиваем клетку \((2, 2)\). Можем заметить, что зеленые клетки не пересекаются с зелеными клетками из первого запроса, поэтому они содержат оставшуюся мину, назовем ее миной \(2\).

Запрос \(3\) — это клетка \((3, 3)\). Эти клетки содержат мину \(1\), но мы все еще не знаем, где именно. Тем не менее, мы можем определить, что единственной возможной клеткой для мины \(2\) является клетка \((1, 1)\), потому что все остальные кандидаты находятся на дистанции менее \(3\) для этого запроса.

D1. Разбиение XOR — сольная версия

битмаски жадные алгоритмы Конструктив *2100

Это сольная версия задачи. Обратите внимание, что решение этой задачи может иметь или не иметь общих идей с решением игровой версии. Вы можете сдавать и получать баллы за каждую из версий независимо.

Вы можете делать взломы только тогда, когда обе версии задачи решены.

Дана целочисленная переменная \(x\), которая изначально имеет значение \(n\). Операция разбиения определена как:

  • Выберите значение \(y\) такое, что \(0 \lt y \lt x\) и \(0 \lt (x \oplus y) \lt x\).
  • Обновите \(x\), приравняв его \(x = y\) либо \(x = x \oplus y\).
Определите, возможно ли преобразовать \(x\) в \(m\) за не более чем \(63\) операции, используя такую операцию разбиения. Если это возможно, предъявите последовательность операций для достижения \(x = m\).

Здесь \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \leq m \lt n \leq 10^{18}\)) — изначальное значение \(x\) и требуемое значение \(x\).

Выходные данные

Для каждого набора тестовых данных выведите ваш ответ в следующем формате.

Если невозможно достичь требуемого значения \(m\) за \(63\) операции, то выведите \(-1\) в единственной строке.

Иначе,

Первая строка должна содержать целое число \(k\) (\(1 \leq k \leq 63\)) — где \(k\) является количеством произведенных операций.

Следующая строка должна содержать \(k+1\) целое число — последовательность, в виде которой переменная \(x\) изменяется с ходом операций разбиения. \(1\)-е и (\(k+1\))-ое числа должны равняться \(n\) и \(m\) соответственно.

Примечание

В первом тестовом случае \(n = 7\), для первой операции \(x = 7\), если мы выберем \(y = 3\), тогда \((7 \oplus 3) \lt 7\), следовательно мы можем обновить \(x\) сделав его равным \(3\) уже на первой операции, чему и равно \(m\).

Во втором тестовом случае \(n = 4\), для первой операции \(x = 4\).

Если мы выберем:

  • \(y = 1\) тогда \((4 \oplus 1) \gt 4\)
  • \(y = 2\) тогда \((4 \oplus 2) \gt 4\)
  • \(y = 3\) тогда \((4 \oplus 3) \gt 4\)

Следовательно мы не можем выполнить первую операцию и невозможно сделать \(x = 2\).

E. Странные НОК операции

Конструктив Перебор теория чисел *3000

Дано целое число \(n\), вы создаете массив \(a\) из \(n\) целых чисел, где \(a_i = i\) для всех целых чисел \(i\) в диапазоне \([1, n]\). Операция над этим массивом определена следующим образом:

  • Выберите в массиве три различных индекса \(i\), \(j\) и \(k\) и присвойте \(x = a_i\), \(y = a_j\) и \(z = a_k\).
  • Обновите массив следующим образом: \(a_i = \operatorname{lcm}(y, z)\), \(a_j = \operatorname{lcm}(x, z)\) и \(a_k = \operatorname{lcm}(x, y)\), где \(\operatorname{lcm}\) обозначает наименьшее общее кратное.
Ваша задача предоставить последовательность из не более чем \(\lfloor \frac{n}{6} \rfloor + 5\) операций таких, что после применения этих операций, если вы возьмете множество, содержащее наибольший общий делитель (НОД) всех подпоследовательностей размера больше \(1\), то каждое число от \(1\) до \(n\) должно принадлежать этому множеству.

После операций должно выполняться \(a_i \le 10^{18}\) для всех \(1 \le i \le n\).

Можно показать, что ответ всегда существует.

Входные данные

В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^2\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В единственной строке каждого набора тестовых данных содержится одно целое число \(n\) (\(3 \leq n \leq 3 \cdot 10^{4}\)) — длина массива.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^{4}\).

Выходные данные

Первая строка должна содержать целое число \(k\) (\(0 \leq k \leq \lfloor \frac{n}{6} \rfloor + 5\)) — где \(k\) обозначает число операций.

Следующие \(k\) строк должны содержать описание операций, то есть \(3\) различных целых числа \(i\), \(j\) и \(k\), где \(1 \leq i, j, k \leq n\).

Примечание

В третьем наборе входных данных \(a = [1, 2, 3, 4, 5, 6, 7]\).

Первая операция:

\(i = 3\), \(j = 5\), \(k = 7\)

\(x = 3\), \(y = 5\), \(z = 7\).

\(a = [1, 2, \operatorname{lcm}(y,z), 4, \operatorname{lcm}(x,z), 6, \operatorname{lcm}(x,y)]\) = \([1, 2, \color{red}{35}, 4, \color{red}{21}, 6, \color{red}{15}]\).

Вторая операция:

\(i = 5\), \(j = 6\), \(k = 7\)

\(x = 21\), \(y = 6\), \(z = 15\).

\(a = [1, 2, 35, 4, \operatorname{lcm}(y,z), \operatorname{lcm}(x,z), \operatorname{lcm}(x,y)]\) = \([1, 2, 35, 4, \color{red}{30}, \color{red}{105}, \color{red}{42}]\).

Третья операция:

\(i = 2\), \(j = 3\), \(k = 4\)

\(x = 2\), \(y = 35\), \(z = 4\).

\(a = [1, \operatorname{lcm}(y,z), \operatorname{lcm}(x,z), \operatorname{lcm}(x,y), 30, 105, 42]\) = \([1, \color{red}{140}, \color{red}{4}, \color{red}{70}, 30, 105, 42]\).

GCD равное \(i\) может быть получено используя следующие подпоследовательности:

\(\gcd(a_1, a_2) = \gcd(1, 140) = 1\)

\(\gcd(a_3, a_4) = \gcd(4, 70) = 2\)

\(\gcd(a_5, a_6, a_7) = \gcd(30, 105, 42) = 3\)

\(\gcd(a_2, a_3) = \gcd(140, 4) = 4\)

\(\gcd(a_2, a_4, a_5, a_6) = \gcd(140, 70, 30, 105) = 5\)

\(\gcd(a_5, a_7) = \gcd(30, 42) = 6\)

\(\gcd(a_2, a_4, a_6, a_7) = \gcd(140, 70, 105, 42) = 7\)

A. Развлечение в ЦПМ

Конструктив Строки *800

Поздравляю, вы поступили в Центр Помощи Магистрам! Однако, на уроках вам было безумно скучно и вам надоело ничего не делать, поэтому вы придумали себе развлечение.

Вам дана строка \(s\) и чётное число \(n\). Есть два типа операций, которые вы можете к ней применять:

  1. Добавить в конец строки \(s\) перевёрнутую строку \(s\) (например, если \(s = \) cpm, то после применения операции \(s = \) cpmmpc).
  2. Перевернуть текущую строку \(s\) (например, если \(s = \) cpm, то после применения операции \(s = \) mpc).

Требуется определить лексикографически минимальную\(^{\dagger}\) строку, которую можно получить после применения ровно \(n\) операций. Обратите внимание, что вы можете применять операции разных типов в произвольном порядке, но суммарно вы должны применить ровно \(n\) операций.

\(^{\dagger}\)Строка \(a\) лексикографически меньше строки \(b\), если и только если выполняется один из следующих пунктов:

  • \(a\) является префиксом \(b\), но \(a \ne b\);
  • в первой позиции, где \(a\) и \(b\) различны, в строке \(a\) находится буква, которая встречается в алфавите раньше, чем соответствующая буква в \(b\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое чётное число \(n\) (\(2 \leq n \leq 10^9\)) — количество операций, применяемых к строке \(s\).

Вторая строка каждого набора входных данных содержит одну строку \(s\) (\(1 \leq |s| \leq 100\)), состоящую из строчных букв латинского алфавита, — строка, к которой применяются операции.

Выходные данные

Для каждого набора входных данных выведите одну строку — лексикографически минимальную строку, которую можно получить после применения ровно \(n\) операций.

Примечание

В первом наборе входных данных можно применить операцию второго типа (то есть перевернуть строку \(s\)) \(4\) раза. Тогда строка \(s\) останется равной cpm.

Во втором наборе входных данных можно сделать следующее:

  • Применить операцию второго типа, после чего \(s\) станет равной birg.
  • Применить операцию первого типа (то есть добавить в конец строки \(s\) перевёрнутую строку \(s\)), после чего \(s\) станет равной birggrib.

B. Информатика в ЦПМ

Конструктив *1200

В Центре Помощи Магистрам, Ням-Няму задали домашнее задание по информатике.

Есть массив \(a\) длины \(n\), вы хотите разбить его на \(k > 1\) подотрезков\(^{\dagger}\) таким образом, чтобы \(\operatorname{MEX} ^{\ddagger}\) на каждом подотрезке был равен одному и тому же числу.

Помогите Ням-Няму найти любое подходящее разбиение, или же определите, что его не существует.

\(^{\dagger}\)Разбиением массива на \(k\) подотрезков называется \(k\) пар целых чисел \((l_1, r_1), (l_2, r_2), \ldots, (l_k, r_k)\) таких, что \(l_i \le r_i\) и для каждого \(1 \le j \le k - 1\) верно \(l_{j + 1} = r_j + 1\), а также \(l_1 = 1\) и \(r_k = n\). Эти пары представляют сами подотрезки.

\(^{\ddagger}\operatorname{MEX}\) массива — это наименьшее целое неотрицательное число, которое не принадлежит массиву.

Например:

  • \(\operatorname{MEX}\) массива \([2, 2, 1]\) равен \(0\), так как \(0\) не принадлежит массиву.
  • \(\operatorname{MEX}\) массива \([3, 1, 0, 1]\) равен \(2\), так как \(0\) и \(1\) принадлежат массиву, а \(2\) нет.
  • \(\operatorname{MEX}\) массива \([0, 3, 1, 2]\) равен \(4\), так как \(0\), \(1\), \(2\) и \(3\) принадлежат массиву, а \(4\) нет.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 10^5\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i < n\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число \(-1\), если подходящего разбиения не существует.

Иначе, в первой строке выведите целое число \(k\) (\(2 \le k \le n\)) — количество подотрезков в разбиении.

Затем выведите \(k\) строк — разбиение на подотрезки. \(i\)-я строка должна содержать два целых числа \(l_i\) и \(r_i\) (\(1 \le l_i \le r_i \le n\)) — границы \(i\)-го подотрезка.

При этом должны выполняться условия:

  • Для всех \(1 \le j \le k - 1\) выполнено \(l_{j + 1} = r_j + 1\);
  • \(l_1 = 1\), \(r_k = n\).

Если существует несколько возможных решений, выведите любое из них.

Примечание

В первом наборе входных данных можно разбить массив \(a\) на \(2\) подотрезка с границами \([1, 1]\) и \([2, 2]\):

  • \(\operatorname{MEX}\) первого подотрезка \([0]\) равен \(1\), так как \(0\) принадлежит подотрезку, а \(1\) нет.
  • \(\operatorname{MEX}\) второго подотрезка \([0]\) равен \(1\), так как \(0\) принадлежит подотрезку, а \(1\) нет.

Во втором наборе входных данных можно доказать, что требуемого разбиения не существует.

В третьем наборе входных данных, можно разбить массив \(a\) на \(3\) подотрезка с границами \([1, 3]\), \([4, 5]\), \([6, 8]\):

  • \(\operatorname{MEX}\) первого подотрезка \([0, 1, 7]\) равен \(2\), так как \(0\) и \(1\) принадлежит подотрезку, а \(2\) нет.
  • \(\operatorname{MEX}\) второго подотрезка \([1, 0]\) равен \(2\), так как \(0\) и \(1\) принадлежит подотрезку, а \(2\) нет.
  • \(\operatorname{MEX}\) третьего подотрезка \([1, 0, 3]\) равен \(2\), так как \(0\) и \(1\) принадлежит подотрезку, а \(2\) нет.

C. Мессенджер в ЦПМ

Бинарный поиск дп жадные алгоритмы Конструктив Перебор сортировки Структуры данных *1800

В новом мессенджере для учащихся Центра Помощи Магистрам, Кефтемерум, планируется обновление, в котором разработчики хотят оптимизировать набор сообщений, показываемых пользователю. Всего есть \(n\) сообщений, каждое сообщение характеризуется двумя целыми числами \(a_i\) и \(b_i\). Время, потраченное на прочтение набора сообщений с номерами \(p_1, p_2, \ldots, p_k\) (\(1 \le p_i \le n\), все \(p_i\) различны) рассчитывается по формуле:

\(\)\Large \sum_{i=1}^{k} a_{p_i} + \sum_{i=1}^{k - 1} |b_{p_i} - b_{p_{i+1}}|\(\)

Обратите внимание, что время прочтения набора сообщений, состоящего из одного сообщения с номером \(p_1\), равно \(a_{p_1}\). Также время прочтения пустого набора сообщений считается равным \(0\).

Пользователь может сам определить время \(l\), которое он готов провести в мессенджере. Мессенджер же должен сообщить пользователю максимально возможный размер набора сообщений, время прочтения которого не превышает \(l\). Обратите внимание, что максимальный размер набора сообщений может быть равен \(0\).

Разработчики популярного мессенджера не справились внедрить данную функцию, поэтому попросили вас решить эту задачу.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 5 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(l\) (\(1 \leq n \leq 2000\), \(1 \leq l \leq 10^9\)) — количество сообщений и время, которое пользователь готов провести в мессенджере.

\(i\)-я из следующих \(n\) строк содержит два целых числа \(a_i\) и \(b_i\) (\(1 \le a_i, b_i \le 10^9\)) — характеристики \(i\)-го сообщения.

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превосходит \(4 \cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимально возможный размер набора сообщений, время прочтения которого не превышает \(l\).

Примечание

В первом наборе входных данных, можно взять набор из трёх сообщений с номерами \(p_1 = 3\), \(p_2 = 2\) и \(p_3 = 5\). Время, затрачиваемое на прочтение данного набора, равно \(a_3 + a_2 + a_5 + |b_3 - b_2| + |b_2 - b_5| = 2 + 1 + 2 + |4 - 5| + |5 - 3| = 8\).

Во втором наборе входных данных, можно взять набор из одного сообщения со номером \(p_1 = 1\). Время, затрачиваемое на прочтение данного набора, равно \(a_1 = 4\).

В пятом наборе входных данных можно показать, что не существует такого непустого набора сообщений, затрачиваемое время на прочтение которого не превышает \(l\).

F. Дерево Андрея

Бинарный поиск Деревья жадные алгоритмы Конструктив поиск в глубину и подобное реализация снм Структуры данных *2800

Магистр Андрей очень любит деревья\(^{\dagger}\), поэтому у него есть дерево, состоящее из \(n\) вершин.

Но не все так просто. Магистр Тимофей решил украсть одну вершину из дерева. Если Тимофей украл вершину \(v\) из дерева, то вершина \(v\) и все ребра с концом в вершине \(v\) удаляются из дерева, при этом номера других вершин не меняются. Чтобы Андрей не расстраивался, Тимофей решил сделать получившийся граф снова деревом. Для этого он может добавлять ребра между произвольными вершинами \(a\) и \(b\), однако при добавлении такого ребра он должен заплатить \(|a - b|\) монет в Центр Помощи Магистрам.

Обратите внимание, что получившееся дерево не содержит вершину \(v\).

Тимофей не определился, какую вершину \(v\) он удалит из дерева, поэтому он хочет знать для каждой вершины \(1 \leq v \leq n\), какое минимальное количество монет нужно потратить, чтобы после удаления вершины \(v\) сделать граф снова деревом, а также какие ребра при этом нужно добавить.

\(^{\dagger}\)Деревом называется неориентированный связный граф без циклов.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(5 \le n \le 2\cdot10^5\)) — количество вершин в дереве Андрея.

В следующих \(n - 1\) строках содержится описание ребер дерева. \(i\)-я из этих строк содержит два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\)) — номера вершин, соединённых \(i\)-м ребром.

Гарантируется, что данные рёбра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ в следующем формате:

Для каждой вершины \(v\) (в порядке от \(1\) до \(n\)) в первой строке выведите два целых числа \(w\) и \(m\) — минимальное количество монет, которое нужно потратить, чтобы граф после удаления вершины \(v\) снова стал деревом, и количество добавленных ребер.

Далее выведите \(m\) строк, каждая из которых содержит два целых числа \(a\) и \(b\) (\(1 \le a, b \le n, a \ne v, b \ne v\), \(a \ne b\)) — концы добавленного ребра.

Если существует несколько способов добавить ребра, вы можете вывести любое решение с минимальной стоимостью.

Примечание

В первом наборе входных данных:

Рассмотрим удаление вершины \(4\):

Оптимальным решением будет провести ребро из вершины \(5\) в вершину \(3\). Тогда мы потратим \(|5 - 3| = 2\) монеты.

В третьем наборе входных данных:

Рассмотрим удаление вершины \(1\):

Оптимальным решением будет:

  • Провести ребро из вершины \(2\) в вершину \(3\), потратив \(|2 - 3| = 1\) монету.
  • Провести ребро из вершины \(3\) в вершину \(4\), потратив \(|3 - 4| = 1\) монету.
  • Провести ребро из вершины \(4\) в вершину \(5\), потратив \(|4 - 5| = 1\) монету.

Тогда сумарно мы потратим \(1 + 1 + 1 = 3\) монеты.

Рассмотрим удаление вершины \(2\):

Ребра проводить не нужно, так как после удаления вершины граф останется деревом.

A. Побитовая магия

битмаски жадные алгоритмы интерактив Конструктив математика *1700

Это интерактивная задача.

Загадана секретная последовательность \(p_0, p_1, \ldots, p_{n-1}\), являющаяся перестановкой чисел \(\{0,1,\ldots,n-1\}\).

Вам нужно найти два индекса \(i\) и \(j\), таких что \(p_i \oplus p_j\) принимает максимальное значение, где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Чтобы их найти, вы можете делать запросы. Каждый запрос устроен так: вы выбираете произвольные индексы \(a\), \(b\), \(c\) и \(d\) (\(0 \le a,b,c,d < n\)). Затем программа жюри вычисляет \(x = (p_a \mid p_b)\) и \(y = (p_c \mid p_d)\), где \(|\) обозначает операцию побитового ИЛИ. Наконец, вы узнаёте результат сравнения чисел \(x\) и \(y\). Другими словами, вам сообщают, какое из трёх условий выполнено: \(x < y\), \(x > y\) или \(x = y\).

Найдите два индекса \(i\) и \(j\) (\(0 \le i,j < n\)), таких что \(p_i \oplus p_j\) максимально среди всех таких пар, сделав не более \(3n\) запросов. Если существует несколько пар индексов, удовлетворяющих условию, выведите любую из них.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Протокол взаимодействия

Первая строка каждого набора входных данных содержит единственное число \(n\) (\(2 \le n \le 10^4\)). В этот момент загадывается перестановка \(p_0, p_1, \ldots, p_{n-1}\). В этой задаче решение жюри неадаптивно. Иначе говоря, последовательность \(p\) фиксирована в каждом наборе входных данных и не будет меняться в процессе взаимодействия с программой участника.

Чтобы сделать запрос, вам нужно выбрать четыре индекса \(a\), \(b\), \(c\) и \(d\) (\(0 \le a,b,c,d < n\)) и вывести строку следующего вида:

  • «? a b c d»

После этого вы получите:

  • «<», если \((p_a \mid p_b) < (p_c \mid p_d)\);
  • «=», если \((p_a \mid p_b) = (p_c \mid p_d)\);
  • «>», если \((p_a \mid p_b) > (p_c \mid p_d)\).

Вы можете сделать не более \(3n\) запросов такого вида.

Затем, если ваша программа нашла пару индексов \(i\) и \(j\) (\(0 \le i, j < n\)), такую что \(p_i \oplus p_j\) максимально, выведите строку следующего вида:

  • «! i j»

Обратите внимание, что эта строка не считается запросом и не учитывается при подсчёте числа сделанных запросов.

После этого переходите к обработке следующего набора входных данных.

Если вы делаете больше \(3n\) запросов, ваша программа должна немедленно завершиться, в таком случае вы получите вердикт Wrong Answer. В противном случае вы можете получить произвольный вердикт, поскольку ваше решение продолжит читать из закрытого потока данных.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^4\).

Взломы

Чтобы делать взломы, используйте следующий формат.

В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 10^4\)).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(p_0,p_1,\ldots,p_{n-1}\), которые задают перестановку чисел от \(0\) до \(n - 1\).

Сумма значений \(n\) по всем наборам входных данных не должна превышать \(10^4\).

Примечание

В первом наборе входных данных загадана перестановка \(p=[0,3,1,2]\).

На запрос «? 0 2 3 1» решение жюри выведет «<», поскольку \((p_0 \mid p_2) = (0 \mid 1) =1 < (p_3 \mid p_1) = (2 \mid 3) = 3\).

На запрос «? 1 1 2 3» решение жюри выведет «=», поскольку \((p_1 \mid p_1) = (3\mid 3)= 3 = (p_2 \mid p_3) = (1 \mid 2)=3\).

На запрос «? 1 2 0 3» решение жюри выведет «>», поскольку \((p_1 \mid p_2) = (3 \mid 1) = 3 > (p_0 \mid p_3) = (0\mid 2)=2\).

Ответ \(i = 3\) и \(j = 2\) корректен: \((p_3 \oplus p_2) = (2 \oplus 1) = 3\), и это значение максимально среди всех пар \(p_i \oplus p_j\). Другим корректным ответом также является пара \(i=0\) и \(j=1\). Поскольку число запросов не превысило \(3n=12\), ответ считается верным.

Во втором наборе входных данных \(n = 2\), значит, \(p\) есть либо \([0, 1]\), либо \([1, 0]\). В любом случае \(p_0 \oplus p_1 = 1\) максимально возможно.

G. Рудольф и метро

графы Конструктив кратчайшие пути поиск в глубину и подобное *2000

Бернарду не помогло строительство мостов, и он все равно продолжил везде опаздывать. Тогда Рудольф решил научить его оптимально пользоваться метро.

Рудольф изобразил карту метро как неориентированный связный граф, не имеющий петель, в котором вершины представляют собой станции метро. Любая пара вершин соединяется не более чем одним ребром.

Две вершины соединяются ребром, если между соответствующими станциями метро можно переместиться на поезде напрямую, минуя другие станции. Метро в городе, в котором живут Рудольф и Бернард, имеет цветовую нотацию. Это значит, что любое ребро между какими-либо станциями имеет определенный цвет. Ребра определенного цвета в совокупности образуют ветку метро. Ветка метро не может содержать не связанные между собой ребра, то есть образует связный подграф заданного графа метро.

Пример карты метро приведен на рисунке.

Рудольф утверждает, что маршрут будет максимально оптимальным, если он будет проходить через минимальное количество веток.

Помогите Бернарду определить это минимальное количество для заданных станций отправления и назначения.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Далее следуют описания наборов.

Первая строка набора содержит целые числа \(n\) и \(m\) (\(2 \le n \le 2 \cdot 10^5, 1 \le m \le 2 \cdot 10^5\)) — количество станций метро и количество прямых маршрутов между станциями (то есть ребер графа).

Далее следует \(m\) строк — описание ребер. Каждая строка описания содержит три целых числа \(u\), \(v\) и \(c\) (\(1 \le u, v \le n, u \ne v, 1 \le c \le 2 \cdot 10^5\)) — номера вершин, между которыми есть ребро, и цвет этого ребра. Гарантируется, что ребра одного цвета образуют связный подграф заданного графа метро. Между каждой парой вершин не более одного ребра.

Далее следует два целых числа \(b\) и \(e\) (\(1 \le b, e \le n\)) — станции отправления и назначения.

Сумма всех \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\). Аналогично, сумма всех \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальное количество веток, через которое может пройти маршрут от станции \(b\) до станции \(e\).

Примечание

Граф метро для первого примера приведен на рисунке в условии.

В первом наборе тестовых данных из вершины \(1\) в вершину \(3\) можно добраться по пути \(1 \rightarrow 2 \rightarrow 3\), воспользовавшись только зеленой веткой.

Во втором наборе тестовых данных из вершины \(1\) в вершину \(6\) можно добраться по пути \(1 \rightarrow 2 \rightarrow 3 \rightarrow 6\), воспользовавшись зеленой и синей веткой.

В третьем наборе тестовых данных из вершины \(6\) в ту же самую вершину не нужно ехать, поэтому количество веток равно \(0\).

В четвертом наборе тестовых данных все ребра графа принадлежат одной ветке, поэтому ответ \(1\).

A. Челлендж фермера Джона

Конструктив математика *800

Назовем массив \(a\) отсортированным, если \(a_1 \leq a_2 \leq \ldots \leq a_{n - 1} \leq a_{n}\).

Вам даны два любимых целых числа фермера Джона, \(n\) и \(k\). Он просит вас найти любой массив \(a_1, a_2, \ldots, a_{n}\), удовлетворяющий следующим требованиям:

  • \(1 \leq a_i \leq 10^9\) для всех \(1 \leq i \leq n\);
  • Среди всех \(n\) циклических сдвигов \(a\), ровно \(k\) из них отсортированы.\(^\dagger\)

Если такого массива \(a\) не существует, выведите \(-1\).

\(^\dagger\) \(x\)-й (\(1 \leq x \leq n\)) циклический сдвиг массива \(a\) является массивом \(a_x, a_{x+1} \ldots a_n, a_1, a_2 \ldots a_{x - 1}\). Если \(c_{x, i}\) обозначает \(i\)-й элемент \(x\)-го циклического сдвига \(a\), то ровно \(k\) таких значений \(x\) должны удовлетворять \(c_{x,1} \leq c_{x,2} \leq \ldots \leq c_{x, n - 1} \leq c_{x, n}\).

Например, циклические сдвиги для \(a = [1, 2, 3, 3]\) следующие:

  • \(x = 1\): \([1, 2, 3, 3]\) (отсортировано);
  • \(x = 2\): \([2, 3, 3, 1]\) (не отсортировано);
  • \(x = 3\): \([3, 3, 1, 2]\) (не отсортировано);
  • \(x = 4\): \([3, 1, 2, 3]\) (не отсортировано).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных содержит два целых числа \(n\) и \(k\) (\(1 \leq k \leq n \leq 10^3\)) — длину \(a\) и количество отсортированных циклических сдвигов, которые должны быть у \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^3\).

Выходные данные

Для каждого набора входных данных выведите одну строку:

  • если существует подходящий массив \(a\), выведите \(n\) целых чисел, равняющихся \(a_1, a_2, \ldots, a_{n}\);
  • в противном случае, выведите \(-1\).

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных \(a = [1, 1]\) удовлетворяет условиям \(n = 2, k = 2\):

Два циклических сдвига \(a\): \([a_1, a_2]\) и \([a_2, a_1]\), оба равняются \([1, 1]\) и отсортированы.

Во втором наборе входных данных \(a = [69\,420, 69, 420]\) удовлетворяет \(n = 3, k = 1\):

Три циклических сдвига \(a\): \([a_1, a_2, a_3]\), \([a_2, a_3, a_1]\), \([a_3, a_1, a_2]\) равняются \([69\,420, 69, 420]\), \([69, 420, 69\,420]\) и \([420, 69\,420, 69]\) соответственно.

Отсортирован только \([69, 420, 69\,420]\).

B. Бесси и MEX

Конструктив математика *1100

У фермера Джона есть перестановка \(p_1, p_2, \ldots, p_n\), в которой каждое целое число от \(0\) до \(n-1\) встречается ровно один раз. Он дает Бесси массив \(a\) длины \(n\) и просит ее восстановить \(p\) на основе \(a\).

Массив \(a\) строится так: \(a_i\) = \(\texttt{MEX}(p_1, p_2, \ldots, p_i) - p_i\), где \(\texttt{MEX}\) массива — это минимальное целое неотрицательное число, которое не встречается в этом массиве. Например, \(\texttt{MEX}(1, 2, 3) = 0\), а \(\texttt{MEX}(3, 1, 0) = 2\).

Помогите Бесси построить любую перестановку \(p\), удовлетворяющую массиву \(a\). Гарантируется, что вам даются входные данные, для которых существует хотя бы одна допустимая перестановка \(p\). Если существует несколько возможных \(p\), вы можете вывести любую из них.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длину \(p\) и \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-n \leq a_i \leq n\)) — элементы массива \(a\).

Гарантируется, что существует хотя бы одна подходящая перестановка \(p\) для каждого данного набора данных.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите на отдельной строке \(n\) целых чисел, являющихся элементами \(p\).

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных \(p = [0, 1, 4, 2, 3]\) является одним из возможных ответов.

Для этой перестановки \(a\) будет вычисляться так: \(a_1 = \texttt{MEX}(0) - 0 = 1\), \(a_2 = \texttt{MEX}(0, 1) - 1 = 1\), \(a_3 = \texttt{MEX}(0, 1, 4) - 4 = -2\), \(a_4 = \texttt{MEX}(0, 1, 4, 2) - 2 = 1\), \(a_5 = \texttt{MEX}(0, 1, 4, 2, 3) - 3 = 2\).

Таким образом, как и требовалось, \(a\) будет равняться \([1, 1, -2, 1, 2]\).

C. Циркуль для дерева

Деревья жадные алгоритмы Конструктив поиск в глубину и подобное *2300

Вам дано дерево с \(n\) вершинами, пронумерованными \(1, 2, \ldots, n\). Изначально все вершины окрашены в белый цвет.

Вы можете выполнить следующую двухэтапную операцию:

  1. Выбрать вершину \(v\) (\(1 \leq v \leq n\)) и расстояние \(d\) (\(0 \leq d \leq n-1\)).
  2. Для всех вершин \(u\) (\(1 \leq u \leq n\)) таких, что \(\text{dist}^\dagger(u,v)=d\), покрасить \(u\) в черный цвет.

Постройте последовательность операций для перекрашивания всех вершин дерева в черный цвет, используя минимально возможное количество операций. Можно показать, что это всегда можно сделать, используя не более \(n\) операций.

\(^\dagger\) \(\text{dist}(x, y)\) обозначает количество ребер на (единственном) простом пути между вершинами \(x\) и \(y\) на дереве.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 200\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных находится одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^3\)) — количество вершин дерева.

Следующие \(n - 1\) строк каждого набора входных данных описывают ребра дерева. В \(i\)-й из этих строк содержатся два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\), \(u_i \neq v_i\)) — индексы вершин, соединенных \(i\)-м ребром.

Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^3\).

Выходные данные

Для каждого набора входных данных сначала выведите одно целое число \(op\) \((1 \le op \le n)\) — минимальное количество операций, необходимых для перекрашивания всех вершин дерева в черный цвет.

Затем выведите \(op\) строк, каждая из которых содержит \(2\) целых числа. В \(i\)-й строке должны содержаться значения \(v\) и \(d\), выбранные для \(i\)-й операции (\(1 \le v \le n\), \(0 \le d \le n - 1\)).

Необходимо, чтобы в результате \(op\) операций все вершины были покрашены в черный цвет.

Если существует несколько решений, вы можете вывести любое из них.

Примечание

В первом наборе входных данных существует только одна возможная операция, и ее выполнение дает правильный ответ.

Во втором наборе входных данных первая операция перекрашивает вершину \(2\) в черный цвет, а вторая операция перекрашивает вершину \(1\) в черный цвет. Можно показать, что за одну операцию невозможно перекрасить обе вершины в черный цвет, поэтому минимальное количество необходимых операций равно \(2\). Другим возможным решением является использование \(2\) операций: \((u, r) = (1, 0)\) и \((u, r) = (2, 0)\).

В третьем наборе входных данных первая операция перекрашивает вершины \(2\), \(3\) и \(4\) в черный цвет, а вторая операция перекрашивает вершину \(1\) в черный цвет. Опять же, можно показать, что за \(1\) операцию невозможно перекрасить все вершины в черный цвет, поэтому минимальное количество необходимых операций равно \(2\).

В четвертом наборе входных данных первая операция перекрашивает вершины \(4\), \(1\) и \(7\) в черный цвет, вторая операция перекрашивает вершины \(2\), \(5\) и \(6\) в черный цвет, а третья операция перекрашивает вершины \(3\) и \(7\) в черный цвет. Обратите внимание, что вершину \(7\) разрешено перекрашивать в черный цвет дважды.

Таким образом, каждая вершина была перекрашена хотя бы один раз, причем вершина \(7\) была перекрашена дважды. Можно показать, что невозможно перекрасить все вершины в черный цвет менее чем за \(3\) хода.

B. Равный XOR

битмаски Конструктив *1100

Вам дан массив \(a\) длины \(2n\), в котором каждое целое число от \(1\) до \(n\) встречается ровно дважды.

Вам также дано целое число \(k\) (\(1 \leq k \leq \lfloor \frac{n}{2} \rfloor \)).

Вам нужно найти два массива \(l\) и \(r\) длины \(\mathbf{2k}\) каждый такие, что:

  • \(l\) является подмножеством\(^\dagger\) \([a_1, a_2, \ldots a_n]\)
  • \(r\) является подмножеством \([a_{n+1}, a_{n+2}, \ldots a_{2n}]\)
  • побитовый XOR элементов \(l\) равен побитовому XOR элементов \(r\); другими словами, \(l_1 \oplus l_2 \oplus \ldots \oplus l_{2k} = r_1 \oplus r_2 \oplus \ldots \oplus r_{2k}\)

Можно доказать, что всегда существует хотя бы одна пара \(l\) и \(r\). Если существует несколько решений, вы можете вывести любое из них.

\(^\dagger\) Последовательность \(x\) является подмножеством последовательности \(y\), если \(x\) может быть получена из удалением нескольких (возможно, ни одного или всех) элементов \(y\) и перестановкой оставшихся элементов. Например, \([3,1,2,1]\), \([1, 2, 3]\), \([1, 1]\) и \([3, 2]\) являются подмножествами \([1, 1, 2, 3]\) а \([4]\) и \([2, 2]\) не являются подмножествами \([1, 1, 2, 3]\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 5000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит \(2\) целых числа \(n\) и \(k\) (\(2 \le n \le 5 \cdot 10^4\), \(1 \leq k \leq \lfloor \frac{n}{2} \rfloor \)).

Вторая строка содержит \(2n\) целых чисел \(a_1, a_2, \ldots, a_{2n}\) (\(1 \le a_i \le n\)). Гарантируется, что каждое целое число от \(1\) до \(n\) встречается в \(a\) ровно два раза.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^4\).

Выходные данные

Для каждого набора входных данных выведите две строки.

В первой строке выведите \(2k\) чисел \(l_1, l_2, \ldots, l_{2k}\).

Во второй строке выведите \(2k\) чисел \(r_1, r_2, \ldots r_{2k}\).

Если существует несколько решений, вы можете вывести любое из них.

Примечание

В первом наборе входных данных можно выбрать \(l=[2,1]\) и \(r=[2,1]\). \([2, 1]\) является подмножеством \([a_1, a_2]\), \([2, 1]\) является подмножеством \([a_3, a_4]\), и \(2 \oplus 1 = 2 \oplus 1 = 3\).

Во втором наборе \(6 \oplus 4 = 1 \oplus 3 = 2\).

E. Бинарный поиск

Бинарный поиск жадные алгоритмы Конструктив *1700

Антону стало скучно в походе, и он захотел что-нибудь порешать. Он спросил у Кирилла, нет ли у него какой-то новой задачи, и у Кирилла она естественно нашлась.

Дана перестановка \(p\) размера \(n\), а также число \(x\), которое необходимо найти. Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Вы решили, что вы крутой программист, поэтому будете использовать для поиска продвинутый алгоритм — бинарный поиск. Однако, вы забыли, что для бинарного поиска массив должен быть отсортирован.

Вы не отчаялись и решили все равно применить этот алгоритм, а чтобы получить правильный ответ, вы перед запуском алгоритма можете не более \(2\) раз выполнить следующую операцию: выбрать индексы \(i\), \(j\) (\(1\le i, j \le n\)) и поменять местами элементы на позициях \(i\) и \(j\).

После этого выполняется бинарный поиск. В начале алгоритма объявляются две переменные \(l = 1\) и \(r = n + 1\). Далее выполняется цикл:

  1. Если \(r - l = 1\), закончить цикл
  2. \(m = \lfloor \frac{r + l}{2} \rfloor\)
  3. Если \(p_m \le x\), присвоить \(l = m\), иначе \(r = m\).

Цель — до алгоритма переставить числа в перестановке так, чтобы после выполнения алгоритма \(p_l\) было равно \(x\). Можно показать, что \(2\) операции всегда достаточно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 2\cdot 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(x\) (\(1 \le x \le n \le 2\cdot 10^5\)) — длину перестановки и число, которое нужно найти.

Во второй строке через пробел вводится перестановка \(p\) (\(1 \le p_i \le n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в первой строке целое число \(k\) (\(0 \le k \le 2\)) — количество совершенных вами операций. В следующих \(k\) строках через пробел выведите по \(2\) целых числа \(i\), \(j\) (\(1 \le i, j \le n\)) означающих, что вы меняете местами элементы на позициях \(i\) и \(j\).

Обратите внимание, что вам не нужно минимизировать количество операций.

G. Повар и каша

Бинарный поиск Конструктив реализация Структуры данных *2500

Наконец-то, обед!

\(n\) школьников выстроились в длинную очередь к палатке повара за кашей. Повар будет выдавать кашу в течение \(D\) минут. Школьник, который стоит на \(i\)-м месте в очереди, имеет приоритет \(k_i\) и съедает одну порцию каши за \(s_i\) минут.

В начале каждой минуты перерыва повар накладывает первому в очереди школьнику одну порцию каши, после этого школьник уходит есть свою порцию. Если \(i\)-му школьнику выдали порцию в начале \(x\)-й минуты, то он вернётся в очередь в конце \((x + s_i)\)-й минуты.

Когда \(i\)-й школьник возвращается в очередь, школьники в конце очереди, приоритет которых строго меньше, чем у \(i\)-го школьника, должны пропустить его. Таким образом, он встанет в очередь за последним из школьников, приоритет которого не меньше, чем его собственный. То есть за последним школьником \(j\), у которого \(k_j \ge k_i\). Если в очереди нет ни одного такого школьника, то \(i\)-й школьник встаёт в начало очереди.

Если несколько школьников возвращаются в одно время, то они вернутся в очередь в порядке возрастания их \(s_i\).

Например, если \(n = 3\), \(D = 3\), \(k = [2, 3, 2]\) и \(s = [2, 1, 3]\), то выдача будет происходить следующим образом:

  • В начале \(1\) минуты в очереди стоят школьники \([1, 2, 3]\), школьнику \(1\) выдают кашу;
  • в начале \(2\) минуты в очереди стоят школьники \([2, 3]\), школьнику \(2\) выдают кашу;
  • в начале \(3\) минуты в очереди стоят школьники \([3]\) школьнику \(3\) выдают кашу;
  • в конце \(3\) минуты в очередь возвращается школьник \(2\) и очередь становится \([2]\);
  • в конце \(3\) минуты в очередь возвращается школьник \(1\) и очередь становится \([2, 1]\), так как его приоритет ниже.

Определите, через какое минимальное количество минут после начала перерыва каждый школьник получит кашу хотя бы один раз или сообщите, что за \(D\) минут этого не произойдёт.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора содержит два целых числа \(n\) и \(D\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \le D \le 3\cdot 10^5\)) — количество школьников в очереди и время перерыва соответственно.

Следующие \(n\) строк содержат по два целых числа \(k_i\) и \(s_i\) (\(1 \le k_i, s_i, \le 10^9\)) — приоритет и время поедания одной порции каши для очередного школьника. Школьники заданы в порядке, в котором они стоят в очереди (от начала к концу).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\). Аналогично гарантируется, что сумма значений \(D\) по всем наборам входных данных не превосходит \(3\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество минут, через которое каждый школьник получит кашу хотя бы один раз. Если этого не произойдёт за время перерыва, выведите \(-1\).

D. Подарок на день рождения

битмаски жадные алгоритмы Конструктив Перебор реализация *1900

Совсем скоро у Ярика день рождения, и Марк решил подарить ему массив \(a\) длины \(n\).

Марк знает, что Ярик очень любит битовые операции, а также у него есть любимое число \(x\), поэтому Марк хочет найти такое максимальное число \(k\), что можно выбрать такие пары чисел [\(l_1, r_1\)], [\(l_2, r_2\)], \(\ldots\) [\(l_k, r_k\)], что:

  • \(l_1 = 1\).
  • \(r_k = n\).
  • \(l_i \le r_i\) для всех \(i\) от \(1\) до \(k\).
  • \(r_i + 1 = l_{i + 1}\) для всех \(i\) от \(1\) до \(k - 1\).
  • \((a_{l_1} \oplus a_{l_1 + 1} \oplus \ldots \oplus a_{r_1}) | (a_{l_2} \oplus a_{l_2 + 1} \oplus \ldots \oplus a_{r_2}) | \ldots | (a_{l_k} \oplus a_{l_k + 1} \oplus \ldots \oplus a_{r_k}) \le x\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ, а \(|\) обозначает операцию побитового ИЛИ.

Если такого \(k\) не существует, то нужно вывести \(-1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(x\) (\(1 \le n \le 10^5, 0 \le x < 2^{30}\)) — длина массива \(a\) и число \(x\) соответственно.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i < 2^{30}\)) — сам массив \(a\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите одно целое число — максимальное подходящее число \(k\), и \(-1\), если такого \(k\) не существует.

Примечание

В первом наборе входных данных можно взять \(k\) равным \(2\) и выбрать два отрезка [\(1, 1\)] и [\(2, 3\)], \((1) | (2 \oplus 3) = 1\). Можно показать, что \(2\) — максимальный возможный ответ.

Во втором наборе входных данных подходят отрезки [\(1, 1\)] и [\(2, 2\)], \((1) | (1) = 1\). Больше отрезков сделать нельзя.

В третьем наборе входных данных нельзя выбрать \(2\) отрезка, так как \((1) | (3) = 3 > 2\), значит оптимальный ответ это \(1\).

A. Специальные символы

Конструктив Перебор *800

Задано целое число \(n\).

Ваша задача — построить строку из заглавных латинских букв. В этой строке должно быть ровно \(n\) специальных символов. Назовем символ специальным, если он равен ровно одному из своих соседей.

Например, в строке AAABAACC есть \(6\) специальных символов (на позициях: \(1\), \(3\), \(5\), \(6\), \(7\) и \(8\)).

Выведите любую подходящую строку или сообщите, что такой строки не существует.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 50\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 50\)).

Выходные данные

Для каждого набора входных данных выведите ответ следующим образом:

  • если подходящей строки нет, выведите одну строку, содержащую NO;
  • в противном случае, выведите две строки. Первая строка должна содержать YES; на второй строке выведите строку длиной не более \(200\) — сам ответ (можно показать, что если существует хотя бы один ответ, то существует ответ длиной не более \(200\)). Если есть несколько решений, выведите любое из них.

C. Стрелочный путь

графы дп Конструктив кратчайшие пути Перебор поиск в глубину и подобное *1300

Задано поле, состоящее из \(2\) строк и \(n\) столбцов. Строки нумеруются от \(1\) до \(2\) сверху вниз. Столбцы нумеруются от \(1\) до \(n\) слева направо. Каждая клетка поля содержит стрелку, указывающую либо влево, либо вправо. Ни одна стрелка не указывает за пределы поля.

Есть робот, который начинает в клетке \((1, 1)\). Каждую секунду происходят следующие два действия одно за другим:

  1. сначала робот двигается влево, вправо, вниз или вверх (он не может попытаться выйти за пределы поля и не может пропустить ход);
  2. затем он двигается по направлению стрелки, которая находится в текущей ячейке (в ячейке, в которой он окажется после своего хода).

Ваша задача — определить, может ли робот достичь клетки \((2, n)\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число (\(2 \le n \le 2 \cdot 10^5\)).

Вторая строка содержит строку, состоящую ровно из \(n\) символов < и/или > — первая строка поля.

Третья строка содержит строку, состоящую ровно из \(n\) символов < и/или > — вторая строка поля.

Дополнительные ограничения на входные данные:

  • \(n\) — четное число;
  • нет стрелок, указывающих за пределы поля;
  • сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).
Выходные данные

Для каждого набора входных данных выведите YES, если робот может достичь клетки \((2, n)\); в противном случае выведите NO.

Вы можете печатать каждую букву в любом регистре. Например, yes, Yes, YeS будут распознаны как положительный ответ.

Примечание

В первом примере один из возможных путей выглядит следующим образом: \((1, 1) \rightarrow (1, 2) \rightarrow (1, 3) \rightarrow (2, 3) \rightarrow (2, 4)\).

Во втором примере один из возможных путей выглядит следующим образом: \((1, 1) \rightarrow (2, 1) \rightarrow (2, 2)\).

В третьем примере нет способа достичь клетки \((2, 4)\).

В четвертом примере один из возможных путей выглядит следующим образом: \((1, 1) \rightarrow (2, 1) \rightarrow (2, 2) \rightarrow (1, 2) \rightarrow (1, 3) \rightarrow (2, 3) \rightarrow (2, 4) \rightarrow (2, 5) \rightarrow (2, 6)\).

E. Разделение на клики

графы жадные алгоритмы Конструктив Перебор реализация *2100

Даны два целых числа, \(n\) и \(k\). Рассмотрим граф на \(n\) вершинах, пронумерованных от \(1\) до \(n\), в котором изначально нет ребер.

Вам нужно назначить каждой вершине число; пусть \(a_i\) — число, назначенное вершине \(i\). Все \(a_i\) должны быть различными целыми числами от \(1\) до \(n\).

После того как вы назначили числа для вершин, вы добавляете в граф ребра. Для пары вершин \((i, j)\) добавляется ребро между ними, если \(|i - j| + |a_i - a_j| \le k\).

Ваша цель — создать граф, который можно разбить на минимально возможное (для заданных значений \(n\) и \(k\)) количество клик. Каждая вершина графа должна принадлежать ровно одной клике. Напомним, что клика — это такое множество вершин, что каждая пара вершин в этом множестве соединена ребром.

Поскольку BledDest не особо подтянул свои навыки программирования, он не может решить задачу «дан граф, разбейте его на минимальное количество клик». Поэтому мы также просим вас вывести само разбиение.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1600\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей два целых числа \(n\) и \(k\) (\(2 \le n \le 40\); \(1 \le k \le 2n\)).

Выходные данные

Для каждого набора входных данных выведите три строки:

  • первая строка должна содержать \(n\) различных целых чисел \(a_1, a_2, \dots, a_n\) (\(1 \le a_i \le n\)) — значения, которые вы назначаете вершинам;
  • вторая строка должна содержать одно целое число \(q\) (\(1 \le q \le n\)) — количество клик, на которые вы разбиваете граф;
  • третья строка должна содержать \(n\) целых чисел \(c_1, c_2, \dots, c_n\) (\(1 \le c_i \le q\)) — разбиение графа на клики. Где две вершины \(u\) и \(v\) в одной клике, если \(c_u = c_v\).

Если существует несколько ответов, выведите любой из них.

D. Funny or Scary?

Конструктив *2600

You are designing a new video game. It has \(n\) scenarios, which the player may play in any order, but each scenario must be played exactly once. When a player switches from a scenario to another scenario, the game shows a specially crafted transition video to make it all feel part of one big story. This video is specific to a pair of scenarios, but not to their order, in other words, the video playing when switching from scenario \(a\) to scenario \(b\) is the same as the video playing when switching from scenario \(b\) to scenario \(a\). Therefore, you need to create \(\frac{n(n-1)}{2}\) different transition videos, one for each possible pair of different scenarios.

Each transition video can be either funny or scary. It is boring to see too many funny videos or too many scary videos in a row. Therefore, your goal is to create the videos in such a way that no matter in which order does the player approach the scenarios, they will never see more than \(\lceil \frac{3n}{4} \rceil\) transition videos of the same type in a row.

You have already come up with ideas for at most \(\lfloor \frac{n}{2} \rfloor\) of the transition videos, and therefore already know if those will be funny or scary. Now you need to choose funny or scary for all other transition videos in such a way that the above requirement is satisfied.

Input

The first line contains a single integer \(n\) (\(2 \le n \le 24\)) — the number of scenarios in the game.

The next \(n\) lines describe the partial transition video plan. Each of those lines contains \(n\) characters. The \(j\)-th character of the \(i\)-th line corresponds to the transition video between the \(i\)-th and the \(j\)-th scenarios. It will be F if the corresponding transition video will be funny, S if the corresponding transition video will be scary, ? if the corresponding transition video is still undecided, or . if \(i=j\).

It is guaranteed that the \(i\)-th character of the \(j\)-th line and the \(j\)-th character of the \(i\)-th line will be the same for all \(i\) and \(j\). It is guaranteed that at most \(\lfloor \frac{n}{2} \rfloor\) (\(n\) divided by 2, rounded down) transition videos will already be decided, in other words, that at most \(2\lfloor \frac{n}{2} \rfloor\) characters in the input will be F or S.

Output

Print \(n\) lines describing the full transition video plan in the same format as the input. Each of those lines must contain \(n\) characters. The \(j\)-th character of the \(i\)-th line must be F if the corresponding transition video is funny, S if the corresponding transition video is scary, or . if \(i=j\).

Each ? character from the input must be replaced with either F or S, and all other characters from the input must remain unchanged. It must still hold that the \(i\)-th character of the \(j\)-th line and the \(j\)-th character of the \(i\)-th line are the same for all \(i\) and \(j\).

For each permutation of the \(n\) scenarios, it must hold that the transition videos corresponding to playing the scenarios in this order do not have more than \(\lceil \frac{3n}{4} \rceil\) (\(3n\) divided by 4, rounded up) videos of the same type consecutively.

If there are multiple solutions, print any of them. It can be proven that for all inputs satisfying the constraints of this problem a solution always exists.

Note

In the first sample: We are allowed \(\lceil \frac{3\cdot 5}{4} \rceil=4\) transition videos of the same type in a row, but for any permutation of the 5 scenarios the player will see only 4 transition videos in total, therefore we can choose funny or scary freely. We must still respect the already chosen types.

In the second sample: One of the 479001600 possible permutations of scenarios is 1, 7, 4, 12, 9, 8, 2, 6, 10, 3, 11, 5. The player will get the following sequence of transition videos for this permutation: SSSSSSSSSFS. Even though this sequence has 10 scary transition videos in total, it has only 9 scary transition videos in a row, which is the maximum allowed amount (\(\lceil \frac{3\cdot 12}{4} \rceil=9\)).

K. Make Triangle

Конструктив математика *2800

You are given \(n\) positive integers \(x_1, x_2, \ldots, x_n\) and three positive integers \(n_a, n_b, n_c\) satisfying \(n_a+n_b+n_c = n\).

You want to split the \(n\) positive integers into three groups, so that:

  • The first group contains \(n_a\) numbers, the second group contains \(n_b\) numbers, the third group contains \(n_c\) numbers.
  • Let \(s_a\) be the sum of the numbers in the first group, \(s_b\) be the sum in the second group, and \(s_c\) be the sum in the third group. Then \(s_a, s_b, s_c\) are the sides of a triangle with positive area.

Determine if this is possible. If this is possible, find one way to do so.

Input

Each test contains multiple test cases. The first line contains an integer \(t\) (\(1\le t\le 100\,000\)) — the number of test cases. The descriptions of the \(t\) test cases follow.

The first line of each test case contains the integers \(n, n_a, n_b, n_c\) (\(3 \leq n \leq 200\,000, 1\leq n_a,n_b,n_c \leq n-2, n_a+n_b+n_c = n\)) — the number of integers to split into three groups, and the desired sizes of the three groups.

The second line of each test case contains \(n\) integers \(x_1, x_2, \ldots, x_n\) (\(1 \leq x_i \leq 10^{9}\)).

It is guaranteed that the sum of \(n\) over all test cases does not exceed \(200\,000\).

Output

For each test case, print \(\texttt{YES}\) if it is possible to split the numbers into three groups satisfying all the conditions. Otherwise, print \(\texttt{NO}\).

If such a split exists, then describe the three groups as follows.

On the next line, print \(n_a\) integers \(a_1, a_2, \ldots, a_{n_a}\) — the numbers in the first group.

On the next line, print \(n_b\) integers \(b_1, b_2, \ldots, b_{n_b}\) — the numbers in the second group.

On the next line, print \(n_c\) integers \(c_1, c_2, \ldots, c_{n_c}\) — the numbers in the third group.

These \(n_a+n_b+n_c=n\) integers should be a permutation of \(x_1, x_2, \ldots, x_n\), and they should satisfy the conditions from the statement.

If there are multiple solutions, print any of them.

Note

In the first test case, we can put two \(1\)s into each group: the sum in each group would be \(2\), and there exists a triangle with positive area and sides \(2\), \(2\), \(2\).

In the second and third test cases, it can be shown that there is no such way to split numbers into groups.

In the fourth test case, we can put number \(16\) into the first group, with sum \(16\), numbers \(12\) and \(1\) into the second group, with sum \(13\), and the remaining five \(1\)s into the third group, with sum \(5\), as there exists a triangle with positive area and sides \(16, 13, 5\).

A. Двойное включение

жадные алгоритмы Конструктив математика *900

В ряд выстроены \(n\) ламп с номерами от \(1\) до \(n\), изначально они выключены. Вы можете выполнить следующую операцию любое количество раз (возможно, ноль):

  • Выбрать две несоседние\({}^\dagger\) лампы, которые в данный момент выключены, и включить их.

Определите, можете ли вы достичь конфигурации \(s\), где \(s_i = 1\) означает, что \(i\)-я лампа включена, а в противном случае \(s_i = 0\).

\({}^\dagger\) Соседними считаются только лампы \(i\) и \(i + 1\) для всех \(1 \le i < n\). Обратите внимание, что лампы \(n\) и \(1\) не являются соседними при \(n \ne 2\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 50\)) — количество ламп.

Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длины \(n\) — желаемую конечную конфигурацию.

Выходные данные

Для каждого набора входных данных выведите в отдельной строке «YES», если возможно достичь конфигурацию \(s\) путем применения данной операции любое количество раз. В противном случае выведите «NO».

Примечание

В первом наборе входных данных последовательность операций могла бы быть следующей (обратите внимание, что изначально все элементы \(s\) равны нулю): \(\mathtt{0000000000} \to \mathtt{\color{red}{1}0000000\color{red}{1}0} \to \mathtt{1\color{red}{1}00000\color{red}{1}10} \to \mathtt{110\color{red}{1}0\color{red}{1}0110}\).

В третьем наборе входных данных не нужно выполнять никаких операций.

В четвертом наборе входных данных невозможно выполнить никакую операцию, но нам нужно, чтобы горела первая лампа. Поэтому достичь желаемой конфигурации невозможно.

D. Покупка драгоценностей

жадные алгоритмы Конструктив математика *2000

У Алисы есть \(n\) монет, и она хочет сделать покупки в ювелирном магазине Боба. Хотя Боб еще не открыл магазин, он хочет быть уверен, что Алиса сегодня купит ровно \(k\) драгоценностей. Для этого Боб может построить не более \(60\) прилавков (каждый из которых содержит неограниченное количество драгоценностей) и установить цену за драгоценность для каждого прилавка как целое число монет от \(1\) до \(10^{18}\).

К счастью, Боб знает, что Алиса покупает жадно: она подойдет к прилавку \(1\), купит наибольшее возможное количество драгоценностей, затем перейдет к прилавку \(2\), купит наибольшее возможное количество драгоценностей, и так до последнего прилавка. Зная это, Боб может выбрать количество прилавков, а также установить цену для каждого прилавка так, чтобы Алиса купила ровно \(k\) драгоценностей. Помогите Бобу решить эту задачу или определите, что это невозможно.

Обратите внимание, не обязательно, чтобы Алиса потратила все монеты.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных содержит два целых положительных числа \(n\) и \(k\) (\(1 \le n, k \le 10^{18}\)) — количество монет у Алисы и количество драгоценностей, которое Боб хочет, чтобы Алиса купила.

Выходные данные

Для каждого набора входных данных выведите в отдельной строке «YES», если Боб может построить не более \(60\) прилавков и установить цены в них так, чтобы Алиса купила ровно \(k\) драгоценностей, или «NO», если это невозможно.

Если ответ «YES», во второй строке выведите целое число \(s\) (\(1 \le s \le 60\)) — количество прилавков, которое должен построить Боб. В третьей строке выведите \(s\) целых положительных чисел \(p_1, p_2, \ldots, p_s\) (\(1 \le p_i \le 10^{18})\), которые представляют собой подходящий набор цен \(p\), где \(p_i\) — цена за драгоценный камень на прилавке \(i\). Если таких \(p\) несколько, выведите любое из них.

Примечание

В первом наборе входных данных, на первом прилавке Алиса покупает \(3\) драгоценности и остается с \(1\) монетой. Этого недостаточно, чтобы купить драгоценности на любом из оставшихся прилавков, поэтому в итоге Алиса купит ровно \(3\) драгоценности.

В третьем наборе входных данных,

  • На первом прилавке Алиса покупает \(1\) драгоценность и остается с \(127\) монетами.
  • На втором прилавке Алиса покупает \(1\) драгоценность и остается с \(63\) монетами.
  • На третьем прилавке Алиса покупает \(1\) драгоценность и остается с \(31\) монетой.
  • На четвертом прилавке Алиса покупает \(1\) драгоценность и остается с \(15\) монетами.
  • На пятом прилавке Алиса покупает \(1\) драгоценность и остается с \(7\) монетами.
  • На шестом прилавке Алиса покупает \(1\) драгоценность и остается с \(3\) монетами.
  • На седьмом прилавке Алиса покупает \(1\) драгоценность и остается с \(1\) монетой.
  • На восьмом прилавке Алиса покупает \(1\) драгоценность и остается с \(0\) монетами.
Таким образом, всего Алиса купит ровно \(8\) драгоценностей.

E. Без палиндромов

жадные алгоритмы Конструктив математика Перебор разделяй и властвуй реализация Строки хэши *2000

Вам дана строка \(s\), состоящая из строчных латинских букв. Вам нужно разбить\(^\dagger\) эту строку на некоторое количество подстрок так, чтобы каждая подстрока не была палиндромом\(^\ddagger\).

\(^\dagger\) Разбиение строки \(s\) — это упорядоченная последовательность некоторых \(k\) строк \(t_1, t_2, \ldots, t_k\), таких, что \(t_1 + t_2 + \ldots + t_k = s\), где \(+\) обозначает операцию конкатенации.

\(^\ddagger\) Строка \(s\) называется палиндромом, если она читается одинаково как слева направо, так и справа налево. Например, \(\mathtt{racecar}\), \(\mathtt{abccba}\) и \(\mathtt{a}\) являются палиндромами, а \(\mathtt{ab}\), \(\mathtt{dokibird}\) и \(\mathtt{kurosanji}\) — нет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных содержит строку \(s\), состоящую из строчных латинских букв (\(1 \le |s| \le 10^6\)).

Гарантируется, что сумма \(|s|\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке «YES», если существует разбиение \(s\), части которого не являются палиндромами, или «NO», если такого разбиения не существует.

Если ответ «YES», то во второй строке выведите целое число \(k\) — количество частей, на которое нужно разбить \(s\), чтобы каждая часть не была палиндромом. В третьей строке выведите \(k\) строк \(t_1, t_2, \ldots, t_k\), представляющих такое разбиение. Если таких разбиений несколько, выведите любое из них.

Примечание

В первом наборе входных данных, поскольку \(\mathtt{sinktheyacht}\) уже не является палиндромом, разбиение \([\mathtt{sinktheyacht}]\) является допустимым.

Во втором наборе входных данных, поскольку любая подстрока строки \(s\) является палиндромом, не существует допустимых разбиений.

В третьем наборе входных данных еще одно допустимое разбиение — \([\mathtt{uw},\mathtt{uo}, \mathtt{wou}, \mathtt{wu}]\).

F. Инверсии композиции

жадные алгоритмы Конструктив Структуры данных *2500

Вам дана перестановка \(p\) длины \(n\), а также целое неотрицательное число \(k\). Вам нужно построить перестановку \(q\) длины \(n\) такую, что \(\operatorname{inv}(q) + \operatorname{inv}(q \cdot p) = k {}^\dagger {}^\ddagger\), или определить, что это сделать невозможно.

\({}^\dagger\) Для двух перестановок \(p\) и \(q\) одинаковой длины \(n\) перестановка \(w = q \cdot p\) такова, что \(w_i = q_{p_i}\) для всех \(1 \le i \le n\).

\({}^\ddagger\) Для перестановки \(p\) длины \(n\) функция \(\operatorname{inv}(p)\) возвращает количество инверсий \(p\), то есть количество пар индексов \(1 \le i < j \le n\) таких, что \(p_i > p_j\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 3 \cdot 10^5, 0 \le k \le n(n - 1)\)) — длину \(p\) и требуемое количество инверсий.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\), \(p_i\) попарно различны) — перестановку \(p\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в отдельной строке «YES», если существует перестановка \(q\), удовлетворяющая заданному условию, или «NO», если такой перестановки не существует.

Если ответ «YES», то во второй строке выведите \(n\) целых чисел \(q_1, q_2, \ldots, q_n\), которые представляют собой удовлетворяющую условию перестановку \(q\). Если таких \(q\) несколько, выведите любую из них.

Примечание

В первом наборе входных данных имеем \(q \cdot p = [2, 1, 3]\), \(\operatorname{inv}(q) = 3\), и \(\operatorname{inv}(q \cdot p) = 1\).

В четвертом наборе входных данных имеем \(q \cdot p = [9, 1, 8, 5, 7, 6, 4, 3, 2]\), \(\operatorname{inv}(q) = 24\), и \(\operatorname{inv}(q \cdot p) = 27\).

I. Выращивание деревьев

Бинарный поиск графы жадные алгоритмы Конструктив Потоки *3200

Вам дан неориентированный связный простой граф с \(n\) вершинами и \(m\) ребрами, где ребро \(i\) соединяет вершины \(u_i\) и \(v_i\). С каждым ребром связаны два положительных параметра \(a_i\) и \(b_i\). Кроме того, вам дано целое число \(k\).

Неотрицательный массив \(x\) длины \(m\) называется генератором \(k\)-остовного-дерева, если он удовлетворяет следующим условиям:

  • Рассмотрим неориентированный мультиграф с \(n\) вершинами, в котором ребро \(i\) клонировано \(x_i\) раз (т.е. существует \(x_i\) ребер, соединяющих \(u_i\) и \(v_i\)). Можно разбить ребра этого графа на \(k\) остовных деревьев, где каждое ребро принадлежит ровно одному остовному дереву\(^\dagger\).

Стоимость такого массива \(x\) определяется как \(\sum_{i = 1}^m a_i x_i^2 + b_i x_i\). Найдите минимальную стоимость генератора \(k\)-остовного-дерева.

\(^\dagger\) Остовное дерево (мульти)графа — это подмножество ребер графа, которые образуют дерево, соединяющее все вершины графа.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\) и \(k\) (\(2 \le n \le 50, n - 1 \le m \le \min(50, \frac{n(n - 1)}{2}), 1 \le k \le 10^7\)) — количество вершин в графе, количество ребер в графе и параметр для генератора \(k\)-остовного-дерева.

Каждая из следующих \(m\) строк каждого набора входных данных содержит четыре целых числа \(u_i\), \(v_i\), \(a_i\) и \(b_i\) (\(1 \le u_i, v_i \le n, u_i \neq v_i, 1 \le a_i, b_i \le 1000\)) — конечные точки ребра \(i\) и два его параметра. Гарантируется, что граф прост и связен.

Гарантируется, что сумма \(n^2\) и сумма \(m^2\) по всем наборам входных данных не превосходит \(2500\).

Выходные данные

Для каждого набора входных данных выведите одно целое число: минимальную стоимость генератора \(k\)-остовного-дерева.

Примечание

В первом наборе входных данных допустимым генератором \(1\)-остовного-дерева является \(x = [1, 1, 1, 1, 0]\), как показано на следующем рисунке. Стоимость этого генератора равна \((1^2 \cdot 5 + 1 \cdot 5) + (1^2 \cdot 5 + 1 \cdot 7) + (1^2 \cdot 6 + 1 \cdot 2) + (1^2 \cdot 3 + 1 \cdot 5) + (0^2 \cdot 4 + 0 \cdot 9) = 38\). Можно доказать, что ни один другой генератор не имеет меньшей стоимости.

Разбиение \(1\)-остовного-дерева \(x = [1, 1, 1, 1, 0]\)

Во втором наборе входных данных допустимым генератором \(3\)-остовного-дерева является \(x = [2, 3, 2, 2, 3]\), как показано на следующем рисунке. Стоимость этого генератора равна \((2^2 \cdot 5 + 2 \cdot 5) + (3^2 \cdot 5 + 3 \cdot 7) + (2^2 \cdot 6 + 2 \cdot 2) + (2^2 \cdot 3 + 2 \cdot 5) + (3^2 \cdot 4 + 3 \cdot 9) = 191\). Можно доказать, что ни один другой генератор не имеет меньшей стоимости.

Разбиение \(3\)-остовного-дерева \(x = [2, 3, 2, 2, 3]\)

J. Помогите, что значит быть «Based»

*особая задача Конструктив Перебор Разбор выражений реализация сортировки

Входные данные

Чё, давай сюда одно целое число \(x\) (\(1 \le x \le 4\)), братишка uwu :3

Выходные данные

Если \(x = 1\), выдай код, который, типа, когда подаёшь ему два целых числа \(a\) и \(b\), он возвращает их сумму.

Если \(x = 2\), напиши код, который принимает целое число \(a\) и возвращает его абсолютное значение, как будто волшебство, без всяких приколов.

Если \(x = 3\), чекай это: сочини код, который берёт целое число \(n\) (\(1 \le n \le 50\)) и массив \(a\) из \(n\) различных целых чисел, а потом возвращает максимальное значение, вжух!

Если \(x = 4\), бросай код, который берёт целое число \(n\) (\(1 \le n \le 50\)), массив \(a\) из \(n\) различных целых чисел и целое число \(k\) (\(1 \le k \le n\)), а потом выдаёт \(k\)-тое по величине значение в массиве. Врубился, братишка?!

Примечание

Загляни на страницу «Мои посылки» и оцени свой код, кликнув на его ID. Ты увидишь, насколько based или cringe он.

A. Покраска ленты

жадные алгоритмы Конструктив математика *900

Алиса и Боб купили ленту, состоящую из \(n\) клеток. Теперь им нужно её покрасить.

Сначала Алиса покрасит каждую клетку ленты в один из \(m\) цветов. Для каждой клетки она может выбрать цвет произвольным образом.

Затем Боб выберет не более \(k\) клеток ленты и перекрасит их в один и тот же цвет (он выбирает затронутые клетки и цвет произвольным образом).

Боб хотел бы, чтобы все клетки имели одинаковый цвет. Однако Алиса считает, что это слишком скучно, поэтому она хочет покрасить ленту так, чтобы Боб не смог сделать все клетки одного цвета.

Возможно ли покрасить ленту таким образом?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Каждый набор состоит из одной строки, содержащей три целых числа \(n\), \(m\) и \(k\) (\(1 \le m, k \le n \le 50\)) — количество клеток, количество цветов и количество клеток, которые Боб может перекрасить, соответственно.

Выходные данные

Для каждого набора входных данных выведите YES, если Алиса может покрасить ленту так, чтобы Боб не смог добиться того, чтобы все клетки имели одинаковый цвет. Иначе выведите NO.

Вы можете печатать каждую букву в любом регистре. Например, Yes, yes, yEs будут распознаны как положительный ответ.

Примечание

В первом примере лента состоит из \(1\) клетки. Таким образом, все ее клетки всегда будут иметь одинаковый цвет.

Во втором примере есть только \(1\) цвет.

В третьем примере Алиса может покрасить ленту следующим образом: \([1, 2, 1, 2, 1]\). Невозможно изменить цвет не более чем \(1\) клетки так, чтобы все клетки имели одинаковый цвет.

В четвертом примере, как бы Алиса ни покрасила ленту, Боб всегда сможет перекрасить \(2\) клетки так, чтобы все клетки имели одинаковый цвет.

В пятом примере Алиса может покрасить ленту следующим образом: \([1, 2, 3, 4, 5]\). Невозможно изменить цвет не более чем \(3\) клеток так, чтобы все клетки имели одинаковый цвет.

B. Прогрессивный квадрат

Конструктив реализация сортировки Структуры данных *1000

Прогрессивный квадрат размера \(n\) — это матрица размера \(n \times n\). Максим выбирает три натуральных числа \(a_{1,1}\), \(c\) и \(d\) и строит прогрессивный квадрат по следующим правилам:

\(\)a_{i+1,j} = a_{i,j} + c\(\)

\(\)a_{i,j+1} = a_{i,j} + d\(\)

Например, если \(n = 3\), \(a_{1,1} = 1\), \(c=2\) и \(d=3\), то прогрессивный квадрат выглядит следующим образом:

\(\) \begin{pmatrix} 1 & 4 & 7 \\ 3 & 6 & 9 \\ 5 & 8 & 11 \end{pmatrix} \(\)

В прошлом месяце Максим построил прогрессивный квадрат и запомнил значения \(n\), \(c\) и \(d\). Недавно он нашёл массив \(b\) из \(n^2\) целых чисел, идущих в случайном порядке и хочет убедиться, что эти элементы являются элементами того самого квадрата.

Можно показать, что при любых значениях \(n\), \(a_{1,1}\), \(c\) и \(d\) существует ровно один прогрессивный квадрат, удовлетворяющий всем правилам.

Входные данные

В первой строке задано целое число \(t\) (\(1 \le t \le {10} ^ 4\)) — количество наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n\), \(c\) и \(d\) (\(2 \le n \le 500\), \(1 \le c, d \le 10^6\)) — размер квадрата и значения \(c\) и \(d\), описанные в условии.

Вторая строка каждого набора содержит \(n \cdot n\) целых чисел \(b_1, b_2, \dots, b_{n \cdot n}\) (\(1 \le b_i \le 10^9\)) — элементы, которые нашёл Максим.

Гарантируется, что сумма \(n ^ 2\) по всем наборам входных данных не превосходит \(25 \cdot {10} ^ 4\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите «YES», если прогрессивный квадрат для данных \(n\), \(c\) и \(d\) может быть составлен из элементов массива \(a\), в противном случае выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

H. Самая безбашенная оборона

битмаски дп Конструктив кратчайшие пути Паросочетания Перебор Потоки *2300

Вы играете в очень популярную игру в жанре Tower Defense «Runnerfield 2». В ней игрок выставляет защитные башни, которые атакуют врагов, идущих от некоторой начальной точки до базы игрока.

Вам дано клетчатое поле размера \(n \times m\), на котором уже расставлены \(k\) башен и проложен маршрут, через который будут идти враги. Клетка на пересечении \(x\)-й строки и \(y\)-го столбца обозначается как \((x, y)\).

Каждую секунду башня наносит \(p_i\) единиц урона всем врагам в радиусе её действия. Например, если враг расположен в клетке \((x, y)\), а башня в \((x_i, y_i)\), и её радиус равен \(r\), тогда врагу будет нанесён урон \(p_i\), если \((x - x_i) ^ 2 + (y - y_i) ^ 2 \le r ^ 2\).

Враги идут из клетки \((1, 1)\) в клетку \((n, m)\), посещая каждую клетку пути ровно один раз. Враг моментально перемещается на соседнюю по горизонтали или вертикали клетку, однако перед этим он проводит в текущей клетке одну секунду. Если в эту секунду его здоровье стало равно нулю или ниже нуля, то враг больше не может перемещаться. Игрок проигрывает, если враг смог добраться до клетки \((n, m)\) и может сделать ещё одно перемещение.

По умолчанию все башни обладают нулевым радиусом действия, но игрок может сделать радиус башни равным целому числу \(r\) (\(r > 0\)) за это здоровье всех врагов увеличится на \(3^r\), однако каждое \(r\) может быть использовано не более чем для одной башни.

Допустим, враг имел \(h\) единиц базового здоровья. Если радиусы башен \(2\), \(4\) и \(5\), то его здоровье в начале пути будет \(h + 3 ^ 2 + 3 ^ 4 + 3 ^ 5 = h + 9 + 81 + 243 = h + 333\). Выбор радиусов происходит один раз до появления врагов и не может быть изменён после начала игры.

Найдите максимальное количество базового здоровья \(h\), при котором возможно установить радиусы так, чтобы игрок не проиграл при прохождении врага со здоровьем \(h\) (без учёта прибавок за радиусы башен).

Входные данные

В первой строке задано целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных.

Первая строка каждого набора содержит три целых числа \(n\), \(m\) и \(k\) (\(2 \le n, m \le 50, 1 \le k < n \cdot m\)) — размеры поля и количество башен на нём.

В следующих \(n\) строках даётся по \(m\) символов — описание очередной строки поля, где символ «.» обозначает пустую клетку, символ «#» клетку пути, по которой пройдут враги.

Далее следует \(k\) строк — описание башен. Каждая строка описания содержит три целых числа \(x_i\), \(y_i\) и \(p_i\) (\(1 \le x_i \le n, 1 \le y_i \le m, 1 \le p_i \le 500\)) — координаты башни и её параметр атаки. Все координаты соответствуют пустым клеткам на игровом поле, а так же все пары \((x_i, y_i)\) попарно различны.

Гарантируется, что сумма \(n \cdot m\) не превосходит \(2500\) по всем тестовым случаям.

Выходные данные

Для каждого набора входных данных в отдельной строке выведите максимальное количество базового здоровья \(h\), при котором возможно установить радиусы так, чтобы игрок не проиграл при прохождении врага со здоровьем \(h\) (без учёта прибавок за радиусы башен).

Если невозможно выбрать радиусы даже для врага с \(1\) единицей базового здоровья, выведите «0».

Примечание

В первом примере нет смысла увеличивать радиус башни, так как она не сможет нанести достаточное количество урона монстру даже с \(1\) единицей здоровья.

Во втором примере радиус башни равен \(1\), она наносит урон монстру в клетках \((1, 1)\) и \((2, 2)\).

В третьем примере радиус башни равен \(2\), она наносит урон монстру на всех клетках пути. Если базовое здоровье врага \(1491\), то после прибавки за радиус башни его здоровье будет \(1491 + 3 ^ 2 = 1500\), что в точности будет равно урону, который ему нанесёт башня за три секунды.

В четвёртом примере у башни \((1, 2)\) радиус \(1\), а у башни \((3, 1)\) радиус \(2\).

C. Нина и магическая матрица

жадные алгоритмы Конструктив математика *1600

У Нины есть матрица \(a\) размера \(n\times n\), заполненная нулями. \(j\)-й элемент \(i\)-й строки матрицы \(a\) обозначается как \(a_{i, j}\).

Она может выполнять операции двух типов с этой матрицей:

  • Операция типа \(1\): выбрать целое число \(i\) от \(1\) до \(n\) и перестановку \(p_1, p_2, \ldots, p_n\) целых чисел от \(1\) до \(n\). Присвоить \(a_{i, j}:=p_j\) для всех \(1 \le j \le n\) одновременно.
  • Операция типа \(2\): выбрать целое число \(i\) от \(1\) до \(n\) и перестановку \(p_1, p_2, \ldots, p_n\) целых чисел от \(1\) до \(n\). Присвоить \(a_{j, i}:=p_j\) для всех \(1 \le j \le n\) одновременно.

Нина хочет максимизировать сумму всех чисел в матрице \(\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{n}a_{i,j}\). Она просит вас найти способ выполнить операции так, чтобы эта сумма была максимальной. Поскольку она не хочет выполнять слишком много операций, вы должны предоставить решение с не более чем \(2n\) операциями.

Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

В первой строке дано одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных.

В единственной строке каждого набора входных данных дано одно целое число \(n\) (\(1 \le n \le 500\)) — размер матрицы \(a\).

Гарантируется, что сумма \(n^2\) по всем тестовым случаям не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных на первой строке выведите два целых числа \(s\) и \(m\) (\(0\leq m\leq 2n\)) — максимальную сумму чисел в матрице и количество операций в вашем решении.

В \(k\)-й из следующих \(m\) строк выведите описание \(k\)-й операции:

  • целое число \(c\) (\(c \in \{1, 2\}\)) — тип \(k\)-й операции;
  • целое число \(i\) (\(1 \le i \le n\)) — строка или столбец, к которому применяется \(k\)-я операция;
  • перестановка \(p_1, p_2, \ldots, p_n\) целых чисел от \(1\) до \(n\) — перестановка, используемая в \(k\)-й операции.

Обратите внимание, что вам не нужно минимизировать количество использованных операций, вам просто нужно использовать не более чем \(2n\) операций. Можно показать, что максимальная возможная сумма всегда может быть получена не более чем за \(2n\) операций.

Примечание

В первом наборе входных данных максимальная сумма \(s=1\) может быть получена за \(1\) операцию присвоением \(a_{1, 1}:=1\).

Во втором наборе входных данных максимальная сумма \(s=7\) может быть получена за \(3\) операции следующим образом:

Можно показать, что невозможно сделать сумму чисел в матрице большей \(7\).

D. Нина и MEX

битмаски дп жадные алгоритмы Конструктив математика Перебор разделяй и властвуй реализация *2000

Нина дала вам массив целых чисел \(a_1, a_2, \ldots, a_n\) длины \(n\).

Вы можете выполнить следующую операцию не более \(5\cdot 10^5\) раз (возможно, ноль):

  • Выбрать два целых числа \(l\) и \(r\) таких, что \(1 \le l \le r \le n\), вычислить \(x\) как \(\operatorname{MEX}(\{a_l, a_{l+1}, \ldots, a_r\})\), и одновременно присвоить \(a_l:=x, a_{l+1}:=x, \ldots, a_r:=x\).

Здесь \(\operatorname{MEX}\) множества целых чисел \(\{c_1, c_2, \ldots, c_k\}\) определяется как наименьшее неотрицательное целое число \(m\), которое не встречается в множестве \(c\).

Ваша цель — максимизировать сумму элементов массива \(a\). Найдите максимальную сумму и постройте последовательность операций, которая достигает этой суммы. Обратите внимание, что вам не нужно минимизировать количество операций в этой последовательности, вам лишь нужно использовать не более \(5\cdot 10^5\) операций в вашем решении.

Входные данные

В первой строке дано одно целое число \(n\) (\(1 \le n \le 18\)) — длина массива \(a\).

Во второй строке даны \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(0\leq a_i \leq 10^7\)) — массив \(a\).

Выходные данные

В первой строке выведите два целых числа \(s\) и \(m\) (\(0\le m\le 5\cdot 10^5\)) — максимальную сумму элементов массива \(a\) и количество операций в вашем решении.

В \(i\)-й из следующих \(m\) строк выведите два целых числа \(l\) и \(r\) (\(1 \le l \le r \le n\)), представляющие параметры \(i\)-й операции.

Можно показать, что максимальная сумма элементов массива \(a\) всегда может быть получена не более чем за \(5 \cdot 10^5\) операций.

Примечание

В первом примере, после операции с \(l=1\) и \(r=2\) массив \(a\) становится равным \([2,2]\). Можно показать, что невозможно достичь большей суммы элементов \(a\), поэтому ответ \(4\).

Во втором примере, начальная сумма элементов равна \(13\), а достичь большей суммы невозможно.

В третьем примере массив \(a\) изменяется следующим образом:

  • после первой операции (\(l=3\), \(r=3\)), массив \(a\) становится равным \([1,100,0,1]\);
  • после второй операции (\(l=3\), \(r=4\)), массив \(a\) становится равным \([1,100,2,2]\).

Можно показать, что большей суммы элементов \(a\) достичь невозможно, поэтому ответ \(105\).

F. Нина и игра в баскетбол

графы Конструктив снм сортировки Структуры данных *3000

Нина тренирует свою команду по баскетболу. Команда Нины состоит из \(n\) игроков, пронумерованных от \(1\) до \(n\). У \(i\)-го игрока есть интервал рук \([l_i,r_i]\). Два игрока \(i\) и \(j\) (\(i \neq j\)) могут передавать мяч друг другу, только если \(|i-j|\in[l_i+l_j,r_i+r_j]\) (здесь \(|x|\) обозначает абсолютное значение \(x\)).

Нина хочет проверить готовность своей команды. Для этого она проведет несколько раундов передач.

  • В каждом раунде Нина выберет последовательность игроков \(p_1,p_2,\ldots,p_m\) такую, что игроки \(p_i\) и \(p_{i+1}\) могут передавать мяч друг другу для всех \(1 \le i < m\). Длина последовательности \(m\) может быть выбрана Ниной. Каждый игрок может появиться в последовательности \(p_1,p_2,\ldots,p_m\) несколько раз или вообще не появиться в ней.
  • Затем Нина бросит мяч игроку \(p_1\), игрок \(p_1\) передаст мяч игроку \(p_2\) и так далее... Игрок \(p_m\) выбросит мяч за пределы баскетбольного поля, так что его больше нельзя будет использовать.

Как тренер, Нина хочет, чтобы каждый из \(n\) игроков участвовал хотя бы в одном раунде передач. Поскольку Нина хочет пойти на свидание после школы, она хочет, чтобы вы вычислили минимальное количество раундов передач, необходимых для выполнения задачи.

Входные данные

В первой строке дано одно целое число \(t\) (\(1 \le t \le 2\cdot 10^5\)) — количество наборов входных данных.

В первой строке дано одно целое число \(n\) (\(1 \le n \le 2\cdot 10^6\)) — количество игроков.

В \(i\)-й из следующих \(n\) строк даны два целых числа \(l_i\) и \(r_i\) (\(1\leq l_i\leq r_i\leq n\)) — интервал рук \(i\)-го игрока.

Гарантируется, что сумма \(n\) по всем тестовым случаям не превосходит \(2\cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество раундов передач, которое Нина должна провести, чтобы завершить свою работу.

Примечание

В первых двух наборах входных данных Нина может провести два раунда передач: один с \(p=[1]\) и один с \(p=[2]\). Можно показать, что одного раунда передач недостаточно, поэтому ответ \(2\).

В третьем наборе входных данных Нина может провести два раунда передач: один с \(p=[1,3]\) и один с \(p=[2]\). Игрок \(1\) может передать мяч игроку \(3\), так как \(|3-1|=2 \in [1+1,3+3]\). Можно показать, что одного раунда передач недостаточно, поэтому ответ \(2\).

A. Палкоугольник

жадные алгоритмы Конструктив *800

Вам даны \(n\) палочек с длинами \(a_1, a_2, \ldots, a_n\). Найдите максимальное количество правильных (равносторонних) многоугольников, которые вы можете сформировать одновременно, чтобы:

  • Каждая сторона многоугольника была образована ровно одной палочкой.
  • Ни одна палочка не использовалась более чем в \(1\) многоугольнике.

Обращаем ваше внимание, что палочки нельзя ломать.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 100\)) — количество доступных палочек.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 100\)) — длины палочек.

Выходные данные

Для каждого набора входных данных выведите в отдельной строке одно целое число — максимальное количество правильных (равносторонних) многоугольников, которые вы можете сформировать одновременно из имеющихся палочек.

Примечание

В первом наборе входных данных есть только одна палочка, поэтому мы не можем сформировать ни одного многоугольника.

Во втором наборе входных данных двух палочек также недостаточно, чтобы сформировать многоугольник.

В третьем наборе входных данных мы можем использовать \(4\) палочки длины \(3\) для формирования квадрата.

В четвертом наборе входных данных мы можем сформировать пятиугольник со стороной длиной \(2\) и квадрат со стороной длиной \(4\).

B. Битовая конструкция

битмаски жадные алгоритмы Конструктив реализация *1100

Даны целые неотрицательные числа \(n\) и \(k\). Постройте последовательность из \(n\) целых неотрицательных (т.е. \(\geq 0\)) чисел \(a_1, a_2, \ldots, a_n\) таких, что

  1. \(\sum\limits_{i = 1}^n a_i = k\).
  2. Количество \(1\) в двоичной записи числа \(a_1 | a_2 | \ldots | a_n\) максимально, где \(|\) обозначает операцию побитового ИЛИ.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \leq n \leq 2 \cdot 10^5\), \(1 \leq k \leq 10^9\)) — количество чисел в последовательности и сумму соответственно.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите на отдельной строке последовательность \(a_1, a_2, \ldots, a_n\), удовлетворяющую приведенным выше условиям.

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных нам нужно вывести ровно одно число, поэтому в качестве ответа мы можем вывести только \(5\).

Во втором наборе входных данных мы выводим \(1, 2\). Они имеют сумму \(3\), а \(1 | 2 = (11)_2\) имеет две \(1\) в двоичном представлении. Можно показать, что большего количества единиц достичь нельзя.

В четвертом наборе входных данных мы выводим \(3, 1, 1, 32, 2, 12\), что в сумме составляет \(51\), и \(3 | 1 | 1 | 32 | 2 | 12 = (101\,111)_2\) имеет пять \(1\) в двоичном представлении. Можно показать, что большего количества единиц достичь нельзя.

E. Очередной конструктив про перестановки

*особая задача Конструктив *1900

Допустим, дана перестановка \(p\) из \(n\) элементов — массив, каждый элемент которого — целое число от \(1\) до \(n\), и в который каждое число от \(1\) до \(n\) входит ровно один раз.

За одну операцию вы удаляете каждый элемент перестановки, который меньше хотя бы одного из своих соседей. Например, если применить операцию к \([3, 1, 2, 5, 4]\), вы получите \([3, 5]\). Если применить операцию еще один раз, вы получите \([5]\).

Легко заметить, что после конечного числа операций любая перестановка превращается в массив, состоящий из одного элемента \(n\).

Даны два целых числа \(n\) и \(k\). Постройте перестановку размера \(n\), которая превращается в массив, состоящий из единственного числа \(n\), после ровно \(k\) операций (не раньше).

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 2000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из одной строки, содержащей два целых числа \(n\) и \(k\) (\(2 \le n \le 100\); \(1 \le k \le n - 1\)).

Выходные данные

Для каждого набора входных данных выведите ответ следующим образом:

  • если такой перестановки размера \(n\), которая превращается в массив из единственного элемента \(n\) после ровно \(k\) операций, не существует, выведите \(-1\);
  • иначе выведите \(n\) различных целых чисел от \(1\) до \(n\) — требуемую перестановку. Если таких перестановок несколько, выведите любую из них.

C. Нарисуйте дерево

геометрия Деревья Конструктив разделяй и властвуй сортировки *2200

Даны дерево с n вершинами и n точек на плоскости, никакие три из которых не лежат на одной прямой.

Вам надо нарисовать заданное дерево на плоскости, используя заданные точки в качестве вершин.

То есть каждой вершине дерева нужно сопоставить ровно одну точку, и каждая точка должна быть сопоставлена какой-либо вершине. Если две вершины дерева соединены ребром, между соответствующими точками должен быть нарисован отрезок. Отрезки, соответствующие несмежным ребрам, не должны иметь общих точек. Отрезки, соответствующие смежным ребрам, должны иметь ровно одну общую точку.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 1500) — количество вершин в дереве (оно же — количество выбранных точек на плоскости).

В следующих n - 1 строках через пробел записано по два целых числа ui и vi (1 ≤ ui, vi ≤ n, ui ≠ vi) — номера соединенных i-ым ребром вершин дерева.

В следующих n строках через пробел записано по два целых числа xi и yi ( - 109 ≤ xi, yi ≤ 109) — координаты i-ой точки на плоскости. Никакие три точки не лежат на одной прямой.

Гарантируется, что при заданных ограничениях задача имеет решение.

Выходные данные

Выведите n различных целых чисел от 1 до n через пробел: i-ое число должно равняться номеру вершины, которую надо поместить в i-ую точку (точки нумеруются в порядке их перечисления во входных данных).

Если существует несколько решений, выведите любое.

Примечание

Возможные ответы для примеров приведены ниже.

B. Отсутствующая сумма подпоследовательности

битмаски жадные алгоритмы Конструктив теория чисел *1800

Даны два целых числа \(n\) и \(k\). Найдите последовательность \(a\) неотрицательных целых чисел размером не более \(25\), такую, что выполняются следующие условия.

  • Нет подпоследовательности \(a\) с суммой \(k\).
  • Для всех \(1 \le v \le n\), где \(v \ne k\), существует подпоследовательность \(a\) с суммой \(v\).

Последовательность \(b\) является подпоследовательностью \(a\), если \(b\) может быть получена из \(a\) путем удаления нескольких (возможно, нуля или всех) элементов, не изменяя порядок оставшихся элементов. Например, \([5, 2, 3]\) является подпоследовательностью \([1, 5, 7, 8, 2, 4, 3]\).

Можно показать, что при заданных ограничениях всегда существует решение.

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество тестов. Затем следует описание самих тестов.

Каждый тест состоит из одной строки, содержащей два целых числа \(n\) и \(k\) (\(2 \le n \le 10^6\), \(1 \le k \le n\)) — описанные выше параметры.

Гарантируется, что сумма \(n\) по всем тестам не превышает \(10^7\).

Выходные данные

Первая строка вывода для каждого теста должна содержать одно целое число \(m\) (\(1 \le m \le 25\)) — размер выбранной вами последовательности.

Вторая строка вывода для каждого теста должна содержать \(m\) целых чисел \(a_i\) (\(0 \le a_i \le 10^9\)) — элементы вашей выбранной последовательности.

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере нам просто нужна подпоследовательность, дающая в сумме \(1\), но не дающая в сумме \(2\). Таким образом, массив \(a=[1]\) подходит.

Во втором примере все элементы больше \(k=1\), поэтому ни одна подпоследовательность не дает в сумме \(1\). Каждое другое целое число между \(1\) и \(n\) присутствует в массиве, поэтому существует подпоследовательность размера \(1\), дающая в сумме каждое из этих чисел.

C. Складывание полоски

жадные алгоритмы Конструктив Строки *2300

У вас есть полоска бумаги с бинарной строкой \(s\) длины \(n\). Вы можете сложить бумагу между любой парой соседних цифр.

Последовательность складок считается допустимой, если после складок все символы, находящиеся друг над другом или под другим, совпадают. Обратите внимание, что все складки делаются одновременно, поэтому символы не обязательно должны совпадать между складками.

Например, вот допустимые складки для \(s = \mathtt{110110110011}\) и \(s = \mathtt{01110}\):

Длина сложенной полоски — это длина, видимая сверху после всех складок. Таким образом, для двух приведенных выше примеров после указанных выше складок длины будут равны \(7\) и \(3\) соответственно.

Обратите внимание, что для приведенной выше складки для \(s = \mathtt{01110}\), если бы мы сделали любую из двух складок по отдельности, это была бы недопустимая последовательность складок. Однако, поскольку мы не проверяем допустимость до тех пор, пока все складки не будут сделаны, эта последовательность складок допустима.

После выполнения последовательности допустимых складок, какова минимальная длина полоски, которую вы можете получить?

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество тестов. Затем следует описание тестов.

Первая строка каждого теста содержит одно целое число \(n\) (\(1 \le n \le 2\cdot 10^5\)) — размер полоски.

Вторая строка каждого теста содержит строку \(s\) из \(n\) символов '0' и '1' — описание цифр на полоске.

Гарантируется, что сумма \(n\) по всем тестам не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого теста выведите одно целое число — минимально возможную длину полоски после допустимой последовательности складок.

Примечание

Для первого примера одной из оптимальных последовательностей складок является складывание полоски посередине, что приводит к полоске длиной 3.

Третий и четвертый примеры соответствуют изображениям выше. Обратите внимание, что складка, показанная выше для \(s = \mathtt{110110110011}\), не является минимальной по длине.

D. Отсутствующая сумма подмассива

Конструктив *2900

Загадан спрятанный массив \(a\) из \(n\) положительных целых чисел. Вы знаете, что \(a\) является палиндромом, или, другими словами, для всех \(1 \le i \le n\), \(a_i = a_{n + 1 - i}\). Вам даны суммы всех, кроме одной, различных подмассивов этого массива, в произвольном порядке. Подмассив, сумма которого не дана, может быть любым из \(\frac{n(n+1)}{2}\) различных подмассивов массива \(a\).

Восстановите любой возможный палиндром \(a\). Ввод выбран таким образом, что всегда существует по крайней мере один массив \(a\), удовлетворяющий условиям.

Массив \(b\) является подмассивом массива \(a\), если \(b\) может быть получен из \(a\) путем удаления нескольких (возможно, нуля или всех) элементов с начала и нескольких (возможно, нуля или всех) элементов с конца.

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 200\)) — количество тестов. Затем следует описание тестов.

Первая строка каждого теста содержит одно целое число \(n\) (\(3 \le n \le 1000\)) — размер массива \(a\).

Следующая строка каждого теста содержит \(\frac{n(n+1)}{2} - 1\) целых чисел \(s_i\) (\(1\leq s_i \leq 10^9\)) — все, кроме одной, суммы подмассивов массива \(a\).

Гарантируется, что сумма \(n\) по всем тестам не превышает \(1000\).

Дополнительное ограничение на ввод: всегда существует по крайней мере одно допустимое решение.

Взломы в этой задаче отключены.

Выходные данные

Для каждого теста выведите одну строку, содержащую \(n\) положительных целых чисел \(a_1, a_2, \cdots a_n\) — любой допустимый массив \(a\). Обратите внимание, что \(a\) должен быть палиндромом.

Если существует несколько решений, выведите любое из них.

Примечание

Для первого примера, подмассивы массива \(a = [1, 2, 1]\):

  • \([1]\) с суммой \(1\),
  • \([2]\) с суммой \(2\),
  • \([1]\) с суммой \(1\),
  • \([1, 2]\) с суммой \(3\),
  • \([2, 1]\) с суммой \(3\),
  • \([1, 2, 1]\) с суммой \(4\).
Таким образом, полный список сумм подмассивов: \(1, 1, 2, 3, 3, 4\), и сумма, которая отсутствует во входном списке, равна \(3\).

Для второго примера, отсутствующая сумма подмассива равна \(4\) для подмассива \([2, 2]\).

Для третьего примера, отсутствующая сумма подмассива равна \(13\), потому что существуют два подмассива с суммой \(13\) (\([3, 5, 5]\) и \([5, 5, 3]\)), но \(13\) встречается только один раз во входных данных.

E. Связанные кубики

игры Конструктив *3100

На позициях от \((1, 1, 1)\) до \((n, m, 1)\) находится \(n \cdot m\) единичных кубиков. Каждый из этих кубиков имеет один из \(k\) цветов. Вы хотите добавить дополнительные кубики в любых целочисленных координатах так, чтобы подмножество кубиков каждого цвета было связано, где два кубика считаются связанными, если они имеют общую грань.

Другими словами, для каждой пары кубиков одного цвета \(c\) должно быть возможно перемещаться от одного к другому, двигаясь только через кубики цвета \(c\), которые имеют общую грань.

Существующие кубики в настоящее время находятся в углу комнаты. Есть бесцветные кубики, полностью заполняющие плоскости \(x = 0\), \(y = 0\) и \(z = 0\), что мешает вам размещать дополнительные кубики там или в отрицательных координатах.

Найдите решение, которое использует не более \(4 \cdot 10^5\) дополнительных кубиков (не включая кубики, которые в настоящее время присутствуют), или определите, что решения нет. Можно показать, что при заданных ограничениях, если есть решение, то оно использует не более \(4 \cdot 10^5\) дополнительных кубиков.

Входные данные

Первая строка ввода содержит три целых числа \(n\), \(m\) и \(k\) (\(2 \le n, m, k \le 50\)) — количество строк и столбцов кубиков, и количество цветов, соответственно.

\(i\)-я из следующих \(n\) строк содержит \(m\) целых чисел. \(j\)-е из них — \(a_{ij}\) (\(1 \le a_{ij} \le k\)) — цвет кубика в позиции \((i, j, 1)\). Для каждого цвета от \(1\) до \(k\) гарантируется, что во входных данных есть как минимум один кубик этого цвета.

Выходные данные

Если решения нет, выведите одно целое число \(-1\).

В противном случае, первая строка вывода должна содержать одно целое число \(p\) (\(0 \le p \le 4 \cdot 10^5\)) — количество дополнительных кубиков, которые вы добавите.

Следующие \(p\) строк должны содержать четыре целых числа \(x\), \(y\), \(z\) и \(c\) (\(1 \le x, y, z \le 10^6\), \(1 \le c \le k\)) — указывая, что вы добавляете кубик цвета \(c\) в позицию \((x, y, z)\).

Ни у каких двух кубиков в выводе не должны быть одинаковые координаты, и ни один кубик в выводе не должен иметь одинаковые координаты с любым кубиком во входных данных.

Если есть несколько решений, выведите любое.

Примечание

Изображение в условии соответствует первому примеру, с \(\text{красным} = 1\), \(\text{синим} = 2\), \(\text{зеленым} = 3\).

A. Обмен картами

жадные алгоритмы игры Конструктив *800

У вас есть \(n\) карт, на каждой карте написано число, а также фиксированное целое число \(k\). Вы можете выполнять следующую операцию любое количество раз:

  • Выберите любые \(k\) карт, на которых написано одно и то же число.
  • Обменяйте эти карты на \(k-1\) карт, каждая из которых может иметь любое число, которое вы выберете (включая число, написанное на меняемых вами картах).

Вот одна из возможных последовательностей операций для первого примера, в котором \(k=3\):

Какое минимальное количество карт у вас может остаться в конце этого процесса?

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество тестов. Затем следует описание тестов.

Первая строка каждого теста содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 100\), \(2 \le k \le 100\)) — количество карт у вас и количество карт, которые вы обмениваете во время каждой операции, соответственно.

Следующая строка каждого теста содержит \(n\) целых чисел \(c_1, c_2, \ldots c_n\) (\(1 \le c_i \le 100\)) — числа, написанные на ваших картах.

Выходные данные

Для каждого теста выведите одно целое число — минимальное количество карт, которые у вас могут остаться после любого количества операций.

Примечание

Первый пример соответствует изображению выше. Последовательность операций, отображенная там, является оптимальной, поэтому ответ равен \(2\).

Во втором примере операции выполнить нельзя, поэтому ответ равен \(1\).

В четвертом примере вы можете многократно выбирать \(4\) карты с номером \(1\) и заменять их на \(3\) карты с номером \(1\), пока не останется \(3\) карты.

B. Покраска прямоугольника

Конструктив реализация *1100

Дана таблица \(n \times m\) из белых и черных клеток. За одну операцию можно выбрать две клетки одного цвета и покрасить в этот цвет все клетки в подпрямоугольнике между ними.

Формально, если выбрать позиции \((x_1, y_1)\) и \((x_2, y_2)\), которые в данный момент имеют цвет \(c\), установите цвет всех \((x, y)\), где \(\min(x_1, x_2) \le x \le \max(x_1, x_2)\) и \(\min(y_1, y_2) \le y \le \max(y_1, y_2)\) в \(c\).

На этой диаграмме показана последовательность двух возможных операций в таблице:

Возможно ли, чтобы все клетки в таблице были одного цвета после выполнения любого количества операций (возможно, нуля)?

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество тестов. Далее следует описание самих тестов.

Первая строка каждого теста содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 500\)) — количество строк и столбцов в таблице, соответственно.

Каждая из следующих \(n\) строк содержит \(m\) символов 'W' и 'B' — начальные цвета клеток таблицы.

Гарантируется, что сумма \(n\cdot m\) по всем тестам не превышает \(3\cdot 10^5\).

Выходные данные

Для каждого теста выведите «YES», если возможно сделать все клетки в таблице одного цвета, и «NO» в противном случае.

Вы можете выводить ответ в любом регистре (верхний или нижний). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом примере невозможно изменить цвет любой клетки с помощью операции, поэтому мы выводим NO.

Во втором примере это случай, изображенный выше. Как показано на этой диаграмме, возможно, что все клетки будут белыми после двух операций, поэтому мы выводим YES.

В третьем и четвертом примерах все клетки уже имеют одинаковый цвет, поэтому мы выводим YES.

В пятом примере мы можем сделать все за две операции. Сначала выберем позиции \((2, 1)\) и \((1, 4)\) и покрасим все клетки с \(1 \le x \le 2\) и \(1 \le y \le 4\) в белый цвет. Затем выберем позиции \((2, 1)\) и \((3, 4)\) и покрасим все клетки с \(2 \le x \le 3\) и \(1 \le y \le 4\) в белый цвет. После этих двух операций все клетки будут белыми.

C. Восстановление по остаткам

Конструктив теория чисел *1000

Вам дан массив \(x_2,x_3,\dots,x_n\). Ваша задача — найти любой массив \(a_1,\dots,a_n\), для которого:

  • \(1\le a_i\le 10^9\) для всех \(1\le i\le n\).
  • \(x_i=a_i \bmod a_{i-1}\) для всех \(2\le i\le n\).

Здесь \(c\bmod d\) обозначает остаток от целочисленного деления числа \(c\) на число \(d\). Например \(5 \bmod 2 = 1\), \(72 \bmod 3 = 0\), \(143 \bmod 14 = 3\).

Обратите внимание, что если существует несколько массивов \(a\), удовлетворяющих условию, вы можете найти любой.

Входные данные

Первая строка содержит одно целое число \(t\) \((1\le t\le 10^4)\) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) \((2\le n\le 500)\) — количество элементов в \(a\).

Вторая строка каждого набора содержит \(n-1\) целых чисел \(x_2,\dots,x_n\) \((1\le x_i\le 500)\) — элементы \(x\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите любой массив \(a_1,\dots,a_n\) (\(1 \le a_i \le 10^9\)), удовлетворяющий условию.

Примечание

В первом наборе входных данных \(a=[3,5,4,9]\) удовлетворяет условиям, потому что:

  • \(a_2\bmod a_1=5\bmod 3=2=x_2\);
  • \(a_3\bmod a_2=4\bmod 5=4=x_3\);
  • \(a_4\bmod a_3=9\bmod 4=1=x_4\);

E. Расположение ячеек

Конструктив *1600

Дано целое число \(n\). Вы выбираете \(n\) ячеек \((x_1,y_1), (x_2,y_2),\dots,(x_n,y_n)\) в сетке \(n\times n\), где \(1\le x_i\le n\) и \(1\le y_i\le n\).

Пусть \(\mathcal{H}\) — множество различных манхеттенских расстояний между любой парой ячеек. Ваша задача — максимизировать размер \(\mathcal{H}\). Примеры множеств и их построение приведены в пояснении.

Если существует более одного решения, вы можете вывести любое из них.

Манхеттенское расстояние между ячейками \((x_1,y_1)\) и \((x_2,y_2)\) равно \(|x_1-x_2|+|y_1-y_2|\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\le t\le 50\)) — количество наборов входных данных.

Каждая из следующих \(t\) строк содержит одно целое число \(n\) (\(2\le n\le 10^3\)).

Выходные данные

Для каждого набора входных данных выведите \(n\) точек, которые максимизируют размер \(\mathcal{H}\). Выводить пустую строку в конце ответа для каждого набора входных данных не обязательно.

Примечание

В первом примере \(n=2\). Одно из возможных расположений:

Расположение с ячейками в \((1,1)\) и \((1,2)\).
В этом случае \(\mathcal{H}=\{|1-1|+|1-1|,|1-1|+|2-2|,|1-1|+|1-2|\}=\{0,0,1\}=\{0,1\}\). Таким образом, размер \(\mathcal{H}\) равен \(2\). Можно показать, что это наибольший возможный ответ.

Во втором примере \(n=3\). Оптимальное расположение:

Расположение с ячейками в \((2,1)\), \((2,3)\) и \((3,1)\).

\(\mathcal{H}\)=\(\{|2-2|+|1-1|,|2-2|+|3-3|,|3-3|+|1-1|,|2-2|+|1-3|,|2-3|+|1-1|,|2-3|+|3-1|\}\)=\(\{0,0,0,2,1,3\}\)=\(\{0,1,2,3\}\).

Для \(n=4\) возможное расположение:

Для \(n=5\) возможное расположение:

Для \(n=6\) возможное расположение:

A. Два друга

Конструктив математика реализация *800

Монокарп хочет устроить вечеринку. У него есть \(n\) друзей, и он хочет, чтобы на его вечеринке было как минимум \(2\) из них.

Лучший друг \(i\)-го друга — это \(p_i\). Все \(p_i\) различны, и для каждого \(i \in [1, n]\), \(p_i \ne i\).

Монокарп может отправлять приглашения друзьям. \(i\)-й друг придет на вечеринку, если приглашение получат и друг \(i\), и друг \(p_i\) (обратите внимание, что друг \(p_i\) не обязан прийти на вечеринку). Каждое приглашение отправляется ровно одному другу.

Например, если \(p = [3, 1, 2, 5, 4]\), и Монокарп отправляет приглашения друзьям \([1, 2, 4, 5]\), то на вечеринку придут друзья \([2, 4, 5]\). Друг \(1\) не придет, так как его лучший друг не получил приглашение; друг \(3\) не придет, так как он не получил приглашение.

Вычислите минимальное количество приглашений, которые Монокарп должен отправить, чтобы как минимум \(2\) друга пришли на вечеринку.

Входные данные

В первой строке записано одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк:

  • в первой строке записано одно целое число \(n\) (\(2 \le n \le 50\)) — количество друзей;
  • во второй строке записаны \(n\) целых чисел \(p_1, p_2, \dots, p_n\) (\(1 \le p_i \le n\); \(p_i \ne i\); все \(p_i\) различны).
Выходные данные

Выведите одно целое число — минимальное количество приглашений, которые Монокарп должен отправить.

Примечание

В первом наборе входных данных Монокарп может отправить приглашения друзьям \(4\) и \(5\). Оба придут на вечеринку, так как они лучшие друзья друг друга, и у каждого из них есть приглашение.

Во втором наборе Монокарп может отправить приглашения друзьям \(1, 2\) и \(3\), например. Тогда придут друзья \(1\) и \(2\): у друга \(1\) и его лучшего друга \(2\) есть приглашения, у друга \(2\) и его лучшего друга \(3\) есть приглашения. Друг \(3\) не придет, так как его лучший друг \(4\) не имеет приглашения. Невозможно отправить приглашения меньше чем \(3\) друзьям таким образом, чтобы пришло хотя бы \(2\).

В третьем наборе Монокарп может отправить приглашения обоим друзьям \(1\) и \(2\), и оба придут.

B. Сдвиги и сортировка

жадные алгоритмы Конструктив *1000

Давайте определим циклический сдвиг некоторой строки \(s\) как преобразование из \(s_1 s_2 \dots s_{n-1} s_{n}\) в \(s_{n} s_1 s_2 \dots s_{n-1}\). Другими словами, вы берете один последний символ \(s_n\) и помещаете его перед первым символом, сдвигая все остальные символы вправо.

Вам задана бинарная строка \(s\) (строка, состоящая только из символов 0 и/или 1).

За одну операцию вы можете выбрать любую подстроку \(s_l s_{l+1} \dots s_r\) (\(1 \le l < r \le |s|\)) и выполнить ее циклический сдвиг. Стоимость такой операции равна \(r - l + 1\) (или же длине выбранной подстроки).

Вы можете выполнять данную операцию любое количество раз. Какова минимальная суммарная стоимость, чтобы отсортировать строку \(s\) в порядке неубывания?

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

В первой и единственной строке каждого набора задана бинарная строка \(s\) (\(2 \le |s| \le 2 \cdot 10^5\); \(s_i \in\) {0, 1}) — строка, которую нужно отсортировать.

Дополнительное ограничение на входные данные: сумма длин строк по всем наборам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальную суммарную стоимость, чтобы сделать строку отсортированной, используя вышеуказанную операцию произвольное количество раз.

Примечание

В первом наборе входных данных вы можете выбрать всю строку и выполнить циклический сдвиг: 10 \(\rightarrow\) 01. Длина подстроки равна \(2\), поэтому стоимость составляет \(2\).

Во втором наборе строка уже отсортирована, поэтому вам не нужно выполнять никаких операций.

В третьем наборе одной из оптимальных стратегий является следующая:

  1. выбрать подстроку \([1, 3]\): 11000 \(\rightarrow\) 01100;
  2. выбрать подстроку \([2, 4]\): 01100 \(\rightarrow\) 00110;
  3. выбрать подстроку \([3, 5]\): 00110 \(\rightarrow\) 00011.
Общая стоимость равна \(3 + 3 + 3 = 9\).

A. Игра с тарелками

игры Конструктив математика *1600

Имеются прямоугольный стол длиной a и шириной b и бесконечное число тарелок радиуса r. Два игрока играют в следующую игру: они по очереди ставят тарелки на стол так, чтобы тарелки не накладывались друг на друга (однако они могут касаться), и чтобы любая точка любой тарелки находилась в пределах стола. В процессе игры уже поставленные тарелки нельзя двигать. Проигрывает тот, кто не может сделать очередной ход. Определите, какой из игроков (тот, который ходит первым или тот, который ходит вторым) победит, если оба будут играть оптимально.

Входные данные

В единственной строке находятся три целых числа a, b, r (1 ≤ a, b, r ≤ 100), записанные через пробел, — размеры стола и радиус тарелок соответственно.

Выходные данные

Если победит игрок, который ходит первым, выведите «First» (без кавычек). Иначе выведите «Second» (без кавычек).

Примечание

В первом примере на столе есть место только для одной тарелки. Первый игрок поставит тарелку на стол, а второй этого сделать не сможет и проиграет.

Во втором примере стол настолько маленький, что туда не помещается даже одна тарелка. Поэтому первый игрок проигрывает, не сделав ни одного хода.

A2. Balanced Unshuffle (Medium)

Деревья Конструктив Перебор *2400

The differences with the easy version of this problem are highlighted in bold.

A parentheses sequence is a string consisting of characters "(" and ")", for example "(()((".

A balanced parentheses sequence is a parentheses sequence which can become a valid mathematical expression after inserting numbers and operations into it, for example "(()(()))".

The balance of a parentheses sequence is defined as the number of opening parentheses "(" minus the number of closing parentheses ")". For example, the balance of the sequence "(()((" is 3.

A balanced parentheses sequence can also be defined as a parentheses sequence with balance 0 such that each of its prefixes has a non-negative balance.

We define the balanced shuffle operation that takes a parentheses sequence and returns a parentheses sequence as follows: first, for every character of the input sequence, we compute the balance of the prefix of the sequence before that character and write those down in a table together with the positions of the characters in the input sequence, for example:

Prefix balance01212321
Position12345678
Character(()(()))

Then, we sort the columns of this table in increasing order of prefix balance, breaking ties in decreasing order of position. In the above example, we get:

Prefix balance01112223
Position18427536
Character()(()())

The last row of this table forms another parentheses sequence, in this case "()(()())". This sequence is called the result of applying the balanced shuffle operation to the input sequence, or in short just the balanced shuffle of the input sequence.

Surprisingly, it turns out that the balanced shuffle of any balanced parentheses sequence is always another balanced parentheses sequence (we will omit the proof for brevity). Even more surprisingly, the balanced shuffles of two different balanced parentheses sequences are always different, therefore the balanced shuffle operation is a bijection on the set of balanced parentheses sequences of any given length (we will omit this proof, too).

You are given a balanced parentheses sequence. Find its preimage: the balanced parentheses sequence the balanced shuffle of which is equal to the given sequence.

Input

The only line of input contains a string \(s\) consisting only of characters "(" and ")". This string is guaranteed to be a non-empty balanced parentheses sequence with its length not exceeding \(1\,000\).

Output

Print the balanced parentheses sequence \(t\) such that the balanced shuffle of \(t\) is equal to \(s\). It is guaranteed that the answer always exists and is unique.

A3. Balanced Unshuffle (Hard)

Деревья Конструктив *2400

The only difference with the medium version is the maximum length of the input.

A parentheses sequence is a string consisting of characters "(" and ")", for example "(()((".

A balanced parentheses sequence is a parentheses sequence which can become a valid mathematical expression after inserting numbers and operations into it, for example "(()(()))".

The balance of a parentheses sequence is defined as the number of opening parentheses "(" minus the number of closing parentheses ")". For example, the balance of the sequence "(()((" is 3.

A balanced parentheses sequence can also be defined as a parentheses sequence with balance 0 such that each of its prefixes has a non-negative balance.

We define the balanced shuffle operation that takes a parentheses sequence and returns a parentheses sequence as follows: first, for every character of the input sequence, we compute the balance of the prefix of the sequence before that character and write those down in a table together with the positions of the characters in the input sequence, for example:

Prefix balance01212321
Position12345678
Character(()(()))

Then, we sort the columns of this table in increasing order of prefix balance, breaking ties in decreasing order of position. In the above example, we get:

Prefix balance01112223
Position18427536
Character()(()())

The last row of this table forms another parentheses sequence, in this case "()(()())". This sequence is called the result of applying the balanced shuffle operation to the input sequence, or in short just the balanced shuffle of the input sequence.

Surprisingly, it turns out that the balanced shuffle of any balanced parentheses sequence is always another balanced parentheses sequence (we will omit the proof for brevity). Even more surprisingly, the balanced shuffles of two different balanced parentheses sequences are always different, therefore the balanced shuffle operation is a bijection on the set of balanced parentheses sequences of any given length (we will omit this proof, too).

You are given a balanced parentheses sequence. Find its preimage: the balanced parentheses sequence the balanced shuffle of which is equal to the given sequence.

Input

The only line of input contains a string \(s\) consisting only of characters "(" and ")". This string is guaranteed to be a non-empty balanced parentheses sequence with its length not exceeding \(500\,000\).

Output

Print the balanced parentheses sequence \(t\) such that the balanced shuffle of \(t\) is equal to \(s\). It is guaranteed that the answer always exists and is unique.

B1. Exact Neighbours (Easy)

Конструктив *1900

The only difference between this and the hard version is that all \(a_{i}\) are even.

After some recent attacks on Hogwarts Castle by the Death Eaters, the Order of the Phoenix has decided to station \(n\) members in Hogsmead Village. The houses will be situated on a picturesque \(n\times n\) square field. Each wizard will have their own house, and every house will belong to some wizard. Each house will take up the space of one square.

However, as you might know wizards are very superstitious. During the weekends, each wizard \(i\) will want to visit the house that is exactly \(a_{i}\) \((0 \leq a_{i} \leq n)\) away from their own house. The roads in the village are built horizontally and vertically, so the distance between points \((x_{i}, y_{i})\) and \((x_{j}, y_{j})\) on the \(n\times n\) field is \( |x_{i} - x_{j}| + |y_{i} - y_{j}|\). The wizards know and trust each other, so one wizard can visit another wizard's house when the second wizard is away. The houses to be built will be big enough for all \(n\) wizards to simultaneously visit any house.

Apart from that, each wizard is mandated to have a view of the Hogwarts Castle in the north and the Forbidden Forest in the south, so the house of no other wizard should block the view. In terms of the village, it means that in each column of the \(n\times n\) field, there can be at most one house, i.e. if the \(i\)-th house has coordinates \((x_{i}, y_{i})\), then \(x_{i} \neq x_{j}\) for all \(i \neq j\).

The Order of the Phoenix doesn't yet know if it is possible to place \(n\) houses in such a way that will satisfy the visit and view requirements of all \(n\) wizards, so they are asking for your help in designing such a plan.

If it is possible to have a correct placement, where for the \(i\)-th wizard there is a house that is \(a_{i}\) away from it and the house of the \(i\)-th wizard is the only house in their column, output YES, the position of houses for each wizard, and to the house of which wizard should each wizard go during the weekends.

If it is impossible to have a correct placement, output NO.

Input

The first line contains \(n\) (\(2 \leq n \leq 2\cdot 10^{5}\)), the number of houses to be built.

The second line contains \(n\) integers \(a_{1}, \ldots, a_{n}\) \((0 \leq a_{i} \leq n)\). All \(a_{i}\) are even.

Output

If there exists such a placement, output YES on the first line; otherwise, output NO.

If the answer is YES, output \(n + 1\) more lines describing the placement.

The next \(n\) lines should contain the positions of the houses \(1 \leq x_{i}, y_{i} \leq n\) for each wizard.

The \(i\)-th element of the last line should contain the index of the wizard, the house of which is exactly \(a_{i}\) away from the house of the \(i\)-th wizard. If there are multiple such wizards, you can output any.

If there are multiple house placement configurations, you can output any.

Note

For the sample, the house of the 1st wizard is located at \((4, 4)\), of the 2nd at \((1, 3)\), of the 3rd at \((2, 4)\), of the 4th at \((3, 1)\).

The distance from the house of the 1st wizard to the house of the 1st wizard is \(|4 - 4| + |4 - 4| = 0\).

The distance from the house of the 2nd wizard to the house of the 1st wizard is \(|1 - 4| + |3 - 4| = 4\).

The distance from the house of the 3rd wizard to the house of the 1st wizard is \(|2 - 4| + |4 - 4| = 2\).

The distance from the house of the 4th wizard to the house of the 3rd wizard is \(|3 - 2| + |1 - 4| = 4\).

The view and the distance conditions are satisfied for all houses, so the placement is correct.

B2. Exact Neighbours (Medium)

Конструктив *2100

The only difference between this and the hard version is that \(a_{1} = 0\).

After some recent attacks on Hogwarts Castle by the Death Eaters, the Order of the Phoenix has decided to station \(n\) members in Hogsmead Village. The houses will be situated on a picturesque \(n\times n\) square field. Each wizard will have their own house, and every house will belong to some wizard. Each house will take up the space of one square.

However, as you might know wizards are very superstitious. During the weekends, each wizard \(i\) will want to visit the house that is exactly \(a_{i}\) \((0 \leq a_{i} \leq n)\) away from their own house. The roads in the village are built horizontally and vertically, so the distance between points \((x_{i}, y_{i})\) and \((x_{j}, y_{j})\) on the \(n\times n\) field is \( |x_{i} - x_{j}| + |y_{i} - y_{j}|\). The wizards know and trust each other, so one wizard can visit another wizard's house when the second wizard is away. The houses to be built will be big enough for all \(n\) wizards to simultaneously visit any house.

Apart from that, each wizard is mandated to have a view of the Hogwarts Castle in the north and the Forbidden Forest in the south, so the house of no other wizard should block the view. In terms of the village, it means that in each column of the \(n\times n\) field, there can be at most one house, i.e. if the \(i\)-th house has coordinates \((x_{i}, y_{i})\), then \(x_{i} \neq x_{j}\) for all \(i \neq j\).

The Order of the Phoenix doesn't yet know if it is possible to place \(n\) houses in such a way that will satisfy the visit and view requirements of all \(n\) wizards, so they are asking for your help in designing such a plan.

If it is possible to have a correct placement, where for the \(i\)-th wizard there is a house that is \(a_{i}\) away from it and the house of the \(i\)-th wizard is the only house in their column, output YES, the position of houses for each wizard, and to the house of which wizard should each wizard go during the weekends.

If it is impossible to have a correct placement, output NO.

Input

The first line contains \(n\) (\(2 \leq n \leq 2\cdot 10^{5}\)), the number of houses to be built.

The second line contains \(n\) integers \(a_{1}, \ldots, a_{n}\) \((0 \leq a_{i} \leq n)\), \(a_{1} = 0\).

Output

If there exists such a placement, output YES on the first line; otherwise, output NO.

If the answer is YES, output \(n + 1\) more lines describing the placement.

The next \(n\) lines should contain the positions of the houses \(1 \leq x_{i}, y_{i} \leq n\) for each wizard.

The \(i\)-th element of the last line should contain the index of the wizard, the house of which is exactly \(a_{i}\) away from the house of the \(i\)-th wizard. If there are multiple such wizards, you can output any.

If there are multiple house placement configurations, you can output any.

Note

For the sample, the house of the 1st wizard is located at \((4, 4)\), of the 2nd at \((1, 3)\), of the 3rd at \((2, 4)\), of the 4th at \((3, 1)\).

The distance from the house of the 1st wizard to the house of the 1st wizard is \(|4 - 4| + |4 - 4| = 0\).

The distance from the house of the 2nd wizard to the house of the 1st wizard is \(|1 - 4| + |3 - 4| = 4\).

The distance from the house of the 3rd wizard to the house of the 1st wizard is \(|2 - 4| + |4 - 4| = 2\).

The distance from the house of the 4th wizard to the house of the 3rd wizard is \(|3 - 2| + |1 - 4| = 4\).

The view and the distance conditions are satisfied for all houses, so the placement is correct.

B3. Exact Neighbours (Hard)

Конструктив *2300

After some recent attacks on Hogwarts Castle by the Death Eaters, the Order of the Phoenix has decided to station \(n\) members in Hogsmead Village. The houses will be situated on a picturesque \(n\times n\) square field. Each wizard will have their own house, and every house will belong to some wizard. Each house will take up the space of one square.

However, as you might know wizards are very superstitious. During the weekends, each wizard \(i\) will want to visit the house that is exactly \(a_{i}\) \((0 \leq a_{i} \leq n)\) away from their own house. The roads in the village are built horizontally and vertically, so the distance between points \((x_{i}, y_{i})\) and \((x_{j}, y_{j})\) on the \(n\times n\) field is \( |x_{i} - x_{j}| + |y_{i} - y_{j}|\). The wizards know and trust each other, so one wizard can visit another wizard's house when the second wizard is away. The houses to be built will be big enough for all \(n\) wizards to simultaneously visit any house.

Apart from that, each wizard is mandated to have a view of the Hogwarts Castle in the north and the Forbidden Forest in the south, so the house of no other wizard should block the view. In terms of the village, it means that in each column of the \(n\times n\) field, there can be at most one house, i.e. if the \(i\)-th house has coordinates \((x_{i}, y_{i})\), then \(x_{i} \neq x_{j}\) for all \(i \neq j\).

The Order of the Phoenix doesn't yet know if it is possible to place \(n\) houses in such a way that will satisfy the visit and view requirements of all \(n\) wizards, so they are asking for your help in designing such a plan.

If it is possible to have a correct placement, where for the \(i\)-th wizard there is a house that is \(a_{i}\) away from it and the house of the \(i\)-th wizard is the only house in their column, output YES, the position of houses for each wizard, and to the house of which wizard should each wizard go during the weekends.

If it is impossible to have a correct placement, output NO.

Input

The first line contains \(n\) (\(2 \leq n \leq 2\cdot 10^{5}\)), the number of houses to be built.

The second line contains \(n\) integers \(a_{1}, \ldots, a_{n}\) \((0 \leq a_{i} \leq n)\)

Output

If there exists such a placement, output YES on the first line; otherwise, output NO.

If the answer is YES, output \(n + 1\) more lines describing the placement.

The next \(n\) lines should contain the positions of the houses \(1 \leq x_{i}, y_{i} \leq n\) for each wizard.

The \(i\)-th element of the last line should contain the index of the wizard, the house of which is exactly \(a_{i}\) away from the house of the \(i\)-th wizard. If there are multiple such wizards, you can output any.

If there are multiple house placement configurations, you can output any.

Note

For the sample, the house of the 1st wizard is located at \((4, 4)\), of the 2nd at \((1, 3)\), of the 3rd at \((2, 4)\), of the 4th at \((3, 1)\).

The distance from the house of the 1st wizard to the house of the 1st wizard is \(|4 - 4| + |4 - 4| = 0\).

The distance from the house of the 2nd wizard to the house of the 1st wizard is \(|1 - 4| + |3 - 4| = 4\).

The distance from the house of the 3rd wizard to the house of the 1st wizard is \(|2 - 4| + |4 - 4| = 2\).

The distance from the house of the 4th wizard to the house of the 3rd wizard is \(|3 - 2| + |1 - 4| = 4\).

The view and the distance conditions are satisfied for all houses, so the placement is correct.

D1. Arithmancy (Easy)

интерактив Конструктив Перебор Строки *2100

Professor Vector is preparing to teach her Arithmancy class. She needs to prepare \(n\) distinct magic words for the class. Each magic word is a string consisting of characters X and O. A spell is a string created by concatenating two magic words together. The power of a spell is equal to the number of its different non-empty substrings. For example, the power of the spell XOXO is equal to 7, because it has 7 different substrings: X, O, XO, OX, XOX, OXO and XOXO.

Each student will create their own spell by concatenating two magic words. Since the students are not very good at magic yet, they will choose each of the two words independently and uniformly at random from the \(n\) words provided by Professor Vector. It is therefore also possible that the two words a student chooses are the same. Each student will then compute the power of their spell, and tell it to Professor Vector. In order to check their work, and of course to impress the students, Professor Vector needs to find out which two magic words and in which order were concatenated by each student.

Your program needs to perform the role of Professor Vector: first, create \(n\) distinct magic words, and then handle multiple requests where it is given the spell power and needs to determine the indices of the two magic words, in the correct order, that were used to create the corresponding spell.

Interaction

This is an interactive problem.

First, your program should read a single integer \(n\) (\(1 \le n \le 3\)), the number of magic words to prepare. Then, it should print \(n\) magic words it has created, one per line. The magic words must be distinct, each magic word must have at least 1 and at most \(30\cdot n\) characters, and each character must be either X or O. We will denote the \(i\)-th magic word you printed as \(w_i\) (\(1 \le i \le n\)).

Then, your program should read a single integer \(q\) (\(1 \le q \le 1000\)), the number of students in the class. Then, it should repeat the following process \(q\) times, one per student.

For the \(j\)-th student, it should first read a single integer \(p_j\), the power of their spell. It is guaranteed that this number is computed by choosing two indices \(u_j\) and \(v_j\) independently and uniformly at random between 1 and \(n\) inclusive, concatenating \(w_{u_j}\) and \(w_{v_j}\), and finding the number of different non-empty substrings of the resulting string. Then, your program must print the numbers \(u_j\) and \(v_j\), in this order (\(1 \le u_j, v_j \le n\)).

Note that it is not enough to find any two magic words that concatenate into a spell with the given power. You must find the exact words used by the student in the exact order.

Remember to flush the output stream after printing all magic words and after printing \(u_j\) and \(v_j\) for each student.

D2. Arithmancy (Medium)

интерактив Конструктив Строки Теория вероятностей *2600

The only difference between the versions of this problem is the maximum value of \(n\).

Professor Vector is preparing to teach her Arithmancy class. She needs to prepare \(n\) distinct magic words for the class. Each magic word is a string consisting of characters X and O. A spell is a string created by concatenating two magic words together. The power of a spell is equal to the number of its different non-empty substrings. For example, the power of the spell XOXO is equal to 7, because it has 7 different substrings: X, O, XO, OX, XOX, OXO and XOXO.

Each student will create their own spell by concatenating two magic words. Since the students are not very good at magic yet, they will choose each of the two words independently and uniformly at random from the \(n\) words provided by Professor Vector. It is therefore also possible that the two words a student chooses are the same. Each student will then compute the power of their spell, and tell it to Professor Vector. In order to check their work, and of course to impress the students, Professor Vector needs to find out which two magic words and in which order were concatenated by each student.

Your program needs to perform the role of Professor Vector: first, create \(n\) distinct magic words, and then handle multiple requests where it is given the spell power and needs to determine the indices of the two magic words, in the correct order, that were used to create the corresponding spell.

Interaction

This is an interactive problem.

First, your program should read a single integer \(n\) (\(1 \le n \le 30\)), the number of magic words to prepare. Then, it should print \(n\) magic words it has created, one per line. The magic words must be distinct, each magic word must have at least 1 and at most \(30\cdot n\) characters, and each character must be either X or O. We will denote the \(i\)-th magic word you printed as \(w_i\) (\(1 \le i \le n\)).

Then, your program should read a single integer \(q\) (\(1 \le q \le 1000\)), the number of students in the class. Then, it should repeat the following process \(q\) times, one per student.

For the \(j\)-th student, it should first read a single integer \(p_j\), the power of their spell. It is guaranteed that this number is computed by choosing two indices \(u_j\) and \(v_j\) independently and uniformly at random between 1 and \(n\) inclusive, concatenating \(w_{u_j}\) and \(w_{v_j}\), and finding the number of different non-empty substrings of the resulting string. Then, your program must print the numbers \(u_j\) and \(v_j\), in this order (\(1 \le u_j, v_j \le n\)).

Note that it is not enough to find any two magic words that concatenate into a spell with the given power. You must find the exact words used by the student in the exact order.

Remember to flush the output stream after printing all magic words and after printing \(u_j\) and \(v_j\) for each student.

C. Кот, Лиса и Двойной максимум

жадные алгоритмы Конструктив математика реализация сортировки *1700

Лиса любит перестановки! Она придумала следующую задачу, и предложила Коту её решить:

Вам дано четное целое положительное число \(n\) и перестановка\(^\dagger\) \(p\) длины \(n\).

Счет другой перестановки \(q\) длины \(n\) определим как количество локальных максимумов в массиве \(a\) длины \(n\), где \(a_i = p_i + q_i\) для всех индексов \(i\) (\(1 \le i \le n\)). Другими словами, счет \(q\) — это количество \(i\) таких, что \(1 < i < n\) (обратите внимание на строгие неравенства), \(a_{i-1} < a_i\) и \(a_i > a_{i+1}\) (еще раз обратите внимание на строгие неравенства).

Найдите перестановку \(q\), которая достигает максимального счета при заданных \(n\) и \(p\). Если таких перестановок несколько, вы можете вывести любую из них.

\(^\dagger\) Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) — не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно четное целое число \(n\) (\(4 \leq n \leq 10^5\), \(n\) — четное) — длину перестановки \(p\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \leq p_i \leq n\)). Гарантируется, что \(p\) действительно является перестановкой длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую любую перестановку чисел длины \(n\) (массив \(q\)) такую, что счёт \(q\) максимален при заданных ограничениях.

Примечание

В первом примере \(a = [3, 6, 4, 7]\). Массив имеет только один локальный максимум (на второй позиции), поэтому счет выбранной перестановки \(q\) равен \(1\). Можно доказать, что этот счет оптимален при заданных ограничениях.

В последнем примере полученный массив \(a = [6, 6, 12, 7, 14, 7, 14, 6]\) имеет \(3\) максимума — на третьей, пятой и седьмой позициях.

D. Ingenuity-2

жадные алгоритмы Конструктив реализация *1400

Представим поверхность Марса как бесконечную координатную плоскость. Изначально в точке с координатой \((0, 0)\) находятся ровер Perseverance-2 и вертолёт Ingenuity-2. Специально для них был разработан набор инструкций \(s\) из \(n\) инструкций следующего вида:

  • N: переместиться на один метр на север (из точки \((x, y)\) в \((x, y + 1)\));
  • S: переместиться на один метр на юг (из точки \((x, y)\) в \((x, y - 1)\));
  • E: переместиться на один метр на восток (из точки \((x, y)\) в \((x + 1, y)\));
  • W: переместиться на один метр на запад (из точки \((x, y)\) в \((x - 1, y)\)).

Каждая инструкция должна быть исполнена либо ровером, либо вертолётом. Причём каждый аппарат должен выполнить хотя бы одну инструкцию. Ваша задача распределить инструкции так, чтобы после исполнения всех \(n\) инструкций вертолёт и ровер оказались в одной точке или определить что это невозможно.

Входные данные

Первая строка ввода содержит \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество инструкций.

Вторая строка каждого набора содержит строку \(s\) длины \(n\) из символов 'N', 'S', 'E', 'W' — последовательность инструкций.

Гарантируется, что сумма \(n\) по всем наборам входных данных теста не превосходит \(2 \cdot 10 ^ 5\).

Выходные данные

Для каждого набора входных данных, если существует требуемое распределение инструкций, выведите строку \(p\) длины \(n\) из символов 'R', 'H'. Если \(i\)-я операция должна быть исполнена ровером, то \(p_i=\text{R}\), если \(i\)-я операция должна быть исполнена вертолётом, то \(p_i=\text{H}\). Если существует несколько решений, выведите любое из них.

В противном случае выведите NO.

Примечание

Рассмотрим первый пример: строка \(S = \texttt{NENSNE}\). Одно из возможных решений, показанное на рисунке ниже \(p = \texttt{RRHRRH}\), с использованием которого и ровер, и вертолет окажутся на один метр на север и на один метр на восток.

Для WWW решение невозможно.

B. Бинарная покраска

битмаски жадные алгоритмы Конструктив математика *1100

Дано натуральное число \(x\). Найдите любую последовательность чисел \(a_0, a_1, \ldots, a_{n-1}\) такую, что:

  • \(1 \le n \le 32\),
  • \(a_i\) равно \(1\), \(0\) или \(-1\) для всех \(0 \le i \le n - 1\),
  • \(x = \displaystyle{\sum_{i=0}^{n - 1}{a_i \cdot 2^i}}\),
  • Не существует \(0 \le i \le n - 2\) такого, что \(a_{i} \neq 0\) и \(a_{i + 1} \neq 0\).

Можно доказать, что под ограничениями задачи всегда существует как минимум одна подходящая последовательность.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(x\) (\(1 \le x < 2^{30}\)).

Выходные данные

Для каждого набора входных данных на первой строке выведите число \(n\) (\(1 \le n \le 32\)) — длину последовательности \(a_0, a_1, \ldots, a_{n-1}\).

На следующей строке выведите саму последовательность \(a_0, a_1, \ldots, a_{n-1}\).

Если подходящих последовательностей несколько, вы можете вывести любую из них.

Примечание

В первом наборе входных данных, одной из подходящих последовательностей является \([1]\), так как \((1) \cdot 2^0 = 1\).

Во втором наборе входных данных, одной из подходящих последовательностей является \([0,-1,0,0,1]\), так как \((0) \cdot 2^0 + (-1) \cdot 2^1 + (0) \cdot 2^2 + (0) \cdot 2^3 + (1) \cdot 2^4 = -2 + 16 = 14\).

E. Тензор

графы интерактив Конструктив *2600

Это интерактивная задача.

Вам дано целое число \(n\).

Жюри загадало ориентированный граф с \(n\) вершинами (пронумерованными от \(1\) до \(n\)) и с некоторым количеством рёбер. Дополнительно известно, что:

  • Граф содержит рёбра только вида \(i \leftarrow j\), где \(1 \le i < j \le n\).
  • Для любых трёх вершин \(1 \le i < j < k \le n\) верно хотя бы одно из следующего\(^\dagger\):
    • Вершина \(i\) достижима из вершины \(j\), или
    • Вершина \(i\) достижима из вершины \(k\), или
    • Вершина \(j\) достижима из вершины \(k\).

Вы хотите покрасить каждую вершину графа либо в белый, либо в чёрный цвет так, чтобы для любых двух вершин \(i\) и \(j\) (\(1 \le i < j \le n\)) одного цвета вершина \(i\) была достижима из вершины \(j\).

Для этого вы можете делать запросы следующего вида:

  • ? i j — достижима ли вершина \(i\) из вершины \(j\) (\(1 \le i < j \le n\))?

Найдите любую подходящую раскраску вершин графа за не более чем \(2 \cdot n\) запросов. Можно доказать, что такая раскраска всегда существует.

Примечание: интерактор не является адаптивным, то есть граф фиксируется до выполнения каких-либо запросов.

\(^\dagger\) Вершина \(a\) достижима из вершины \(b\) если в графе существует путь из вершины \(b\) в вершину \(a\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит единственное целое число \(n\) (\(3 \le n \le 100\)) — количество вершин в графе.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(1000\).

Протокол взаимодействия

Взаимодействие для каждого набора входных данных начинается с чтения целого числа \(n\).

Для формирования запроса выведите «? i j» без кавычек (\(1 \le i < j \le n\)). Если вершина \(i\) достижима из вершины \(j\), вы получите в ответ YES. Иначе, вы получите в ответ NO.

Если вместо ответа или допустимого значения \(n\) вы получите целое число \(-1\), то это означает, что ваша программа сделала некорректный запрос, превысила лимит запросов или дала неверный ответ на предыдущем наборе входных данных. При получении вердикта «Неправильный ответ» ваша программа должна немедленно завершиться. В противном случае можно получить произвольный вердикт, поскольку решение будет продолжать считывать данные из закрытого потока.

Когда вы будете готовы дать окончательный ответ, выведите «! \(c_1 \ c_2 \ \ldots \ c_n\)» без кавычек — раскраска вершин графа, где \(c_i = 0\), если вершина чёрная, и \(c_i = 1\), если вершина белая. После решения одного набора входных данных программа должна сразу же переходить к следующему. После решения всех наборов входных данных программа должна быть немедленно завершена.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Для взлома используйте следующий формат:

Первая строка содержит целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(3 \le n \le 100\), \(0 \le m \le \frac{n\cdot(n - 1)}{2}\)) — количество вершин и рёбер в графе.

Следующие \(m\) строк должны содержать два числа \(a\) и \(b\) (\(1 \le b < a \le n\)), означающие, что в графе присутствует ребро \(a \rightarrow b\). Граф должен удовлетворять условиям выше.

Сумма \(n\) по всем наборам входных данных не должна превышать \(1000\).

Примечание

Граф в первом примере:

Граф во втором примере:

Взаимодействие происходит следующим образом:

РешениеЖюриОбъяснение
2Есть \(2\) набора входных данных.
4В первом наборе входных данных загадан граф с \(4\)-мя вершинами.
? 1 2 YESРешение спрашивает, достижима ли вершина \(1\) из вершины \(2\), жюри отвечает YES.
? 2 3 YESРешение спрашивает, достижима ли вершина \(2\) из вершины \(3\), жюри отвечает YES.
? 1 3 YESРешение спрашивает, достижима ли вершина \(1\) из вершины \(3\), жюри отвечает YES.
? 1 4 NOРешение спрашивает, достижима ли вершина \(1\) из вершины \(4\), жюри отвечает NO.
? 2 4 NOРешение спрашивает, достижима ли вершина \(2\) из вершины \(4\), жюри отвечает NO.
? 3 4 NOРешение спрашивает, достижима ли вершина \(3\) из вершины \(4\), жюри отвечает NO.
! 0 0 0 1Решение каким-то образом определило, что такая раскраска подходит, и выводит её. Поскольку ответ правильный, жюри переходит к следующему набору входных данных.
1Во втором наборе входных данных загадан граф с \(5\)-ю вершинами.
! 1 1 0 1 0Решение каким-то образом определило, что такая раскраска подходит, и выводит её. Поскольку ответ верен и наборов входных данных больше нет, жюри и решение завершаются.

Обратите внимание, что пустые строки во входных и выходных данных примера сделаны для наглядности и не встречаются в реальном взаимодействии.

A. Алиса и книги

жадные алгоритмы Конструктив сортировки *800

У Алисы есть \(n\) книг. \(1\)-я книга содержит \(a_1\) страниц, \(2\)-я книга содержит \(a_2\) страниц, \(\ldots\), \(n\)-я книга содержит \(a_n\) страниц. Алиса делает следующее:

  • Она разделяет все книги на две непустые стопки. Таким образом, каждая книга оказывается ровно в одной из двух стопок.
  • Алиса читает в каждой стопке одну книгу с наибольшим номером.

Алиса очень любит читать. Помогите ей найти, какое максимальное суммарное количество страниц она сможет прочитать, разделив книги на две стопки.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 100\)) — количество книг у Алисы.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — количество страниц в каждой книге.

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество страниц, которое сможет прочитать Алиса.

Примечание

В первом наборе входных данных Алиса может положить в первую стопку книгу с номером \(1\), а во вторую стопку книгу с номером \(2\). Тогда она прочитает \(a_1 + a_2 = 1 + 1 = 2\) страницы.

Во втором наборе входных данных Алиса может положить книги с номерами \(2\) и \(3\) в первую стопку, а книги с номерами \(1\) и \(4\) во вторую стопку. Тогда из первой стопки она прочитает книгу с наибольшим номером \(3\), а из второй стопки книгу с наибольшим номером \(4\). Тогда она прочитает \(a_3 + a_4 = 3 + 1 = 4\) страницы.

C. Манхэттенские перестановки

жадные алгоритмы Конструктив математика реализация Структуры данных *1300

Назовем манхэттенской величиной перестановки\(^{\dagger}\) \(p\) значение выражения \(|p_1 - 1| + |p_2 - 2| + \ldots + |p_n - n|\).

Например, для перестановки \([1, 2, 3]\) манхэттенская величина равна \(|1 - 1| + |2 - 2| + |3 - 3| = 0\), а для перестановки \([3, 1, 2]\) манхэттенская величина равна \(|3 - 1| + |1 - 2| + |2 - 3| = 2 + 1 + 1 = 4\).

Вам даны целые числа \(n\) и \(k\). Найдите такую перестановку \(p\) длины \(n\), что её манхэттенская величина равна \(k\) или определите, что такой перестановки не существует.

\(^{\dagger}\)Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно число \(t\) (\(1 \leq t \leq 10^{4}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^{5}, 0 \le k \le 10^{12}\)) — длина перестановки и необходимая манхэттенская величина.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^{5}\).

Выходные данные

Для каждого набора входных данных, если не существует подходящей перестановки, выведите «No». В противном случае в первой строке выведите «Yes», а во второй строке выведите \(n\) различных целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \le p_i \le n\)) — подходящую перестановку.

Если существует несколько решений, выведите любое из них.

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных подходит перестановка \([3, 1, 2]\), её манхэттенская величина равна \(|3 - 1| + |1 - 2| + |2 - 3| = 2 + 1 + 1 = 4\).

Во втором наборе входных данных можно доказать, что не существует перестановки длины \(4\) с манхэттенской величиной \(5\).

В третьем наборе входных данных подходит перестановка \([1,2,3,4,5,6,7]\), её манхэттенская величина равна \(|1-1|+|2-2|+|3-3|+|4-4|+|5-5|+|6-6|+|7-7|=0\).

C. Заработать на ставках

Бинарный поиск Комбинаторика Конструктив теория чисел *1200

Вам было предложено сыграть в игру. В данной игре возможно \(n\) исходов, на каждый из которых вы должны поставить некоторое целое количество монет. В случае, если \(i\)-й исход окажется выигрышным, вы получите обратно количество монет в размере вашей ставки на этот исход, умноженной на \(k_i\). Обратите внимание, что ровно один из \(n\) исходов окажется выигрышным.

Ваша задача — сказать, как распределить монеты так, чтобы при любом выигрышном исходе выйти в плюс. Более формально, суммарное количество монет, которое вы поставили на все исходы, должно быть строго меньше числа монет, полученных обратно при каждом возможном выигрышном исходе.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 50\)) — количество исходов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(k_1,k_2,\ldots,k_n\) (\(2 \le k_i \le 20\)) — во сколько раз умножается количество монет, если \(i\)-й исход оказывается выигрышным.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(-1\), если требуемого способа распределить монеты не существует. Иначе выведите \(n\) целых чисел \(x_1, x_2,\ldots, x_n\) (\(1 \le x_i \le 10^{9}\)) — ваши ставки на исходы.

Можно показать, что если какой-то ответ существует, то всегда существует ответ, удовлетворяющий данным ограничениям.

Если существует несколько подходящих решений, выведите любое из них.

Примечание

В первом наборе входных данных можно распределить монеты следующим образом: \(27\) монет на первый исход, \(41\) монета на второй исход, \(12\) монет на третий исход. Тогда суммарное количество монет, которое будет поставлено на все исходы, равно \(27 + 41 + 12 = 80\) монет. Если первый исход окажется выигрышным, то вы получите обратно \(3 \cdot 27 = 81\) монету, если второй исход окажется выигрышным, то вы получите обратно \(2 \cdot 41 = 82\) монеты, если третий исход окажется выигрышным, то вы получите обратно \(7 \cdot 12 = 84\) монеты. Все эти значения строго больше \(80\).

Во втором наборе входных данных одним из способов является поставить по одной монете на каждый из исходов.

D. Исправление бинарной строки

битмаски дп жадные алгоритмы Конструктив Перебор Строки хэши *1800

Вам дана бинарная строка \(s\) длины \(n\), состоящая из нулей и единиц. Вы можете сделать следующую операцию ровно один раз:

  1. Выбрать целое число \(p\) (\(1 \le p \le n\)).
  2. Перевернуть подстроку \(s_1 s_2 \ldots s_p\). После выполнения этого шага строка \(s_1 s_2 \ldots s_n\) превратится в строку \(s_p s_{p-1} \ldots s_1 s_{p+1} s_{p+2} \ldots s_n\).
  3. После этого сделать циклический сдвиг строки \(s\) влево \(p\) раз. После выполнения этого шага изначальная строка \(s_1s_2 \ldots s_n\) превратится в строку \(s_{p+1}s_{p+2} \ldots s_n s_p s_{p-1} \ldots s_1\).

Например, если применить операцию к строке 110001100110 при \(p=3\), то после второго шага получится строка 011001100110, а после третьего шага 001100110011.

Строка \(s\) называется \(k\)-правильной, если выполняются два условия:

  • \(s_1=s_2=\ldots=s_k\);
  • \(s_{i+k} \neq s_i\) для любого \(i\) (\(1 \le i \le n - k\)).

Например, при \(k=3\) строки 000, 111000111 и 111000 являются \(k\)-правильными, а строки 000000, 001100 и 1110000 нет.

Дано целое число \(k\), которое является делителем \(n\). Найдите целое число \(p\) (\(1 \le p \le n\)), после выполнения операции с которым строка \(s\) станет \(k\)-правильной или определите, что это невозможно. Обратите внимание, что если строка изначально является \(k\)-правильной, то к ней всё равно нужно применить ровно одну операцию.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n\), \(2 \le n \le 10^5\)) — длина строки \(s\) и значение \(k\). Гарантируется, что \(k\) является делителем \(n\).

Вторая строка каждого набора содержит бинарную строку \(s\) длины \(n\), состоящую из символов 0 и 1.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — значение \(p\), чтобы сделать строку \(k\)-правильной, или \(-1\), если это невозможно.

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных, если применить операцию при \(p=3\), то после второго шага операции строка станет равна 11100001, а после третьего 00001111. Эта строка является \(4\)-правильной.

Во втором наборе входных данных можно показать, что не существует операции, после которой строка становится \(2\)-правильной.

В третьем наборе входных данных, если применить операцию при \(p=7\), то после второго шага операции строка станет равна 100011100011, а после третьего 000111000111. Эта строка является \(3\)-правильной.

В четвертом наборе входных данных после операции c любым \(p\) строка является \(5\)-правильной.

E. Манхэттенский треугольник

Бинарный поиск геометрия Конструктив реализация Структуры данных *2400

Манхэттенским расстоянием между двумя точками \((x_1, y_1)\) и \((x_2, y_2)\) называется величина, равная: \(\)|x_1 - x_2| + |y_1 - y_2|.\(\)

Назовем манхэттенским треугольником три точки на плоскости, манхэттенские расстояния между каждой парой из которых равны.

Вам дан набор попарно различных точек и четное целое число \(d\). Ваша задача — найти любой манхэттенский треугольник, составленный из трёх различных точек данного набора, у которого манхэттенское расстояние между любой парой вершин равно \(d\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(d\) (\(3 \le n \le 2 \cdot 10^5\), \(2 \le d \le 4 \cdot 10^5\), \(d\) — чётное) — количество точек и требуемое манхэттенское расстояние между вершинами треугольника.

\((i + 1)\)-я строка каждого набора входных данных содержит два целых числа \(x_i\) и \(y_i\) (\(-10^5 \le x_i, y_i \le 10^5\)) — координаты \(i\)-й точки. Гарантируется, что все точки попарно различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, выведите три целых попарно различных целых числа \(i\), \(j\) и \(k\) (\(1 \le i,j,k \le n\)) — индексы точек, образующих манхэттенский треугольник. Если ответа не существует, выведите «\(0\ 0\ 0\)» (без кавычек).

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных:

Точки \(A\), \(B\) и \(F\) образуют манхэттенский треугольник, манхэттенское расстояние между каждой парой вершин равно \(4\). Точки \(D\), \(E\) и \(F\) также могут быть ответом.

В третьем наборе входных данных:

Точки \(A\), \(C\) и \(E\) образуют манхэттенский треугольник, манхэттенское расстояние между каждой парой вершин равно \(6\).

В четвертом наборе входных данных не существует двух точек, манхэттенское расстояние между которыми равно \(4\), а следовательно подходящего манхэттенского треугольника не существует.

F. Теорема Костяныча

графы интерактив Конструктив Перебор *2900

Это интерактивная задача.

Костяныч загадал полный неориентированный граф\(^{\dagger}\) на \(n\) вершинах, после чего удалил из него ровно \((n - 2)\) ребра. Вы можете делать запросы следующего вида:

  • «? \(d\)» — Костяныч сообщает вам номер вершины \(v\) со степенью хотя бы \(d\). Из всех возможных таких вершин он выбирает вершину с минимальной степенью, если таких несколько, то с минимальным номером. Также он сообщает вам номер другой вершины из графа, с которой \(v\) не соединена ребром (если такой не нашлось, то сообщается \(0\)). Из всех возможных таких вершин он выбирает вершину с минимальным номером. Затем он удаляет вершину \(v\) и все выходящие из неё рёбра. Если требуемой вершины \(v\) не нашлось, то сообщается «\(0\ 0\)».

Найдите в исходном графе гамильтонов путь\(^{\ddagger}\) за не более чем \(n\) запросов. Можно показать, что при данных ограничениях гамильтонов путь всегда существует.

\(^{\dagger}\)Полным неориентированным графом называется граф, в котором между любой парой различных вершин есть ровно одно неориентированное ребро. Таким образом, полный неориентированный граф на \(n\) вершинах содержит \(\frac{n(n-1)}{2}\) рёбер.

\(^{\ddagger}\)Гамильтоновым путём в графе называется путь, который проходит через каждую вершину ровно один раз.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит единственное целое число \(n\) (\(2 \le n \le 10^5\)) — количество вершин в графе.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Протокол взаимодействия

Взаимодействие для каждого набора входных данных начинается с чтения целого числа \(n\).

Затем вы можете сделать не более \(n\) запросов.

Чтобы сделать запрос, выведите строку в формате «? \(d\)» (без кавычек) (\(0 \le d \le n - 1\)). После каждого запроса считайте два целых числа — ответ на ваш запрос.

Когда вы будете готовы сообщить ответ, выведите строку в формате «! \(v_1\ v_2 \ldots v_n\)» (без кавычек) — вершины в порядке их следования в гамильтоновом пути. Вывод ответа не считается как один из \(n\) запросов. После решения одного набора входных данных программа должна сразу же переходить к следующему. После решения всех наборов входных данных программа должна быть немедленно завершена.

Если ваша программа сделает более \(n\) запросов для одного набора входных данных или сделает некорректный запрос, то ответом на запрос будет \(-1\), после получения такого ответа ваша программа должна немедленно завершится, чтобы получить вердикт Неправильный ответ. Иначе она может получить любой другой вердикт.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Интерактор неадаптивный. Граф не меняется в процессе взаимодействия.

Взломы

Для взлома используйте следующий формат:

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит единственное целое число \(n\) (\(2 \le n \le 10^5\)) — количество вершин в графе.

Каждая из следующих \((n - 2)\) строк должна содержать два целых числа \(u\) и \(v\) (\(1 \le u, v \le n\), \(u \ne v\)) — концы ребра, которое удалили из графа. Каждое ребро должно встречаться не более одного раза.

Сумма \(n\) по всем наборам входных данных не должна превышать \(10^5\).

Примечание

В первом наборе входных исходный граф выглядит следующим образом:

Рассмотрим запросы:

  • Вершины степени хотя бы \(3\) в графе нет, поэтому сообщается «\(0\ 0\)».
  • Есть четыре вершины степени хотя бы \(2\), и все они имеют степень ровно \(2\): \(1\), \(2\), \(3\), \(4\). Сообщается вершина \(1\), потому что она имеет минимальный номер, и вершина \(4\), потому что только она не соединена с вершиной \(1\). После этого вершина \(1\) удаляется из графа.
  • Есть три вершины степени хотя бы \(1\), из них минимальную степень \(1\) имеют вершины \(2\) и \(3\) (вершина \(4\) имеет степень \(2\)). Сообщается вершина \(2\), потому что она имеет минимальный номер, и вершина \(3\), потому что только она не соединена с вершиной \(2\). После этого вершина \(2\) удаляется из графа.

Путь \(4 - 3 - 1 - 2\) является гамильтоновым.

Во втором наборе входных данных исходный граф выглядит следующим образом:

Рассмотрим запросы:

  • Вершина \(1\) имеет степень хотя бы \(3\), но при этом она соединена со всеми вершинами, поэтому сообщается «\(1\ 0\)». После этого вершина \(1\) удаляется из графа.
  • Оставшиеся вершины \(2\), \(3\) и \(4\) имеют степень хотя бы \(0\), но из них вершина \(4\) имеет минимальную степень \(0\) (вершины \(2\) и \(3\) имеют степень \(1\)). Вершина \(4\) не соединена с обеими вершинами \(2\) и \(3\), поэтому сообщается вершина \(2\) (так как она имеет минимальный номер). После этого вершина \(4\) удаляется из графа.

Путь \(4 - 1 - 2 - 3\) является гамильтоновым.

В третьем наборе входных данных граф состоит из \(2\) вершин, соединённых ребром.

D. Змейка в кубе

Конструктив *2700

Имеется куб размера n × n × n, разбитый на единичные кубики. Требуется пронумеровать все единичные кубики этого куба натуральными числами от 1 до n3 так, чтобы:

  • каждое число было использовано в качестве номера ровно один раз;
  • для каждого 1 ≤ i < n3 единичные кубики с номерами i и i + 1 были соседними (то есть имели общую грань);
  • для каждого 1 ≤ i < n нашлись хотя бы два различных подкуба размера i × i × i, составленные из единичных кубиков, которые пронумерованы последовательными числами. То есть существуют такие два числа x и y, что единичные кубики первого подкуба пронумерованы числами x, x + 1, ..., x + i3 - 1, а единичные кубики второго подкуба — числами y, y + 1, ..., y + i3 - 1.

Найдите и выведите требуемую нумерацию единичных кубиков куба.

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 50) — размер куба, единичные кубики которого нужно пронумеровать.

Выходные данные

Выведите все слои куба в виде n матриц n × n, разделяя их переводом строки. Слои надо выводить в порядке их следования в кубе. Смотрите примеры для более точного понимания.

Гарантируется, что всегда существует решение удовлетворяющее условиям задачи.

Примечание

В примере кубики размера 2 × 2 × 2 пронумерованы числами 1, ..., 8 и 5, ..., 12.

C. София и утерянные операции

жадные алгоритмы Конструктив *1300

У Софии был массив из \(n\) целых чисел \(a_1, a_2, \ldots, a_n\). Однажды он ей надоел, поэтому она решила последовательно применить к нему \(m\) операций изменения.

Каждая операция изменения описывается парой чисел \(\langle c_j, d_j \rangle\) и означает, что надо присвоить элементу массива с индексом \(c_j\) значение \(d_j\), то есть выполнить присвоение \(a_{c_j} = d_j\). После последовательного применения всех операций изменения София выкинула получившийся массив.

Недавно вы нашли массив из \(n\) целых чисел \(b_1, b_2, \ldots, b_n\). Вам интересно, является ли этот массив массивом Софии. Вам известны значения исходного массива, а также значения \(d_1, d_2, \ldots, d_m\). Значения \(c_1, c_2, \ldots, c_m\) оказались утерянными.

Существует ли такая последовательность \(c_1, c_2, \ldots, c_m\), что последовательное применение операций изменения \(\langle c_1, d_1, \rangle, \langle c_2, d_2, \rangle, \ldots, \langle c_m, d_m \rangle\) к массиву \(a_1, a_2, \ldots, a_n\) превращает его в массив \(b_1, b_2, \ldots, b_n\)?

Входные данные

В первой строке дано целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Далее следуют описания наборов.

В первой строке каждого набора дано целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — размер массива.

Во второй строке каждого набора даны \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы исходного массива.

В третьей строке каждого набора даны \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le 10^9\)) — элементы найденного массива.

В четвёртой строке дано целое число \(m\) (\(1 \le m \le 2 \cdot 10^5\)) — количество операций изменения.

В пятой строке даны \(m\) целых чисел \(d_1, d_2, \ldots, d_m\) (\(1 \le d_j \le 10^9\)) — сохранившееся значение для каждой операции изменения.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\), аналогично сумма значений \(m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Выведите \(t\) строк, каждая из которых является ответом на соответствующий набор входных данных. В качестве ответа выведите «YES», если существует подходящая последовательность \(c_1, c_2, \ldots, c_m\), и «NO» в противном случае.

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

E. Перестановка строк и столбцов

жадные алгоритмы Конструктив математика матрицы реализация сортировки Структуры данных хэши *1600

У вас была матрица \(a\) размера \(n\) на \(m\), содержащая перестановку целых чисел от \(1\) до \(n \cdot m\).

Перестановкой из \(n\) целых чисел называется массив, содержащий все числа от \(1\) до \(n\) ровно один раз. Например, массивы \([1]\), \([2, 1, 3]\), \([5, 4, 3, 2, 1]\) являются перестановками, а массивы \([1, 1]\), \([100]\), \([1, 2, 4, 5]\) — нет.

Матрица содержит перестановку, если при выписывании всех её элементов полученный массив является перестановкой. Матрицы \([[1, 2], [3, 4]]\), \([[1]]\), \([[1, 5, 3], [2, 6, 4]]\) содержат перестановки, а матрицы \([[2]]\), \([[1, 1], [2, 2]]\), \([[1, 2], [100, 200]]\) — нет.

За одну операцию вы можете совершить одно из двух следующих действий:

  • выбрать столбец \(c\) и столбец \(d\) (\(1 \le c, d \le m\), \(c \ne d\)) и поменять эти столбцы местами;
  • выбрать строку \(c\) и строку \(d\) (\(1 \le c, d \le n\), \(c \ne d\)) и поменять эти строки местами.

Вы можете совершить любое количество операций.

Вам даны исходная матрица \(a\) и матрица \(b\). Ваша задача — определить, можно ли с помощью данных операций сделать из матрицы \(a\) матрицу \(b\).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка описания каждого набора входных данных содержит \(2\) целых числа \(n\) и \(m\) (\(1 \le n, m \le n \cdot m \le 2 \cdot 10^5\)) — размеры матрицы.

Следующие \(n\) строк содержат по \(m\) целых чисел \(a_{ij}\) каждая (\(1 \le a_{ij} \le n \cdot m\)). Гарантируется, что матрица \(a\) является перестановкой.

Следующие \(n\) строк содержат по \(m\) целых чисел \(b_{ij}\) каждая (\(1 \le b_{ij} \le n \cdot m\)). Гарантируется, что матрица \(b\) является перестановкой.

Гарантируется, что сумма значений \(n \cdot m\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если вторая матрица может быть получена из первой, и «NO» в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Во втором примере исходная матрица выглядит так:

\( \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix} \)

При обмене строк \(1\) и \(2\) местами она станет такой:

\( \begin{pmatrix} 3 & 4 \\ 1 & 2 \end{pmatrix} \)

При обмене столбцов \(1\) и \(2\) местами она станет равна матрице \(b\):

\( \begin{pmatrix} 4 & 3 \\ 2 & 1 \end{pmatrix} \)

C. Черепаха и неполная последовательность

битмаски жадные алгоритмы Конструктив математика Перебор реализация *1800

Черепаха играла с последовательностью \(a_1, a_2, \ldots, a_n\), состоящей из положительных целых чисел. К сожалению, некоторые числа пропали во время игры.

Теперь последовательность стала неполной. Может существовать произвольное количество индексов \(i\), таких что \(a_i\) становится \(-1\). Пусть новая последовательность будет \(a'\).

Черепаха грустит. Но Черепаха помнит, что для каждого целого числа \(i\) от \(1\) до \(n - 1\), либо \(a_i = \left\lfloor\frac{a_{i + 1}}{2}\right\rfloor\), либо \(a_{i + 1} = \left\lfloor\frac{a_i}{2}\right\rfloor\) выполняется для исходной последовательности \(a\).

Черепаха хочет, чтобы вы помогли ей завершить последовательность. Но иногда Черепаха ошибается, поэтому вам нужно сказать ей, если вы не можете завершить последовательность.

Формально, вам нужно найти другую последовательность \(b_1, b_2, \ldots, b_n\), состоящую из положительных целых чисел, такую что:

  • Для каждого целого числа \(i\) от \(1\) до \(n\), если \(a'_i \ne -1\), то \(b_i = a'_i\).
  • Для каждого целого числа \(i\) от \(1\) до \(n - 1\), либо \(b_i = \left\lfloor\frac{b_{i + 1}}{2}\right\rfloor\), либо \(b_{i + 1} = \left\lfloor\frac{b_i}{2}\right\rfloor\) выполняется.
  • Для каждого целого числа \(i\) от \(1\) до \(n\), \(1 \le b_i \le 10^9\).

Если не существует последовательности \(b_1, b_2, \ldots, b_n\), которая удовлетворяет всем условиям выше, вам нужно сообщить \(-1\).

Входные данные

Каждый тест содержит несколько тестовых случаев. Первая строка содержит количество тестов \(t\) (\(1 \le t \le 10^5\)). Затем следует описание тестов.

Первая строка каждого теста содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — длина последовательности.

Вторая строка каждого теста содержит \(n\) целых чисел \(a'_1, a'_2, \ldots, a'_n\) (\(a'_i = -1\) или \(1 \le a'_i \le 10^8\)) — элементы последовательности \(a'\).

Гарантируется, что сумма \(n\) по всем тестовым случаям не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого теста, если не существует последовательности \(b_1, b_2, \ldots, b_n\), которая удовлетворяет всем условиям, выведите одно целое число \(-1\).

В противном случае выведите \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) — элементы последовательности \(b_1, b_2, \ldots, b_n\), которую вы нашли. Последовательность должна удовлетворять условию \(1 \le b_i \le 10^9\) для каждого целого числа \(i\) от \(1\) до \(n\). Если есть несколько ответов, выведите любой из них.

Примечание

В первом тесте, \([4, 2, 1, 2, 1, 2, 1, 3]\) также может быть ответом, в то время как \([4, 2, 5, 10, 5, 2, 1, 3]\) и \([4, 2, 1, 2, 1, 2, 1, 4]\) не могут.

Во втором тесте, \([1, 2, 5, 2]\) также может быть ответом.

С четвертого по шестой тесты, можно показать, что ответа нет, поэтому вы должны вывести \(-1\).

D. Черепаха и умножение

графы Конструктив поиск в глубину и подобное теория чисел *2400

Черепаха только что научилась умножать два целых числа на уроке математики и была очень взволнована.

Затем Свинка дала ей целое число \(n\) и попросила построить последовательность \(a_1, a_2, \ldots, a_n\), состоящую из целых чисел, которые удовлетворяли бы следующим условиям:

  • Для всех \(1 \le i \le n\), \(1 \le a_i \le 3 \cdot 10^5\).
  • Для всех \(1 \le i < j \le n - 1\), \(a_i \cdot a_{i + 1} \ne a_j \cdot a_{j + 1}\).

Из всех таких последовательностей Пятачок попросил Черепаху найти ту, в которой будет минимальное количество различных элементов.

Черепаха определенно не смогла бы решить задачу, поэтому пожалуйста, помогите ей!

Входные данные

Каждый тест содержит несколько тестовых случаев. Первая строка содержит количество тестов \(t\) (\(1 \le t \le 10^4\)). Затем следует описание тестов.

Первая строка каждого теста содержит одно целое число \(n\) (\(2 \le n \le 10^6\)) — длина последовательности \(a\).

Гарантируется, что сумма \(n\) по всем тестовым случаям не превышает \(10^6\).

Выходные данные

Для каждого тестового случая выведите \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) — элементы последовательности \(a\).

Если существует несколько ответов, выведите любой из них.

Примечание

В третьем тестовом случае \(a = [3, 4, 2, 6]\) нарушает второе условие, так как \(a_1 \cdot a_2 = a_3 \cdot a_4\). \(a = [2, 3, 4, 4]\) удовлетворяет условиям, но количество различных элементов в нем не минимально.

A. Делимость массива

Конструктив математика *800

Массив целых чисел \(a_1,a_2,\cdots,a_n\) является красивым относительно целого числа \(k\), если он удовлетворяет следующему условию:

  • Вычислим сумму \(a_{j}\) по всем \(j\) таким, что \(j\) кратно \(k\) и \(1 \le j \le n \). Тогда данная сумма должна делиться на \(k\).
  • Более формально, если при \(1 \le j \le n\) сумма \(\sum_{k | j} a_{j}\) кратна \(k\), то массив \(a\) является красивым относительно \(k\). Здесь обозначение \({k|j}\) означает, что \(k\) делится на \(j\), то есть \(j\) кратно \(k\).
При заданном \(n\) найдите массив целых положительных ненулевых чисел, в котором каждый элемент меньше или равен \(10^5\), и который является красивым относительно каждого \(1 \le k \le n\).

Можно показать, что ответ всегда существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — длину массива.

Выходные данные

Для каждого набора входных данных выведите искомый массив, как описано в условии задачи.

Примечание

Во втором наборе входных данных \(n = 6\). Пусть \(S\) — это множество всех индексов массива, кратных \(k\) (для фиксированного \(k\) из диапазона \(1 \le k \le 6\))

  • При \(k = 1\), \(S = \{1, 2, 3,4,5,6\}\). Значит \(a_1+a_2+a_3+a_4+a_5+a_6=242\) должно быть кратно \(1\).
  • При \(k = 2\), \(S = \{2,4,6\}\). Значит \(a_2+a_4+a_6=92\) должно быть кратно \(2\).
  • При \(k = 3\), \(S = \{3,6\}\). Значит \(a_3+a_6=69\) должно быть кратно \(3\).
  • При \(k = 4\), \(S = \{4\}\). Значит \(a_4=32\) должно делиться на \(4\).
  • При \(k = 5\), \(S = \{5\}\). Значит \(a_5=125\) должно делиться на \(5\).
  • При \(k = 6\), \(S = \{6\}\). Значит \(a_6=54\) должно делиться на \(6\).

Массив \(a = [10, 6, 15, 32, 125, 54]\) удовлетворяет всем указанным условиям. Следовательно, \(a\) является допустимым массивом.

B. Поворот угла

жадные алгоритмы Конструктив математика реализация *1200

Вам даны две таблицы \(a\) и \(b\) с \(n\) строками и \(m\) столбцами. Все значения в таблицах равны \(0\), \(1\) или \(2\).

Вы можете выполнить следующую операцию над \(a\) любое количество раз:

  • Выберите в таблице любой подпрямоугольник с длиной и шириной \(\ge 2\). Вы можете выбрать в качестве подпрямоугольника всю таблицу.
  • У подпрямоугольника есть четыре угла. Выберите любую пару диагонально противоположных углов выбранного подпрямоугольника и прибавьте к их значениям \(1\) по модулю \(3\).
  • Для оставшейся пары углов, прибавьте к их значениям \(2\) по модулю \(3\).

Обратите внимание, что эта операция изменяет значения только углов выбранного подпрямоугольника.

Можно ли преобразовать таблицу \(a\) в таблицу \(b\), применив описанную выше операцию любое количество раз (возможно, ноль)?

Входные данные

Первая строка содержит целое число \(t\) — количество наборов входных данных (\(1 \le t \le 250\)).

Для каждого набора входных данных:

Первая строка содержит два целых числа \(n\) и \(m\) — количество строк и столбцов в таблицах (\(2 \le n,m \le 500\)).

Каждая из следующих n строк содержат по m символов — \(j\)-й символ \(i\)-й строки равен \(a_{i,j}\).

Каждая из следующих n строк содержат по m символов — \(j\)-й символ \(i\)-й строки равен \(b_{i,j}\) (\(0 \le a_{i,j}, b_{i,j} \le 2\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных и сумма \(m\) по всем наборам входных данных не превосходят \(500\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если возможно преобразовать таблицу \(a\) в таблицу \(b\), и «NO» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных таблица \(a\) может быть преобразована в \(b\) следующим образом:

\(\begin{matrix}\fbox{0} & 0 & \fbox{0}\\ 0 & 0 & 0\\ \fbox{0} & 0 & \fbox{0}\end{matrix} \Rightarrow \begin{matrix}1 & 0 & 2\\ 0 & \fbox{0} & \fbox{0}\\ 2 & \fbox{0} & \fbox{1}\end{matrix} \Rightarrow \begin{matrix}1 & 0 & 2\\ \fbox{0} & \fbox{1} & 2\\ \fbox{2} & \fbox{2} & 2\end{matrix} \Rightarrow \begin{matrix}1 & \fbox{0} & \fbox{2}\\ 1 & 0 & 2\\ 1 & \fbox{0} & \fbox{2}\end{matrix} \Rightarrow \begin{matrix}1 & 1 & 1\\ 1 & \fbox{0} & \fbox{2}\\ 1 & \fbox{2} & \fbox{0}\end{matrix} \Rightarrow \begin{matrix}1 & 1 & 1\\ 1 & 1 & 1\\ 1 & 1 & 1\end{matrix}\)

Здесь в каждой операции верхний правый и нижний левый углы, выделенные рамкой, увеличиваются на \(2\) по модулю \(3\), а верхний левый и нижний правый углы увеличиваются на \(1\) по модулю \(3\).

Для четвертого набора входных данных можно показать, что невозможно преобразовать таблицу \(a\) в таблицу \(b\) с помощью любого числа вышеупомянутых операций.

D. Дилемма обмена

жадные алгоритмы Конструктив математика разделяй и властвуй сортировки Структуры данных *1700

Даны два массива \(a\) и \(b\) длины \(n\), состоящих из различных целых положительных чисел, и мы хотим сделать массивы равными. Два массива \(x\) и \(y\) длины \(k\) называются равными, если для всех \(1 \le i \le k\) выполняется \(x_i = y_i\).

За один ход можно выбрать некоторые индексы \(l\) и \(r\) в \(a\) (\(l \le r\)) и поменять местами \(a_l\) и \(a_r\), затем выбрать некоторые \(p\) и \(q\) (\(p \le q\)) в \(b\) такие, что \(r-l=q-p\), и поменять местами \(b_p\) и \(b_q\).

Можно ли сделать массивы одинаковыми?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — длину массивов \(a\) и \(b\).

Вторая строка каждого набора входных данных содержит \(n\) различных целых чисел \(a_1,a_2,a_3,\ldots,a_n\) (\(1 \le a_i \le 2 \cdot 10^5\)) — массив \(a\).

Третья строка каждого набора входных данных содержит \(n\) различных целых чисел \(b_1,b_2,b_3,\ldots,b_n\) (\(1 \le b_i \le 2 \cdot 10^5\)) — массив \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES», если массивы \(a\) и \(b\) можно сделать одинаковыми. В противном случае выведите «NO».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных не нужно выполнять никаких операций, поскольку массивы уже равны.

Для второго набора входных данных можно доказать, что не существует способа сделать массивы одинаковыми.

В третьем наборе входных данных один из способов сделать массивы равными такой: на первом ходу выбрать \(l=1\), \(r=3\), \(p=1\), \(q=3\), на втором выбрать \(l=1\), \(r=2\), \(p=3\), \(q=4\).

A. Странное разделение

Конструктив *800

Определим диапазон непустого массива как максимальное значение минус минимальное. Например, диапазон массива \([1,4,2]\) равен \(4-1=3\).

Вам дан массив \(a_1, a_2, \ldots, a_n\) длины \(n \geq 3\). Гарантируется, что \(a\) отсортирован.

Вы должны раскрасить каждый элемент \(a\) красным или синим цветом так, чтобы:

  • диапазон красных элементов был не равен диапазону синих элементов, и
  • был хотя бы один элемент каждого цвета.
Если такой раскраски не существует, сообщите об этом. Если существуют несколько подходящих раскрасок, выведите любую из них.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(3 \leq n \leq 50\)) — длину массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)). Гарантируется, что \(a_1 \leq a_2 \leq \ldots \leq a_{n - 1} \leq a_{n}\).

Выходные данные

Для каждого набора входных данных, если невозможно раскрасить \(a\) так, чтобы удовлетворить всем условиям, выведите \(\texttt{NO}\).

В противном случае сначала выведите \(\texttt{YES}\).

Затем выведите строку \(s\) длины \(n\). Для всех \(1 \leq i \leq n\), если вы хотите покрасить \(a_i\) в красный цвет, то \(s_i\) должно быть равно \(\texttt{R}\). Также для всех \(1 \leq i \leq n\), если вы хотите покрасить \(a_i\) синим цветом, \(s_i\) должно равняться \(\texttt{B}\).

Примечание

В первом наборе входных данных в массиве \([1, 1, 2, 2]\) мы можем покрасить второй элемент в синий цвет, а остальные элементы — в красный. Тогда диапазон красных элементов \([1, 2, 2]\) равен \(2-1=1\), а диапазон синих элементов \([1]\) равен \(1-1=0\).

Во втором наборе входных данных можно покрасить первый, второй, четвертый и пятый элементы \([1, 2, 4, 5]\) в синий цвет, а оставшийся элемент \([3]\) — в красный.

Диапазон красных элементов равняется \(3 - 3 = 0\), а диапазон синих элементов равняется \(5 - 1 = 4\), то есть диапазоны различны.

В третьем наборе входных данных можно показать, что нет способа раскрасить \(a = [3, 3, 3]\) так, чтобы удовлетворить ограничениям.

G. Магический трюк II

Конструктив реализация сортировки *3200

Секрет первого фокуса Оскара раскрыт! Поскольку он все еще хочет произвести впечатление на Луру, ему пришла в голову новая идея: он по-прежнему хочет отсортировать перестановку \(p_1, p_2, \ldots, p_n\) из \([1, 2, \ldots, n]\).

На этот раз он выбирает целое число \(k\). Он хочет отсортировать перестановку в неубывающем порядке, используя следующую операцию несколько раз:

  1. Выбрать непрерывный подмассив длины \(k\) и удалить его из \(p\).
  2. Вставить непрерывный подмассив обратно в \(p\) на любую позицию (возможно, в самое начало или в самый конец).

Чтобы произвести впечатление, Оскар хочет выбрать максимальное значение \(k\), при котором он сможет отсортировать свою перестановку. Пожалуйста, помогите ему найти максимальное значение \(k\), а также последовательность операций, которые отсортируют перестановку. Вам не нужно минимизировать количество операций, но разрешается использовать не более \(5n^2\) операций.

Можно доказать, что для максимального \(k\), при котором перестановку можно отсортировать за любое количество операций, ее также можно отсортировать за не более чем \(5n^2\) операций.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(5 \leq n \leq 10^3\)) — длина перестановки.

Вторая строка каждого набора входных данных содержит перестановку \(p_1, p_2, \ldots, p_n\) из \([1, 2, \ldots, n]\).

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^3\).

Выходные данные

Для каждого набора входных данных сначала выведите в отдельной строке выбранное значение \(k\) (\(1 \leq k \leq n\)).

Затем выведите одно целое число \(m\) — количество использованных операций (\(0 \leq m \leq 5n^2\)).

Затем в каждой из следующих \(m\) строк выведите операции, обозначенные двумя целыми числами \(i\) и \(j\) (\(1 \leq i, j \leq n - k + 1\)), представляющие собой операции удаления подмассива, начинающегося с индекса \(i\), и его вставки обратно в \(p\), начиная с индекса \(j\).

Примечание

В первом наборе входных данных достаточно переместить последние четыре числа в начало.

Во втором наборе входных данных можно показать, что мы не можем отсортировать перестановку при \(k = 4\) или \(k = 5\). При \(k = 3\) мы можем переместить первые три числа в конец, а затем средние три —- в начало, чтобы отсортировать перестановку.

В третьем наборе входных данных перестановка уже отсортирована. Мы можем выбрать \(k = 6\) и не использовать никаких операций.

C. Возрастающая последовательность с фиксированным ИЛИ

битмаски жадные алгоритмы Конструктив *1300

Дано положительное целое число \(n\). Найдите самую длинную последовательность положительных целых чисел \(a=[a_1,a_2,\ldots,a_k]\), которая удовлетворяет следующим условиям, и выведите эту последовательность:

  • \(a_i\le n\) для всех \(1\le i\le k\).
  • \(a\) строго возрастающая. То есть \(a_i>a_{i-1}\) для всех \(2\le i\le k\).
  • \(a_i\,|\,a_{i-1}=n\) для всех \(2\le i\le k\), где \(|\) обозначает операцию побитового ИЛИ.
Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 1000\)). Затем следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1\le n\le 10^{18}\)).

Гарантируется, что сумма длин самых длинных допустимых последовательностей не превышает \(5\cdot 10^5\).

Выходные данные

Для каждого набора входных выведите две строки. В первой строке выведите длину вашей сконструированной последовательности \(k\). Во второй строке выведите \(k\) положительных целых чисел, обозначающих последовательность. Если существует несколько самых длинных последовательностей, то вы можете вывести любую из них.

A. Теорема Хексадесимал

Конструктив Перебор реализация теория чисел *900

Недавно вирус Хексадесимал выдвинула теорему о том, что любое число Фибоначчи представимо в виде суммы трёх не обязательно различных чисел Фибоначчи. Эта теорема должна потрясти Вселенную!

Напомним, что числа Фибоначчи определяются следующим образом: F0 = 0, F1 = 1, а все остальные вычисляются по формуле Fi = Fi - 2 + Fi - 1.

Таким образом, числа Фибоначчи образуют последовательность: 0, 1, 1, 2, 3, 5, 8, 13, ...

Если вы ещё не убежали в ужасе от компьютера, то помогите вирусу подтвердить или опровергнуть её теорему. Разложите заданное число Фибоначчи n на сумму трёх не обязательно различных чисел Фибоначчи, или сообщите, что это невозможно.

Входные данные

Входные данные содержат единственное число n (0 ≤ n < 109) — число, которое необходимо разложить на искомую сумму. Гарантируется, что n является числом Фибоначчи.

Выходные данные

Выведите три числа: a, b и c — искомое разложение, если оно существует. В противном случае выведите «I'm too stupid to solve this problem» без кавычек.

Если решений несколько разрешается выводить любое.

B. Конструирование массива

жадные алгоритмы Конструктив *1200

Для массива \(b\) размера \(m\) определим:

  • Позиция максимального префикса массива \(b\) — это наименьший индекс \(i\), удовлетворяющий условию \(b_1+\ldots+b_i=\max_{j=1}^{m}(b_1+\ldots+b_j)\);
  • Позиция максимального суффикса массива \(b\) — это наибольший индекс \(i\), удовлетворяющий условию \(b_i+\ldots+b_m=\max_{j=1}^{m}(b_j+\ldots+b_m)\).

Даны три целых числа \(n\), \(x\) и \(y\) (\(x > y\)). Сконструируйте массив \(a\) размера \(n\), удовлетворяющий условиям:

  • \(a_i\) равно либо \(1\), либо \(-1\) для всех \(1 \le i \le n\);
  • Позиция максимального префикса \(a\) равна \(x\);
  • Позиция максимального суффикса \(a\) равна \(y\).

Если существует несколько массивов, удовлетворяющих условиям, выведите любой из них. Можно доказать, что такой массив всегда существует при заданных условиях.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Для каждого набора входных данных:

  • Единственная строка содержит три целых числа \(n\), \(x\) и \(y\) (\(2 \leq n \leq 10^5, 1 \le y \lt x \le n)\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных в отдельной строке выведите \(n\) целых чисел \(a_1, a_2, \ldots, a_n\).

Примечание

Во втором наборе входных данных

  • \(i=x=4\) — это наименьший индекс, удовлетворяющий условию \(a_1+\ldots +a_i=\max_{j=1}^{n}(a_1+\ldots+a_j)=2\);
  • \(i=y=3\) — это наибольший индекс, удовлетворяющий условию \(a_i+\ldots +a_n=\max_{j=1}^{n}(a_j+\ldots+a_n)=2\).

Таким образом, массив \(a=[1,-1,1,1]\) удовлетворяет всем условиям.

B. Восстановление И

битмаски жадные алгоритмы Конструктив *1100

Вам дан массив \(b\) из \(n - 1\) целого числа.

Массив \(a\) из \(n\) целых чисел называется хорошим, если \(b_i = a_i \, \& \, a_{i + 1}\) для всех \(1 \le i \le n-1\), где \(\&\) обозначает операцию побитового И.

Постройте хороший массив или сообщите, что хороших массивов не существует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 10^5\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n - 1\) целое число \(b_1, b_2, \ldots, b_{n - 1}\) (\(0 \le b_i < 2^{30}\)) — элементы массива \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число \(-1\), если хороших массивов не существует.

В противном случае выведите через пробел \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i < 2^{30}\)) — элементы хорошего массива \(a\).

Если существует несколько решений, вы можете вывести любое из них.

Примечание

В первом наборе входных данных \(b = [1]\). Возможным хорошим массивом является \(a=[5, 3]\), так как \(a_1 \, \& \, a_2 = 5 \, \& \, 3 = 1 = b_1\).

Во втором наборе входных данных \(b = [2, 0]\). Возможным хорошим массивом является \(a=[3, 2, 1]\), так как \(a_1 \, \& \, a_2 = 3 \, \& \, 2 = 2 = b_1\) и \(a_2 \, \& \, a_3 = 2 \, \& \, 1 = 0 = b_2\).

В третьем наборе входных данных \(b = [1, 2, 3]\). Можно показать, что хороших массивов не существует, поэтому ответом будет \(-1\).

В четвертом наборе входных данных \(b = [3, 5, 4, 2]\). Возможный хороший массив — \(a=[3, 7, 5, 6, 3]\).

C. Абсолютный ноль

жадные алгоритмы Конструктив математика *1300

Вам дан массив \(a\) из \(n\) целых чисел.

За одну операцию вы можете выполнить следующее двухэтапное действие:

  1. Выбрать целое число \(x\) (\(0 \le x \le 10^{9}\)).
  2. Заменить каждое \(a_i\) на \(|a_i - x|\), где \(|v|\) обозначает модуль \(v\).

Например, при выборе \(x = 8\) массив \([5, 7, 10]\) изменится на \([|5-8|, |7-8|, |10-8|] = [3,1,2]\).

Постройте последовательность операций, чтобы сделать все элементы \(a\) равными \(0\) не более чем за \(40\) операций или определите, что это невозможно. Вам не нужно минимизировать количество операций.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число \(-1\), если невозможно сделать все элементы массива равными \(0\) не более чем за \(40\) операций.

В противном случае выведите две строки. Первая строка должна содержать одно целое число \(k\) (\(0 \le k \le 40\)) — количество операций. Вторая строка должна содержать \(k\) целых чисел \(x_1, x_2, \ldots, x_k\) (\(0 \le x_i \le 10^{9}\)) — последовательность операций, обозначающую, что на \(i\)-й операции вы выбрали \(x=x_i\).

Если существует несколько решений, выведите любое из них.

Вам не обязательно минимизировать количество операций.

Примечание

В первом наборе входных данных мы можем получить нужный массив за одну операцию, выбрав \(x = 5\) и изменив массив с \([5]\) на \([0]\).

Во втором наборе входных данных никаких операций не требуется, поскольку все элементы массива уже равны \(0\).

В третьем наборе входных данных мы можем выбрать \(x = 6\), чтобы изменить массив с \([4, 6, 8]\) на \([2, 0, 2]\), затем выбрать \(x = 1\), чтобы изменить его на \([1, 1, 1]\), и, наконец, снова выбрать \(x = 1\), чтобы изменить массив на \([0, 0, 0]\).

В четвертом наборе входных данных мы можем сделать все элементы равными \(0\), выполнив последовательность операций \((60, 40, 20, 10, 30, 25, 5)\).

В пятом наборе входных данных можно показать, что невозможно сделать все элементы равными \(0\) не более чем за \(40\) операций. Поэтому ответом будет \(-1\).

D. Простая XOR раскраска

битмаски графы жадные алгоритмы Конструктив математика теория чисел *1900

Вам дан неориентированный граф с \(n\) вершинами, пронумерованными от \(1\) до \(n\). Между вершинами \(u\) и \(v\) существует ребро тогда и только тогда, когда \(u \oplus v\) является простым числом, где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Раскрасьте все вершины графа в минимальное количество цветов так, чтобы ни одна пара вершин, непосредственно соединенных ребром, не была покрашена в один цвет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество вершин в графе.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите две строки.

Первая строка должна содержать одно целое число \(k\) (\(1 \le k \le n\)) — минимально необходимое количество цветов.

Вторая строка должна содержать \(n\) целых чисел \(c_1, c_2, \ldots, c_n\) (\(1 \le c_i \le k\)) — цвет каждой вершины.

Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных минимальное количество цветов равно \(1\), потому что дана только одна вершина.

Во втором наборе входных данных минимальное количество цветов равно \(2\), потому что существует ребро, соединяющее \(1\) и \(2\) (\(1 \oplus 2 = 3\), что является простым числом).

В третьем наборе входных данных минимальное количество цветов по-прежнему равно \(2\), потому что \(2\) и \(3\) могут быть окрашены одинаково, так как между \(2\) и \(3\) нет ребра (\(2 \oplus 3 = 1\), что не является простым числом).

В четвертом наборе входных данных можно показать, что минимальное количество цветов равно \(3\).

В пятом наборе входных данных можно показать, что минимальное количество цветов равно \(3\).

В шестом наборе входных данных можно показать, что минимальное количество цветов равно \(4\).

E. Игра с раскрасками

графы жадные алгоритмы игры интерактив Конструктив поиск в глубину и подобное *1900

Это интерактивная задача.

Рассмотрим связный неориентированный граф, состоящий из \(n\) вершин и \(m\) ребер. Каждая вершина может быть окрашена в один из трех цветов: \(1\), \(2\) или \(3\). Изначально все вершины не окрашены.

Алиса и Боб играют в игру, состоящую из \(n\) раундов. В каждом раунде происходит следующий двухэтапный процесс:

  1. Алиса выбирает два различных цвета.
  2. Боб выбирает непокрашенную вершину и красит ее в один из двух цветов, выбранных Алисой.

Алиса выигрывает, если существует ребро, соединяющее две вершины одного цвета. В противном случае побеждает Боб.

Вам дан граф. Ваша задача — решить, за кого из игроков вы хотите играть, и выиграть игру.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\), \(m\) (\(1 \le n \le 10^4\), \(n - 1 \le m \le \min(\frac{n \cdot (n - 1)}{2}, 10^4)\)) — количество вершин и количество ребер в графе соответственно.

Каждая из следующих \(m\) строк каждого набора входных данных содержит по два целых числа \(u_i\), \(v_i\) (\(1 \le u_i, v_i \le n\)) — ребра графа. Гарантируется, что граф связен, и что в нем нет петель и кратных ребер.

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превосходят \(10^4\).

Протокол взаимодействия

Для каждого набора входных данных необходимо вывести одну строку, содержащую либо «Alice», либо «Bob» — игрока, за которого вы хотите играть.

Затем происходит \(n\) раундов, в каждом из которых происходит данный двухэтапный процесс:

  1. Алиса (либо вы, либо собеседник) выводит два целых числа \(a\) и \(b\) (\(1 \le a, b \le 3\), \(a \neq b\)) — цвета, выбранные Алисой.
  2. Боб (либо вы, либо собеседник) выводит два целых числа \(i\) и \(c\) (\(1 \le i \le n\), \(c = a\) или \(c = b\)) — вершина и цвет, выбранные Бобом. Вершина \(i\) должна быть неокрашенной.

Если любой из ваших выводов недействителен, жюри выведет «-1» и вы получите вердикт Неправильный ответ.

В конце \(n\) раундов, если ваше решение проиграло, жюри выведет «-1» и вы получите вердикт Неправильный ответ.

Если вы получили число \(-1\) вместо корректного значения, ваша программа должна немедленно завершиться. В противном случае вы можете получить любой вердикт, так как программа продолжит чтение из закрытого потока.

Обратите внимание, что если вы играете за Алису, и уже есть ребро, соединяющее вершины одного цвета, интерактор не завершит игру досрочно, и будут сыграны все \(n\) раундов.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы в этой задаче отключены.

Примечание

Обратите внимание, что приведенные наборы входных данных являются примерами игр и не обязательно представляют собой оптимальную стратегию для обоих игроков.

В первом наборе входных данных вы решили играть за Алису.

  1. Алиса выбирает два цвета: \(3\) и \(1\). Боб выбирает вершину \(3\) и окрашивает ее в цвет \(1\).
  2. Алиса выбирает два цвета: \(1\) и \(2\). Боб выбирает вершину \(2\) и окрашивает ее в цвет \(2\).
  3. Алиса выбирает два цвета: \(2\) и \(1\). Боб выбирает вершину \(1\) и окрашивает ее в цвет \(1\).

Алиса выигрывает, потому что ребро \((3, 1)\) соединяет две вершины одного цвета.

Во втором наборе входных данных вы решили играть за Боба.

  1. Алиса выбирает два цвета: \(2\) и \(3\). Боб выбирает вершину \(1\) и окрашивает ее в цвет \(2\).
  2. Алиса выбирает два цвета: \(1\) и \(2\). Боб выбирает вершину \(2\) и окрашивает ее в цвет \(1\).
  3. Алиса выбирает два цвета: \(2\) и \(1\). Боб выбирает вершину \(4\) и окрашивает ее в цвет \(1\).
  4. Алиса выбирает два цвета: \(3\) и \(1\). Боб выбирает вершину \(3\) и окрашивает ее в цвет \(3\).

Боб выигрывает, потому что нет ребер, соединяющих вершины одного цвета.

G. Сбрасывание сетки

жадные алгоритмы Конструктив реализация *2700

Вам дана сетка, состоящая из \(n\) строк и \(m\) столбцов, в которой каждая клетка изначально белая. Кроме того, вам дано целое число \(k\), такое что \(1 \le k \le \min(n, m)\).

Вы будете обрабатывать \(q\) операций двух типов:

  • \(\mathtt{H}\) (горизонтальная операция) — Вы выбираете прямоугольник размером \(1 \times k\), полностью находящийся в сетке, и в котором все клетки белые. Затем все клетки в этом прямоугольнике красятся в чёрный.
  • \(\mathtt{V}\) (вертикальная операция) — Вы выбираете прямоугольник \(k \times 1\), который полностью находится в сетке, и в котором все клетки белые. Затем все клетки в этом прямоугольнике красятся в чёрный.

После каждой операции, если какие-либо строки или столбцы становятся полностью черными, все ячейки в этих строках и столбцах одновременно сбрасываются на белые. В частности, если все клетки в строке и столбце, в которых содержится клетка, станут чёрными, то все клетки и в строке, и в столбце будут сброшены на белый цвет.

Выберите прямоугольники таким образом, чтобы можно было выполнить все заданные операции, или определите, что это сделать невозможно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит четыре целых числа \(n\), \(m\), \(k\) и \(q\) (\(1 \le n, m \le 100\), \(1 \le k \le \min(n, m)\), \(1 \le q \le 1000\)) — количество строк и столбцов в сетке, сторона прямоугольника операции и количество операций, соответственно.

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(q\), состоящую только из символов \(\mathtt{H}\) и \(\mathtt{V}\) — последовательность типов операций.

Гарантируется, что сумма \(q\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных выведите одно число \(-1\), если невозможно выполнить все операции.

В противном случае выведите \(q\) строк. Каждая строка должна содержать по два целых числа \(i\), \(j\) (\(1 \le i \le n\), \(1 \le j \le m\)) — координаты левой верхней клетки прямоугольника операций.

Если существует несколько решений, выведите любое из них.

Примечание
Иллюстрация примера.

Первая операция — горизонтальная. Прямоугольник операции начинается в точке \((1,1)\) и представляет собой прямоугольник размером \(1 \times 3\). После операции ячейки \((1,1)\), \((1,2)\) и \((1,3)\) становятся чёрными.

Вторая операция — вертикальная. Прямоугольник операции начинается в точке \((2,1)\) и представляет собой прямоугольник размером \(3 \times 1\). После операции ячейки \((2,1)\), \((3,1)\) и \((4,1)\) становятся черными. В этот момент первый столбец становится полностью черным, поэтому все ячейки в первом столбце сбрасываются в белый цвет.

Третья операция — вертикальная. Прямоугольник операции начинается в \((1,1)\) и представляет собой прямоугольник размером \(3 \times 1\). После операции ячейки \((1,1)\), \((2,1)\) и \((3,1)\) становятся черными.

Четвертая операция — горизонтальная. Прямоугольник операции начинается в точке \((2,3)\) и представляет собой прямоугольник размером \(1 \times 3\). После операции ячейки \((2,3)\), \((2,4)\) и \((2,5)\) становятся черными.

Пятая операция — горизонтальная. Прямоугольник операции начинается в точке \((3,3)\) и представляет собой прямоугольник размером \(1 \times 3\). После операции ячейки \((3,3)\), \((3,4)\) и \((3,5)\) становятся черными.

Шестая операция — вертикальная. Прямоугольник операции начинается в точке \((2,2)\) и представляет собой прямоугольник размером \(3 \times 1\). После операции клетки \((2,2)\), \((3,2)\) и \((4,2)\) становятся черными. В этот момент две строки и один столбец становятся полностью черными, поэтому все ячейки в этих строках и столбце сбрасываются в белые.

I. Игра на сетке

жадные алгоритмы игры интерактив Конструктив Паросочетания *3500

Это интерактивная задача.

Вам дана сетка из \(n\) строк и \(m\) столбцов. Вам нужно заполнить каждую ячейку уникальным целым числом от \(1\) до \(n \cdot m\).

После заполнения сетки вы сыграете с интерактором в игру на этой сетке. Игроки по очереди выбирают из сетки ранее не выбранные ячейки, причем интерактор ходит первым.

В первый ход интерактор может выбрать любую ячейку из сетки. После этого любая выбранная клетка должна быть соседней по стороне хотя бы с одной ранее выбранной клеткой. Игра продолжается до тех пор, пока не будут выбраны все клетки.

Ваша цель состоит в том, чтобы сумма чисел в выбранных вами клетках была строго меньше суммы чисел в клетках, выбранных соперником.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(4 \le n, m \le 10\)) — количество строк и столбцов в сетке.

Протокол взаимодействия

Сначала выведите \(n\) строк, каждая из которых содержит по \(m\) целых чисел — числа, которыми вы заполнили сетку. Каждое целое число от \(1\) до \(n \cdot m\) должно появиться ровно один раз.

Затем начинается игра. Интерактор и вы по очереди выводите координаты выбранных ячеек в течение \(n \times m\) ходов, причем интерактор начинает первым.

В свой ход каждый игрок (либо вы, либо интерактор) выводит два целых числа \(i\) и \(j\) (\(1 \le i \le n\), \(1 \le j \le m\)), означающие, что игрок выбрал клетку в \(i\)-й строке и \(j\)-м столбце. Эта клетка не должна быть выбрана в предыдущих раундах. Кроме того, если это не первый ход, клетка должна быть смежной по стороне хотя бы с одной ранее выбранной клеткой.

Если любой из ваших выводов некорректен, жюри выведет «-1», и вы получите вердикт Неправильный ответ.

После всех \(n \cdot m\) ходов, если сумма чисел в выбранных вами клетках не будет строго меньше суммы чисел в клетках, выбранных соперником, жюри выведет «-1» и вы получите вердикт Неправильный ответ.

Если ваша программа получила вердикт Неправильный ответ, она должна немедленно завершиться. В противном случае вы можете получить любой вердикт, так как программа продолжит чтение из закрытого потока.

После вывода не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы в этой задаче отключены.

Примечание

Обратите внимание, что это пример игры и не обязательно представляет собой оптимальную стратегию для обоих игроков.

Сначала мы заполнили сетку \(4 \times 4\) различными целыми числами от \(1\) до \(16\) следующим образом:

\(2\)\(3\)\(4\)\(10\)
\(12\)\(6\)\(11\)\(15\)
\(5\)\(13\)\(16\)\(8\)
\(9\)\(7\)\(1\)\(14\)

Далее началась игра.

  1. Сначала соперник выбирает клетку \((3, 4)\), в которой находится число \(8\). Во время первого раунда интерактор может выбрать любое число. Начиная со следующего раунда, каждое выбранное число должно быть смежным с любым ранее выбранным числом.
  2. Мы выбрали клетку \((2, 4)\), в которой находится число \(15\), и которая является соседней с \((3, 4)\).
  3. Интерактор выбрал клетку \((4, 4)\), в которой находится число \(14\), и которая является смежной с \((3, 4)\).
  4. Мы выбрали клетку \((4, 3)\), в которой находится число \(1\), и которая является смежной с \((4, 4)\).
  5. \(\ldots\)
  6. Это продолжается до тех пор, пока не будут выбраны все числа.

В итоге вы выбрали такие числа: \([15, 1, 16, 5, 4, 2, 11, 13]\), а соперник выбрал \([8, 14, 7, 9, 10, 3, 6, 12]\). Сумма выбранных нами чисел составляет \(67\), что меньше суммы чисел, выбранных соперником: \(69\). Таким образом, мы выиграли эту игру.

A. Одни плюсы

жадные алгоритмы Конструктив математика Перебор сортировки *800

Kmes записал три числа \(a\), \(b\) и \(c\), чтобы запомнить, что он должен отдать Noobish_Monk \(a \times b \times c\) бананов.

Noobish_Monk нашёл эти три числа и решил не более \(5\) раз сделать следующее:

  • выбрать одно из трёх чисел;
  • увеличить его на \(1\).

Например, если \(a = 2\), \(b = 3\), \(c = 4\), то можно прибавить единицу три раза к \(a\) и два раза к \(b\). Таким образом, \(a = 5\), \(b = 5\), \(c = 4\). Тогда количество бананов, которое должен Kmes равняется \(5 \times 5 \times 4 = 100\).

Какое максимальное значение \(a \times b \times c\) Noobish_Monk может получить с помощью описанных операций?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\))  — количество наборов входных данных.

В единственной строке каждого набора входных данных вводится три целых числа \(a\), \(b\) и \(c\) (\(1 \le a, b, c \le 10\)) — числа, которые записал Kmes.

Выходные данные

Для каждого набора входных данных выведите максимальное количество бананов, которое сможет получить Noobish_Monk от Kmes.

C. Горилла и перестановка

Конструктив математика *900

Горилла и Noobish_Monk нашли три числа \(n\), \(m\) и \(k\) (\(m < k\)). Они решили построить перестановку\(^{\dagger}\) длины \(n\).

Для перестановки Noobish_Monk придумал следующую функцию: \(g(i)\) равно сумме всех чисел перестановки на префиксе длины \(i\), не больших \(m\). Аналогично, Горилла придумал функцию \(f\), \(f(i)\) равно сумме всех чисел перестановки на префиксе длины \(i\), не меньшие \(k\). Префиксом длины \(i\) называется массив, состоящий из первых \(i\) элементов исходного.

Например, если \(n = 5\), \(m = 2\), \(k = 5\), а перестановка равна \([5, 3, 4, 1, 2]\), то:

  • \(f(1) = 5\), так как \(5 \ge 5\); \(g(1) = 0\), так как \(5 > 2\);
  • \(f(2) = 5\), так как \(3 < 5\); \(g(2) = 0\), так как \(3 > 2\);
  • \(f(3) = 5\), так как \(4 < 5\); \(g(3) = 0\), так как \(4 > 2\);
  • \(f(4) = 5\), так как \(1 < 5\); \(g(4) = 1\), так как \(1 \le 2\);
  • \(f(5) = 5\), так как \(2 < 5\); \(g(5) = 1 + 2 = 3\), так как \(2 \le 2\).

Помогите им найти такую перестановку, для которой значение \(\left(\sum_{i=1}^n f(i) - \sum_{i=1}^n g(i)\right)\) будет максимально.

\(^{\dagger}\)Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\))  — количество наборов входных данных.

Единственная строка каждого набора содержит три целых числа \(n\), \(m\), \(k\) (\(2\le n \le 10^5\); \(1 \le m < k \le n\))  — размер искомой перестановки, два числа.

Гарантируется, что сумма \(n\) по всем наборам не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите перестановку  — набор чисел, который удовлетворяет условиям задачи. Если существует несколько решений, выведите любое из них.

Примечание

В первом примере \(\left(\sum_{i=1}^n f(i) - \sum_{i=1}^n g(i)\right) = 5 \cdot 5 - (0 \cdot 3 + 1 + 3) = 25 - 4 = 21\)

E. Ошибка новичка

Конструктив математика Перебор реализация Строки *1700

Одна из первых задач K1o0n по программированию выглядела так: «У Noobish_Monk есть \(n\) \((1 \le n \le 100)\) друзей. На день рождения каждый из них подарил \(a\) \((1 \le a \le 10000)\) яблок. Обрадовавшись такому подарку, Noobish_Monk вернул \(b\) \((1 \le b \le \min(10000, a \cdot n))\) яблок друзьям. Сколько яблок осталось у Noobish_Monk?»

K1o0n написал решение, но случайно считал значение \(n\) как строку, поэтому значение \(n \cdot a - b\) было посчитано по-другому. Конкретно:

  • при умножении строки \(n\) на число \(a\) он получит строку \(s=\underbrace{n + n + \dots + n + n}_{a\ \text{раз}}\)
  • при вычитании из строки \(s\) числа \(b\), из неё удалятся последние \(b\) символов, если \(b\) больше или равно длине строки \(s\), то она станет пустой.

Узнав об этом, ErnKor стало интересно, сколько для данного \(n\) существует пар \((a, b)\), удовлетворяющих ограничениям задачи, на которых решение K1o0n выдаёт правильный ответ.

«Решение выдаёт правильный ответ» означает, что оно выводит непустую строку, и эта строка при переводе в целое число равна правильному ответу, то есть значению \(n \cdot a - b\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 100\))  — количество наборов входных данных.

В единственной строке каждого набора входных данных вводится целое число \(n\) (\(1 \le n \le 100\))

Гарантируется, что во всех наборах данных \(n\) различны.

Выходные данные

Для каждого набора входных данных выведите ответ в следующем формате:

В первой строке выведите число \(x\) — количество плохих тестов для заданного \(n\).

В следующих \(x\) строках выведите по два числа \(a_i\) и \(b_i\) — такие числа, что решение K1o0n выдает на тест «\(n\) \(a_i\) \(b_i\)» выдаёт правильный ответ.

Примечание

В первом примере \(a = 20\), \(b = 18\) подходят, так как «\(\text{2}\)» \(\cdot 20 - 18 =\) «\(\text{22222222222222222222}\)» \(- 18 = 22 = 2 \cdot 20 - 18\)

B. Четность и Сумма

жадные алгоритмы Конструктив *1100

Дан массив \(a\) из \(n\) положительных целых чисел.

За одну операцию вы можете выбрать любую пару индексов \((i, j)\) такие, что \(a_i\) и \(a_j\) имеют различную четность, а затем заменить меньший из них на их сумму. Более формально:

  • Если \(a_i < a_j\), замените \(a_i\) на \(a_i + a_j\);
  • В противном случае замените \(a_j\) на \(a_i + a_j\).

Найдите минимальное количество операций, необходимых для того, чтобы все элементы массива имели одинаковую четность.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество операций, необходимое для достижения цели.

Примечание

В первом наборе входных данных все числа уже имеют одинаковую четность, поэтому совершать операции не требуется.

В третьем наборе входных данных мы можем выполнить две операции \((1, 2)\) и \((1, 3)\). Массив \(a\) преобразуется следующим образом: \(a = [\color{red}2, \color{red}3, 4] \longrightarrow [\color{red}5, 3, \color{red}4] \longrightarrow [5, 3, 9]\).

В четвертом наборе входных данных примером оптимальной последовательности операций является \((1, 2)\), \((1, 3)\), \((1, 4)\) и \((1, 4)\). Массив \(a\) преобразуется следующим образом: \(a = [\color{red}3, \color{red}2, 2, 8] \longrightarrow [\color{red}3, 5, \color{red}2, 8] \longrightarrow [\color{red}3, 5, 5, \color{red}8] \longrightarrow [\color{red}{11}, 5, 5, \color{red}8] \longrightarrow [11, 5, 5, 19]\).

E. Xpinxor Grix

битмаски дп Конструктив реализация *2700

Дана матрица \(a\) размера \(n \times m\), каждая ячейка которой содержит неотрицательное целое число. Число, находящееся на пересечении \(i\)-й строки и \(j\)-го столбца матрицы, называется \(a_{i,j}\).

Определим \(f(i)\) и \(g(j)\) как XOR всех чисел в \(i\)-й строке и \(j\)-м столбце соответственно. За одну операцию вы можете либо:

  • Выбрать любую строку \(i\), затем присвоить \(a_{i,j} := g(j)\) для каждого \(1 \le j \le m\); либо
  • Выбрать любой столбец \(j\), затем присвоить \(a_{i,j} := f(i)\) для каждого \(1 \le i \le n\).
Пример применения операции к столбцу \(2\) матрицы.

В этом примере, когда мы применяем операцию к столбцу \(2\), все элементы в этом столбце изменяются следующим образом:

  • \(a_{1,2} := f(1) = a_{1,1} \oplus a_{1,2} \oplus a_{1,3} \oplus a_{1,4} = 1 \oplus 1 \oplus 1 \oplus 1 = 0\)
  • \(a_{2,2} := f(2) = a_{2,1} \oplus a_{2,2} \oplus a_{2,3} \oplus a_{2,4} = 2 \oplus 3 \oplus 5 \oplus 7 = 3\)
  • \(a_{3,2} := f(3) = a_{3,1} \oplus a_{3,2} \oplus a_{3,3} \oplus a_{3,4} = 2 \oplus 0 \oplus 3 \oplus 0 = 1\)
  • \(a_{4,2} := f(4) = a_{4,1} \oplus a_{4,2} \oplus a_{4,3} \oplus a_{4,4} = 10 \oplus 11 \oplus 12 \oplus 16 = 29\)

Вы можете применять операции любое количество раз. Затем мы вычислим \(\textit{красоту}\) финальной матрицы, суммируя абсолютные разности между всеми парами её соседних ячеек.

Более формально, \(\textit{красота}(a) = \sum|a_{x,y} - a_{r,c}|\) для всех ячеек \((x, y)\) и \((r, c)\), если они соседние. Две ячейки считаются соседними, если они имеют общую сторону.

Найдите минимальную \(\textit{красоту}\) среди всех достижимых матриц.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 250\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 15\)) — количество строк и столбцов матрицы \(a\) соответственно.

Далее идут \(n\) строк, каждая из которых содержит \(m\) целых чисел \(a_{i,1}, a_{i,2}, \ldots, a_{i,m}\) (\(0 \le a_{i,j} < 2^{20}\)) — описание матрицы \(a\).

Гарантируется, что сумма \((n^2 + m^2)\) по всем наборам входных данных не превышает \(500\).

Выходные данные

Для каждого набора входных данных выведите одно целое число \(b\) — наименьшая возможная \(\textit{красота}\) матрицы.

Примечание

Обозначим \(r(i)\) как операцию первого типа, примененную к \(i\)-й строке, и \(c(j)\) как операцию второго типа, примененную к \(j\)-му столбцу.

В первом наборе входных данных вы можете применить операцию \(c(1)\), которая присвоит \(a_{1,1} := 1 \oplus 3 = 2\). Затем мы получим эту матрицу:

23

Во втором наборе входных данных вы можете применить операцию \(r(1)\), которая присвоит:

  • \(a_{1,1} := g(1) = 0 \oplus 5 = 5\)
  • \(a_{1,2} := g(2) = 1 \oplus 4 = 5\)
  • \(a_{1,3} := g(3) = 0 \oplus 4 = 4\)

Финальная матрица после выполнения операции:

554
544

В третьем наборе входных данных лучший способ достичь минимальной \(\textit{красота}\) — применить три операции: \(c(3)\), \(r(2)\) и \(c(2)\). Финальная матрица:

046
456

F1. Динамически управляемый робот (Легкая версия)

китайская теорема об остатках Конструктив математика Перебор теория чисел *2400

Это легкая версия задачи. Единственное отличие заключается в том, что в этой версии \(k \le n\). Вы можете делать взломы только в том случае, если обе версии задачи решены.

Дан прямоугольник размером \(w \times h\) на плоскости \(Oxy\), с точками \((0, 0)\) в нижнем левом углу и \((w, h)\) в верхнем правом углу прямоугольника.

У вас также есть робот, изначально находящийся в точке \((0, 0)\), и сценарий \(s\) из \(n\) символов. Каждый символ является L, R, U или D, что указывает роботу двигаться влево, вправо, вверх или вниз соответственно.

Робот может двигаться только внутри прямоугольника; в противном случае он изменит сценарий \(s\) следующим образом:

  • Если он пытается выйти за вертикальную границу, он меняет все символы L на R (и наоборот, все R на L).
  • Если он пытается выйти за горизонтальную границу, он меняет все символы U на D (и наоборот, все D на U).

Затем он продолжит двигаться, следуя измененному сценарию, начиная с того символа, который не смог выполнить.

Пример процесса движения робота, \(s = \texttt{"ULULURD"}\)

Сценарий \(s\) будет выполняться \(k\) раз подряд. Все изменения в строке \(s\) будут сохраняться даже при повторении. В процессе выполнения, сколько раз робот переместится в точку \((0, 0)\)? Обратите внимание, что начальная позиция не учитывается.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит четыре целых числа \(n\), \(k\), \(w\) и \(h\) (\(1 \le n, w, h \le 10^6\); \(1 \le k \le n\)).

Вторая строка содержит строку \(s\) размера \(n\) (\(s_i \in \{\texttt{L}, \texttt{R}, \texttt{U}, \texttt{D}\}\)) — сценарий, который необходимо выполнить.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество раз, когда робот переместится в \((0, 0)\) при выполнении сценария \(s\) \(k\) раз подряд.

Примечание

В первом наборе входных данных робот движется только вверх и вправо. В конце он занимает позицию \((2, 2)\), но никогда не посещает \((0, 0)\). Поэтому ответ равен \(0\).

Во втором наборе входных данных каждый раз при выполнении сценария робот посещает начало координат дважды. И поскольку \(k=2\), он посещает начало координат \(2 \cdot 2 = 4\) раза в общей сложности.

В третьем наборе входных данных визуализация показана ниже:

A. Разнообразная игра

жадные алгоритмы Конструктив реализация *800

Пётр, смотря стрим Сергея, придумал матрицу \(a\), состоящую из \(n\) строк и \(m\) столбцов (число в \(i\)-й строке и \(j\)-м столбце обозначается \(a_{i, j}\)), в которой содержатся все целые числа от \(1\) до \(n \cdot m\). Но расположение чисел ему не понравилось, и теперь он хочет придумать новую матрицу \(b\), состоящую из \(n\) строк и \(m\) столбцов, которая также будет содержать все целые числа от \(1\) до \(n \cdot m\), такую, что для любых \(1 \leq i \leq n, 1 \leq j \leq m\) выполняется \(a_{i, j} \ne b_{i, j}\).

Вам дана матрица \(a\), постройте любую матрицу \(b\), подходящую под требования Пети, или скажите, что это невозможно.

Поторопитесь! Иначе все свои деньги он задонатит на стрим, в поиске ответа на свой вопрос.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных дано два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 10\)) — количество строк и столбцов матрицы \(a\).

В следующих \(n\) строках записано по \(m\) целых чисел, описывающих матрицу \(a\). В \(i\)-й из этих строк записаны элементы матрицы \(a_{i, 1}, a_{i, 2}, \ldots, a_{i, m}\).

Гарантируется, что все числа матрицы \(a\) различны и \(1 \leq a_{i, j} \leq n \cdot m\).

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превышает \(5 \cdot 10^4\).

Выходные данные

Для каждого набора входных данных выведите \(n \cdot m\) целых чисел — любую подходящую матрицу \(b\), или \(-1\), если такой матрицы не существует.

Примечание

В первом наборе входных данных в матрице только один элемент, поэтому матрица \(b\) единственная и она не подходит.

Во втором наборе входных данных \(a_{1, 1} = 2 \neq 1 = b_{1, 1}\), \(a_{2, 1} = 1 \neq 2 = b_{2, 1}\).

B. Веселая игра

битмаски жадные алгоритмы Конструктив математика *1100

Вова очень любит операцию побитового исключающего ИЛИ (будем обозначать ее \(\oplus\)). Недавно, когда он ложился спать, он придумал веселую игру.

В начале игры Вова выбирает две бинарные последовательности \(s\) и \(t\) длины \(n\) и даёт их Ване. Бинарной последовательностью называется последовательность, состоящая только из чисел \(0\) и \(1\). Ваня может выбрать целые числа \(l, r\) такие, что \(1 \leq l \leq r \leq n\), и для всех \(l \leq i \leq r\) одновременно заменить \(s_i\) на \(s_i \oplus s_{i - l + 1}\), где \(s_i\) — это \(i\)-й элемент последовательности \(s\).

Чтобы игра была интересной, в ней должна быть возможность победить. Ваня побеждает, если за неограниченное количество действий может получить из последовательности \(s\) последовательность \(t\). По последовательностям \(s\) и \(t\) определите, будет ли игра интересной.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(q\) (\(1 \le q \le 10^{4}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных содержится одно целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длина последовательностей \(s\) и \(t\).

Во второй строке каждого набора входных данных содержится бинарная последовательность \(s\) длины \(n\).

В третьей строке каждого набора входных данных содержится бинарная последовательность \(t\) длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «Yes», если игра будет интересной, иначе выведите «No».

Вы можете вывести каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs» будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных Ваня не сможет изменить последовательность \(s\) с помощью единственного возможного действия выбора \(l = r = 1\).

Во втором наборе входных данных последовательности \(s\) и \(t\) уже равны.

В третьем наборе входных данных Ваня может действовать так:

  1. Выбрать \(l = 3\) и \(r = 5\), тогда \(s\) станет равно \(\mathtt{101101010}\).
  2. Выбрать \(l = 5\) и \(r = 6\), тогда \(s\) станет равно \(\mathtt{101111010}\).
  3. Выбрать \(l = 7\) и \(r = 7\), тогда \(s\) станет равно \(\mathtt{101111110}\).

D. Смешная игра

графы Деревья жадные алгоритмы Конструктив математика снм теория чисел *1900

У Вани есть граф из \(n\) вершин (пронумерованных от \(1\) до \(n\)) и массив \(a\) из \(n\) целых чисел, изначально в графе нет рёбер. Ване стало скучно, и чтобы ему стало весело, он решил выполнить \(n - 1\) операцию.

Операция под номером \(x\) (операции нумеруются по порядку начиная с \(1\)) заключается в следующем:

  • Выбрать \(2\) различных числа \(1 \leq u,v \leq n\), таких что \(|a_u - a_v|\) делится на \(x\).
  • Добавить в граф неориентированное ребро между вершинами \(u\) и \(v\).

Помогите Ване с помощью \(n - 1\) операции получить связный\(^{\text{∗}}\) граф, или скажите, что это невозможно.

\(^{\text{∗}}\)Граф называется связным, если в нём можно от любой вершины дойти до любой другой, двигаясь по рёбрам.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^{3}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных дано число \(n\) (\(1 \leq n \leq 2000\)) — количество вершин в графе.

Во второй строке каждого набора входных данных дано \(n\) чисел \(a_1, a_2, \cdots a_n\) (\(1 \leq a_i \leq 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2000\).

Выходные данные

Для каждого набора входных данных, если решения не существует, то выведите «No» (без кавычек).

Иначе выведите «Yes» (без кавычек), после этого выведите \(n - 1\) строку, в \(i\)-й из них выведите числа \(u\) и \(v\), которые надо выбрать на операции \(i\).

Вы можете вывести каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs» будут распознаны как положительный ответ).

Примечание

Рассмотрим второй набор входных данных.

  • Первая операция \((x = 1)\): можно соединить вершины \(4\) и \(1\), так как \(|a_4 - a_1| = |13 - 99| = |-86| = 86\), а \(86\) кратно \(1\).
  • Вторая операция \((x = 2)\): можно соединить вершины \(2\) и \(1\), так как \(|a_2 - a_1| = |7 - 99| = |-92| = 92\), а \(92\) кратно \(2\).
  • Третья операция \((x = 3)\): можно соединить вершины \(3\) и \(2\), так как \(|a_3 - a_2| = |1 - 7| = |-6| = 6\), а \(6\) кратно \(3\).
Из картинки видно, что получился связный граф.

F. Stardew Valley

графы Деревья Конструктив поиск в глубину и подобное *2500

Пеликан-таун представляет из себя \(n\) домов, соединенных \(m\) двунаправленными дорогами. На некоторых дорогах стоят NPC. Фермеру Бубе очень важно пройти по каждой дороге с NPC и поговорить с ними.

Помогите фермеру найти маршрут, для которого выполняются следующие условия:

  • Маршрут начинается у некоторого дома, проходит по некоторым дорогам, и заканчивается в том же доме.
  • Маршрут не проходит ни по какой дороге более одного раза (в обоих направлениях вместе).
  • Маршрут проходит по каждой дороге с NPC ровно один раз.
Обратите внимание, фермер может ходить по дорогам без NPC, также, вам не нужно минимизировать длину маршрута.

Гарантируется, что если в Пеликан-тауне оставить только дороги с NPC, то можно будет добраться от любого дома до любого другого.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \le t \le 10^{4}\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных даны два целых числа \(n\) и \(m\) (\(2 \leq n \leq 5 \cdot 10^5, 1 \leq m \leq 5 \cdot 10^5\)) — количество домов и дорог в Pelican town соответственно.

В каждой из следующих \(m\) строк даны три целых числа \(u\), \(v\) и \(c\) (\(1 \leq u, v \leq n, c = 0/1\)) — концы дороги и находятся ли NPC на этой дороге. Если \(c = 1\), то на дороге стоят NPC. Если \(c = 0\), то на дороге нет NPC.

В графе могут быть кратные ребра и петли, причем, если есть кратные ребра, на которых стоят NPC, то маршрут должен проходить по всем таким дорогам.

Гарантируется, что если в Пеликан-тауне оставить только дороги с NPC, то можно будет добраться от любого дома до любого другого.

Гарантируется, что сумма \(n\) и \(m\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если решения не существует, то выведите «No» (без кавычек).

Иначе выведите «Yes» (без кавычек), после этого выведите \(k\) — количество дорог в маршруте. В следующей строке выведите \(k + 1\) число — дома маршрута в порядке обхода. Обратите внимание, что первый дом должен совпадать с последним, поскольку маршрут циклический.

Если существуют несколько решений, вы можете вывести любое из них.

Вы можете вывести каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs» будут распознаны как положительный ответ).

Примечание

Обратите внимание, что в третьем наборе входных данных присутствуют кратные ребра \((5, 2)\). Вам обязательно нужно пройти по двум из них.

H. Fortnite

жадные алгоритмы игры интерактив Комбинаторика Конструктив математика Строки теория чисел хэши *3500

Это интерактивная задача!

Тимофей пишет соревнование, которое называется Capture the flag (или сокращённо CTF). Ему осталась одна задача, в которой нужно взломать систему безопасности. Вся система основана на полиномиальных хеш-функциях\(^{\text{∗}}\).

Тимофей может ввести в систему строку, состоящую из строчных латинских букв, и система выдаст её полиномиальный хеш. Чтобы взломать систему, Тимофею нужно узнать параметры полиномиального хеша, которые использует система (\(p\) и \(m\)).

У Тимофея осталось очень мало времени, поэтому он успеет сделать только \(3\) запроса. Помогите ему решить задачу.

\(^{\text{∗}}\) Полиномиальный хеш по основанию \(p\) и модулю \(m\) строки \(s\), состоящей из строчных латинских букв, длины \(n\) — это \((\mathrm{ord}(s_1) \cdot p ^ 0 + \mathrm{ord}(s_2) \cdot p ^ 1 + \mathrm{ord}(s_3) \cdot p ^ 2 + \ldots + \mathrm{ord}(s_n) \cdot p ^ {n - 1}) \bmod m\). Где за \(s_i\) обозначен \(i\)-й символ строки \(s\), за \(\mathrm{ord}(\mathrm{chr})\) — порядковый номер символа \(\mathrm{chr}\) в английском алфавите, а за \(x \bmod m\) остаток, который даёт \(x\) при делении на \(m\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных.

Гарантируется, что \(p\) и \(m\), которые использует система удовлетворяют условиям: \(26 < p \leq 50\) и \(p + 1 < m \leq 2 \cdot 10^9\).

Протокол взаимодействия

Чтобы сделать запрос в систему выведите ? \(s\), где \(s\) — строка, длины не более \(50\), хеш которой вы хотите узнать. В ответ на этот запрос вы получите полиномиальный хеш строки \(s\).

Чтобы вывести ответ, выведите ! \(p\) \(m\), где — \(p\) основание хеша, а \(m\) — модуль. После этого сразу же переходите к следующему набору входных данных.

Вы должны сделать не более \(3\) запросов ?, в противном случае вы получите вердикт Wrong Answer.

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.
Примечание

Ответом на первый запрос будет \((ord(a) \cdot 31^0 + ord(a) \cdot 31^1) \mod 59 = (1 + 1 \cdot 31) \mod 59 = 32\).

Ответом на второй запрос является \((ord(y) \cdot 31^0 + ord(b) \cdot 31^1) \mod 59 = (25 + 2 \cdot 31) \mod 59 = 28\).

C. Квадратирование

жадные алгоритмы Конструктив математика Перебор реализация теория чисел *1800

ikrpprpp нашел массив \(a\), состоящий из целых чисел. Ему нравится справедливость, поэтому он хочет сделать \(a\) честным — то есть сделать его неубывающим. Для этого он может выполнить акт справедливости на индексе \(1 \le i \le n\) массива, который заменит \(a_i\) на \(a_i ^ 2\) (элемент на позиции \(i\) на его квадрат). Например, если \(a = [2,4,3,3,5,3]\) и ikrpprpp решает выполнить акт справедливости на \(i = 4\), то \(a\) становится \([2,4,3,9,5,3]\).

Каково минимальное количество актов справедливости, необходимых для того, чтобы сделать массив неубывающим?

Входные данные

Первая строка содержит целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. За ним следует описание наборов входных данных.

Для каждого набора входных данных первая строка содержит целое число \(n\) — размер массива \(a\). Вторая строка содержит \(n\) (\(1 \le n \le 2 \cdot 10 ^5\)) целых числа \(a_1, a_2,\ldots, a_n\) (\(1 \le a_i \le 10 ^ 6\)).

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot {10}^5\).

Выходные данные

Для каждого набора входных данных выведите целое число — минимальное количество актов справедливости, необходимых для того, чтобы сделать массив \(a\) неубывающим. Если это невозможно, выведите \(-1\).

Примечание

В первом наборе входных данных нет необходимости выполнять акты справедливости. Массив сам по себе честен!

В третьем наборе входных данных можно доказать, что массив не может стать неубывающим.

В пятом наборе входных данных ikrpprppp может выполнить акт справедливости на индексе 3, затем акт справедливости на индексе 2 и, наконец, еще один акт справедливости на индексе 3. После этого \(a\) станет \([4, 9, 16]\).

B. Создайте три региона

Конструктив *1100

Задано клетчатое поле, состоящее из \(2\) строк и \(n\) столбцов. Каждая клетка поля либо свободна, либо заблокирована.

Свободная клетка \(y\) достижима из свободной клетки \(x\), если выполняется хотя бы одно из следующих условий:

  • \(x\) и \(y\) имеют общую сторону;
  • существует свободная клетка \(z\), такая что \(z\) достижима из \(x\), и \(y\) достижима из \(z\).

Связный регион — это множество свободных клеток поля, такое что все клетки в нем достижимы друг из друга, но добавление любой другой свободной клетки в множество нарушает это правило.

Например, рассмотрим следующую ситуацию, где белые клетки свободны, а темно-серые клетки заблокированы:

Здесь \(3\) региона, обозначенные красным, зеленым и синим цветами соответственно:

Заданное поле содержит не более \(1\) связного региона. Ваша задача — посчитать количество свободных клеток, удовлетворяющих следующему условию:

  • если клетку заблокировать, то количество связных регионов станет равно \(3\).
Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — количество столбцов.

\(i\)-я из следующих двух строк содержит описание \(i\)-й строки поля — строку \(s_i\), состоящую из \(n\) символов. Каждый символ является либо . (обозначающим свободную клетку), либо x (обозначающим заблокированную клетку).

Дополнительные ограничения на входные данные:

  • заданное поле содержит не более \(1\) связную область;
  • сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).
Выходные данные

Для каждого набора входных данных выведите одно целое число — количество клеток, при блокировке которых количество связных регионов станет равно \(3\).

Примечание

В первом наборе входных данных, если заблокировать клетку \((1, 3)\), количество регионов станет равно \(3\) (смотрите картинку в условии задачи).

C. Четные позиции

жадные алгоритмы Конструктив Структуры данных *1100

У Монокарпа была правильная скобочная последовательность \(s\) длины \(n\) (\(n\) — четное). Он даже придумал свой способ вычисления её стоимости.

Он знает, что в правильной скобочной последовательности (ПСП) каждой открывающей скобке соответствует парная ей закрывающая скобка. Поэтому он решил вычислить стоимость ПСП как сумму расстояний между парами соответствующих скобок.

Например, рассмотрим ПСП (())(). Она состоит из трех пар скобок:

  • (__)__: расстояние между скобками на позициях \(1\) и \(4\) равно \(4 - 1 = 3\);
  • _()___: расстояние равно \(3 - 2 = 1\);
  • ____(): расстояние равно \(6 - 5 = 1\).
Таким образом, стоимость (())() равна \(3 + 1 + 1 = 5\).

К сожалению, из-за повреждения данных Монокарп потерял все символы на нечетных позициях \(s_1, s_3, \dots, s_{n-1}\). Остались только символы на четных позициях (\(s_2, s_4, \dots, s_{n}\)). Например, (())() превратилась в _(_)_).

Монокарп хочет восстановить свою ПСП, разместив скобки на нечетных позициях. Но поскольку восстановленная ПСП может быть не уникальной, он хочет выбрать ПСП с минимальной стоимостью. Эта задача слишком сложна для Монокарпа, поэтому можете ли вы помочь ему?

Напоминание: Правильная скобочная последовательность — это строка, состоящая только из скобок, такая что эта строка, когда в неё вставляются 1-ы и +-ы, дает корректное математическое выражение. Например, (), (()) или (()())() являются ПСП, в то время как ), ()( или ())(() — не являются.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных. Далее следуют сами \(t\) наборов.

В первой строке каждого набора задано одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\); \(n\) — четное) — длина строки \(s\).

Во второй строке каждого набора задана строка \(s\) длины \(n\), где все символы на нечетных позициях равны '_' и все символы на четных позициях равны либо '(', либо ')'.

Дополнительные ограничения:

  • из \(s\) можно восстановить как минимум одну правильную скобочную последовательность;
  • сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).
Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальную стоимость правильной скобочной последовательности, которую можно получить из \(s\), заменив '_' на скобки.

Примечание

В первом наборе оптимально сделать \(s\) равной (())(). Стоимость \(s\) будет равна \(3 + 1 + 1 = 5\).

Во втором наборе единственный вариант — сделать \(s\) равной () со стоимостью \(1\).

В третьем наборе единственная возможная ПСП — ()()()() со стоимостью \(1 + 1 + 1 + 1 = 4\).

В четвертом наборе оптимально сделать \(s\) равной (())(()) со стоимостью \(3 + 1 + 3 + 1 = 8\).

A. Найти K различных точек с фиксированным центром

Конструктив математика реализация *800

Я не смог придумать хорошее название для этой задачи, поэтому решил поучиться у LeetCode.
— Сунь-Цзы, Искусство войны

Вам даны три целых числа \(x_c\), \(y_c\) и \(k\). (\(-100 \leq x_c, y_c \leq 100\), \(1 \leq k \leq 1000\)).

Найдите такой набор из \(k\) различных точек (\(x_1, y_1\)), (\(x_2, y_2\)), \(\ldots\), (\(x_k, y_k\)) с целочисленными координатами на двумерной координатной плоскости, такой, что

  • центр\(^{\text{∗}}\) этого набора имеет координаты (\(x_c, y_c\)).
  • \(-10^9 \leq x_i, y_i \leq 10^9\) для всех \(i\) от \(1\) до \(k\)

Можно доказать, что всегда существует хотя бы один набор из \(k\) различных точек, удовлетворяющий этим условиям.

\(^{\text{∗}}\)Центром набора из \(k\) точек (\(x_1, y_1\)), (\(x_2, y_2\)), \(\ldots\), (\(x_k, y_k\)) является точка \(\left( \frac{x_1 + x_2 + \ldots + x_k}{k}, \frac{y_1 + y_2 + \ldots + y_k}{k} \right)\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных содержит три целых числа \(x_c\), \(y_c\) и \(k\) (\(-100 \leq x_c, y_c \leq 100\), \(1 \leq k \leq 1000\)) — координаты центра и количество различных точек, которое необходимо вывести.

Гарантируется, что сумма \(k\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных выведите \(k\) строк, где \(i\)-я строка содержит два разделенных пробелом целых числа \(x_i\) и \(y_i\) (\(-10^9 \leq x_i, y_i \leq 10^9\)) — положение \(i\)-й точки.

Если ответов несколько, выведите любой из них. Можно показать, что при заданных ограничениях решение всегда существует.

Примечание

В первом наборе входных данных \(\left( \frac{10}{1}, \frac{10}{1} \right) = (10, 10)\).

Во втором наборе входных данных \(\left( \frac{-1 + 5 - 4}{3}, \frac{-1 -1 + 2}{3} \right) = (0, 0)\).

B. Минимизируйте подмассивы с одинаковой суммой

Конструктив математика теория чисел *1000

Как известно Фермер Джон любит перестановки, но мне они тоже нравятся!
— Сунь-Цзы, Искусство построения перестановок

Вам дана перестановка\(^{\text{∗}}\) \(p\) длины \(n\).

Найдите перестановку \(q\) длины \(n\), которая минимизирует количество пар (\(i, j\)) (\(1 \leq i \leq j \leq n\)) таких, что \(p_i + p_{i+1} + \ldots + p_j = q_i + q_{i+1} + \ldots + q_j\).

\(^{\text{∗}}\)Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)).

Следующая строка содержит \(n\) разделенных пробелом целых чисел \(p_1, p_2, \ldots, p_n\) (\(1 \leq p_i \leq n\)) — перестановка \(p\) длины \(n\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую любую перестановку \(q\) длины \(n\) такую, что \(q\) минимизирует количество пар.

Примечание

В первом наборе входных данных существует только одна пара (\(i, j\)) (\(1 \leq i \leq j \leq n\)) такая, что \(p_i + p_{i+1} + \ldots + p_j = q_i + q_{i+1} + \ldots + q_j\): пара (\(1, 2\)). Можно доказать, что не существует перестановки \(q\), для которой не существует пар.

C. Выполните операции и максимизируйте счёт

Бинарный поиск жадные алгоритмы Конструктив Перебор реализация *1900

Я вижу хендл satyam343. У меня идут мурашки по телу. Пожалуйста, в этот раз больше задач про медианы. Я их обожаю. Пожалуйста, satyam343, мы верим в тебя.
— Самый большой поклонник satyam343

Вам дан массив \(a\) длины \(n\) и целое число \(k\). Вам также дан бинарный массив \(b\) длины \(n\).

Вы можете выполнить следующую операцию не более \(k\) раз:

  • Выбрать индекс \(i\) (\(1 \leq i \leq n\)) такой, что \(b_i = 1\). Установить \(a_i = a_i + 1\) (т.е. увеличить \(a_i\) на \(1\)).

Ваш счёт определяется как \(\max\limits_{i = 1}^{n} \left( a_i + \operatorname{median}(c_i) \right)\), где \(c_i\) обозначает массив длины \(n-1\), который вы получаете, удаляя \(a_i\) из \(a\). Другими словами, ваш счёт — это максимальное значение \(a_i + \operatorname{median}(c_i)\) среди всех \(i\) от \(1\) до \(n\).

Найдите максимальный счёт, который можно получить при оптимальном выполнении операций.

Для произвольного массива \(p\), \(\operatorname{median}(p)\) определяется как \(\left\lfloor \frac{|p|+1}{2} \right\rfloor\)-й элемент в отсортированном \(p\). Например, \(\operatorname{median} \left( [3,2,1,3] \right) = 2\) и \(\operatorname{median} \left( [6,2,4,5,1] \right) = 4\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных начинается с двух целых чисел \(n\) и \(k\) (\(2 \leq n \leq 2 \cdot 10^5\), \(0 \leq k \leq 10^9\)) — длина \(a\) и количество операций, которые вы можете выполнить.

Следующая строка содержит \(n\) разделенных пробелом целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 10^9\)) — массив \(a\).

Следующая строка содержит \(n\) разделенных пробелом целых чисел \(b_1, b_2, \ldots, b_n\) (\(b_i\) равно \(0\) или \(1\)) — массив \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите на отдельной строке максимальное значение счёт, которое вы можете получить.

Примечание

Для первого набора входных данных оптимально выполнить \(5\) операций над обоими элементами и получить \(a = [8,8]\). Таким образом, максимальная оценка, которую мы можем получить, равна \(\max(8 + \operatorname{median}[8], 8 + \operatorname{median}[8]) = 16\), так как \(c_1 = [a_2] = [8]\). Можно доказать, что получить больший счёт невозможно.

Для второго набора входных данных вы не можете выполнить операции ни над одним элементом, поэтому \(a\) остается \([3,3,3]\). Таким образом, максимальная оценка, которую мы можем получить, равна \(3 + \operatorname{median}[3, 3] = 6\), так как \(c_1 = [a_2, a_3] = [3, 3]\). Можно доказать, что получить больший счёт невозможно.

B. Карточная игра

Конструктив Перебор реализация *1000

Сунит и Славик играют в карточную игру. Правила игры следующие:

  • Каждая карта имеет целочисленное значение от \(1\) до \(10\).
  • Каждый игрок получает \(2\) карты, которые лежат лицом вниз (поэтому игрок не знает свои карты).
  • Игра состоит ровно из двух раундов. В раунде оба игрока выбирают случайную неоткрытую карту и открывают её. Игрок, который открыл карту с более высоким значением, выигрывает раунд. В случае равенства никто не выигрывает раунд.
  • Игрок выигрывает игру, если он выигрывает строго больше раундов, чем другой игрок. В случае равенства никто не выигрывает игру.

Поскольку Сунит и Славик не лучшие друзья, вам нужно вычислить количество способов, при которых игра могла бы закончиться победой Сунита.

Для лучшего понимания, пожалуйста, ознакомьтесь с разделом примечаний.

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит \(4\) целых числа \(a_1\), \(a_2\), \(b_1\), \(b_2\) (\(1 \leq a_1, a_2, b_1, b_2 \leq 10\)), где \(a_1\) и \(a_2\) представляют карты Сунита, а \(b_1\) и \(b_2\) представляют карты Славика соответственно.

Выходные данные

Для каждого набора входных данных выведите одно целое число — количество игр, которые Сунит выиграет среди всех возможных игр.

Примечание

Рассмотрим первый набор входных данных, когда Славик начинает с карт, имеющих значения \(2\) и \(6\), а Сунит начинает с карт, имеющих значения \(3\) и \(8\). Игра может пройти \(4\) различными способами:

  • Сунит открывает \(3\), а Славик открывает \(2\). Сунит выигрывает первый раунд. Затем Сунит открывает \(8\), а Славик открывает \(6\). Сунит выигрывает второй раунд. Поскольку Сунит выиграл \(2\) раунда, он выигрывает игру.

  • Сунит открывает \(3\), а Славик открывает \(6\). Славик выигрывает первый раунд. Затем Сунит открывает \(8\), а Славик открывает \(2\). Сунит выигрывает второй раунд. Никто не выигрывает, так как оба игрока выиграли равное количество раундов.

  • Сунит открывает \(8\), а Славик открывает \(6\). Сунит выигрывает первый раунд. Затем Сунит открывает \(3\), а Славик открывает \(2\). Сунит выигрывает второй раунд. Поскольку Сунит выиграл \(2\) раунда, он выигрывает игру.

  • Сунит открывает \(8\), а Славик открывает \(2\). Сунит выигрывает первый раунд. Затем Сунит открывает \(3\), а Славик открывает \(6\). Славик выигрывает раунд. Никто не выигрывает, так как оба игрока выиграли равное количество раундов.

B. Сгенерируйте перестановку

Конструктив *800

В последовательности целых чисел \(a\) длины \(n\) каждый элемент изначально равен \(-1\).

У Мизуки есть две пишущие машинки, первая из которых пишет слева направо с указателем, изначально указывающим на \(1\), а вторая пишет буквы справа налево с указателем, изначально указывающим на \(n\).

Мизуки выбирает одну из пишущих машинок и выполняет с ней следующие операции, пока \(a\) не превратится в перестановку элементов \([1, 2, \ldots, n]\):

  • Запись числа: записать минимальное целое положительное число, не встречающееся в \(a\), на позицию \(a_i\). Здесь \(i\) — позиция, на которую указывает указатель. Такая операция может быть выполнена только при \(a_i = -1\).
  • Возврат каретки: возврат указателя на начальную позицию (т.е. \(1\) для первой машинки, \(n\) для второй).
  • Перемещение указателя: переместить указатель на следующую позицию. Пусть \(i\) — это позиция, на которую указывает указатель до этой операции. Если Мизуки использует первую пишущую машинку, то \(i := i + 1\), а в противном случае \(i := i - 1\). Такая операция может быть выполнена только в том случае, если после ее выполнения выполняется условие \(1 \le i \le n\).

Ваша задача — построить любую перестановку \(p\) длины \(n\), такую, чтобы минимальное количество операций возврата каретки, необходимое для того, чтобы получить \(a = p\), было одинаковым независимо от того, какой машинкой пользуется Мизуки.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 2 \cdot 10^5\)) — длина перестановки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите строку из \(n\) целых чисел, представляющих перестановку \(p\) длины \(n\), такую, что минимальное количество операций возврата каретки, необходимое для того, чтобы получить \(a = p\), было одинаковым независимо от того, какой пишущей машинкой пользуется Мизуки, или \(-1\), если это невозможно.

Если существует несколько допустимых перестановок, вы можете вывести любую из них.

Примечание

В первом наборе входных данных можно сделать \(a = p = [1]\), используя \(0\) операций возврата каретки.

Для второго набора входных данных найдем необходимое количество возвратов каретки, чтобы получить \(a = p = [1, 2]\).

Если Мизуки использует первую пишущую машинку:

  • Запись числа: записать \(1\) в \(a_1\), \(a\) станет \([1, -1]\).
  • Перемещение указателя: переместить указатель на следующую позицию. (т.е. \(2\)).
  • Запись числа: записать \(2\) в \(a_2\), \(a\) станет \([1, 2]\).

Если Мизуки использует вторую пишущую машинку:

  • Перемещение указателя: переместить указатель на следующую позицию. (т.е. \(1\)).
  • Запись числа: записать \(1\) в \(a_1\), \(a\) станет \([1, -1]\).
  • Возврат каретки: вернуть указатель на \(2\).
  • Запись числа: записать \(2\) в \(a_2\), \(a\) станет \([1, 2]\).

Можно доказать, что минимальное количество возвратов каретки, необходимое для преобразования \(a\) в \(p\) при использовании первой пишущей машинки, равно \(0\), а при использовании второй — \(1\), поэтому данная перестановка не удовлетворяет условию.

Аналогично, \(p = [2, 1]\) также не является допустимой, поэтому для \(n = 2\) решения не существует.

В третьем примере можно сделать \(a = p = [3, 1, 2]\), требующую \(1\) возврат каретки с использованием первой или второй пишущей машинки. Можно показать, что нельзя записать \(p\) используя \(0\) возвратов каретки.

С помощью первой пишущей машинки можно записать перестановку так:

  • Переместить указатель: переместить указатель на следующую позицию (то есть \(2\))
  • Записать число: записать \(1\) в позицию \(a_2\), \(a\) становится \([-1, 1, -1]\)
  • Переместить указатель: переместить указатель на следующую позицию (то есть \(3\))
  • Записать число: записать \(2\) в позицию \(a_3\), \(a\) становится \([-1, 1, 2]\)
  • Возврат каретки: вернуть указатель в позицию \(1\).
  • Записать число: записать \(3\) в позицию \(a_1\), \(a\) становится \([3,1,2]\)

Используя вторую машинку, можно сделать так:

  • Переместить указатель: переместить указатель на следующую позицию (то есть \(2\))
  • Записать число: записать \(1\) в позицию \(a_2\), \(a\) становится \([-1, 1, -1]\)
  • Возврат каретки: вернуть указатель в позицию \(3\).
  • Записать число: записать \(2\) to \(a_3\), \(a\) становится \([-1, 1, 2]\)
  • Переместить указатель: переместить указатель на следующую позицию (то есть \(2\))
  • Переместить указатель: переместить указатель на следующую позицию (то есть \(1\))
  • Записать число: записать \(3\) to \(a_1\), \(a\) становится \([3, 1, 2]\)

D. Самая длинная подпоследовательность

жадные алгоритмы Конструктив Перебор реализация Структуры данных *1900

Вам дана последовательность целых чисел \(a_1, a_2, \ldots, a_n\). Пусть \(S\) — множество всех непустых подпоследовательностей \(a\), в которых нет одинаковых элементов. Ваша цель — найти самую длинную последовательность в \(S\). Если таких несколько, найдите ту, которая минимизирует лексикографический порядок после умножения членов в нечетных позициях на \(-1\).

Например, при \(a = [3, 2, 3, 1]\), \(S = \{[1], [2], [3], [2, 1], [2, 3], [3, 1], [3, 2], [2, 3, 1], [3, 2, 1]\}\). Тогда \([2, 3, 1]\) и \([3, 2, 1]\) будут самыми длинными, а \([3, 2, 1]\) будет ответом, так как \([-3, 2, -1]\) лексикографически меньше, чем \([-2, 3, -1]\).

Последовательность \(c\) является подпоследовательностью последовательности \(d\), если \(c\) может быть получена из \(d\) путем удаления нескольких (возможно, нуля или всех) элементов.

Последовательность \(c\) лексикографически меньше последовательности \(d\) тогда и только тогда, когда выполняется одно из следующих условий:

  • \(c\) является префиксом \(d\), но \(c \ne d\);
  • в первой позиции, где \(c\) и \(d\) различаются, последовательность \(c\) имеет меньший элемент, чем соответствующий элемент в \(d\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \le n \le 3 \cdot 10^5\)) — длина \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — последовательность \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите ответ в следующем формате:

Выведите целое число \(m\) в первой строке — длину \(b\).

Затем выведите \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) во второй строке — последовательность \(b\).

Примечание

В первом примере \(S = \{[1], [2], [3], [1, 3], [2, 1], [2, 3], [3, 1], [3, 2], [2, 1, 3], [3, 2, 1]\}\). Среди них \([2, 1, 3]\) и \([3, 2, 1]\) — самые длинные, а \([-3, 2, -1]\) лексикографически меньше \([-2, 1, -3]\), поэтому \([3, 2, 1]\) — ответ.

Во втором примере \(S = \{[1]\}\), поэтому \([1]\) — ответ.

A. Дистанционная раскраска

Конструктив математика реализация *800

Вы получили сетку размером \(n\times m\) от таинственного источника. Источник также дал вам волшебную целую положительную константу \(k\).

Источник сказал вам покрасить сетку некоторыми цветами, удовлетворяя следующее условие:

  • Если \((x_1,y_1)\), \((x_2,y_2)\) — это две различные клетки одинакового цвета, то \(\max(|x_1-x_2|,|y_1-y_2|)\ge k\).

Вам не нравится использовать слишком много цветов. Пожалуйста, найдите минимальное количество цветов, необходимое для раскрашивания сетки.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит три целых числа \(n\), \(m\), \(k\) (\(1\le n,m,k\le10^4\)) — размеры сетки и магическая константа.

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество цветов, необходимое, чтобы покрасить сетку.

Примечание

В первом наборе входных данных одной из оптимальных конструкций является:

Во втором наборе входных данных цвета всех ячеек должны быть попарно различными, поэтому ответ — \(5\).

B. Игра с удалением

игры Конструктив *1000

Алиса получила перестановку \(a_1, a_2, \ldots, a_n\) чисел \([1,2,\ldots,n]\), а Боб — другую перестановку \(b_1, b_2, \ldots, b_n\) чисел \([1,2,\ldots,n]\). Они собираются сыграть в игру с этими массивами.

На каждом ходу игры происходят следующие события по порядку:

  • Алиса выбирает первый или последний элемент своего массива и удаляет его из массива;
  • Боб выбирает первый или последний элемент своего массива и удаляет его из массива.

Игра продолжается в течение \(n-1\) ходов, после чего в обоих массивах останется ровно по одному элементу: \(x\) в массиве \(a\) и \(y\) в массиве \(b\).

Если \(x=y\), выигрывает Боб, в противном случае — Алиса. Найдите, кто из игроков выиграет, если оба игрока играют оптимально.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

В первой строке каждого набора входных данных дано целое число \(n\) (\(1\le n\le 3\cdot 10^5\)).

Следующая строка содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1\le a_i\le n\), все \(a_i\) различны) — перестановка Алисы.

Следующая строка содержит \(n\) целых чисел \(b_1,b_2,\ldots,b_n\) (\(1\le b_i\le n\), все \(b_i\) различны) — перестановка Боба.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в единственной строке имя победителя, предполагая, что оба игрока играют оптимально. Если выигрывает Алиса, выведите \(\texttt{Alice}\); в противном случае выведите \(\texttt{Bob}\).

Примечание

В первом наборе входных данных Боб может выиграть, удаляя те же элементы, что и Алиса.

Во втором наборе входных данных Алиса может удалить \(3\) на первом ходу, а затем на втором ходу удалить элемент, который отличается от того, что Боб удалил на первом ходу, чтобы выиграть игру.

C. Черепаха и хорошие пары

жадные алгоритмы Конструктив сортировки Строки *1200

Черепаха дает вам строку \(s\), состоящую из строчных латинских букв.

Черепаха считает пару целых чисел \((i, j)\) (\(1 \le i < j \le n\)) приятной парой, если и только если существует целое число \(k\), такое что \(i \le k < j\) и выполняются оба из следующих двух условий:

  • \(s_k \ne s_{k + 1}\);
  • \(s_k \ne s_i\) или \(s_{k + 1} \ne s_j\).

Кроме того, Черепаха считает пару целых чисел \((i, j)\) (\(1 \le i < j \le n\)) хорошей парой, если и только если \(s_i = s_j\) или \((i, j)\) является приятной парой.

Черепаха хочет переставить буквы в строке \(s\) так, чтобы количество хороших пар было максимизировано. Пожалуйста, помогите ей!

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^4\)). Описание наборов следует далее.

Первая строка каждого наборов содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — длину строки.

Вторая строка каждого наборов содержит строку \(s\) длиной \(n\), состоящую из строчных латинских букв.

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора выведите строку \(s\) после перестановки букв, которая максимизирует количество хороших пар. Если есть несколько ответов, выведите любой из них.

Примечание

В первом наборе \((1, 3)\) является хорошей парой в строке из переставленных букв. Можно заметить, что мы не можем переставить буквы так, чтобы количество хороших пар было больше \(1\). bac и cab также могут быть ответом.

Во втором наборе \((1, 2)\), \((1, 4)\), \((1, 5)\), \((2, 4)\), \((2, 5)\), \((3, 5)\) являются хорошими парами в строке из переставленных букв. efddd также может быть ответом.

A. Простой палиндром

жадные алгоритмы Комбинаторика Конструктив математика *900

Нарек должен провести 2 часа с детьми в детском саду. Он хочет научить их спортивному программированию, и их первый урок посвящен палиндромам.

Нарек выяснил, что дети знают только гласные буквы английского алфавита (буквы \(\mathtt{a}\), \(\mathtt{e}\), \(\mathtt{i}\), \(\mathtt{o}\) и \(\mathtt{u}\)), поэтому Нареку нужно составить строку, состоящую только из гласных. После составления строки он попросит детей посчитать количество подпоследовательностей, которые являются палиндромами. Нарек хочет, чтобы это было просто, поэтому он ищет строку, для которой количество палиндромных подпоследовательностей минимально.

Помогите Нареку найти строку длины \(n\), состоящую из строчных гласных латинских букв (буквы \(\mathtt{a}\), \(\mathtt{e}\), \(\mathtt{i}\), \(\mathtt{o}\) и \(\mathtt{u}\)), которая минимизирует количество палиндромных\(^{\dagger}\) подпоследовательностей\(^{\ddagger}\) в ней.

\(^{\dagger}\) Строка называется палиндромом, если она читается одинаково слева направо и справа налево.

\(^{\ddagger}\) Строка \(t\) является подпоследовательностью строки \(s\), если \(t\) можно получить из \(s\) путем удаления нескольких (возможно, ни одного или всех) символов из \(s\) и конкатенации оставшихся, не меняя их порядок. Например, \(\mathtt{odocs}\) является подпоследовательностью \(\texttt{c}{\color{red}{\texttt{od}}}\texttt{ef}{\color{red}{\texttt{o}}}\texttt{r}{\color{red}{\texttt{c}}}\texttt{e}{\color{red}{\texttt{s}}}\).

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание каждого набора входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 100\)) — длину строки.

Выходные данные

Для каждого набора входных данных выведите любую строку длины \(n\), которая удовлетворяет вышеуказанным условиям.

Примечание

В первом примере \(\texttt{uo}\) имеет только три палиндромные подпоследовательности: \(\texttt{u}\), \(\texttt{o}\) и пустую строку. Можно показать, что нет ответа лучше.

В третьем примере \(\texttt{oeiiua}\) имеет только восемь палиндромных подпоследовательностей: \(\texttt{o}\), \(\texttt{e}\), \(\texttt{i}\), \(\texttt{i}\), \(\texttt{u}\), \(\texttt{a}\), \(\texttt{ii}\) и пустую строку. Можно показать, что нет ответа лучше.

A. Ирис и игра на дереве

графы Деревья жадные алгоритмы игры Конструктив поиск в глубину и подобное *1700

У Ирис есть дерево, корень которого находится в вершине \(1\). Каждая вершина имеет значение \(\mathtt 0\) или \(\mathtt 1\).

Рассмотрим лист дерева (вершина \(1\) никогда не считается листом) и определим его вес. Построим строку, сформированную значениями вершин на пути от корня до этого листа. Тогда вес листа — это разность количества вхождений подстроки \(\mathtt{10}\) и количества вхождений подстроки \(\mathtt{01}\) в этой строке.

Возьмем следующее дерево в качестве примера. Зеленые вершины имеют значение \(\mathtt 1\), в то время как белые вершины имеют значение \(\mathtt 0\).

  • Посчитаем вес листа \(5\): сформированная строка равна \(\mathtt{10110}\). Количество вхождений подстроки \(\mathtt{10}\) равно \(2\), количество вхождений подстроки \(\mathtt{01}\) равно \(1\), так что разность равна \(2 - 1 = 1\).
  • Посчитаем вес листа \(6\): сформированная строка равна \(\mathtt{101}\). Количество вхождений подстроки \(\mathtt{10}\) равно \(1\), количество вхождений подстроки \(\mathtt{01}\) равно \(1\), так что разность равна \(1 - 1 = 0\).

Оценкой дерева назовём количество листьев с ненулевым весом в дереве.

Однако значения некоторых вершин ещё не определены и будут даны вам как \(\texttt{?}\). Заполнение пропусков было бы слишком скучным, поэтому Ирис собирается пригласить Дору поиграть в игру. На каждом ходу одна из девочек выбирает любую из оставшихся вершин со значением \(\texttt{?}\) и изменяет её значение на \(\mathtt{0}\) или \(\mathtt{1}\), при этом Ирис ходит первой. Игра продолжается до тех пор, пока в дереве не останется вершин со значением \(\mathtt{?}\). Ирис стремится максимизировать оценку дерева, в то время как Дора стремится минимизировать её.

Предполагая, что обе девочки играют оптимально, определите итоговую оценку дерева.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 5\cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 10^5\)) — количество вершин в дереве.

Каждая из следующих \(n - 1\) строк содержит два целых числа \(u\) и \(v\) (\(1 \leq u, v \leq n\)) — обозначающие ребро между вершинами \(u\) и \(v\).

Гарантируется, что данные рёбра образуют дерево.

Последняя строка содержит строку \(s\) длины \(n\). \(i\)-й символ строки \(s\) представляет значение вершины \(i\). Гарантируется, что \(s\) содержит только символы \(\mathtt{0}\), \(\mathtt{1}\) и \(\mathtt{?}\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — итоговую оценку дерева.

Примечание

В первом наборе входных данных значения во всех вершинах уже определены. Существует три различных пути от корня до листа:

  • От вершины \(1\) до вершины \(2\). Сформированная строка равна \(\mathtt{01}\), так что вес листа равен \(0-1=-1\).
  • От вершины \(1\) до вершины \(3\). Сформированная строка равна \(\mathtt{00}\), так что вес листа равен \(0-0=0\).
  • От вершины \(1\) до вершины \(4\). Сформированная строка равна \(\mathtt{01}\), так что вес листа равен \(0-1=-1\).

Таким образом, есть два листа с ненулевым весом, так что оценка дерева равна \(2\).

Во втором наборе входных данных одна из последовательностей оптимальных ходов для двух игроков может быть следующей:

  • Ирис выбирает изменить значение вершины \(3\) на \(\mathtt 1\).
  • Дора выбирает изменить значение вершины \(1\) на \(\mathtt 0\).
  • Ирис выбирает изменить значение вершины \(2\) на \(\mathtt 0\).

Итоговое дерево выглядит следующим образом:

Единственный лист с ненулевым весом — это \(3\), так что оценка дерева равна \(1\). Обратите внимание, что это может быть не единственная последовательность оптимальных ходов для Ирис и Доры.

F. Краски Доры

графы Комбинаторика Конструктив Перебор реализация *3500

К сожалению, Дора пролила краску, когда рисовала мурал в классе. Дора рассматривает мурал как матрицу \(b\) размера \(n \times n\). Изначально \(b_{i,j} = 0\) для всех \(1 \le i, j \le n\).

У Доры есть только две кисти, которые имеют два разных цвета. За одну операцию она может покрасить матрицу одной из двух кистей:

  • Первая кисть имеет цвет \(1\) и может покрасить один столбец матрицы. То есть, Дора выбирает целое число \(1 \leq j \leq n\) и присваивает \(b_{i,j} := 1\) для всех \(1 \leq i \leq n\);
  • Вторая кисть имеет цвет \(2\) и может покрасить одну строку матрицы. То есть, Дора выбирает целое число \(1 \leq i \leq n\) и присваивает \(b_{i,j} := 2\) для всех \(1 \leq j \leq n\).

Дора раскрашивает матрицу так, чтобы полученная матрица \(b\) содержала только \(1\) и \(2\).

Для матрицы \(b\) обозначим \(f(b)\) как минимальное количество операций, необходимых, чтобы превратить начальную матрицу (содержащую только \(0\)) в \(b\). Красота матрицы \(b\) равна количеству способов раскрасить начальную матрицу за ровно \(f(b)\) операций, чтобы превратить её в \(b\). Если нет способа превратить начальную матрицу в \(b\), то красота \(b\) равна \(0\).

Однако Дора сделала случайную ошибку. В матрице \(a\), которую вы получили, ровно один элемент отличается от настоящей матрицы \(b\). То есть, существует ровно одна пара \((i, j)\) такая, что \(a_{i, j} = 3 - b_{i, j}\).

Пожалуйста, помогите Доре вычислить ожидаемую красоту настоящей матрицы \(b\) по модулю \(998\,244\,353\) (все возможные \(n^2\) ошибок имеют равную вероятность).

Поскольку размер матрицы слишком велик, Дора скажет вам только позиции \(m\) элементов цвета \(1\), а остальные \(n^2-m\) элементов имеют цвет \(2\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \leq n \leq 2 \cdot 10^5\), \(0 \leq m \leq \min(10^6, n^2)\)) — размер матрицы и количество элементов цвета \(1\).

Затем следуют \(m\) строк, каждая из которых содержит два положительных целых числа \(x_i\) и \(y_i\) (\(1 \leq x_i, y_i \leq n\)) — обозначающие, что \(a_{x_i, y_i} = 1\).

Гарантируется, что если \(i \neq j\), то \((x_i, y_i) \neq (x_j, y_j)\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(4\cdot10^5\), а сумма \(m\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — ожидаемую красоту настоящей матрицы \(b\), по модулю \(998\,244\,353\).

Примечание

В первом наборе входных данных матрица \(a = \left[\begin{matrix}1&1\\2&2\end{matrix}\right]\). Рассмотрим изменение элемента \((1,1)\) для вычисления ответа.

Можно доказать, что минимальное количество операций для раскрашивания начальной матрицы в \(\left[\begin{matrix}2&1\\2&2\end{matrix}\right]\) равно \(3\). Сначала мы можем покрасить первую строку в цвет \(2\), затем покрасить второй столбец в цвет \(1\), и наконец покрасить вторую строку в цвет \(2\). Процесс выглядит следующим образом:

\(\)\left[\begin{matrix}0&0\\0&0\end{matrix}\right]\Rightarrow\left[\begin{matrix}2&2\\0&0\end{matrix}\right]\Rightarrow\left[\begin{matrix}2&1\\0&1\end{matrix}\right]\Rightarrow\left[\begin{matrix}2&1\\2&2\end{matrix}\right]\(\)

Можно доказать, что это единственный способ раскрасить матрицу за \(3\) операции. Таким образом, красота матрицы \(\left[\begin{matrix}2&1\\2&2\end{matrix}\right]\) равна \(1\). Аналогично, если изменить любой другой элемент матрицы, красота всегда равна \(1\), поэтому ожидаемая красота настоящей матрицы \(b\) равна \(1\).

Во втором наборе входных данных матрица \(a = \left[\begin{matrix}1&2\\2&2\end{matrix}\right]\). Рассмотрим изменение элемента \((2, 2)\) для вычисления ответа.

Можно доказать, что невозможно раскрасить начальную матрицу в \(\left[\begin{matrix}1&2\\2&1\end{matrix}\right]\), поэтому её красота равна \(0\). Если изменить любой другой элемент матрицы, красота всегда равна \(2\), поэтому ожидаемая красота равна \(\frac{0 + 2 + 2 + 2}{4} = \frac{6}{4} \equiv 499\,122\,178 \pmod {998\,244\,353}\).

A. Экзамен Сакурако

жадные алгоритмы Конструктив математика Перебор *800

Сегодня у Сакурако экзамен по математике. Учитель дал массив, который состоит из \(a\) единиц и \(b\) двоек.

В массиве Сакурако должна поставить перед каждым элементом либо '+', либо '-' так, чтобы сумма всех элементов массива была равна \(0\).

Сакурако не уверена, возможно ли решить эту задачу, определите, существует ли способ расставить знаки так, чтобы сумма всех элементов массива была равна \(0\).

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\le t\le 100\))  — количество наборов входных данных.

Единственная строка каждого набора содержит два целых числа \(a\) и \(b\) (\(0\le a,b<10\))  — количество '1' и количество '2' в массиве.

Выходные данные

Для каждого набора выведите «Yes», если вы можете сделать сумму всего массива равной \(0\), и «No» в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание
  1. \(a=0\), \(b=1\): это означает, что массив равен \([2]\) — невозможно добавить знаки '+' или '-' так, чтобы получить в результате \(0\);
  2. \(a=0\), \(b=3\): это означает, что массив равен \([2, 2, 2]\) — невозможно добавить знаки '+' или '-' так, чтобы получить в результате \(0\);
  3. \(a=2\), \(b=0\): это означает, что массив равен \([1, 1]\) — возможно добавить знаки '+' или '-' так, чтобы получить в результате \(0\) (\(+1-1=0\));
  4. \(a=2\), \(b=3\): это означает, что массив равен \([1, 1, 2, 2, 2]\) — возможно добавить знаки '+' или '-' так, чтобы получить в результате \(0\) (\(+1+1-2-2+2=0\));

A. Четкая симметрия

дп Конструктив математика *1700

Рассмотрим некоторую квадратную матрицу A со стороной n, состоящую из нулей и единиц. Пронумеруем ее строки от 1 до n сверху вниз и столбцы от 1 до n слева направо. Элемент матрицы, находящийся на пересечении i-ой строки и j-го столбца, будем обозначать Ai, j.

Назовем матрицу A четкой, если никакие две клетки, в которых стоят единицы, не имеют общей стороны.

Назовем матрицу A симметричной, если она в точности совпадает с матрицами, образованными из нее горизонтальным и/или вертикальным отражением. Формально, для любой пары (i, j) (1 ≤ i, j ≤ n) оба следующих условия должны быть выполнены: Ai, j = An - i + 1, j и Ai, j = Ai, n - j + 1.

Остротой матрицы A назовем количество единиц в ней.

Ваша задача — по заданному числу x найти минимальное натуральное число n такое, что существует четкая симметричная матрица A со стороной n и остротой x.

Входные данные

В единственной строке записано целое число x (1 ≤ x ≤ 100) — требуемая острота матрицы.

Выходные данные

Выведите единственное число — искомое значение n.

Примечание

Соответствующие примерам матрицы приведены на рисунке:

A. Блендер Жана

Конструктив математика *800

Сегодня в «РФМШ» прошла ярмарка клубов. Для того чтобы прорекламировать свой клуб кондитеров, Жан решил продемонстрировать мощность своего блендера.

Для того чтобы продемонстрировать мощность своего блендера, у Жана есть \(n\) фруктов.

Блендер может смешивать максимум \(x\) фруктов в секунду.

Каждую секунду Жан может положить в блендер до \(y\) фруктов. После этого блендер будет смешивать \(\min(x, c)\) фруктов, где \(c\) — количество фруктов внутри блендера. После смешивания смешанные фрукты удаляются из блендера.

Помогите Жану определить минимальное количество времени, необходимое для того, чтобы смешать все фрукты.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(0 \le n \le 10^9\)) — количество фруктов у Жана.

Вторая строка каждого набора входных данных содержит два целых числа \(x\) и \(y\) (\(1 \le x, y \le 10^9\)) — количество фруктов, которые блендер может смешивать за секунду, и количество фруктов, которые Жан может положить в блендер за секунду.

Выходные данные

Для каждого набора входных данных выведите единственное число — минимальное количество секунд, необходимое для смешивания всех фруктов.

Примечание

В первом наборе входных данных можно сперва положить в блендер \(2\) фрукта. После этого блендер смешает эти \(2\) фрукта, и в итоге в блендере останутся \(0\) фруктов. После этого мы можем положить в блендер \(3\) фрукта, после чего блендер смешает эти \(3\) фрукта.

Во втором наборе входных данных можно \(3\) раза положить в блендер \(1\) фрукт.

В третьем наборе входных данных можно положить в блендер сперва \(3\) фрукта, потом еще \(3\).

B. Бой на выживание

жадные алгоритмы Конструктив математика *900

Ералим, будучи боссом мафии, управляет группой из \(n\) бойцов. Боец \(i\) обладает рейтингом \(a_i\).

Ералим устраивает турнир из \(n - 1\) боёв, в каждом из которых выбираются два ещё не выбывших бойца \(i\) и \(j\) (\(1 \le i < j \le n\)). В результате боя боец \(i\) выбывает из турнира, а рейтинг бойца \(j\) уменьшается на величину рейтинга бойца \(i\). То есть \(a_j\) уменьшается на \(a_i\). Обратите внимание, что рейтинг бойца \(j\) может стать отрицательным. При этом номера бойцов не меняются.

Ералим хочет узнать, какой максимальный рейтинг сможет сохранить последний оставшийся боец, если он будет выбирать их для боёв оптимальным образом.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество бойцов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots a_n\) (\(1 \le a_i \le 10^9\)) — рейтинги бойцов.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число – какой максимальный рейтинг сможет сохранить последний оставшийся боец.

Примечание

В первом примере можно организовать бой между бойцами с индексами \(1\) и \(2\), где боец с индексом \(2\) выиграет. Тогда рейтинг последнего бойца, то есть бойца с индексом \(2\), будет \(1 - 2 = -1\).

Во втором примере можно сначала провести бой между бойцами с индексами \(1\) и \(2\), где победит боец с индексом \(2\), а затем провести бой между бойцами с индексами \(2\) и \(3\), где победит боец с индексом \(3\).

Рейтинг бойца с индексом \(2\) после первого боя будет \(2 - 2 = 0\). Рейтинг бойца с индексом \(3\) после второго боя будет \(8 - 0 = 8\).

C. Взлом пароля

интерактив Конструктив Строки *1400

Димаш узнал, что Мансур написал про него что-то очень нехорошее своему знакомому, поэтому он решил во что бы ни стало узнать его пароль и узнать, что же именно он написал.

Поверив в силу своего пароля, Мансур сообщил, что его пароль — это бинарная строка размера \(n\). А также он готов отвечать на вопросы Димаша следующего вида:

Димаш говорит бинарную строку \(t\), и Мансур отвечает, правда ли, что \(t\) является подстрокой его пароля.

Помогите Димашу узнать пароль не более чем за \(2n\) операций, иначе Мансур поймет подвох и перестанет с ним общаться.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Протокол взаимодействия

В начале каждого набора входных данных вначале прочитайте \(n\) (\(1 \le n \le 100\)) — размер бинарной строки. Затем приступайте к ее угадыванию.

Для угадывания каждой строки \(s\) вы можете сделать не более \(2n\) запросов следующего вида:

  • «? t», где \(t\) — бинарная строка, где (\(1 \le |t| \le n\)).

В ответ на этот запрос вы получите \(1\), если \(t\) является подстрокой \(s\), и \(0\) в противном случае.

Когда вы узнаете ответ, выведите одну строку следующего формата:

  • «! s», где \(s\) — бинарная строка размера \(n\).

После этого переходите к решению следующего набора входных данных.

Если вы сделаете некорректную попытку или превысите лимит в \(2n\) попыток, вы считаете \(-1\) вместо ответа и получите вердикт Неправильный ответ. В таком случае ваша программа должна немедленно завершиться, чтобы избежать неопределенных вердиктов.

После вывода запросов не забудьте выводить символ перевода строки и сбрасывать буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы:

Для взломов используйте следующий формат:

Первая строка должна содержать одно целое число \(t\) (\(1\le t\le 100\)) — количество наборов входных данных.

Первая строка каждого набора должна содержать одно число \(n\) (\(1 \le n \le 100\)) — длину строки. А вторая строка должна содержать бинарную строку размера \(n\).

Примечание

В первом примере задана строка \(010\). Поэтому ответы на запросы следующие:

«? 00» \(00\) не является подстрокой \(010\), поэтому ответ \(0\).

«? 000» \(000\) не является подстрокой, поэтому ответ \(0\).

«? 010» \(010\) является подстрокой, поэтому ответ \(1\).

Во втором примере задана строка \(1100\), в третьем \(0110\), а в четвертом \(10\).

C1. Координация презентации (простая версия)

жадные алгоритмы Конструктив *1300

Это простая версия задачи. В двух версиях отличаются ограничения на \(q\) и ограничение по времени отличаются. В этой версии \(q=0\). Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Команда, состоящая из \(n\) участников, пронумерованных от \(1\) до \(n\), должна представить слайд-шоу на большом собрании. Слайд-шоу содержит \(m\) слайдов.

Имеется массив \(a\) длины \(n\). Изначально участники собрания стоят в очереди в порядке \(a_1, a_2, \ldots, a_n\) от начала до конца. Слайд-шоу состоит из последовательного показа слайдов с \(1\) по \(m\). Каждый слайд будет представлен участником, стоящим в начале очереди. После представления каждого слайда вы можете переместить участника, стоящего в начале очереди, на любую позицию в очереди (без изменения порядка остальных участников). Например, предположим, что очередь участников имеет вид \([\color{red}{3},1,2,4]\). После того как участник \(3\) представит текущий слайд, вы можете изменить очередь участников на \([\color{red}{3},1,2,4]\), \([1,\color{red}{3},2,4]\), \([1,2,\color{red}{3},4]\) или \([1,2,4,\color{red}{3}]\).

Также имеется массив \(b\) длины \(m\). Слайд-шоу считается хорошим, если можно так перемещать участников после выступлений, чтобы слайд \(i\) был представлен участником \(b_i\) для всех \(i\) от \(1\) до \(m\).

Однако ваш назойливый начальник хочет сделать \(q\) обновлений массива \(b\). В \(i\)-м обновлении он выберет слайд \(s_i\) и участника \(t_i\) и присвоит \(b_{s_i} := t_i\). Заметим, что эти обновления постоянны, то есть изменения, внесенные в массив \(b\), будут применяться при обработке последующих обновлений.

Для каждого из \(q+1\) состояний массива \(b\) (начального состояния и после каждого из \(q\) обновлений) определите, является ли слайд-шоу хорошим.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\) и \(q\) (\(1 \le n, m \le 2 \cdot 10^5\); \(q=0\)) — количество участников, количество слайдов и количество обновлений.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le n\)) — начальный порядок расположения участников от начала до конца очереди. Гарантируется, что каждое целое число от \(1\) до \(n\) встречается в \(a\) ровно один раз.

Третья строка каждого набора входных данных содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(1 \le b_i \le n\)) — номера участников, которые должны представлять каждый слайд.

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превосходят \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q+1\) строку, соответствующих \(q+1\) состоянию массива \(b\). Выведите «YA», если слайд-шоу хорошее, и «TIDAK» в противном случае.

Вы можете выводить ответ в любом регистре (верхнем или нижнем). Например, строки «YA», «Ya», «ya» и «YA» будут распознаны как положительные ответы.

Примечание

Для первого набора входных данных вам не нужно перемещать участников, так как оба слайда представляет участник \(1\), который уже находится в начале очереди.

Для второго набора входных данных можно переместить участников так, чтобы презентация была хорошей:

  1. \([1,2,3]\), не перемещайте участника \(1\).
  2. \([1,2,3]\), переместите участника \(1\) после участника \(3\).
  3. \([2,3,1]\), переместите участника \(2\) после участника \(3\).
  4. \([3,2,1]\), не перемещайте участника \(3\).
  5. \([3,2,1]\), переместите участника \(3\) после участника \(1\).
  6. \([2,1,3]\), не перемещайте участника \(2\).

C2. Координация презентации (сложная версия)

жадные алгоритмы Конструктив реализация сортировки Структуры данных *1900

Это сложная версия задачи. В двух версиях отличаются ограничения на \(q\) и ограничение по времени отличаются. В этой версии \(0 \leq q \leq 2 \cdot 10^5\). Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Команда, состоящая из \(n\) участников, пронумерованных от \(1\) до \(n\), должна представить слайд-шоу на большом собрании. Слайд-шоу содержит \(m\) слайдов.

Имеется массив \(a\) длины \(n\). Изначально участники собрания стоят в очереди в порядке \(a_1, a_2, \ldots, a_n\) от начала до конца. Слайд-шоу состоит из последовательного показа слайдов с \(1\) по \(m\). Каждый слайд будет представлен участником, стоящим в начале очереди. После представления каждого слайда вы можете переместить участника, стоящего в начале очереди, на любую позицию в очереди (без изменения порядка остальных участников). Например, предположим, что очередь участников имеет вид \([\color{red}{3},1,2,4]\). После того как участник \(3\) представит текущий слайд, вы можете изменить очередь участников на \([\color{red}{3},1,2,4]\), \([1,\color{red}{3},2,4]\), \([1,2,\color{red}{3},4]\) или \([1,2,4,\color{red}{3}]\).

Также имеется массив \(b\) длины \(m\). Слайд-шоу считается хорошим, если можно так перемещать участников после выступлений, чтобы слайд \(i\) был представлен участником \(b_i\) для всех \(i\) от \(1\) до \(m\).

Однако ваш назойливый начальник хочет сделать \(q\) обновлений массива \(b\). В \(i\)-м обновлении он выберет слайд \(s_i\) и участника \(t_i\) и присвоит \(b_{s_i} := t_i\). Заметим, что эти обновления постоянны, то есть изменения, внесенные в массив \(b\), будут применяться при обработке последующих обновлений.

Для каждого из \(q+1\) состояний массива \(b\) (начального состояния и после каждого из \(q\) обновлений) определите, является ли слайд-шоу хорошим.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(m\) и \(q\) (\(1 \le n, m \le 2 \cdot 10^5\), \(0 \leq q \leq 2 \cdot 10^5\)) — количество участников, количество слайдов и количество обновлений.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_i \le n\)) — начальный порядок расположения участников от начала до конца очереди. Гарантируется, что каждое целое число от \(1\) до \(n\) встречается в \(a\) ровно один раз.

Третья строка каждого набора входных данных содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(1 \le b_i \le n\)) — номера участников, которые должны представлять каждый слайд.

Каждая из следующих \(q\) строк содержит по два целых числа \(s_i\) и \(t_i\) (\(1 \le s_i \le m\), \(1 \le t_i \le n\)) — параметры обновления.

Гарантируется, что сумма \(n\), сумма \(m\) и сумма \(q\) по всем наборам входных данных не превосходят \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(q+1\) строку, соответствующих \(q+1\) состоянию массива \(b\). Выведите «YA», если слайд-шоу хорошее, и «TIDAK» в противном случае.

Вы можете выводить ответ в любом регистре (верхнем или нижнем). Например, строки «YA», «Ya», «ya» и «YA» будут распознаны как положительные ответы.

Примечание

В первом наборе входных данных изначально вам не нужно перемещать участников, так как оба слайда будут представлены участником \(1\), который уже находится в начале очереди. После этого присваивается \(b_1 := 2\), теперь слайд \(1\) должен быть представлен участником \(2\). Это невозможно, так как участник \(1\) представит слайд \(1\) первым. Затем устанавливается \(b_1 = 1\), \(b\) становится таким же, как и начальный \(b\), что делает слайд-шоу хорошим.

A. Автобус в Пенхамо

жадные алгоритмы Конструктив математика реализация *800

Ya vamos llegando a Péeeenjamoo ♫♫♫

В Пенхамо едут \(n\) семей, чтобы стать свидетелями крупнейшего в Мексике марафона по выгуливанию куриц на поводках. \(i\)-я семья состоит из \(a_i\) человек. Все семьи будут путешествовать на одном автобусе, состоящем из \(r\) рядов с \(2\) сиденьями в каждом.

Человек считается счастливым, если:

  • Другой член семьи сидит в том же ряду, что и он; или
  • Он сидит один в своем ряду (рядом с пустым местом).

Определите максимальное количество счастливых людей при оптимальной рассадке. Обратите внимание, что в автобусе должны сидеть все.

Гарантируется, что все члены всех семей могут поместиться в автобусе. Формально, гарантируется, что \(\displaystyle\sum_{i=1}^{n}a_i \le 2r\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(r\) (\(1 \le n \le 100\); \(1 \le r \le 500\)) — количество семей и количество рядов в автобусе.

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10\)) — количество членов семьи в каждой семье.

Выходные данные

Для каждого набора входных данных выведите максимальное количество счастливых людей при оптимальной рассадке.

Примечание

В первом наборе входных данных два члена первой семьи могут сидеть вместе в первом ряду, а два члена второй семьи могут сидеть вместе во втором ряду. Оставшийся член второй семьи может сидеть в третьем ряду вместе с членом третьей семьи. Такая рассадка показана ниже, и \(4\) счастливых человека окрашены в зеленый цвет.

\(\color{green}{1}\)\(\color{green}{1}\)
\(\color{green}{2}\)\(\color{green}{2}\)
\(2\)\(3\)

Для второго набора входных данных ниже показан возможный вариант рассадки с \(6\) счастливыми людьми.

\(\color{green}{3}\)\(\color{green}{3}\)
\(\color{green}{1}\)\(\color{green}{1}\)
\(\color{green}{2}\)\(\color{green}{2}\)

Для третьего набора входных данных ниже показана возможная рассадка с \(6\) счастливыми людьми.

\(\color{green}{4}\)\(\color{green}{4}\)
\(\color{green}{}\)\(\color{green}{2}\)
\(\color{green}{3}\)\(\color{green}{3}\)
\(\color{green}{1}\)\(\color{green}{}\)
\(\color{green}{}\)\(\color{green}{}\)

D1. Ассасин (простая версия)

Бинарный поиск интерактив Конструктив Перебор реализация *1900

Это простая версия задачи. В этой версии вы можете задать не более \(n+69\) вопросов. Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Это интерактивная задача.

На сборах сборной Мексики к IOI существует традиция играть в игру «Ассасин», которая похожа на «Among Us» или «Мафию».

Сегодня \(n\) игроков, пронумерованных от \(1\) до \(n\), будут играть в «Ассасин» со следующими тремя ролями:

  • Рыцарь: Рыцарь — это тот, кто всегда говорит правду.
  • Лжец: Лжец — это тот, кто всегда лжет.
  • Предатель: Предатель — это тот, кого все считают Рыцарем, а на самом деле он Лжец.

Каждому игроку будет назначена своя роль в игре. В игре будет ровно один Предатель, но может быть любое (возможно нулевое) количество Рыцарей и Лжецов.

Вы были ведущим игры, но случайно забыли роли всех игроков, поэтому вам нужно определить игрока, который является Предателем.

Чтобы определить Предателя, вы зададите несколько вопросов. В каждом вопросе вы выбираете двух игроков \(i\) и \(j\) (\(1 \leq i, j \leq n\); \(i \neq j\)) и спрашиваете, считает ли игрок \(i\), что игрок \(j\) — Рыцарь. Результаты этого вопроса приведены в таблице ниже.

РыцарьЛжецПредатель
РыцарьДаНетДа
ЛжецНетДаНет
ПредательНетДа
Значение ячейки в строке \(a\) и столбце \(b\) — это ответ на вопрос, когда \(i\) имеет роль \(a\), а \(j\) — роль \(b\). Например, «Да» в правой верхней ячейке принадлежит строке «Рыцарь» и столбцу «Предатель», поэтому это ответ на вопрос, когда \(i\) — Рыцарь, а \(j\) — Предатель.

Найдите Предателя не более чем за \(n + 69\) вопросов.

Заметьте, что итерактор адаптивен: роли игроков не фиксированы изначально и могут меняться в зависимости от ваших вопросов. Однако гарантируется, что существует такое распределение ролей, которое соответствует всем ранее заданным вопросам в ограничениях этой задачи.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 10^5\)) — количество людей, играющих в игру.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Протокол взаимодействия

Чтобы задать вопрос, выведите строку в следующем формате:

  • «? i j» (\(1 \leq i,j \leq n\); \(i \neq j\)) — спросить игрока \(i\), считает ли он игрока \(j\) Рыцарем.

Жюри выдаст «1», если игрок \(i\) считает игрока \(j\) Рыцарем, и «0» в противном случае.

Когда вы определите, какой игрок является Предателем, выведите строку в следующем формате:

  • «! i» (\(1 \leq i \leq n\)) — Предателем является игрок \(i\).

Обратите внимание, что ответы не учитываются в ограничении в \(n+69\) вопросов.

Если вы сделали некорректный вывод, использовали более \(n+69\) вопросов или неверно определили Предателя, жюри ответит «-1», и вы получите вердикт Неправильный ответ. Получив «-1», ваша программа должна немедленно завершиться. В противном случае вы можете получить произвольный вердикт, поскольку ваше решение продолжит чтение из закрытого потока.

После каждого вывода не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • sys.stdout.flush() в Python;
  • std::io::stdout().flush() в Rust;
  • смотрите документацию для других языков.

Формат взломов

Для взломов используйте следующий формат.

Первая строка должна содержать одно целое число \(t\) — количество наборов входных данных.

Первая строка каждого набора входных данных должна содержать целое число \(n\), за которым следует строка «manual».

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-1 \le a_i \le 1\)) — роли каждого игрока. \(1\) обозначает Рыцаря, \(0\) — Лжеца, а \(-1\) — Предателя. Предатель должен быть ровно один, то есть должен быть ровно один индекс \(i\) такой, что \(a_i=-1\).

В качестве примера приводим взлом, аналогичный примеру из условия:

2
7 manual
0 1 0 -1 0 1 0
4 manual
0 1 -1 0
Примечание

Обратите внимание, что примеры не представляют собой оптимальную стратегию задавания вопросов и приведены только для демонстрации формата взаимодействия. В частности, мы не можем определить, кто из игроков является Предателем, по вопросам, заданным в примерах.

В первом наборе входных данных игроки с индексами \(2\) и \(6\) — Рыцари, игроки с индексами \(1\), \(3\), \(5\) и \(7\) — Лжецы, а Предатель имеет индекс \(4\). Ниже приводится объяснение заданных вопросов:

  • В первом вопросе игрок \(i\) является Лжецом, и игрок \(j\) также Лжец. Ответ — «да», так как Лжецы всегда лгут.
  • Во втором вопросе игрок \(i\) — Лжец, а игрок \(j\) — Рыцарь. Ответ — «нет», так как Лжецы всегда лгут.
  • В третьем вопросе игрок \(i\) — Рыцарь, а игрок \(j\) — Лжец. Ответ — «нет», так как Рыцари всегда говорят правду.
  • В четвертом вопросе игрок \(i\) — Рыцарь, и игрок \(j\) также Рыцарь. Ответ — «да», так как Рыцари всегда говорят правду.
  • В пятом вопросе игрок \(i\) — Предатель, а игрок \(j\) — Лжец. Ответ — «да», так как Предатель всегда лжет.
  • В шестом вопросе игрок \(i\) — Предатель, а игрок \(j\) — Рыцарь. Ответ — «нет», так как Предатель всегда лжет.
  • В седьмом вопросе игрок \(i\) — Лжец, а игрок \(j\) — Предатель. Ответ — «нет», так как Лжецы всегда лгут, и Лжецы думают, что Предатель является Рыцарем.
  • В восьмом вопросе игрок \(i\) — Рыцарь, а игрок \(j\) — Предатель. Ответ — «да», так как Рыцари всегда говорят правду, и Рыцари думают, что Предатель является Рыцарем.

D2. Ассасин (сложная версия)

дп интерактив Конструктив *2700

Это сложная версия задачи. В этой версии вы должны использовать минимально возможное количество запросов. Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Это интерактивная задача.

На сборах сборной Мексики к IOI существует традиция играть в игру «Ассасин», которая похожа на «Among Us» или «Мафию».

Сегодня \(n\) игроков, пронумерованных от \(1\) до \(n\), будут играть в «Ассасин» со следующими тремя ролями:

  • Рыцарь: Рыцарь — это тот, кто всегда говорит правду.
  • Лжец: Лжец — это тот, кто всегда лжет.
  • Предатель: Предатель — это тот, кого все считают Рыцарем, а на самом деле он Лжец.

Каждому игроку будет назначена своя роль в игре. В игре будет ровно один Предатель, но может быть любое (возможно нулевое) количество Рыцарей и Лжецов.

Вы были ведущим игры, но случайно забыли роли всех игроков, поэтому вам нужно определить игрока, который является Предателем.

Чтобы определить Предателя, вы зададите несколько вопросов. В каждом вопросе вы выбираете двух игроков \(i\) и \(j\) (\(1 \leq i, j \leq n\); \(i \neq j\)) и спрашиваете, считает ли игрок \(i\), что игрок \(j\) — Рыцарь. Результаты этого вопроса приведены в таблице ниже.

РыцарьЛжецПредатель
РыцарьДаНетДа
ЛжецНетДаНет
ПредательНетДа
Значение ячейки в строке \(a\) и столбце \(b\) — это ответ на вопрос, когда \(i\) имеет роль \(a\), а \(j\) — роль \(b\). Например, «Да» в правой верхней ячейке принадлежит строке «Рыцарь» и столбцу «Предатель», поэтому это ответ на вопрос, когда \(i\) — Рыцарь, а \(j\) — Предатель.

Найти Предателя за минимально возможное количество запросов. Иными словами, пусть \(f(n)\) — минимальное число, такое, что для \(n\) игроков существует стратегия, позволяющая определить Предателя, используя не более \(f(n)\) вопросов. Тогда для определения Предателя нужно использовать не более \(f(n)\) вопросов.

Заметьте, что итерактор адаптивен: роли игроков не фиксированы изначально и могут меняться в зависимости от ваших вопросов. Однако гарантируется, что существует такое распределение ролей, которое соответствует всем ранее заданным вопросам в ограничениях этой задачи.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(3 \le n \le 10^5\)) — количество людей, играющих в игру.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Протокол взаимодействия

Чтобы задать вопрос, выведите строку в следующем формате:

  • «? i j» (\(1 \leq i,j \leq n\); \(i \neq j\)) — спросить игрока \(i\), считает ли он игрока \(j\) Рыцарем.

Жюри выдаст «1», если игрок \(i\) считает игрока \(j\) Рыцарем, и «0» в противном случае.

Когда вы определите, какой игрок является Предателем, выведите строку в следующем формате:

  • «! i» (\(1 \leq i \leq n\)) — Предателем является игрок \(i\).

Обратите внимание, что ответы не учитываются в ограничении в \(f(n)\) вопросов.

Если вы сделали некорректный вывод, использовали более \(f(n)\) вопросов или неверно определили Предателя, жюри ответит «-1», и вы получите вердикт Неправильный ответ. Получив «-1», ваша программа должна немедленно завершиться. В противном случае вы можете получить произвольный вердикт, поскольку ваше решение продолжит чтение из закрытого потока.

После каждого вывода не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • sys.stdout.flush() в Python;
  • std::io::stdout().flush() в Rust;
  • смотрите документацию для других языков.

Формат взломов

Для взломов используйте следующий формат.

Первая строка должна содержать одно целое число \(t\) — количество наборов входных данных.

Первая строка каждого набора входных данных должна содержать целое число \(n\), за которым следует строка «manual».

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-1 \le a_i \le 1\)) — роли каждого игрока. \(1\) обозначает Рыцаря, \(0\) — Лжеца, а \(-1\) — Предателя. Предатель должен быть ровно один, то есть должен быть ровно один индекс \(i\) такой, что \(a_i=-1\).

В качестве примера приводим взлом, аналогичный примеру из условия:

2
7 manual
0 1 0 -1 0 1 0
4 manual
0 1 -1 0
Примечание

Обратите внимание, что примеры не представляют собой оптимальную стратегию задавания вопросов и приведены только для демонстрации формата взаимодействия. В частности, мы не можем определить, кто из игроков является Предателем, по вопросам, заданным в примерах.

В первом наборе входных данных игроки с индексами \(2\) и \(6\) — Рыцари, игроки с индексами \(1\), \(3\), \(5\) и \(7\) — Лжецы, а Предатель имеет индекс \(4\). Ниже приводится объяснение заданных вопросов:

  • В первом вопросе игрок \(i\) является Лжецом, и игрок \(j\) также Лжец. Ответ — «да», так как Лжецы всегда лгут.
  • Во втором вопросе игрок \(i\) — Лжец, а игрок \(j\) — Рыцарь. Ответ — «нет», так как Лжецы всегда лгут.
  • В третьем вопросе игрок \(i\) — Рыцарь, а игрок \(j\) — Лжец. Ответ — «нет», так как Рыцари всегда говорят правду.
  • В четвертом вопросе игрок \(i\) — Рыцарь, и игрок \(j\) также Рыцарь. Ответ — «да», так как Рыцари всегда говорят правду.
  • В пятом вопросе игрок \(i\) — Предатель, а игрок \(j\) — Лжец. Ответ — «да», так как Предатель всегда лжет.
  • В шестом вопросе игрок \(i\) — Предатель, а игрок \(j\) — Рыцарь. Ответ — «нет», так как Предатель всегда лжет.
  • В седьмом вопросе игрок \(i\) — Лжец, а игрок \(j\) — Предатель. Ответ — «нет», так как Лжецы всегда лгут, и Лжецы думают, что Предатель является Рыцарем.

E1. Billetes MX (простая версия)

2-sat Бинарный поиск графы Комбинаторика Конструктив поиск в глубину и подобное снм *2500

Это простая версия задачи. В этой версии гарантируется, что \(q = 0\). Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Целочисленная сетка \(A\) с \(p\) строками и \(q\) столбцами называется красивой, если:

  • Все элементы сетки являются целыми числами от \(0\) до \(2^{30}-1\), и
  • Для любой подсетки XOR значений в углах равен \(0\). Формально, для любых четырех целых чисел \(i_1\), \(i_2\), \(j_1\), \(j_2\) (\(1 \le i_1 < i_2 \le p\); \(1 \le j_1 < j_2 \le q\)) должно выполняться \(A_{i_1, j_1} \oplus A_{i_1, j_2} \oplus A_{i_2, j_1} \oplus A_{i_2, j_2} = 0\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Имеется частично заполненная целочисленная сетка \(G\) с \(n\) строками и \(m\) столбцами, в которой заполнены только \(k\) ячеек. Поликарп хочет узнать, сколькими способами он может распределить целые числа по незаполненным ячейкам, чтобы сетка стала красивой.

Однако Монокарп считает, что эта задача слишком проста. Поэтому он выполнит \(q\) обновлений сетки. В каждом обновлении он будет выбирать незаполненную ячейку и присваивать ей целое число. Заметим, что эти обновления перманентны. То есть изменения, внесенные в сетку, будут применяться при обработке будущих обновлений.

Для каждого из \(q + 1\) состояния сетки (начального состояния и после каждого из \(q\) запросов) определите количество способов, которыми Поликарп может присвоить целые числа незаполненным ячейкам, чтобы сетка стала красивой. Поскольку это число может быть очень большим, от вас требуется только вывести их значения по модулю \(10^9+7\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит четыре целых числа \(n\), \(m\), \(k\) и \(q\) (\(2 \le n, m \le 10^5\); \(0 \le k \le 10^5\); \(q = 0\)) — количество строк, количество столбцов, количество фиксированных ячеек и количество обновлений.

Следующие \(k\) строк содержат по три целых числа \(r\), \(c\) и \(v\) (\(1 \le r \le n, 1 \le c \le m\); \(0 \le v < 2^{30}\)) — изначально элементу \(G_{r, c}\) присвоено целое число \(v\).

Следующие \(q\) строк содержат по три целых числа \(r\), \(c\) и \(v\) (\(1 \le r \le n, 1 \le c \le m\); \(0 \le v < 2^{30}\)) — данное обновление присваивает элементу \(G_{r, c}\) целое число \(v\).

Гарантируется, что пары \((r,c)\) во всех присваиваниях различны.

Гарантируется, что суммы \(n\), \(m\), \(k\) и \(q\) по всем наборам входных данных не превосходят \(10^5\) соответственно.

Выходные данные

Для каждого набора входных данных выведите \(q + 1\) строку. В \(i\)-й строке вывода должен содержаться ответ для \(i\)-го состояния решетки по модулю \(10^9 + 7\).

Примечание

В первом наборе входных данных мы имеем следующую сетку:

\(0\)\(6\)\(10\)
\(6\)\(0\)\(12\)
\(10\)\(12\)\(?\)

Можно доказать, что единственным допустимым значением для ячейки \((3, 3)\) является \(0\).

A. Склеивание массивов

жадные алгоритмы Конструктив математика сортировки *1300

Даны \(n\) массивов \(a_1\), \(\ldots\), \(a_n\). Длина каждого массива равна двум. Таким образом, \(a_i = [a_{i, 1}, a_{i, 2}]\). Вам надо склеить массивы в один массив длины \(2n\) так, чтобы количество инверсий\(^{\dagger}\) в получившемся массиве было как можно меньше. Обратите внимание, что вам не нужно считать само количество инверсий.

Более формально, вам надо выбрать перестановку\(^{\ddagger}\) \(p\) длины \(n\), чтобы массив \(b = [a_{p_1,1}, a_{p_1,2}, a_{p_2, 1}, a_{p_2, 2}, \ldots, a_{p_n,1}, a_{p_n,2}]\) содержал как можно меньше инверсий.

\(^{\dagger}\)Количество инверсий в массиве \(c\) — это количество пар индексов \(i\) и \(j\), таких что \(i < j\) и \(c_i > c_j\).

\(^{\ddagger}\)Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 10^5\)) — количество массивов.

Каждая из следующих \(n\) строк содержит два целых числа \(a_{i,1}\) и \(a_{i,2}\) (\(1 \le a_{i,j} \le 10^9\)) — элементы \(i\)-го массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^5\).

Выходные данные

Для каждого набора входных данных выведите \(2n\) целых чисел — элементы полученного вами массива. Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных мы склеили массивы в порядке \(2, 1\). Рассмотрим инверсии в полученном массиве \(b = [2, 3, 1, 4]\):

  • \(i = 1\), \(j = 3\), так как \(b_1 = 2 > 1 = b_3\);
  • \(i = 2\), \(j = 3\), так как \(b_2 = 3 > 1 = b_3\).

Таким образом, количество инверсий равно \(2\). Можно доказать, что это минимально возможное количество инверсий.

Во втором наборе входных данных мы склеили массивы в порядке \(3, 1, 2\). Рассмотрим инверсии в полученном массиве \(b = [2, 1, 3, 2, 4, 3]\):

  • \(i = 1\), \(j = 2\), так как \(b_1 = 2 > 1 = b_2\);
  • \(i = 3\), \(j = 4\), так как \(b_3 = 3 > 2 = b_4\);
  • \(i = 5\), \(j = 6\), так как \(b_5 = 4 > 3 = b_6\).

Таким образом, количество инверсий равно \(3\). Можно доказать, что это минимально возможное количество инверсий.

В третьем наборе входных данных мы склеили массивы в порядке \(4, 2, 1, 5, 3\).

C. Ч+К+С

графы жадные алгоритмы Конструктив поиск в глубину и подобное реализация Строки хэши *2400

Вам даны два сильно связных\(^{\dagger}\) ориентированных графа, в каждом из которых ровно \(n\) вершин, но может быть разное количество рёбер. Посмотрев на них внимательно, вы заметили важную особенность — длина любого цикла в этих графах делится на \(k\).

Каждая из \(2n\) вершин относится ровно к одному из двух типов: входящая или исходящая. Для каждой вершины вам известен её тип.

Вам нужно определить, можно ли провести ровно \(n\) ориентированных рёбер между исходными графами так, чтобы выполнялись следующие четыре условия:

  • Концы любого добавленного ребра лежат в разных графах.
  • Из каждой исходящей вершины исходит ровно одно добавленное ребро.
  • В каждую входящую вершину входит ровно одно добавленное ребро.
  • В получившемся графе длина любого цикла делится на \(k\).

\(^{\dagger}\)Сильно связный граф — это граф, в котором из каждой вершины существует путь до любой другой вершины.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \le k \le n \le 2 \cdot 10^5\)) — количество вершин в каждом из графов и значение, на которое делится длина каждого цикла.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(a_i \in \{0, 1\}\)). Если \(a_i = 0\), то вершина \(i\) первого графа является входящей. Если \(a_i = 1\), то вершина \(i\) первого графа является исходящей.

Третья строка каждого набора входных данных содержит одно целое число \(m_1\) (\(1 \le m_1 \le 5 \cdot 10^5\)) — количество рёбер в первом графе.

Следующие \(m_1\) строк содержат описания рёбер первого графа. \(i\)-я из них содержит два целых числа \(v_i\) и \(u_i\) (\(1 \le v_i, u_i \le n\)) — ребро в первом графе, ведущее из вершины \(v_i\) в вершину \(u_i\).

Далее в таком же формате следует описание второго графа.

Следующая строка содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(b_i \in \{0, 1\}\)). Если \(b_i = 0\), то вершина \(i\) второго графа является входящей. Если \(b_i = 1\), то вершина \(i\) второго графа является исходящей.

Следующая строка содержит одно целое число \(m_2\) (\(1 \le m_2 \le 5 \cdot 10^5\)) — количество рёбер во втором графе.

Следующие \(m_2\) строк содержат описания рёбер второго графа. \(i\)-я из них содержит два целых числа \(v_i\) и \(u_i\) (\(1 \le v_i, u_i \le n\)) — ребро во втором графе, ведущее из вершины \(v_i\) в вершину \(u_i\).

Гарантируется, что оба графа являются сильно связными, а также длины всех циклов кратны \(k\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\). Гарантируется, что сумма \(m_1\) и сумма \(m_2\) по всем наборам входных данных не превосходят \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если можно провести \(n\) новых рёбер так, чтобы выполнялись все условия, и «NO» (без кавычек) иначе.

Вы можете выводить ответ в любом регистре (например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных можно провести из первого графа во второй граф рёбра \((1, 3)\) и \((4, 2)\) (первое число в паре — номер вершины в первом графе, второе число в паре — номер вершины во втором графе), а из второго графа в первый граф провести рёбра \((1, 2)\), \((4, 3)\) (первое число в паре — номер вершины во втором графе, второе число в паре — номер вершины в первом графе).

Во втором наборе входных данных всего есть \(4\) входящих вершины и \(2\) исходящих, поэтому нельзя провести \(3\) рёбер.

B. Покупка лимонада

Бинарный поиск Конструктив сортировки *1100

Есть вендинговый аппарат, в котором продаётся лимонад. Всего в аппарате есть \(n\) ячеек. Вы знаете, что изначально в \(i\)-й ячейке находится \(a_i\) банок лимонада. Также в аппарате есть \(n\) кнопок, каждая кнопка соответствует какой-то ячейке, при этом каждой ячейке соответствует ровно одна кнопка. К сожалению, обозначения на кнопках стёрлись, поэтому вы не знаете, какая кнопка соответствует какой ячейке.

Когда вы нажимаете на кнопку, соответствующую \(i\)-й ячейке, происходит одно из двух событий:

  • Если в \(i\)-й ячейке есть банка лимонада, то она выпадет, и вы заберёте её себе. При этом количество банок лимонада в \(i\)-й ячейке уменьшится на \(1\).
  • Если в \(i\)-й ячейке не осталось банок лимонада, то ничего не выпадет.

После нажатия банка выпадает так быстро, что отследить, из какой именно ячейки она выпала, невозможно. Содержимое ячеек скрыто от ваших глаз, поэтому вы не можете видеть, сколько банок осталось в каждой из ячеек. Единственное, что вам известно, это изначальные количества банок в ячейках: \(a_1, a_2, \ldots, a_n\).

Определите минимальное количество нажатий на кнопки, которое нужно сделать, чтобы гарантированно получить хотя бы \(k\) банок лимонада.

Обратите внимание, что вы можете адаптировать свою стратегию в процессе нажатия на кнопки, основываясь на том, выпала вам банка или нет. Гарантируется, что всего в аппарате есть хотя бы \(k\) банок лимонада. Иными словами, \(k \leq a_1 + a_2 + \ldots + a_n\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит единственное целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\), \(1 \leq k \leq 10^9\)) — количество ячеек в аппарате и необходимое количество банок лимонада.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — количества банок в ячейках.

Гарантируется, что \(k \leq a_1 + a_2 + \ldots + a_n\), то есть всего в аппарате есть хотя бы \(k\) банок лимонада.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество нажатий на кнопки, которое нужно сделать, чтобы гарантированно получить хотя бы \(k\) банок лимонада.

Примечание

В первом наборе входных данных мы можем просто нажать на первую кнопку и получить банку лимонада.

Во втором наборе входных данных мы можем нажать на каждую кнопку по одному разу и гарантированно получить \(2\) банки лимонада. Обратите внимание, что если мы просто нажмём на какую-то одну кнопку два раза, то нам может не повезти, и эта кнопка будет соответствовать первой ячейке, и тогда мы получим только \(1\) банку лимонада за два нажатия.

В третьем наборе входных данных одна из оптимальных стратегий такова:

Нажимаем на первую кнопку дважды. После первого нажатия гарантированно выпадет банка лимонада. Далее есть два варианта:

  • Если после второго нажатия не выпала банка лимонада, то мы знаем, что эта кнопка обязательно соответствует второй ячейке, так как \(a_2 = 1\) и \(a_1, a_3 > 1\). Тогда мы можем нажать на вторую кнопку два раза, а на третью кнопку один раз. Так как \(a_1, a_3 \geq 2\), то мы гарантированно получим три банки лимонада за эти три нажатия. Таким образом, за \(5\) нажатий мы получим \(4\) банки лимонада.
  • Если после второго нажатия выпала банка лимонада, то мы можем сделать одно нажатие на вторую кнопку и одно нажатие на третью кнопку. После каждого из этих нажатий мы гарантированно получим банку лимонада. Таким образом, за \(4\) нажатия мы получим \(4\) банки лимонада.

Можно показать, что за \(4\) нажатия невозможно гарантированно получить \(4\) банки лимонада, поэтому ответ \(5\).

F. Выбери свои запросы

графы Деревья дп жадные алгоритмы Конструктив поиск в глубину и подобное *2700

Дан массив \(a\), состоящий из \(n\) целых чисел (нумеруемых от \(1\) до \(n\)). Изначально все они равны нулю.

Необходимо обработать \(q\) запросов \(i\)-й запрос состоит из двух различных целых чисел \(x_i\) и \(y_i\). В ходе \(i\)-го запроса нужно выбрать целое число \(p\) (которое равно либо \(x_i\), либо \(y_i\)) и целое число \(d\) (которое равно либо \(1\), либо \(-1\)), и присвоить \(a_p = a_p + d\).

После каждого запроса каждый элемент массива \(a\) должен быть неотрицательным целым числом.

Необходимо обработать все запросы таким образом, чтобы сумма всех элементов массива \(a\) после последнего запроса была минимально возможной.

Входные данные

Первая строка содержит два целых числа \(n\) и \(q\) (\(2 \le n \le 3 \cdot 10^5\); \(1 \le q \le 3 \cdot 10^5\)) — количество элементов в массиве \(a\) и количество запросов соответственно.

Затем следуют \(q\) строк. \(i\)-я из этих строк содержит два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le n\); \(x_i \ne y_i\)) — описание \(i\)-го запроса.

Выходные данные

Для каждого запроса выведите строку, содержащую два символа:

  • первый символ должен быть x, если вы выбрали \(p=x_i\), или y, если вы выбрали \(p=y_i\);
  • второй символ должен быть +, если вы выбрали \(d=1\), или -, если вы выбрали \(d=-1\).

Если существует несколько ответов, выведите любой из них.

A. Перпендикулярные отрезки

геометрия жадные алгоритмы Конструктив математика *900

Вам задана координатная плоскость и три целых числа \(X\), \(Y\) и \(K\). Найдите два отрезка \(AB\) и \(CD\) такие, что

  1. координаты точек \(A\), \(B\), \(C\) и \(D\) являются целыми числами;
  2. \(0 \le A_x, B_x, C_x, D_x \le X\) и \(0 \le A_y, B_y, C_y, D_y \le Y\);
  3. длина отрезка \(AB\) не менее \(K\);
  4. длина отрезка \(CD\) не менее \(K\);
  5. отрезки \(AB\) и \(CD\) являются перпендикулярными: если провести прямые, содержащие \(AB\) и \(CD\), они пересекутся под прямым углом.

Обратите внимание, что отрезкам не обязательно пересекаться. Отрезки перпендикулярны, пока прямые, которые они задают, перпендикулярны.

Входные данные

В первой строке задано одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных. Далее следуют \(t\) наборов.

В первой и единственной строке каждого набора заданы три целых числа \(X\), \(Y\) и \(K\) (\(1 \le X, Y \le 1000\); \(1 \le K \le 1414\)).

Дополнительное ограничение на входные данные: значения \(X\), \(Y\) и \(K\) выбраны таким образом, что ответ существует.

Выходные данные

Для каждого набора входных данных выведите две строки. Первая строка должна содержать \(4\) целых числа \(A_x\), \(A_y\), \(B_x\) и \(B_y\) — координаты первого отрезка.

Вторая строка также должна содержать \(4\) целых числа \(C_x\), \(C_y\), \(D_x\) и \(D_y\) — координаты второго отрезка.

Если существует несколько ответов, выведите любой из них.

Примечание

Ответ для первого набора входных данных показан ниже:

Ответ для второго набора входных данных:
Ответ для третьего набора входных данных:
Ответ для четвертого набора входных данных:

B. Черные клетки

Бинарный поиск жадные алгоритмы Конструктив Перебор *1300

Задана полоска, разделенная на клетки, клетки пронумерованы слева направо от \(0\) до \(10^{18}\). Изначально все клетки белые.

Вы можете выполнять следующее действие: выбрать две белые клетки \(i\) и \(j\), такие что \(i \ne j\) и \(|i - j| \le k\), и покрасить их в черный цвет.

Задан список \(a\). Все клетки из этого списка должны быть покрашены в чёрный. Также в черный цвет может быть покрашено не более одной клетки, не входящей в этот список. Ваша задача — определить, для какого минимального значения \(k\) это возможно.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(1 \le n \le 2000\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \dots, a_n\) (\(0 < a_i < 10^{18}\); \(a_i < a_{i + 1}\)).

Дополнительное ограничение на входные данные: сумма \(n\) по всем наборам входных данных не превосходит \(2000\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное значение \(k\), для которого возможно покрасить все заданные клетки.

Примечание

В первом наборе входных данных с параметром \(k=1\) можно покрасить клетки \((1, 2)\).

Во втором наборе входных данных с параметром \(k=1\) можно покрасить клетки \((7, 8)\).

В третьем наборе входных данных с параметром \(k=2\) можно покрасить клетки \((2, 4)\) и \((8, 9)\).

В четвертом наборе входных данных с параметром \(k=3\) можно покрасить клетки \((0, 1)\), \((5, 8)\) и \((10, 13)\).

C. Коллекционные фигурки

Бинарный поиск жадные алгоритмы Конструктив Перебор реализация Структуры данных *1500

Рядом с домом Монокарпа есть магазин, в котором продаются коллекционные фигурки. Скоро выйдет новый набор фигурок; в этом наборе содержится \(n\) фигурок, \(i\)-я фигурка стоит \(i\) монет и доступна для покупки с \(i\)-го дня по \(n\)-й день.

Для каждого из следующих \(n\) дней Монокарп знает, может ли он посетить магазин в этот день.

Каждый раз, когда Монокарп посещает магазин, он может купить любое количество фигурок, которые продаются в магазине (конечно, он не может купить фигурку, которая еще не доступна для покупки). Если Монокарп покупает хотя бы две фигурки в один день, он получает скидку, равную стоимости самой дорогой фигурки, которую он покупает (другими словами, он получает самую дорогую из фигурок, которые он покупает, бесплатно).

Монокарп хочет купить ровно одну \(1\)-ю фигурку, одну \(2\)-ю фигурку, ..., одну \(n\)-ю фигурку из набора. Он не может купить одну и ту же фигурку дважды. Какова минимальная сумма денег, которую он должен потратить?

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из двух строк:

  • первая строка содержит одно целое число \(n\) (\(1 \le n \le 4 \cdot 10^5\)) — количество фигурок в наборе (и количество дней);
  • вторая строка содержит строку \(s\) (\(|s| = n\), каждый \(s_i\) равен либо 0, либо 1). Если Монокарп может посетить магазин в \(i\)-й день, то \(s_i\) равно 1; в противном случае \(s_i\) равно 0.

Дополнительные ограничения на входные данные:

  • в каждом наборе входных данных \(s_n\) равно 1, так что Монокарп всегда сможет купить все фигурки в \(n\)-й день;
  • сумма \(n\) по всем наборам входных данных не превышает \(4 \cdot 10^5\).
Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальную сумму денег, которую Монокарп должен потратить.

Примечание

В первом наборе входных данных Монокарп покупает \(1\)-ю фигурку в \(1\)-й день и тратит \(1\) монету.

Во втором наборе входных данных Монокарп может купить \(1\)-ю и \(3\)-ю фигурки в \(3\)-й день, \(2\)-ю и \(4\)-ю фигурки в \(4\)-й день, а также \(5\)-ю и \(6\)-ю фигурки в \(6\)-й день. Тогда он потратит \(1+2+5=8\) монет.

В третьем наборе входных данных Монокарп может купить \(2\)-ю и \(3\)-ю фигурки в \(3\)-й день, а все остальные фигурки в \(7\)-й день. Тогда он потратит \(1+2+4+5+6 = 18\) монет.

D. Приключения Алисы в картах

графы дп жадные алгоритмы Конструктив реализация Структуры данных Тернарный поиск *2000

Алиса играет в карты с Дамой Червей, Королем Червей и Валетом Червей. В их карточной игре есть \(n\) различных типов карт. В данный момент у Алисы есть карта типа \(1\), и ей нужна карта типа \(n\), чтобы сбежать из Страны Чудес. У остальных игроков есть по одной карте каждого типа.

В этой карточной игре Алиса может обмениваться картами с тремя другими игроками. У каждого игрока есть свои предпочтения среди этих \(n\) типов, которые можно описать перестановками\(^{\text{∗}}\) \(q\), \(k\) и \(j\) для Дамы, Короля и Валета соответственно.

Игрок оценивает карту \(a\) больше, чем карту \(b\), если для их перестановки \(p\), \(p_a > p_b\). Тогда этот игрок готов обменять карту \(b\) с Алисой в обмен на карту \(a\). Предпочтения Алисы просты: она оценивает карту \(a\) больше, чем карту \(b\) если \(a > b\), и она будет обмениваться картами только в соответствии с этими предпочтениями.

Определите, может ли Алиса обменять карту типа \(1\) на карту типа \(n\), учитывая эти предпочтения. Если это возможно, приведите возможный набор обменов для этого.

\(^{\text{∗}}\)Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(2\le n\le 2\cdot 10^5\)) — количество типов карт.

Следующие три строки содержат предпочтения Дамы, Короля и Валета соответственно. Каждая из этих строк содержит \(n\) целых чисел \(p_1, p_2, \ldots, p_n\) (\(1\le p_i\le n\)) — перестановка, соответствующая предпочтениям игрока.

Сумма значений \(n\) по всем наборам входных данных не превосходит \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных в первой строке выведите одну строку «YES» или «NO» (без кавычек), обозначающую, может ли Алиса обменяться на карту \(n\).

Если первая строка была «YES», то на следующей строке выведите \(k\) — количество обменов, которые сделает Алиса. На следующих \(k\) строках выведите через пробел символ \(c\in \{\texttt{q}, \texttt{k}, \texttt{j}\}\) и целое число \(x\), обозначающее, что Алиса обменивается с игроком \(c\), чтобы получить карту \(x\). Должно быть так, что на \(k\)-й строке \(x = n\). Если существует несколько решений, выведите любое из них.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ. То же самое касается символа \(c\), обозначающего игрока в обмене (\(\texttt{Q}, \texttt{K}, \texttt{J}\) будут приняты наряду с их строчными вариантами).

Примечание

В первом наборе входных данных Алиса может обменяться с Королем, чтобы получить карту \(2\). Затем она может обменяться с Дамой, чтобы получить карту \(3\).

Во втором наборе входных данных, хотя Алиса может обменяться с Дамой, чтобы получить карту \(3\), с Королем, чтобы получить карту \(2\), а затем с Валетом, чтобы получить карту \(4\), это не является допустимым решением, так как оно не соответствует предпочтениям Алисы. Мы можем показать, что нет способа для Алисы получить карту \(4\).

B. Замена

игры Конструктив Строки *1100

У вас есть бинарная строка\(^{\text{∗}}\) \(s\) длины \(n\), и Айрис дал вам другую бинарную строку \(r\) длины \(n-1\).

Айрис собирается сыграть с вами в игру. В ходе игры вы выполните \(n-1\) операций над \(s\). В \(i\)-й операции (\(1 \le i \le n-1\)):

  1. Сначала вы выбираете индекс \(k\) такой, что \(1\le k\le |s| - 1\) и \(s_{k} \neq s_{k+1}\). Если выбрать такой индекс невозможно, вы проигрываете;
  2. Затем вы заменяете \(s_ks_{k+1}\) на \(r_i\). Обратите внимание, что это уменьшает длину \(s\) на \(1\).

Если все \(n-1\) операций выполнены успешно, вы выигрываете.

Определите, возможно ли вам выиграть в этой игре.

\(^{\text{∗}}\)Бинарная строка — это строка, в которой каждый символ равен либо \(\mathtt{0}\), либо \(\mathtt{1}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2\le n\le 10^5\)) — длину \(s\).

Вторая строка каждого набора входных данных содержит бинарную строку \(s\) длины \(n\) (\(s_i=\mathtt{0}\) или \(\mathtt{1}\)).

Третья строка каждого набора входных данных содержит бинарную строку \(r\) длины \(n-1\) (\(r_i=\mathtt{0}\) или \(\mathtt{1}\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если вы можете выиграть, и «NO» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных вы не можете выполнить первую операцию. Таким образом, вы проигрываете.

Во втором наборе входных данных вы можете выбрать \(k=1\) в единственной операции, и после этого \(s\) станет равным \(\mathtt{1}\). Таким образом, вы выигрываете.

В третьем наборе входных данных вы можете выполнить следующие операции: \(\mathtt{1}\underline{\mathtt{10}}\mathtt{1}\xrightarrow{r_1=\mathtt{0}} \mathtt{1}\underline{\mathtt{01}} \xrightarrow{r_2=\mathtt{0}} \underline{\mathtt{10}} \xrightarrow{r_3=\mathtt{1}} \mathtt{1}\).

D. Классный граф

графы Деревья жадные алгоритмы Конструктив поиск в глубину и подобное снм Структуры данных *1900

Вам дан неориентированный граф с \(n\) вершинами и \(m\) рёбрами.

Вы можете выполнить следующую операцию не более чем \(2\cdot \max(n,m)\) раз:

  • Выберите три различные вершины \(a\), \(b\) и \(c\). Затем для каждого из рёбер \((a,b)\), \((b,c)\) и \((c,a)\) выполните следующее:
    • Если ребро не существует, добавьте его. В противном случае, если оно существует, удалите его.

Граф называется классным, если и только если выполняется одно из следующих условий:

  • Граф не имеет рёбер, или
  • Граф является деревом.

Вам нужно сделать граф классным, выполняя указанные выше операции. Обратите внимание, что вы можете использовать не более чем \(2\cdot \max(n,m)\) операций.

Можно показать, что всегда существует хотя бы одно решение.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(3\le n\le 10^5\), \(0\le m\le \min\left(\frac{n(n-1)}{2},2\cdot 10^5\right)\)) — количество вершин и количество рёбер.

Затем следуют \(m\) строк, \(i\)-я строка содержит два целых числа \(u_i\) и \(v_i\) (\(1\le u_i,v_i\le n\)) — две вершины, которые соединяет \(i\)-е ребро.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\), а сумма \(m\) по всем наборам входных данных не превышает \(2\cdot 10^5\).

Гарантируется, что в данном графе нет петель или кратных рёбер.

Выходные данные

Для каждого набора входных данных в первой строке выведите целое число \(k\) (\(0\le k\le 2\cdot \max(n, m)\)) — количество операций.

Затем выведите \(k\) строк, \(i\)-я строка содержит три различных целых числа \(a\), \(b\) и \(c\) (\(1\le a,b,c\le n\)) — три целых числа, которые вы выбрали в \(i\)-й операции.

Если существует несколько решений, вы можете вывести любое из них.

Примечание

В первом наборе входных данных граф уже классный, потому что рёбер нет.

Во втором наборе входных данных, после выполнения единственной операции, граф становится деревом, поэтому он классный.

В третьем наборе входных данных граф уже классный, потому что он является деревом.

В четвёртом наборе входных данных, после выполнения единственной операции, граф не имеет рёбер, поэтому он классный.

В пятом наборе входных данных:

ОперацияГраф до операцииГраф после операции
\(1\)
\(2\)
\(3\)

Обратите внимание, что после первой операции граф уже стал классным, и есть две лишние операции. Поскольку граф по-прежнему классный после двух лишних операций, это является допустимым ответом.

E. Общий генератор

Конструктив математика Перебор теория чисел *2100

Для двух целых чисел \(x\) и \(y\) (\(x,y\ge 2\)) назовём \(x\) генератором \(y\), если и только если \(x\) может быть преобразован в \(y\), выполняя следующую операцию некоторое количество раз (возможно, ноль):

  • Выберите делитель \(d\) (\(d\ge 2\)) числа \(x\), затем увеличьте \(x\) на \(d\).

Например:

  • \(3\) является генератором \(8\), так как мы можем выполнить следующие операции: \(3 \xrightarrow{d = 3} 6 \xrightarrow{d = 2} 8\);
  • \(4\) является генератором \(10\), так как мы можем выполнить следующие операции: \(4 \xrightarrow{d = 4} 8 \xrightarrow{d = 2} 10\);
  • \(5\) не является генератором \(6\), так как мы не можем преобразовать \(5\) в \(6\) с помощью вышеуказанной операции.

Теперь Кевин даст вам массив \(a\), состоящий из \(n\) попарно различных целых чисел (\(a_i\ge 2\)).

Вам нужно найти целое число \(x\ge 2\) такое, что для каждого \(1\le i\le n\), \(x\) является генератором \(a_i\), или определить, что такое число не существует.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка входных данных содержит одно целое число \(t\) (\(1\le t\le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1\le n\le 10^5\)) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(2\le a_i\le 4\cdot 10^5\)) — элементы массива \(a\). Гарантируется, что элементы попарно различны.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число \(x\) — найденное вами целое число. Выведите \(-1\), если не существует подходящего \(x\).

Если существует несколько ответов, вы можете вывести любой из них.

Примечание

В первом наборе входных данных, для \(x=2\):

  • \(2\) является генератором \(8\), так как мы можем выполнить следующие операции: \(2 \xrightarrow{d = 2} 4 \xrightarrow{d = 4} 8\);
  • \(2\) является генератором \(9\), так как мы можем выполнить следующие операции: \(2 \xrightarrow{d = 2} 4 \xrightarrow{d = 2} 6 \xrightarrow{d = 3} 9\).
  • \(2\) является генератором \(10\), так как мы можем выполнить следующие операции: \(2 \xrightarrow{d = 2} 4 \xrightarrow{d = 2} 6 \xrightarrow{d = 2} 8 \xrightarrow{d = 2} 10\).

Во втором наборе входных данных можно доказать, что невозможно найти общий генератор данных четырёх целых чисел.

F. Палиндромы везде

графы жадные алгоритмы Конструктив *2500

Дан цикл с \(n\) вершинами, пронумерованными от \(0\) до \(n-1\). Для каждого \(0\le i\le n-1\) существует неориентированное ребро между вершиной \(i\) и вершиной \(((i+1)\bmod n)\) с цветом \(c_i\) (\(c_i=\texttt{R}\) или \(\texttt{B}\)).

Проверьте, выполняется ли следующее условие для каждой пары вершин \((i,j)\) (\(0\le i<j\le n-1\)):

  • Существует палиндромный маршрут между вершиной \(i\) и вершиной \(j\). Обратите внимание, что маршрут может не быть простым. Формально, должна существовать последовательность \(p=[p_0,p_1,p_2,\ldots,p_m]\), такая что:
    • \(p_0=i\), \(p_m=j\);
    • Для всех \(0\leq x\le m-1\), либо \(p_{x+1}=(p_x+1)\bmod n\), либо \(p_{x+1}=(p_{x}-1)\bmod n\);
    • Для всех \(0\le x\le y\le m-1\) таких, что \(x+y=m-1\), ребро между \(p_x\) и \(p_{x+1}\) имеет такой же цвет, как и ребро между \(p_y\) и \(p_{y+1}\).
Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \(t\) (\(1 \le t \le 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(3\leq n\leq10^6\)) — количество вершин в цикле.

Вторая строка содержит строку \(c\) длиной \(n\) (\(c_i=\texttt{R}\) или \(\texttt{B}\)) — цвет каждого ребра.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^6\).

Выходные данные

Для каждого набора входных данных выведите «YES» (без кавычек), если существует палиндромный маршрут между любой парой вершин, и «NO» (без кавычек) в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных легко показать, что существует палиндромный маршрут между любыми двумя вершинами.

Во втором наборе входных данных между любыми двумя вершинами существует маршрут, состоящий только из красных рёбер.

В третьем наборе входных данных цикл выглядит следующим образом: \(0\color{red}{\overset{\texttt{R}}{\longleftrightarrow}}1\color{blue}{\overset{\texttt{B}}{\longleftrightarrow}}2\color{blue}{\overset{\texttt{B}}{\longleftrightarrow}}3\color{red}{\overset{\texttt{R}}{\longleftrightarrow}}4\color{blue}{\overset{\texttt{B}}{\longleftrightarrow}}0\). Возьмём \((i,j)=(0,3)\) в качестве примера, тогда \(0\color{red}{\overset{\texttt{R}}{\longrightarrow}}1\color{blue}{\overset{\texttt{B}}{\longrightarrow}}2\color{blue}{\overset{\texttt{B}}{\longrightarrow}}3\color{red}{\overset{\texttt{R}}{\longrightarrow}}4\color{blue}{\overset{\texttt{B}}{\longrightarrow}}0\color{blue}{\overset{\texttt{B}}{\longrightarrow}}4\color{red}{\overset{\texttt{R}}{\longrightarrow}}3\) является палиндромным маршрутом. Таким образом, условие выполняется для \((i,j)=(0,3)\).

В четвёртом наборе входных данных не существует палиндромного маршрута для \((i,j)=(0,2)\).

A. Подарок от орангутана

жадные алгоритмы Конструктив математика сортировки *800

Исследуя джунгли, вы наткнулись на редкого орангутана с галстуком-бабочкой! Вы пожали орангутану руку и предложили ему немного еды и воды. В ответ...

Орангутан подарил вам массив \(a\) длины \(n\). Используя \(a\), вы построили два массива \(b\) и \(c\), каждый из которых будет содержать \(n\) элементов, следующим образом:

  • \(b_i = \min(a_1, a_2, \ldots, a_i)\) для каждого \(1 \leq i \leq n\).
  • \(c_i = \max(a_1, a_2, \ldots, a_i)\) для каждого \(1 \leq i \leq n\).

Определим счёт массива \(a\) как \(\sum_{i=1}^n c_i - b_i\) (т.е. сумму \(c_i - b_i\) по всем \(1 \leq i \leq n\)). Прежде чем вычислять счёт, вы можете переставить элементы \(a\) в любом порядке.

Найдите максимальный счёт, который вы можете получить, если оптимально переставите элементы \(a\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 1000\)) — количество элементов в \(a\).

Следующая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq 1000\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(1000\).

Выходные данные

Для каждого набора входных данных выведите максимальный счёт, который вы можете получить.

Примечание

В первом наборе входных данных нет другого способа переставить элементы \(a\). Таким образом, \(b = [69]\) и \(c = [69]\). Единственный возможный счёт — \(69 - 69 = 0\).

Во втором наборе входных данных можно переставить элементы \(a\) так: \([7, 5, 6]\). Тогда \(b = [7, 5, 5]\) и \(c = [7, 7, 7]\). Счёт в этом случае будет равен \((7 - 7) + (7 - 5) + (7 - 5) = 4\). Можно показать, что это максимально возможный счёт.

B. Минимизируйте единичность

игры Комбинаторика Конструктив математика *800

Для произвольной бинарной строки \(t\)\(^{\text{∗}}\), пусть \(f(t)\) — количество непустых подпоследовательностей\(^{\text{†}}\) \(t\), которые содержат только символы \(\mathtt{0}\), и пусть \(g(t)\) — это количество непустых подпоследовательностей \(t\), которые содержат хотя бы одну \(\mathtt{1}\).

Обратите внимание, что для \(f(t)\) и \(g(t)\) каждая подпоследовательность считается столько раз, сколько раз она встречается в \(t\). Например, \(f(\mathtt{000}) = 7, g(\mathtt{100}) = 4\).

Назовём единичностью бинарной строки \(t\) значение \(|f(t)-g(t)|\), где \(|z|\) обозначает абсолютное значение \(z\) для любого числа \(z\).

Вам дано целое положительное число \(n\). Найдите бинарную строку \(s\) длины \(n\), такую, чтобы её единичность была как можно меньше. Если строк несколько, вы можете вывести любую из них.

\(^{\text{∗}}\)Бинарная строка — это строка, состоящая только из символов \(\texttt{0}\) и \(\texttt{1}\).

\(^{\text{†}}\)Последовательность \(a\) является подпоследовательностью последовательности \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, нуля или всех) элементов. Например, подпоследовательности \(\mathtt{1011101}\) — это \(\mathtt{0}\), \(\mathtt{1}\), \(\mathtt{11111}\), \(\mathtt{0111}\), но не \(\mathtt{000}\) и не \(\mathtt{11100}\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 2\cdot10^5\)) — длина \(s\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2\cdot10^5\).

Выходные данные

Для каждого набора входных данных выведите \(s\) на отдельной строке. Если существует несколько ответов, выведите любой.

Примечание

В первом наборе входных данных \(f(t)=1\), потому что существует одна подпоследовательность, содержащая только \(\mathtt{0}\) (подпоследовательность \(\mathtt{0}\)), и \(g(t)=0\), потому что нет подпоследовательностей, содержащих хотя бы одну \(1\). Единичность равна \(|1-0|=1\). Строка \(\mathtt{1}\) также является корректным ответом, так как её единичность равна \(|0-1|=1\).

Во втором наборе входных данных \(f(t)=1\), потому что существует одна непустая подпоследовательность, содержащая только \(\mathtt{0}\), и \(g(t)=2\), потому что существуют две непустые подпоследовательности, содержащие хотя бы одну \(\mathtt{1}\) (\(\mathtt{01}\) и \(\mathtt{1}\)). Таким образом, единичность равна \(|1-2|=1\). Можно показать, что \(1\) — это минимально возможное значение единичности среди всех бинарных строк длины \(2\).

A. Пенчик и современная статуя

дп жадные алгоритмы Конструктив математика *800

Среди небоскребов в шумном городе Манила только что завершилось строительство самого современного на Филиппинах торгового центра Нойф! Руководитель Пенчик заказал строительство ультрасовременной статуи с \(n\) колоннами.

Высоты колонн статуи можно представить в виде массива \(h\) из \(n\) целых положительных чисел, где \(h_i\) — высота \(i\)-й колонны для всех \(i\) от \(1\) до \(n\).

Пенчик хочет, чтобы высоты колонн шли в неубывающем порядке, то есть выполнялось \(h_i \le h_{i + 1}\) для всех \(i\) от \(1\) до \(n - 1\). Однако из-за путаницы памятник был построен так, что высоты колонн находятся в невозрастающем порядке, то есть \(h_i \ge h_{i + 1}\) для всех \(i\) от \(1\) до \(n - 1\).

К счастью, Пенчик может модифицировать памятник и проделать следующую операцию над колоннами столько раз, сколько потребуется:

  • Сделать высоту колонны равной любому целому положительному числу. Формально, выбрать индекс \(1\le i\le n\) и положительное целое число \(x\), а затем присвоить \(h_i := x\).

Помогите Пенчику определить минимальное количество операций, необходимых для того, чтобы высота колонн памятника неубывала.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \leq n \leq 50\)) — количество колонн.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(h_1, h_2, \ldots, h_n\) (\(1 \le h_i \le n\) и \(h_i\ge h_{i+1}\)) — высоты колонн.

Обратите внимание, что данный массив \(h\) является невозрастающим.

Заметим, что на сумму \(n\) по всем наборам входных данных не накладываются дополнительные ограничения.

Выходные данные

Для каждого набора входных данных выведите одно целое число, представляющее собой минимальное количество операций, необходимых для того, чтобы высота колонн неубывала.

Примечание

В первом наборе входных данных начальные высоты колонн равны \(h = [5, 4, 3, 2, 1]\).

  • В первой операции Пенчик изменяет высоту колонны \(1\): \(h_1 := 2\).
  • Во второй операции он изменяет высоту колонны \(2\): \(h_2 := 2\).
  • В третьей операции он изменяет высоту колонны \(4\): \(h_4 := 4\).
  • В четвертой операции он изменяет высоту колонны \(5\): \(h_5 := 4\).

После этих операций высоты колонн \(h = [2, 2, 3, 4, 4]\), то есть они неубывают. Можно доказать, что Пенчик не может сделать высоты колонн неубывающими менее чем за \(4\) операции.

Во втором наборе входных данных Пенчик может сделать высоты колонн неубывающими, сделав высоту колонны \(3\) равной \(h_3 := 2\).

В третьем наборе входных данных высоты колонн уже являются неубывающими, поэтому никаких операций не требуется.

C. Пенчик и булочки барбекю

Конструктив математика теория чисел *1300

Пенчик любит две вещи: полные квадраты и булочки барбекю в гонконгском стиле! На его день рождения Коханэ хочет объединить их в один подарок: \(n\) булочек барбекю, расположенных слева направо. Существует \(10^6\) доступных начинок для булочек барбекю, пронумерованных от \(1\) до \(10^6\). Чтобы убедиться, что Пенчику понравится этот подарок, Кохане хочет, чтобы выполнялись следующие условия:

  • Ни одна начинка не используется ровно один раз; то есть каждая начинка должна либо не появляться вовсе, либо появляться как минимум дважды.
  • Для любых двух булочек \(i\) и \(j\) с одинаковой начинкой расстояние между ними, равное \(|i-j|\), должно быть полным квадратом\(^{\text{∗}}\).

Помогите Кохане найти подходящий способ выбора начинки для булочек или определите, что выполнить все условия невозможно. Если существует несколько решений, выведите любое из них.

\(^{\text{∗}}\)Целое положительное число \(x\) является полным квадратом, если существует целое положительное число \(y\) такое, что \(x = y^2\). Например, \(49\) и \(1\) — полные квадраты, потому что \(49 = 7^2\) и \(1 = 1^2\) соответственно. С другой стороны, \(5\) не является полным квадратом, так как ни одно целое число в квадрате не равно \(5\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2\cdot 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1\le n\le 2\cdot 10^5\)) — количество булочек барбекю.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если не существует правильного выбора начинок, выведите \(-1\). В противном случае выведите \(n\) целых чисел, где \(i\)-е целое число представляет начинку \(i\)-й булочки барбекю. Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных выбор начинок «1 1 1» недопустим, так как булочки \(1\) и \(3\) имеют одинаковую начинку, но находятся на расстоянии \(2\) друг от друга, что не является полным квадратом. Выбор начинок «1 1 2» также недопустим, так как начинка \(2\) используется только один раз.

Во втором наборе входных данных решение корректно, так как ни одна начинка не используется ровно один раз, и любые две булочки с одной и той же начинкой находятся на расстоянии, равном полному квадрату. Например, булочки \(1\) и \(10\) имеют начинку \(1\) и находятся на расстоянии \(9=3^2\). Аналогично, булочки \(5\) и \(9\) имеют начинку \(10\) и находятся на расстоянии \(4=2^2\).

F. Пенчик и четные медианы

Бинарный поиск интерактив Конструктив Теория вероятностей *2800

Это интерактивная задача.

Вернувшись после отдыха на Золотом побережье Австралии, Пенчик забыл привезти домой подарки для своей домашней утки Дуонг Кан! Но, возможно, прекрасная задача, созданная в глубоких раздумьях на живописных пляжах, станет идеальным сувениром.

Существует скрытая перестановка\(^{\text{∗}}\) \(p\) длины \(n\), где \(n\) — четное. Вам разрешается задавать следующие вопросы:

  • Выбрать подпоследовательность\(^{\text{†}}\) перестановки \(p\) с четной длиной \(4\le k\le n\). Интерактор вернет значения двух медиан\(^{\text{‡}}\) в выбранной подпоследовательности.

Найдите индексы двух медиан в перестановке \(p\), используя не более \(80\) запросов.

Обратите внимание, что интерактор является неадаптивным. Это означает, что перестановка \(p\) фиксирована изначально и не будет меняться в зависимости от ваших запросов.

\(^{\text{∗}}\)Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

\(^{\text{†}}\)Последовательность \(a\) является подпоследовательностью \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) элементов на произвольных позициях.

\(^{\text{‡}}\)Две медианы массива \(a\) четной длины \(k\) определяются как \(\frac{k}{2}\)-й и \(\left(\frac{k}{2} + 1\right)\)наименьший элемент в массиве (в нумерации с \(1\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(6 \le n \le 100\), \(n\) — четное) — длина скрытой перестановки \(p\).

Прочитав целое число \(n\) для текущего набора входных данных, вы должны начать взаимодействие и вывести ответ до чтения значения \(n\) до следующего набора.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^4\).

Протокол взаимодействия

Чтобы сделать запрос, выведите одну строку в следующем формате:

  • \(\mathtt{?}\;k\;x_1\;x_2 \ldots x_{k-1}\;x_k\) (\(4\le k\le n\), \(k\) — четное, \(1 \le x_i \le n\), \(x_i\) — попарно различные) — длина выбранной подпоследовательности, затем индексы выбранной подпоследовательности.

После каждого запроса вы должны прочитать строку, содержащую два целых числа \(m_1\) и \(m_2\) (\(1 \le m_1 < m_2 \le n\)) — значения двух медиан в массиве \([p_{x_1}, p_{x_2}, \ldots, p_{x_{k-1}}, p_{x_k}]\).

Вы можете сделать не более \(80\) таких запросов в каждом наборе входных данных.

Чтобы дать окончательный ответ, выведите одну строку в следующем формате:

  • \(\mathtt{!}\;i_1\;i_2\) (\(1\le i_1, i_2 \le n\)) — индексы двух медиан.

Обратите внимание, что порядок вывода \(i_1\) и \(i_2\) не имеет значения. Другими словами, ваше решение будет верным, если \(p_{i_1} = \frac{n}{2}\) и \(p_{i_2} = \frac{n}{2} + 1\), или \(p_{i_1} = \frac{n}{2} + 1\) и \(p_{i_2} = \frac{n}{2}\).

После вывода каждого запроса не забудьте вывести перевод строки и сбросить буфер вывода\(^{\text{∗}}\). В противном случае вы получите вердикт Решение «зависло».

На любом шаге взаимодействия, если вы считали \(-1\) вместо корректных данных, ваше решение должно немедленно завершиться. Это означает, что ваше решение получит вердикт Неправильный ответ из-за некорректного запроса или любой другой ошибки. Если программа не завершится, вы можете получить любой вердикт, так как ваша программа продолжит чтение из закрытого потока.

Формат взломов

Для взломов используйте следующий формат.

Первая строка должна содержать \(t\) — количество наборов входных данных.

Первая строка каждого набора входных данных должна содержать одно целое число \(n\).

Вторая строка каждого набора входных данных должна содержать перестановку \(p_1, p_2, \ldots, p_n\) длины \(n\).

В качестве примера формата взлома приведём тест из примера:


2
6
6 2 3 5 1 4
10
10 9 8 7 6 5 4 3 2 1

\(^{\text{∗}}\)Чтобы сбросить буфер вывода, используйте:

  • fflush(stdout) или cout.flush() в C++;
  • sys.stdout.flush() в Python;
  • смотрите документацию для других языков.
Примечание

В первом наборе входных данных скрытая перестановка равна \(p = [6, 2, 3, 5, 1, 4]\).

  1. В первом запросе была выбрана вся перестановка. Две медианы всей перестановки \(p\) равны \(3\) и \(4\).
  2. Индексы выбранной подпоследовательности во втором запросе — \(3\), \(6\), \(1\) и \(5\). Интерактор возвращает две медианы подпоследовательности \([p_3, p_6, p_1, p_5] = [3, 4, 6, 1]\), которые равны \(3\) и \(4\).
  3. Индексы выбранной подпоследовательности во втором запросе равны \(3\), \(6\), \(2\) и \(5\). Интерактор возвращает две медианы подпоследовательности \([p_3, p_6, p_2, p_5] = [3, 4, 2, 1]\), которые равны \(2\) и \(3\).

Ответ «! 3 6» верен, так как \(p_3 = 3\) и \(p_6 = 4\).

Во втором наборе входных данных скрытая перестановка равна \(p = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]\).

  1. Индексы выбранной подпоследовательности во втором запросе — \(1\), \(3\), \(7\), \(8\), \(9\) и \(10\). Интерактор возвращает две медианы подпоследовательности \([p_1, p_3, p_7, p_8, p_9, p_{10}] = [10, 8, 4, 3, 2, 1]\), которые равны \(3\) и \(4\).
  2. Индексы выбранной подпоследовательности во втором запросе равны \(1\), \(2\), \(3\), \(4\), \(5\), \(6\), \(7\) и \(8\). Интерактор возвращает две медианы подпоследовательности \([p_1, p_2, p_3, p_4, p_5, p_6, p_7, p_8] = [10, 9, 8, 7, 6, 5, 4, 3]\), которые равны \(6\) и \(7\).

Ответ «! 5 6» верен, так как \(p_5 = 6\) и \(p_6 = 5\).

B. Медианы

жадные алгоритмы Конструктив математика реализация *1100

Дан массив \(a = [1, 2, \ldots, n]\), где \(n\)нечетное, и целое число \(k\).

Ваша задача — выбрать нечетное положительное целое число \(m\) и разбить массив \(a\) на \(m\) подмассивов\(^{\dagger}\) \(b_1, b_2, \ldots, b_m\) так, чтобы:

  • Каждый элемент массива \(a\) принадлежит ровно одному подмассиву.
  • Для всех \(1 \le i \le m\), \(|b_i|\)нечетное, т.е. длина каждого подмассива нечетная.
  • \(\operatorname{median}([\operatorname{median}(b_1), \operatorname{median}(b_2), \ldots, \operatorname{median}(b_m)]) = k\), т.е. медиана\(^{\ddagger}\) массива медиан всех подмассивов должна равняться \(k\). \(\operatorname{median}(c)\) обозначает медиану массива \(c\).

\(^{\dagger}\)Подмассив массива \(a\) длины \(n\) — это массив \([a_l, a_{l + 1}, \ldots, a_r]\) для некоторых целых чисел \(1 \le l \le r \le n\).

\(^{\ddagger}\)Медиана массива нечетной длины — это средний элемент после сортировки массива в неубывающем порядке. Например: \(\operatorname{median}([1,2,5,4,3]) = 3\), \(\operatorname{median}([3,2,1]) = 2\), \(\operatorname{median}([2,1,2,1,2,2,2]) = 2\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 5000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le k \le n < 2 \cdot 10^5\), \(n\)нечетное) — длина массива \(a\) и требуемая медиана массива медиан всех подмассивов.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных:

  • Если подходящего разбиения нет, выведите \(-1\) в одной строке.
  • В противном случае, в первой строке выведите нечетное целое число \(m\) (\(1 \le m \le n\)) — количество подмассивов в разбиении, а во второй строке выведите \(m\) различных целых чисел \(p_1, p_2 , p_3 , \ldots, p_m\) (\(1 = p_1 < p_2 < p_3 < \ldots < p_m \le n\)) — обозначающие левые границы каждого подмассива.

А именно, для корректного ответа \([p_1, p_2, \ldots, p_m]\):

  • \(b_1 = \left[ a_{p_1}, a_{p_1 + 1}, \ldots, a_{p_2 - 1} \right]\)
  • \(b_2 = \left[ a_{p_2}, a_{p_2 + 1}, \ldots, a_{p_3 - 1} \right]\)
  • \(\ldots\)
  • \(b_m = \left[ a_{p_m}, a_{p_m + 1}, \ldots, a_n \right]\).

Если существует несколько решений, вы можете вывести любое из них.

Примечание

В первом наборе входных данных при данном разбиении \(m = 1\) и \(b_1 = [1]\). Очевидно, что \(\operatorname{median}([\operatorname{median}([1])]) = \operatorname{median}([1]) = 1\).

Во втором наборе входных данных при данном разбиении \(m = 3\) и:

  • \(b_1 = [1]\)
  • \(b_2 = [2]\)
  • \(b_3 = [3]\)

Следовательно, \(\operatorname{median}([\operatorname{median}([1]), \operatorname{median}([2]), \operatorname{median}([3])]) = \operatorname{median}([1, 2, 3]) = 2\).

В третьем наборе входных данных нет корректного разбиения для \(k = 3\).

В четвертом наборе входных данных при данном разбиении \(m = 5\) и:

  • \(b_1 = [1, 2, 3]\)
  • \(b_2 = [4, 5, 6]\)
  • \(b_3 = [7, 8, 9]\)
  • \(b_4 = [10, 11, 12]\)
  • \(b_5 = [13, 14, 15]\)

Следовательно, \(\operatorname{median}([\operatorname{median}([1, 2, 3]), \operatorname{median}([4, 5, 6]), \operatorname{median}([7, 8, 9]), \operatorname{median}([10, 11, 12]), \operatorname{median}([13, 14, 15])]) = \operatorname{median}([2, 5, 8, 11, 14]) = 8\).

D. Генокракен

графы Деревья жадные алгоритмы интерактив Конструктив реализация Структуры данных *1800

Это интерактивная задача.

Очистив Прибрежную Зону, Гретель обнаружила монстра по имени Генокракен и удерживает его для своих научных исследований.

Нервная система монстра может быть представлена как дерево\(^{\dagger}\) из \(n\) вершин (на самом деле, всё не должно постоянно напоминать деревья\(\ldots\)), пронумерованных от \(0\) до \(n-1\), с вершиной \(0\) в качестве корня.

Цель Гретель — узнать точную структуру нервной системы монстра. Более конкретно, она хочет узнать значения \(p_1, p_2, \ldots, p_{n-1}\) дерева, где \(p_i\) (\(0 \le p_i < i\)) является прямым предком вершины \(i\) (\(1 \le i \le n - 1\)).

Она не знает точно, как расположены вершины, но знает несколько приятных фактов:

  • Если мы удалим корневую вершину \(0\) и все смежные ребра, то это дерево превратится в лес, состоящий только из путей\(^{\ddagger}\). Каждая вершина, которая изначально была смежной с вершиной \(0\), будет концом какого-то пути.
  • Вершины нумеруются таким образом, что если \(1 \le x \le y \le n - 1\), то \(p_x \le p_y\).
  • Вершина \(1\) гарантированно имеет ровно две смежные вершины (включая вершину \(0\)).
Дерево на этой картинке не удовлетворяет условию, потому что если мы удалим вершину \(0\), то вершина \(2\) (которая изначально была смежной с вершиной \(0\)) не будет концом пути \(4-2-5\).Дерево на этой картинке не удовлетворяет условию, потому что должно выполняться \(p_3 \le p_4\).Дерево на этой картинке не удовлетворяет условию, потому что вершина \(1\) имеет только одну смежную вершину.

Гретель может делать запросы к защитной камере:

  • «? a b» (\(1 \le a, b < n\), \(a \ne b\)) — камера проверит, содержит ли простой путь между вершинами \(a\) и \(b\) вершину \(0\).

Однако, чтобы избежать неожиданных последствий от чрезмерной стимуляции существа, Гретель хочет сделать не более \(2n - 6\) запросов. Хотя Гретель одарена, она не может сделать всё сразу, так что можете ли вы протянуть ей руку помощи?

\(^{\dagger}\)Дерево — это связный граф, в котором каждая пара различных вершин имеет ровно один простой путь, соединяющий их.

\(^{\ddagger}\)Путь — это дерево, вершины которого могут быть записаны в порядке \(v_1, v_2, \ldots, v_k\) так, что рёбра имеют вид \((v_i, v_{i+1})\) (\(1 \le i < k\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(4 \le n \le 10^4\)) — количество вершин в нервной системе Генокракена.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(10^4\).

Протокол взаимодействия

Для каждого набора входных данных взаимодействие начинается с чтения целого числа \(n\).

Затем вы можете делать запросы следующего вида:

  • «? a b» (без кавычек) (\(1 \le a, b < n\), \(a \ne b\)).

После запроса прочитайте целое число \(r\) — ответ на ваш запрос. Вам разрешено использовать не более \(2n - 6\) запросов этого типа.

  • Если простой путь между вершинами \(a\) и \(b\) не содержит вершину \(0\), вы получите \(r = 0\).
  • Если простой путь между вершинами \(a\) и \(b\) содержит вершину \(0\), вы получите \(r = 1\).
  • В случае, если вы сделаете более \(2n-6\) запросов или сделаете некорректный запрос, вы получите \(r = -1\). После получения такого ответа ваша программа должна немедленно завершиться, чтобы получить вердикт «Неправильный ответ». В противном случае вы можете получить произвольный вердикт, потому что ваше решение продолжит чтение из закрытого потока.

Когда вы определите структуру, выведите строку в формате «! \(p_1 \space p_2 \ldots p_{n-1}\)» (без кавычек), где \(p_i\) (\(0 \le p_i < i\)) обозначает индекс прямого предка вершины \(i\). Этот запрос не учитывается в лимите \(2n - 6\) запросов.

После решения одного набора входных данных программа должна сразу же переходить к следующему. После решения всех наборов входных данных программа должна быть немедленно завершена.

После вывода любого запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт Решение «зависло». Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Интерактор неадаптивный. Дерево не меняется в процессе взаимодействия.

Взломы

Для взлома используйте следующий формат:

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(4 \le n \le 10^4\)) — количество вершин в нервной системе Генокракена.

Вторая строка каждого набора входных данных содержит \(n-1\) целых чисел \(p_1, p_2, \ldots, p_{n-1}\) (\(0 \le p_1 \le p_2 \le \ldots \le p_{n-1} \le n - 2\), \(0 \le p_i < i\)) — прямые предки вершин \(1\), \(2\), ..., \(n-1\) в системе соответственно.

В каждом наборе входных данных значения \(p_1, p_2, \ldots, p_{n-1}\) должны обеспечивать следующее в дереве:

  • Если мы удалим корневую вершину \(0\) и все смежные ребра, то это дерево превратится в лес, состоящий только из путей. Каждая вершина, которая изначально была смежной с вершиной \(0\), будет концом какого-то пути.
  • Вершина \(1\) имеет ровно две смежные вершины (включая вершину \(0\)).

Сумма \(n\) по всем наборам входных данных не должна превышать \(10^4\).

Примечание

В первом наборе входных данных нервная система Генокракена образует следующее дерево:

  • Ответ на «? 2 3» равен \(1\). Это означает, что простой путь между вершинами \(2\) и \(3\) содержит вершину \(0\).

Во втором наборе входных данных нервная система Генокракена образует следующее дерево:

  • Ответ на «? 2 3» равен \(1\). Это означает, что простой путь между вершинами \(2\) и \(3\) содержит вершину \(0\).
  • Ответ на «? 2 4» равен \(0\). Это означает, что простой путь между вершинами \(2\) и \(4\) не содержит вершину \(0\).

В третьем наборе входных данных нервная система Генокракена образует следующее дерево:

E. Сбалансированный

жадные алгоритмы Конструктив математика реализация Структуры данных *2400

Дан циклический массив \(a\) из \(n\) элементов, где \(n\)нечетное. За одну операцию вы можете сделать следующее:

  • Выберите индекс \(1 \le i \le n\) и увеличьте \(a_{i - 1}\) на \(1\), \(a_i\) на \(2\) и \(a_{i + 1}\) на \(1\). Элемент перед первым элементом является последним элементом, так как это циклический массив.

Циклический массив называется сбалансированным, если все его элементы равны между собой.

Найдите любую последовательность операций, чтобы сделать этот циклический массив сбалансированным, или определите, что это невозможно. Обратите внимание, что вам не нужно минимизировать количество операций.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n < 2 \cdot 10^5\), \(n\)нечетное) — длина массива \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^{6}\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных:

  • Если невозможно сделать циклический массив сбалансированным, выведите \(-1\).
  • В противном случае выведите \(n\) целых чисел \(v_1, v_2, \ldots, v_n\) (\(0 \leq v_i \leq 10^{18}\)) — где \(v_i\) обозначает количество операций, примененных к индексу \(i\). Можно доказать, что если существует какое-то решение, то существует решение при данных ограничениях. Если существует несколько решений при данных ограничениях, выведите любое из них.
Примечание

В первом наборе входных данных:

  • После \(1\) операции, примененной к индексу \(i = 2\), массив \(a = [3, 3, 3]\).

Во втором наборе входных данных:

  • После \(2\) операций, примененных к индексу \(i = 1\), массив \(a = [5, 4, 5]\).
  • После \(1\) операции, примененной к индексу \(i = 2\), массив \(a = [6, 6, 6]\).

В третьем наборе входных данных:

  • После \(2\) операций, примененных к индексу \(i = 1\), массив \(a = [5, 4, 1, 2, 3]\).
  • После \(3\) операций, примененных к индексу \(i = 3\), массив \(a = [5, 7, 7, 5, 3]\).
  • После \(2\) операций, примененных к индексу \(i = 5\), массив \(a = [7, 7, 7, 7, 7]\).

A. Сакурако и Косукэ

Конструктив математика реализация *800

Сакурако и Косукэ решили поиграть в игры с точкой на координатной прямой. Точка в настоящее время находится в позиции \(x=0\). Они будут по очереди делать ходы, и первой ходит Сакурако.

На каждом \(i\)-м ходу текущий игрок переместит точку в каком-то направлении на \(2\cdot i-1\) единиц. Сакурако всегда будет перемещать точку в отрицательном направлении, тогда как Косукэ всегда будет перемещать её в положительном направлении.

Другими словами, произойдет следующее:

  1. Сакурако изменит положение точки на \(-1\), теперь \(x = -1\)
  2. Косукэ изменит положение точки на \(3\), теперь \(x = 2\)
  3. Сакурако изменит положение точки на \(-5\), теперь \(x = -3\)
  4. \(\cdots\)

Они будут продолжать играть, пока абсолютное значение координаты точки не превысит \(n\). Более формально, игра продолжается, пока \(-n\le x\le n\). Можно доказать, что игра всегда закончится.

Ваша задача — определить, кто сделает последний ход.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1\le t\le 100\)) — количество игр, в которые сыграли Сакурако и Косукэ.

Каждая игра описывается одним числом \(n\) (\(1 \le n\le 100\)) — числом, которое определяет условие, при котором игра заканчивается.

Выходные данные

Для каждой из \(t\) игр выведите строку с результатом этой игры. Если последний ход сделала Сакурако, выведите «Sakurako» (без кавычек), иначе выведите «Kosuke».

B. Сакурако и вода

жадные алгоритмы Конструктив Перебор *900

Во время своего похода с Косукэ, Сакурако и Косукэ нашли долину, которую можно представить в виде матрицы \(n \times n\), где на пересечении \(i\)-й строки и \(j\)-го столбца находится гора высотой \(a_{i,j}\). Если \(a_{i,j} < 0\), то там находится озеро.

Косукэ очень боится воды, поэтому Сакурако нужно помочь ему:

  • С помощью своей магии она может выбрать квадратный участок гор и увеличить высоту каждой горы на главной диагонали этого участка ровно на один.

Более формально, она может выбрать подматрицу с верхним левым углом, расположенным в \((i, j)\), и нижним правым углом в \((p, q)\), так что \(p-i=q-j\). И добавить один к каждому элементу на пересечении \((i + k)\)-й строки и \((j + k)\)-го столбца, для всех \(k\), где \(0 \le k \le p-i\).

Определите минимальное количество раз, которое Сакурако должна использовать свою магию, чтобы все озера исчезли.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 200\)) — количество наборов входных данных.

Каждый набор входных данных описывается следующим образом:

  • первая строка каждого набора входных данных состоит из одного числа \(n\) (\(1 \le n \le 500\))
  • каждая из следующих \(n\) строк состоит из \(n\) целых чисел, разделенных пробелами, которые соответствуют высоте гор в матрице \(a\) (\(-10^5 \le a_{i,j} \le 10^5\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(1000\).

Выходные данные

Для каждого теста выведите минимальное количество раз, которое Сакурако придется использовать свою магию, чтобы все озера исчезли.

C. Заперт в лабиринте ведьмы

графы Конструктив поиск в глубину и подобное реализация *1400

В четвёртом подвиге Рустама, легендарного героя из Шахнаме, старая ведьма создала волшебный лабиринт, чтобы заманить его в ловушку. Лабиринт представляет собой прямоугольную сетку, состоящую из \(n\) строк и \(m\) столбцов. Каждая клетка в лабиринте указывает в определенном направлении: вверх, вниз, влево или вправо. Ведьма заколдовала Рустама так, что всякий раз, когда он находится в клетке, он перемещается в следующую клетку в направлении, указанном этой клеткой.

Если Рустам в конце концов выйдет из лабиринта, он освободится от чар ведьмы и победит ее. Однако, если он будет вечно блуждать по лабиринту, то он останется там навсегда.

Ведьма еще не определила направления для всех клеток. Она хочет назначить направления для неуказанных клеток таким образом, чтобы количество клеток, начав из которых Рустам будет пойман навсегда, было максимальным. Ваша задача — найти это количество.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Для каждого набора входных данных:

  • Первая строка содержит два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 1000\)), представляющих количество строк и столбцов в лабиринте.
  • Каждая из следующих \(n\) строк содержит строку из \(m\) символов, представляющих направления в лабиринте. Каждый символ является одним из следующих:
    • U (вверх)
    • D (вниз)
    • L (влево)
    • R (вправо)
    • ? (неуказанное направление)

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — максимальное количество клеток, начиная из которых Рустам будет заперт навсегда, после оптимального назначения направлений неопределенным ячейкам.

Примечание

Назовём плохими клетки, начиная в которых Рустам не сможет выбраться. Остальные клетки назовём хорошими.

В первом наборе входных данных все клетки будут хорошими, независимо от ваших действий.

Во втором наборе входных данных, если вы назначите ? значения, как показано на рисунке ниже, все клетки будут плохими:

В третьем наборе входных данных, если вы назначите ? значения, как показано на рисунке ниже, у вас будет \(5\) плохих клеток (клетки, закрашенные красным):

D. Мудрость Дария

жадные алгоритмы Конструктив реализация сортировки *1600

Дарий Великий строит \(n\) каменных колонн, каждая из которых состоит из основания и либо \(0\), либо \(1\), либо \(2\) фрагментов надписей, расположенных сверху.

На каждом ходе Дарий может выбрать две колонны \(u\) и \(v\) такие, чтобы разница в количестве надписей между этими колоннами равнялась ровно \(1\), и перенести одну надпись с колонны с большим количеством надписей на другую. Гарантируется, что по крайней мере одна колонна содержит ровно \(1\) надпись.

Поскольку красота является главной опорой исторических зданий, Дарий хочет, чтобы колонны были расположены по возрастанию высоты. Чтобы избежать чрезмерных усилий работников, он просит вас спланировать последовательность из максимум \(n\) ходов, чтобы расположить колонны в порядке неубывания высоты, исходя из количества надписей. Минимизация количества ходов не требуется.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 3000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) — количество каменных колонн (\(1 \leq n \leq 2 \cdot 10^5\)).

Вторая строка содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\), где \(a_i \in \{0,1,2\}\) обозначает изначальное количество надписей на \(i\)-й колонне. Гарантируется, что по крайней мере на одной колонне находится ровно \(1\) надпись.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите целое число \(k\) — количество перемещений, использованных для сортировки колонн (\(0 \leq k \leq n\)).

Затем выведите \(k\) строк, каждая из которых содержит два целых числа \(u_i\) и \(v_i\) (\(1 \leq u_i, v_i \leq n\)), представляющие индексы колонн, участвующих в \(i\)-м перемещении. Во время каждого хода должно выполняться \(|a_{u_i} - a_{v_i}| = 1\), и одна надпись переносится с колонны с большим количеством надписей на другую.

Можно доказать, что при заданных ограничениях решение всегда существует.

Примечание

Состояние колонн в первом наборе входных данных:

  • Изначально: \(0, 2, 0, 1\)
  • После первого хода: \(0, 1, 0, 2\)
  • После второго хода: \(0, 0, 1, 2\)

Состояние колонн во втором наборе входных данных:

  • Изначально: \(1, 2, 0\)
  • После первого хода: \(0, 2, 1\)
  • После второго хода: \(0, 1, 2\)

В третьем наборе входных данных высоты колонн уже отсортированы в порядке возрастания.

E. Гармония перестановок

жадные алгоритмы Комбинаторика Конструктив математика хэши *2200

Райан хочет преподнести Рейхане подарок, чтобы завоевать её сердце. Однако Рейхане привередлива и примет только k-гармоничное множество перестановок.

Определим k-гармоничное множество перестановок как набор \(k\) попарно различных перестановок \(p_1, p_2, \ldots, p_k\) такого размера \(n\), что для каждой пары индексов \(i\) и \(j\) (где \(1 \leq i, j \leq n\)) выполняется следующее условие:

\(\) p_1[i] + p_2[i] + \ldots + p_k[i] = p_1[j] + p_2[j] + \ldots + p_k[j] \(\)

Ваша задача состоит в том, чтобы помочь Райану, либо предоставив допустимое k-гармоничное множество перестановок для заданных значений \(n\) и \(k\), либо определив, что такого набора не существует.

Мы называем последовательность длины \(n\) перестановкой, если она содержит каждое целое число от \(1\) до \(n\) ровно один раз.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор входных данных состоит из двух целых чисел \(n\) и \(k\) (\(1 \leq n, k \leq 10^5\)).

Гарантируется, что сумма \(n \cdot k\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если k-гармоничное множество перестановок существует, выведите YES в первой строке. Затем выведите \(k\) строк, которые содержат различные перестановки целых чисел от \(1\) до \(n\).

Если такого набора не существует, в единственной строке выведите NO.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Если существует несколько ответов, вы можете вывести любой из них.

Примечание

В 1 наборе входных данных мы имеем \(p_1 = [1, 2, 3]\), \(p_2 = [2, 3, 1]\), и \(p_3 = [3, 1, 2]\). Можно заметить, что \(p_1[1] + p_2[1] + p_3[1] = p_1[2] + p_2[2] + p_3[2] = p_1[3] + p_2[3] + p_3[3] = 6\).

Во 2 наборе входных данных у нас есть \(p_1 = [1, 2, 3, 4]\) и \(p_2 = [4, 3, 2, 1]\). Можно заметить, что \(p_1[1] + p_2[1] = p_1[2] + p_2[2] = p_1[3] + p_2[3] = p_1[4] + p_2[4] = 5\).

В 3 наборе входных данных, поскольку в \(p_1\) есть пять различных элементов, очевидно, что ответ — «No».

G1. Часы Симурга (простая версия)

жадные алгоритмы Конструктив реализация сортировки *3500

Единственное различие между двумя версиями задачи заключается в том, учитываются ли пересечения во всех точках или только в целых точках.

Легендарная мифическая птица Симург отвечает за охрану обширных земель, и для этой цели она наняла \(n\) бдительных воинов. Каждый воин находится в боевой готовности в течение определенного отрезка времени \([l_i, r_i]\), где \(l_i\) — время начала (включительно), а \(r_i\) — время окончания (включительно), оба являются целыми положительными числами.

Один из доверенных советников Симурга, Зал, обеспокоен тем, что если несколько воинов будут караулить в одно и то же время и будут одеты в один и тот же цвет, они могут стать неотличимыми, что вызовет путаницу в дозоре. Чтобы предотвратить это, всякий раз, когда несколько воинов находятся на страже в один и тот же (возможно, нецелый) момент времени, должен быть хотя бы один цвет, который носит ровно один воин.

Таким образом, ваша задача состоит в том, чтобы определить минимальное необходимое количество цветов и назначить цвет \(c_i\) каждому отрезку дозора воина \([l_i, r_i]\) таким образом, чтобы для каждого (возможно, нецелого) момента времени \(t\) существовал цвет, который принадлежит ровно одному отрезку, содержащему \(t\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Для каждого набора входных данных:

  • Первая строка содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — количество воинов, размещенных Симургом.
  • Каждая из следующих \(n\) строк содержит по два целых числа \(l_i\) и \(r_i\) (\(1 \leq l_i \leq r_i \leq 10^9\)) — начало и окончание отрезка времени воина.

Сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных:

  • Выведите минимальное необходимое количество цветов \(k\).
  • Затем выведите строку из \(n\) целых чисел \(c_i\) (\(1 \leq c_i \leq k\)), где каждое \(c_i\) — это цвет, присвоенный \(i\)-му воину.
Примечание

Мы можем представить отрезок наблюдения каждого воина в виде отрезка по оси X;

В 1 наборе входных данных у нас есть два независимых отрезка, которые могут быть окрашены в один и тот же цвет.

Во 2 наборе входных данных точка 2 является общей для двух отрезков, что означает, что мы не можем раскрасить их в один и тот же цвет.

В 3 наборе входных данных отрезки могут быть окрашены, как показано ниже (отрезки покрашены в выбранный цвет; области закрашены цветом, если данный цвет встречается в этот момент времени ровно один раз):

В 4 наборе входных данных отрезки могут быть окрашены, как показано ниже:

В 5 наборе входных данных отрезки могут быть окрашены, как показано ниже. Изображение справа демонстрирует пример неправильной раскраски для этого набора входных данных; на момент времени \(5.5\) нет уникального цвета:

B. Все любят тройки

жадные алгоритмы Конструктив математика теория чисел *900

Есть 3 героя и 3 злодея, то есть всего 6 человек.

Дано целое положительное число \(n\). Найдите наименьшее целое число, такое, что его десятичное представление имеет длину \(n\), оно состоит только из цифр \(3\) и \(6\), и оно делится и на \(33\), и на \(66\). Если такого числа не существует, выведите \(-1\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1\le n\le 500\)) — длина десятичного представления числа.

Выходные данные

Для каждого набора входных данных выведите наименьшее подходящее целое число, если оно существует, и \(-1\) в противном случае.

Примечание

Для \(n=1\) такого целого числа не существует, так как ни \(3\), ни \(6\) не делится на \(33\).

Для \(n=2\) число \(66\) состоит только из \(6\) и делится как на \(33\), так и на \(66\).

Для \(n=3\) такого целого числа не существует. Только \(363\) делится на \(33\), но оно не делится на \(66\).

Для \(n=4\) числа \(3366\) и \(6666\) делятся и на \(33\), и на \(66\), причем \(3366\) — наименьшее.

C. Аля и перестановка

битмаски Конструктив математика *1400

Але досталась сложная задача. К сожалению, она слишком занята баллотированием в студенческий совет. Пожалуйста, решите эту задачу за неё.

Дано целое число \(n\). Постройте перестановку \(p\) целых чисел \(1, 2, \ldots, n\), которая максимизирует значение \(k\) (которое изначально равно \(0\)) после следующего процесса.

Выполняется \(n\) операций, на \(i\)-й операции (\(i=1, 2, \dots, n\)):

  • Если \(i\) нечетно, то \(k=k\,\&\,p_i\), где \(\&\) обозначает операцию побитового И.
  • Если \(i\) четно, то \(k=k\,|\,p_i\), где \(|\) обозначает операцию побитового ИЛИ.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(5\le n\le 2 \cdot 10^5\)) — длина перестановки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите максимальное значение \(k\) в первой строке и перестановку \(p_1, p_2,\ldots, p_n\) во второй строке.

Если подходящих перестановок несколько, выведите любую из них.

Примечание

В первом наборе входных данных максимальное значение \(k\) получается следующим образом:

Изначально \(k = 0\).

  • На \(1\)-й операции: \(1\) нечётно, поэтому Аля задает \(k\) равным \(k\&p_1 = 0\&2 = 0\).
  • На \(2\)-й операции: \(2\) чётно, поэтому Аля задает \(k\) равным \(k|p_2 = 0|1 = 1\).
  • На \(3\)-й операции: \(3\) нечетно, поэтому Аля задает \(k\) равным \(k\&p_3 = 1\&3 = 1\).
  • На \(4\)-й операции: \(4\) четно, поэтому Аля задает \(k\) равным \(k|p_4 = 1|4 = 5\).
  • На \(5\)-й операции: \(5\) нечетно, поэтому Аля задает \(k\) равным \(k\&p_5 = 5\&5 = 5\).

Итоговое значение \(k\) равно \(5\). Можно показать, что итоговое значение \(k\) не может превышать \(5\) для всех перестановок длины \(5\). Другой корректный ответ — \([2, 3, 1, 4, 5]\).

Для второго набора входных данных максимальное значение \(k\) равно \(7\). Можно показать, что итоговое значение \(k\) не может быть больше \(7\) для всех перестановок длины \(6\). Другие корректные ответы: \([2, 4, 1, 6, 3, 5]\) и \([5, 2, 6, 1, 3, 4]\).

E. Монстр

Бинарный поиск жадные алгоритмы Конструктив математика Перебор реализация Тернарный поиск *2300

Мужик, этот босс в Genshin такой сложный. Хорошо, что у них есть пополнение на \(6\) монет всего за \( \$4.99\). Мне следует быть осторожнее и не тратить больше, чем нужно, иначе мама меня поймает...

Вы сражаетесь с монстром со здоровьем \(z\), используя оружие с уроном \(d\). Изначально \(d=0\). Вы можете выполнять следующие действия.

  • Увеличить \(d\) — урон вашего оружия на \(1\), потратив \(x\) монет.
  • Атаковать монстра, нанеся ему \(d\) урона, потратив \(y\) монет.

Вы не можете выполнять первую операцию более \(k\) раз подряд.

Найдите минимальное количество монет, необходимое для того, чтобы победить монстра, нанеся ему хотя бы \(z\) урона.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t\le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит 4 целых числа \(x\), \(y\), \(z\) и \(k\) (\(1\leq x, y, z, k\leq 10^8\)) — стоимость первой операции, стоимость второй операции, здоровье монстра и ограничение на первую операцию.

Выходные данные

Для каждого набора входных данных выведите минимальное количество монет, необходимое для победы над монстром.

Примечание

В первом наборе входных данных \(x = 2\), \(y = 3\), \(z = 5\) и \(k = 5\). Вот стратегия, которая обеспечивает наименьшую возможную стоимость в \(12\) монет:

  • Увеличить урон на \(1\), потратив \(2\) монеты.
  • Увеличить урон на \(1\), потратив \(2\) монеты.
  • Увеличить урон на \(1\), потратив \(2\) монеты.
  • Атаковать монстра, нанеся ему \(3\) урона, потратив \(3\) монеты.
  • Атаковать монстра, нанеся ему \(3\) урона, потратив \(3\) монеты.

Вы наносите в общей сложности \(3 + 3 = 6\) урона, побеждая монстра, который имеет \(5\) здоровья. Суммарное количество монет, которое вы потратите, составляет \(2 + 2 + 2 + 3 + 3 = 12\) монет.

Во втором наборе входных данных \(x = 10\), \(y = 20\), \(z = 40\) и \(k = 5\). Вот стратегия, которая позволяет достичь наименьшей возможной стоимости в \(190\) монет:

  • Увеличить урон на \(5\), что стоит \(5\cdot x\) = \(50\) монет.
  • Атаковать монстра один раз, нанеся ему \(5\) урона, потратив \(20\) монет.
  • Увеличить урон на \(2\), потратив \(2\cdot x\) = \(20\) монет.
  • Атаковать монстра \(5\) раз, нанеся \(5\cdot 7 = 35\) урона, потратив \(5\cdot y\) = \(100\) монет.

Всего вы нанесли \(5 + 35 = 40\) урона, победив монстра, у которого ровно \(40\) здоровья. Вы потратили \(50 + 20 + 20 + 100 = 190\) монет.

H. Пик продуктивности форсес

Конструктив *3500

Я на пике продуктивности, и это глубоко.

Вам даны две перестановки\(^{\text{∗}}\) \(a\) и \(b\), обе длины \(n\).

Вы можете выполнить следующую трехшаговую операцию над перестановкой \(a\):

  1. Выбрать индекс \(i\) (\(1 \le i \le n\)).
  2. Циклически сдвинуть \(a_1, a_2, \ldots, a_{i-1}\) на \(1\) вправо. Если вы выбрали \(i = 1\), то этот диапазон не существует, и вам не надо его сдвигать.
  3. Циклически сдвинуть \(a_{i + 1}, a_{i + 2}, \ldots, a_n\) на \(1\) вправо. Если вы выбрали \(i = n\), то этот диапазон не существует, и вам не надо его сдвигать.

После операции массив \(a_1,a_2,\ldots, a_{i-2},a_{i-1},a_i,a_{i + 1}, a_{i + 2},\ldots,a_{n-1}, a_n\) преобразуется в \(a_{i-1},a_1,\ldots,a_{i-3},a_{i-2},a_i,a_n, a_{i + 1},\ldots,a_{n-2}, a_{n-1}\).

Вот несколько примеров операций, выполняемых над тождественной перестановкой \([1,2,3,4,5,6,7]\) длины \(7\):

  • Если мы выберем \(i = 3\), то она станет \([2, 1, 3, 7, 4, 5, 6]\).
  • Если мы выберем \(i = 1\), то это станет \([1, 7, 2, 3, 4, 5, 6]\).
  • Если мы выберем \(i = 7\), то это станет \([6, 1, 2, 3, 4, 5, 7]\).
Заметим, что позиция \(i\) не сдвигается.

Найдите конструкцию, использующую не более \(2n\) операций, чтобы \(a\) стала равна \(b\), или выведите \(-1\), если это невозможно. Количество операций не обязательно должно быть минимальным. Можно показать, что если возможно сделать \(a\) равным \(b\), то это можно сделать не более чем за \(2n\) операций.

\(^{\text{∗}}\)Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 5 \cdot 10^5\)) — длины перестановок \(a\) и \(b\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le n\)) — элементы перестановки \(a\).

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le n\)) — элементы перестановки \(b\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных:

Если существует последовательность операций для преобразования \(a\) в \(b\), выведите одно целое число \(q\) (\(0\le q\le 2n\)) — количество операций, в первой строке, и \(q\) целых чисел, где \(i\)-е число представляет индекс на \(i\)-й операции, во второй строке.

Если последовательность операций не существует, то в единственной строке выведите \(-1\).

Примечание

В первом наборе входных данных вы можете не совершать операции, так как \(a=b\).

Во втором наборе входных данных можно доказать, что \(a\) не может быть преобразовано в \(b\).

В третьем наборе входных данных \(a\) преобразуется в \([2,3,1]\) после первой операции и в \(b\) после второй операции.

E. Пустить реки вспять

Бинарный поиск жадные алгоритмы Конструктив Структуры данных *1600

Сговор древних мудрецов, решивших повернуть реки для собственного удобства, поставил мир на грань. Но перед реализацией своего грандиозного плана они решили тщательно продумать стратегию — на то они и мудрецы.

Существует \(n\) стран, в каждой из которых ровно по \(k\) регионов. Для \(j\)-го региона \(i\)-й страны они вычислили значение \(a_{i,j}\), которое отражает количество воды в нём.

Мудрецы намереваются создать каналы между \(j\)-м регионом \(i\)-й страны и \(j\)-м регионом \((i + 1)\)-й страны для всех \(1 \leq i \leq (n - 1)\) и для всех \(1 \leq j \leq k\).

В силу того, что все \(n\) стран находятся на большом склоне, вода стекает в сторону страны с наибольшим номером. По прогнозу мудрецов, после создания системы каналов новое значение \(j\)-го региона \(i\)-й страны станет равно \(b_{i,j} = a_{1,j} | a_{2,j} | ... | a_{i,j}\), где \(|\) — операция побитового «ИЛИ».

После перераспределения воды мудрецы стремятся выбрать наиболее подходящую страну для проживания, поэтому они пришлют вам \(q\) запросов на рассмотрение.

Каждый запрос будет содержать \(m\) требований.

Каждое требование содержит три параметра: номер региона \(r\), знак \(o\)\(<\)» или «\(>\)») и значение \(c\). Если \(o\) = «\(<\)», то в \(r\)-м регионе выбранной вами страны новое значение должно быть строго меньше значения ограничения \(c\), а если \(o\) = «\(>\)» — строго больше.

Иными словами, выбранная вами страна \(i\) должна удовлетворять всем \(m\) требованиям. Если в очередном требовании \(o\) = «\(<\)», то должно выполняться \(b_{i,r} < c\), а если \(o\) = «\(>\)» — то \(b_{i,r} > c\).

В ответ на каждый запрос вам следует вывести одно целое число — номер подходящей страны. Если таких стран несколько, выведите наименьший из возможных. Если таких стран не существует, выведите \(-1\).

Входные данные

Первая строка содержит три целых числа \(n\), \(k\), и \(q\) (\(1 \leq n, k, q \leq 10^5\)) — количество стран, регионов и запросов соответственно.

Далее следует \(n\) строк, \(i\)-я из которых содержит \(k\) целых чисел \(a_{i,1}, a_{i,2}, \dots, a_{i,k}\) (\(1 \leq a_{i,j} \leq 10^9\)), где \(a_{i,j}\) — значение \(j\)-го региона \(i\)-й страны.

Далее описывается \(q\) запросов.

Первая строка каждого запроса содержит одно целое число \(m\) (\(1 \leq m \leq 10^5\)) — количество требований.

Затем идут \(m\) строк, содержащих значения целое число \(r\), символ \(o\) и целое число \(c\) (\(1 \leq r \leq k\), \(0 \leq c \leq 2 \cdot 10^9\)), где \(r\) и \(c\) — номер региона и значение, а \(o\) — символ «\(<\)» либо «\(>\)» — знак.

Гарантируется, что \(n \cdot k\) не превышает \(10^5\) и что сумма \(m\) по всем запросам также не превышает \(10^5\).

Выходные данные

Для каждого запроса на новой строке выведите целое число — наименьший номер подходящей страны, либо \(-1\), если такой страны не существует.

Примечание

В примере изначальные значения регионов имеют вид:

\(1\)\(3\)\(5\)\(9\)
\(4\)\(6\)\(5\)\(3\)
\(2\)\(1\)\(2\)\(7\)

После создания каналов новые значения будут выглядеть так:

\(1\)\(3\)\(5\)\(9\)
\(1 | 4\)\(3 | 6\)\(5 | 5\)\(9 | 3\)
\(1 | 4 | 2\)\(3 | 6 | 1\)\(5 | 5 | 2\)\(9 | 3 | 7\)
\(\downarrow\)
\(1\)\(3\)\(5\)\(9\)
\(5\)\(7\)\(5\)\(11\)
\(7\)\(7\)\(7\)\(15\)

В первом запросе необходимо вывести минимальный номер страны (т.е. строки), где после перераспределения воды в первом регионе (т.е. столбце) новое значение будет больше четырёх и меньше шести, а во втором — меньше восьми. Этим требованиям удовлетворяет только страна с номером \(2\).

Во втором запросе нет ни одной страны, удовлетворяющей заданным требованиям.

В третьем запросе подходит только страна с номером \(3\).

В четвёртом запросе все три страны удовлетворяют условиям, поэтому ответом является наименьший номер \(1\).

G. Библиотека Магии

Бинарный поиск интерактив Конструктив математика разделяй и властвуй теория чисел *2200

Это интерактивная задача.

На кафедре сверхъестественных явлений Оксенфуртской Академии открылась Библиотека Магии, в которую вошли труды величайших чародеев Редании — \(n\) (\(3 \leq n \leq 10^{18}\)) видов книг, пронумерованных от \(1\) до \(n\). У каждой книги номер вида обозначен на переплёте. Более того, книги каждого вида хранятся в библиотеке ровно в двух экземплярах! А библиотекарем назначили Вас.

Однажды ночью Вы просыпаетесь от странного шума и видите существо, покидающее здание через окно. Из рюкзака таинственного вора торчали три толстых тома разных цветов. И перед тем как приступить к их поиску, Вы решили вычислить числа \(a\), \(b\) и \(c\), написанные на переплётах этих книг. Все три числа различны.

Итак, в Вашем распоряжении неупорядоченное множество томов, в котором по одному тому с попарно различными числами \(a\), \(b\) и \(c\) и по два тома для всех чисел от \(1\) до \(n\), кроме \(a\), \(b\) и \(c\). И Вы хотите найти эти значения \(a\), \(b\) и \(c\).

Так как Вы работаете не в простой библиотеке, а в Библиотеке Магии, то для проверки факта нахождения книг на своём месте Вы можете использовать только одно заклинание в виде запроса:

  • «xor l r» — Запрос побитового XOR-а с параметрами \(l\) и \(r\). Пусть \(k\) — количество таких томов в библиотеке, числа на которых больше либо равны \(l\) и меньше либо равны \(r\). Вы получите результат вычисления \(v_1 \oplus v_2 \oplus ... \oplus v_k\), где \(v_1 ... v_k\) — числа на переплётах этих томов, а \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Так как Ваши магические способности как библиотекаря сильно ограничены, Вы можете сделать не более \(150\) запросов.

Входные данные

Первая строка входных данных содержит целое число \(t\) (\(1 \le t \le 300\)) — количество наборов входных данных.

Первая строка каждого набора содержит одно целое число \(n\) (\(3 \leq n \leq 10^{18}\)) — количество видов томов.

Протокол взаимодействия

Взаимодействие для каждого набора входных данных начинается с чтения целого числа \(n\).

Затем вы можете сделать до \(150\) запросов.

Чтобы сделать запрос, выведите строку в формате «xor l r» (без кавычек) (\(1 \leq l \leq r \leq n\)). После каждого запроса считайте целое число — ответ на ваш запрос.

Чтобы сообщить ответ, выведите строку в формате «ans a b c» (без кавычек), где \(a\), \(b\) и \(c\) — найденные вами числа для ответа на задачу. Вы можете вывести их в любом порядке.

Интерактор не адаптивен, что означает, что ответ известен до того, как участник задаст запросы, и не зависит от запросов, заданных участником.

После того как будет сделано \(150\) запросов, ответ на любой другой запрос будет равен \(-1\). Получив такой ответ, завершите программу, чтобы получить вердикт «WA» (Wrong answer).

После вывода запроса не забудьте вывести перевод строки и сбросить буфер вывода. В противном случае вы получите вердикт «IL» (Idleness limit exceeded). Для сброса буфера используйте:

  • fflush(stdout) или cout.flush() в C++;
  • System.out.flush() в Java;
  • flush(output) в Pascal;
  • stdout.flush() в Python;
  • смотрите документацию для других языков.

Взломы

Чтобы сделать взлом, используйте следующий формат.

Первая строка должна содержать одно целое число \(t\) (\(1 \leq t \leq 300\)) — количество наборов входных данных.

Единственная строка каждого набора должна содержать четыре целых числа \(n\), \(a\), \(b\) и \(c\) (\(3 \leq n \leq 10^{18}\), \(1 \le a, b, c \le n\)) — количество книг в библиотеке и номера украденных томов. Числа \(a\), \(b\) и \(c\) должны быть различными.

Примечание

В примере в первом наборе входных данных книги в библиотеке после пропажи выглядят вот так:

Теперь рассмотрим ответы на запросы:

  • На запрос «xor 1 1» вы получаете результат \(1 \oplus 1 = 0\). Указанному в запросе условию удовлетворяет два тома — оба с номером \(1\).
  • На запрос «xor 2 2» вы получаете результат \(2\), так как только один том удовлетворяет указанному условию.
  • На запрос «xor 3 3» вы получаете результат \(3\).
  • На запрос «xor 4 6» вы получаете результат \(4 \oplus 6 \oplus 4 \oplus 5 \oplus 6 = 5\).

Во втором наборе входных данных всего \(3\) вида книг, и нетрудно догадаться, что отсутствующие имеют номера \(1\), \(2\) и \(3\).

C. Любимая перестановка Суперультры

жадные алгоритмы Конструктив математика теория чисел *1000

Суперультра, маленькая красная панда, отчаянно хочет примогемы. В своих мечтах он слышит голос, который говорит ему, что он должен решить следующую задачу, чтобы получить пожизненный запас примогемов. Помогите Суперультре!

Постройте перестановку\(^{\text{∗}}\) \(p\) длины \(n\) так, чтобы \(p_i + p_{i+1}\) было составным\(^{\text{†}}\) для всех \(1 \leq i \leq n - 1\). Если это невозможно, выведите \(-1\).

\(^{\text{∗}}\)Перестановка длины \(n\) — это массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) является перестановкой, но \([1,2,2]\) не является перестановкой (число \(2\) встречается дважды в массиве), а \([1,3,4]\) также не является перестановкой (длина \(n=3\), но в массиве есть \(4\)).

\(^{\text{†}}\)Целое число \(x\) является составным, если у него есть хотя бы один другой делитель, кроме \(1\) и \(x\). Например, \(4\) является составным, потому что \(2\) является делителем.

Входные данные

Первая строка содержит \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Каждый набор входных данных содержит целое число \(n\) (\(2 \leq n \leq 2 \cdot 10^5\)) — длину перестановки.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если невозможно построить \(p\), выведите \(-1\) на новой строке. В противном случае выведите \(n\) целых чисел \(p_1, p_2, \ldots, p_n\).

Примечание

В первом примере можно показать, что любая перестановка размера \(3\) содержит два смежных элемента, сумма которых является простым числом. Например, в перестановке \([2,3,1]\) сумма \(2+3=5\) является простым числом.

Во втором примере мы можем проверить, что пример вывода верен, потому что \(1+8\), \(8+7\), \(7+3\), \(3+6\), \(6+2\), \(2+4\) и \(4+5\) все составные. Могут быть и другие правильные конструкции.

G. Guess One Character

интерактив Конструктив реализация *1900

This is an interactive problem. You have to use flush operation right after printing each line. For example, in C++ you should use the function fflush(stdout) or cout.flush(), in Java or Kotlin — System.out.flush(), and in Python — sys.stdout.flush().

The jury has a string \(s\) consisting of characters 0 and/or 1. The length of this string is \(n\).

You can ask the following queries:

  • \(1\) \(t\) — "how many times does \(t\) appear in \(s\) as a contiguous substring?" Here, \(t\) should be a string consisting of characters 0 and/or 1; its length should be at least \(1\) and at most \(n\). For example, if the string \(s\) is 111011 and the string \(t\) is 11, the response to the query is \(3\).

You have to guess at least one character in the string \(s\) by asking no more than \(3\) queries. Note that giving the answer does not count as a query.

In every test and in every test case, the string \(s\) is fixed beforehand.

Interaction

Initially, the jury program sends one integer \(t\) (\(1 \le t \le 1000\)) — the number of test cases.

At the start of each test case, the jury program sends one integer \(n\) (\(2 \le n \le 50\)) — the length of the string.

After that, your program can submit queries to the jury program by printing the following line (do not forget to flush the output after printing a line!):

  • \(1\) \(t\) means asking a query "how many times does \(t\) appear in \(s\) as a contiguous substring?"

For every query, the jury prints one integer on a separate line. It is either:

  • the answer to your query, if the query is correct, and you haven't exceeded the query limit;
  • or the integer \(-1\), if your query is incorrect (for example, the constraint \(1 \le |t| \le n\) is not met or the string \(t\) contains characters other than 0 and 1) or if you have asked too many queries while processing the current test case.

To submit the answer, your program should send a line in the following format (do not forget to flush the output after printing a line!):

  • \(0\) \(i\) \(c\), where \(1 \le i \le n\) and \(c\) is either 0 or 1, meaning that \(s_i = c\).

If your guess is correct, the jury program will print one integer \(1\) on a separate line, indicating that you may proceed to the next test case (or terminate the program, if it was the last test case) and that the number of queries you have asked is reset. If it is not correct, the jury program will print one integer \(-1\) on a separate line.

After your program receives \(-1\) as the response, it should immediately terminate. This will lead to your submission receiving the verdict "Wrong Answer". If your program does not terminate, the verdict of your submission is undefined.

Note

In the example, there are \(3\) test cases: 101, 11 and 10. Note that everything after the // sign is a comment that explains which line means what in the interaction. The jury program won't print these comments in the actual problem, and you shouldn't print them. The empty lines are also added for your convenience, the jury program won't print them, and your solution should not print any empty lines.

A. Shohag любит модули

Конструктив теория чисел *800

У Shohag есть целое число \(n\). Помогите ему найти возрастающую последовательность целых чисел \(1 \le a_1 \lt a_2 \lt \ldots \lt a_n \le 100\) такую, что для всех пар \(1 \le i \lt j \le n\) выполняется \(a_i \bmod i \neq a_j \bmod j\)\(^{\text{∗}}\).

Можно показать, что такая последовательность всегда существует при заданных ограничениях.

\(^{\text{∗}}\)\(a \bmod b\) обозначает остаток от деления \(a\) на \(b\). Например, \(7 \bmod 3 = 1, 8 \bmod 4 = 0\) и \(69 \bmod 10 = 9\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 50\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 50\)).

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел — последовательность, удовлетворяющую данным условиям. Если таких последовательностей несколько, выведите любую.

Примечание

В первом наборе входных данных последовательность возрастающая, значения от \(1\) до \(100\), и каждая пара индексов удовлетворяет условию:

  • Для пары \((1, 2)\): \(a_1 \bmod 1 = 2 \bmod 1 = 0\), и \(a_2 \bmod 2 = 7 \bmod 2 = 1\). Поэтому они различны.
  • Для пары \((1, 3)\): \(a_1 \bmod 1 = 2 \bmod 1 = 0\), и \(a_3 \bmod 3 = 8 \bmod 3 = 2\). Поэтому они различны.
  • Для пары \((2, 3)\): \(a_2 \bmod 2 = 7 \bmod 2 = 1\), и \(a_3 \bmod 3 = 8 \bmod 3 = 2\). Поэтому они отличаются.

Обратите внимание, что не обязательно выводить точно такую же последовательность, вы можете вывести любую другую последовательность, если она удовлетворяет необходимым условиям.

B. Shohag любит строки

жадные алгоритмы Конструктив реализация Строки *1000

Для строки \(p\) определим \(f(p)\) — количество уникальных непустых подстрок\(^{\text{∗}}\) строки \(p\).

У Shohag есть строка \(s\). Помогите ему найти непустую строку \(p\), такую, что \(p\) является подстрокой \(s\), а \(f(p)\) чётно, или скажите, что такой строки не существует.

\(^{\text{∗}}\)Строка \(a\) является подстрокой строки \(b\), если \(a\) можно получить из \(b\), удалив несколько (возможно, ноль или все) символов из начала и несколько (возможно, ноль или все) символов из конца.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит строку \(s\) (\(1 \le |s| \le 10^5\)), состоящую из строчных латинских букв.

Гарантируется, что сумма длин \(s\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите непустую строку, удовлетворяющую условиям, или \(-1\), если такой строки не существует. Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных мы можем выбрать \(p = \) abaa, потому что это подстрока \(s\), а уникальными подстроками \(p\) являются a, b, aa, ab, ba, aba, baa и abaa — всего \(8\) уникальных подстрок, что является чётным числом.

Во втором наборе входных данных мы можем выбрать только \(p = \) a, но у этой строки есть одна уникальная подстрока, что является нечётным числом, поэтому эта строка не подходит.

В третьем наборе входных данных вся строка содержит \(52\) уникальных подстроки, поэтому сама строка является корректным ответом.

D. Shohag любит НОД

жадные алгоритмы Конструктив математика теория чисел *1700

У Shohag есть целое число \(n\) и множество \(S\) из \(m\) различных целых чисел. Помогите ему найти лексикографически наибольший\(^{\text{∗}}\) массив целых чисел \(a_1, a_2, \ldots, a_n\) такой, что \(a_i \in S\) для каждого \(1 \le i \le n\), а также для всех пар \(1 \le i \lt j \le n\) должно выполняться \(a_{\operatorname{gcd}(i, j)} \neq \operatorname{gcd}(a_i, a_j)\)\(^{\text{†}}\). Или скажите, что таких массивов не существует.

\(^{\text{∗}}\)Массив \(a\) лексикографически больше массива \(b\) такой же длины, если \(a \ne b\), и в первой позиции, где \(a\) и \(b\) различны, в массиве \(a\) элемент больше, чем соответствующий элемент в \(b\).

\(^{\text{†}}\)\(\gcd(x, y)\) обозначает наибольший общий делитель (НОД) чисел \(x\) и \(y\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le m \le n \le 10^5\)).

Вторая строка содержит \(m\) различных целых чисел в порядке возрастания, представляющих элементы множества \(S\) (\(1 \le x \le n\) для каждого \(x \in S\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если нет решения, выведите \(-1\). Иначе выведите \(n\) целых чисел — лексикографически наибольший массив, удовлетворяющий условиям.

Примечание

В первом наборе входных данных каждый элемент массива принадлежит заданному множеству \(S = \{3, 4, 6\}\), а все пары индексов массива удовлетворяют необходимым условиям. В частности, для пары \((2, 3)\): \(a_{\operatorname{gcd}(2, 3)} = a_1 = 6\) и \(\operatorname{gcd}(a_2, a_3) = \operatorname{gcd}(4, 4) = 4\), поэтому они не равны. Существуют и другие массивы, удовлетворяющие условиям, но этот — лексикографически наибольший.

В третьем наборе входных данных массива не существует, так как возможно только \(a = [2, 2]\), но для этого массива для пары \((1, 2)\) имеем: \(a_{\operatorname{gcd}(1, 2)} = a_1 = 2\) и \(\operatorname{gcd}(a_1, a_2) = \operatorname{gcd}(2, 2) = 2\), то есть они равны, что недопустимо!

H1. Крутые прогулки с обменом (простая версия)

Конструктив реализация сортировки *3500

Это простая версия задачи. Единственное различие между двумя версиями задачи — количество операций, которые вы можете сделать. Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Вам дан массив \(a\) длины \(n\).

Крутая прогулка с обменом — это следующий процесс:

  • В сетке \(n \times n\) обозначим ячейку в строке \(i\) и столбце \(j\) как \((i, j)\). Вам нужно пройти от \((1,1)\) до \((n,n)\), делая только шаги вправо или вниз.
  • Формально, если вы находитесь в \((x,y)\) в данный момент, вы можете сделать шаг в \((x+1,y)\) или \((x,y+1)\), но вы не можете выйти за границы сетки.
  • Когда вы делаете шаг в \((i,j)\), вы должны поменять местами \(a_i\) и \(a_j\), если \(i \neq j\).

Вы можете выполнить не более \(2n+4\) крутых прогулок с обменом. Отсортируйте массив \(a_1, a_2, \ldots, a_n\) в неубывающем порядке. Можно показать, что это всегда можно сделать.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(2 \leq n \leq 500\)) — длину массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots ,a_n\) (\(1 \le a_i \le n\)) — элементы массива.

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превосходит \(2.5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных вывод должен состоять из нескольких строк:

  • Первая строка содержит целое число \(k\) (\(0 \leq k \leq 2n+4\)), представляющее количество крутых прогулок с обменом, которое вы выполняете.
  • Каждая из следующих \(k\) строк содержит строку \(s\) длины \(2n-2\), состоящую только из R и D, представляющую путь (буквы чувствительны к регистру). Для всех \(1 \le i \le 2n-2\), если \(s_i=\) R, то на \(i\)-м шаге вы идёте направо, иначе на \(i\)-м шаге вы идёте вниз.
Примечание

В первом наборе входных данных массив \(a\) уже является неубывающим, поэтому вам не нужно выполнять никаких прогулок.

Во втором наборе входных данных изначально \(a=[2,1,3]\).

На первой прогулке:

  • На \(1\)-м шаге вы делаете шаг вправо в клетку \((1,2)\). Затем, \(a=[1,2,3]\). Обратите внимание, что хотя массив \(a\) уже является неубывающим, вы не можете остановиться, пока не достигнете \((n,n)\).

  • На \(2\)-м шаге вы делаете шаг вправо в \((1,3)\). Тогда \(a=[3,2,1]\).

  • На \(3\)-м шаге вы делаете шаг вниз в \((2,3)\). Тогда, \(a=[3,1,2]\).

  • На \(4\)-м шаге вы спускаетесь в \((3,3)\). Тогда, \(a=[3,1,2]\).

На второй прогулке:

  • На \(1\)-м шаге вы опускаетесь в \((2,1)\). Тогда \(a=[1,3,2]\).

  • На \(2\)-м шаге вы делаете шаг вправо в \((2,2)\). Тогда, \(a=[1,3,2]\).

  • На \(3\)-м шаге вы делаете шаг вниз в \((3,2)\). Тогда, \(a=[1,2,3]\).

  • На \(4\)-м шаге вы опускаетесь в \((3,3)\). Тогда, \(a=[1,2,3]\).

После двух крутых прогулок с обменом, описанных выше, мы получаем \(a=[1,2,3]\), что является неубывающим массивом.

H2. Крутые прогулки с обменом (сложная версия)

Конструктив Конструктив Конструктив реализация сортировки *3500

Это сложная версия задачи. Единственное различие между двумя версиями задачи — количество операций, которые вы можете сделать. Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Вам дан массив \(a\) длины \(n\).

Крутая прогулка с обменом — это следующий процесс:

  • В сетке \(n \times n\) обозначим ячейку в строке \(i\) и столбце \(j\) как \((i, j)\). Вам нужно пройти от \((1,1)\) до \((n,n)\), делая только шаги вправо или вниз.
  • Формально, если вы находитесь в \((x,y)\) в данный момент, вы можете сделать шаг в \((x+1,y)\) или \((x,y+1)\), но вы не можете выйти за границы сетки.
  • Когда вы делаете шаг в \((i,j)\), вы должны поменять местами \(a_i\) и \(a_j\), если \(i \neq j\).

Вы можете выполнить не более \(n+4\) крутых прогулок с обменом. Отсортируйте массив \(a_1, a_2, \ldots, a_n\) в неубывающем порядке. Можно показать, что это всегда можно сделать.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(2 \leq n \leq 500\)) — длину массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots ,a_n\) (\(1 \le a_i \le n\)) — элементы массива.

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превосходит \(2.5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных вывод должен состоять из нескольких строк:

  • Первая строка содержит целое число \(k\) (\(0 \leq k \leq n+4\)), представляющее количество крутых прогулок с обменом, которое вы выполняете.
  • Каждая из следующих \(k\) строк содержит строку \(s\) длины \(2n-2\), состоящую только из R и D, представляющую путь (буквы чувствительны к регистру). Для всех \(1 \le i \le 2n-2\), если \(s_i=\) R, то на \(i\)-м шаге вы идёте направо, иначе на \(i\)-м шаге вы идёте вниз.
Примечание

В первом наборе входных данных массив \(a\) уже является неубывающим, поэтому вам не нужно выполнять никаких прогулок.

Во втором наборе входных данных изначально \(a=[2,1,3]\).

На первой прогулке:

  • На \(1\)-м шаге вы делаете шаг вправо в клетку \((1,2)\). Затем, \(a=[1,2,3]\). Обратите внимание, что хотя массив \(a\) уже является неубывающим, вы не можете остановиться, пока не достигнете \((n,n)\).

  • На \(2\)-м шаге вы делаете шаг вправо в \((1,3)\). Тогда \(a=[3,2,1]\).

  • На \(3\)-м шаге вы делаете шаг вниз в \((2,3)\). Тогда, \(a=[3,1,2]\).

  • На \(4\)-м шаге вы спускаетесь в \((3,3)\). Тогда, \(a=[3,1,2]\).

На второй прогулке:

  • На \(1\)-м шаге вы опускаетесь в \((2,1)\). Тогда \(a=[1,3,2]\).

  • На \(2\)-м шаге вы делаете шаг вправо в \((2,2)\). Тогда, \(a=[1,3,2]\).

  • На \(3\)-м шаге вы делаете шаг вниз в \((3,2)\). Тогда, \(a=[1,2,3]\).

  • На \(4\)-м шаге вы опускаетесь в \((3,3)\). Тогда, \(a=[1,2,3]\).

После двух крутых прогулок с обменом, описанных выше, мы получаем \(a=[1,2,3]\), что является неубывающим массивом.

H2. Крутые прогулки с обменом (сложная версия)

Конструктив Конструктив Конструктив реализация сортировки *3500

Это сложная версия задачи. Единственное различие между двумя версиями задачи — количество операций, которые вы можете сделать. Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Вам дан массив \(a\) длины \(n\).

Крутая прогулка с обменом — это следующий процесс:

  • В сетке \(n \times n\) обозначим ячейку в строке \(i\) и столбце \(j\) как \((i, j)\). Вам нужно пройти от \((1,1)\) до \((n,n)\), делая только шаги вправо или вниз.
  • Формально, если вы находитесь в \((x,y)\) в данный момент, вы можете сделать шаг в \((x+1,y)\) или \((x,y+1)\), но вы не можете выйти за границы сетки.
  • Когда вы делаете шаг в \((i,j)\), вы должны поменять местами \(a_i\) и \(a_j\), если \(i \neq j\).

Вы можете выполнить не более \(n+4\) крутых прогулок с обменом. Отсортируйте массив \(a_1, a_2, \ldots, a_n\) в неубывающем порядке. Можно показать, что это всегда можно сделать.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(2 \leq n \leq 500\)) — длину массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots ,a_n\) (\(1 \le a_i \le n\)) — элементы массива.

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превосходит \(2.5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных вывод должен состоять из нескольких строк:

  • Первая строка содержит целое число \(k\) (\(0 \leq k \leq n+4\)), представляющее количество крутых прогулок с обменом, которое вы выполняете.
  • Каждая из следующих \(k\) строк содержит строку \(s\) длины \(2n-2\), состоящую только из R и D, представляющую путь (буквы чувствительны к регистру). Для всех \(1 \le i \le 2n-2\), если \(s_i=\) R, то на \(i\)-м шаге вы идёте направо, иначе на \(i\)-м шаге вы идёте вниз.
Примечание

В первом наборе входных данных массив \(a\) уже является неубывающим, поэтому вам не нужно выполнять никаких прогулок.

Во втором наборе входных данных изначально \(a=[2,1,3]\).

На первой прогулке:

  • На \(1\)-м шаге вы делаете шаг вправо в клетку \((1,2)\). Затем, \(a=[1,2,3]\). Обратите внимание, что хотя массив \(a\) уже является неубывающим, вы не можете остановиться, пока не достигнете \((n,n)\).

  • На \(2\)-м шаге вы делаете шаг вправо в \((1,3)\). Тогда \(a=[3,2,1]\).

  • На \(3\)-м шаге вы делаете шаг вниз в \((2,3)\). Тогда, \(a=[3,1,2]\).

  • На \(4\)-м шаге вы спускаетесь в \((3,3)\). Тогда, \(a=[3,1,2]\).

На второй прогулке:

  • На \(1\)-м шаге вы опускаетесь в \((2,1)\). Тогда \(a=[1,3,2]\).

  • На \(2\)-м шаге вы делаете шаг вправо в \((2,2)\). Тогда, \(a=[1,3,2]\).

  • На \(3\)-м шаге вы делаете шаг вниз в \((3,2)\). Тогда, \(a=[1,2,3]\).

  • На \(4\)-м шаге вы опускаетесь в \((3,3)\). Тогда, \(a=[1,2,3]\).

После двух крутых прогулок с обменом, описанных выше, мы получаем \(a=[1,2,3]\), что является неубывающим массивом.

H2. Крутые прогулки с обменом (сложная версия)

Конструктив Конструктив Конструктив реализация сортировки *3500

Это сложная версия задачи. Единственное различие между двумя версиями задачи — количество операций, которые вы можете сделать. Вы можете совершать взломы только в том случае, если решены обе версии задачи.

Вам дан массив \(a\) длины \(n\).

Крутая прогулка с обменом — это следующий процесс:

  • В сетке \(n \times n\) обозначим ячейку в строке \(i\) и столбце \(j\) как \((i, j)\). Вам нужно пройти от \((1,1)\) до \((n,n)\), делая только шаги вправо или вниз.
  • Формально, если вы находитесь в \((x,y)\) в данный момент, вы можете сделать шаг в \((x+1,y)\) или \((x,y+1)\), но вы не можете выйти за границы сетки.
  • Когда вы делаете шаг в \((i,j)\), вы должны поменять местами \(a_i\) и \(a_j\), если \(i \neq j\).

Вы можете выполнить не более \(n+4\) крутых прогулок с обменом. Отсортируйте массив \(a_1, a_2, \ldots, a_n\) в неубывающем порядке. Можно показать, что это всегда можно сделать.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(2 \leq n \leq 500\)) — длину массива.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots ,a_n\) (\(1 \le a_i \le n\)) — элементы массива.

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превосходит \(2.5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных вывод должен состоять из нескольких строк:

  • Первая строка содержит целое число \(k\) (\(0 \leq k \leq n+4\)), представляющее количество крутых прогулок с обменом, которое вы выполняете.
  • Каждая из следующих \(k\) строк содержит строку \(s\) длины \(2n-2\), состоящую только из R и D, представляющую путь (буквы чувствительны к регистру). Для всех \(1 \le i \le 2n-2\), если \(s_i=\) R, то на \(i\)-м шаге вы идёте направо, иначе на \(i\)-м шаге вы идёте вниз.
Примечание

В первом наборе входных данных массив \(a\) уже является неубывающим, поэтому вам не нужно выполнять никаких прогулок.

Во втором наборе входных данных изначально \(a=[2,1,3]\).

На первой прогулке:

  • На \(1\)-м шаге вы делаете шаг вправо в клетку \((1,2)\). Затем, \(a=[1,2,3]\). Обратите внимание, что хотя массив \(a\) уже является неубывающим, вы не можете остановиться, пока не достигнете \((n,n)\).

  • На \(2\)-м шаге вы делаете шаг вправо в \((1,3)\). Тогда \(a=[3,2,1]\).

  • На \(3\)-м шаге вы делаете шаг вниз в \((2,3)\). Тогда, \(a=[3,1,2]\).

  • На \(4\)-м шаге вы спускаетесь в \((3,3)\). Тогда, \(a=[3,1,2]\).

На второй прогулке:

  • На \(1\)-м шаге вы опускаетесь в \((2,1)\). Тогда \(a=[1,3,2]\).

  • На \(2\)-м шаге вы делаете шаг вправо в \((2,2)\). Тогда, \(a=[1,3,2]\).

  • На \(3\)-м шаге вы делаете шаг вниз в \((3,2)\). Тогда, \(a=[1,2,3]\).

  • На \(4\)-м шаге вы опускаетесь в \((3,3)\). Тогда, \(a=[1,2,3]\).

После двух крутых прогулок с обменом, описанных выше, мы получаем \(a=[1,2,3]\), что является неубывающим массивом.

B. Раскрасить полоску

жадные алгоритмы Конструктив математика *1000

Изначально есть массив нулей \(a_1, a_2, \ldots, a_n\) длины \(n\).

Вы можете выполнять операции двух типов:

  1. Выбрать индекс \(i\) такой, что \(1 \le i \le n\) и \(a_i = 0\), после чего записать в \(a_i\) значение \(1\);
  2. Выбрать индексы \(l\) и \(r\) такие, что \(1 \le l \le r \le n\), \(a_l = 1\), \(a_r = 1\) и \(a_l + \ldots + a_r \ge \lceil\frac{r - l + 1}{2}\rceil\), после чего записать значение \(1\) в \(a_i\) для всех \(l \le i \le r\).

За какое минимальное количество операций первого типа вы можете получить массив, все элементы которого равны единице?

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 10^5\)) — длину массива.

Обратите внимание, что ограничение на сумму \(n\) по всем наборам входных данных отсутствует.

Выходные данные

Для каждого набора входных данных выведите единственное число — минимальное количество операций первого типа.

Примечание

В первом наборе можно выполнить операцию \(1\)-го типа с \(i = 1\).

Во втором наборе можно выполнить следующую последовательность операций:

  1. Операция \(1\)-го типа, \(i = 1\). После выполнения этой операции массив будет выглядеть так: \([1, 0]\).
  2. Операция \(1\)-го типа, \(i = 2\). После выполнения этой операции массив будет выглядеть так: \([1, 1]\).
Последовательность операций во втором тесте

В третьем наборе можно выполнить следующую последовательность операций:

  1. Операция \(1\)-го типа, \(i = 1\). После выполнения этой операции массив будет выглядеть так: \([1, 0, 0, 0]\).
  2. Операция \(1\)-го типа, \(i = 4\). После выполнения этой операции массив будет выглядеть так: \([1, 0, 0, 1]\).
  3. Операция \(2\)-го типа, \(l = 1\), \(r = 4\). На данном отрезке \(a_l + \ldots + a_r = a_1 + a_2 + a_3 + a_4 = 2\), что не меньше, чем \(\lceil\frac{r - l + 1}{2}\rceil = 2\). После выполнения этой операции массив будет выглядеть так: \([1, 1, 1, 1]\).
Последовательность операций в третьем тесте

C. Упорядоченные перестановки

битмаски жадные алгоритмы Комбинаторика Конструктив математика *1600

Рассмотрим перестановку\(^{\text{∗}}\) \(p_1, p_2, \ldots, p_n\) чисел от \(1\) до \(n\). Введём следующую сумму\(^{\text{†}}\):

\(\)S(p) = \sum_{1 \le l \le r \le n} \min(p_l, p_{l + 1}, \ldots, p_r)\(\)

Рассмотрим все перестановки длины \(n\) с максимальным значением \(S(p)\). Необходимо вывести \(k\)-ю из них в лексикографическом\(^{\text{‡}}\) порядке, или сообщить, что их меньше \(k\).

\(^{\text{∗}}\)Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

\(^{\text{†}}\)Например:

  • Для перестановки \([1, 2, 3]\), значение \(S(p)\) равно \(\min(1) + \min(1, 2) + \min(1, 2, 3) + \min(2) + \min(2, 3) + \min(3) =\) \(1 + 1 + 1 + 2 + 2 + 3 = 10\).
  • Для перестановки \([2, 4, 1, 3]\) значение \(S(p)\) равно \(\min(2) + \min(2, 4) + \min(2, 4, 1) + \min(2, 4, 1, 3) \ +\) \( \min(4) + \min(4, 1) + \min(4, 1, 3) \ +\) \(\min(1) + \min(1, 3) \ +\) \(\min(3) =\) \(2 + 2 + 1 + 1 + 4 + 1 + 1 + 1 + 1 + 3 = 17\).

\(^{\text{‡}}\)Массив \(a\) лексикографически меньше массива \(b\), если и только если выполняется одно из следующего:

  • \(a\) — префикс \(b\), но \(a \ne b\); или
  • в первой позиции, где \(a\) и \(b\) различны, в массиве \(a\) элемент меньше, чем соответствующий элемент в \(b\).
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 2 \cdot 10^5\); \(1 \le k \le 10^{12}\)) — длина перестановки и номер искомой перестановки.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10 ^ 5\).

Выходные данные

Для каждого набора входных данных, если подходящих перестановок меньше \(k\), выведите \(-1\).

Иначе выведите \(k\)-ю подходящую перестановку.

Примечание

Посчитаем искомую сумму для всех перестановок длины \(3\) в лексикографическом порядке:

ПерестановкаЗначение \(S(p)\)
\([1, 2, 3]\)\(10\)
\([1, 3, 2]\)\(10\)
\([2, 1, 3]\)\(9\)
\([2, 3, 1]\)\(10\)
\([3, 1, 2]\)\(9\)
\([3, 2, 1]\)\(10\)

В первом наборе необходимо вывести вторую подходящую перестановку длины \(3\). Посмотрев на таблицу, мы видим, что это перестановка \([1, 3, 2]\).

Во втором наборе необходимо вывести третью подходящую перестановку длины \(3\). Посмотрев на таблицу, мы видим, что это перестановка \([2, 3, 1]\).

D. Непростое дерево

Деревья жадные алгоритмы Конструктив Перебор поиск в глубину и подобное теория чисел *1900

Дано дерево с \(n\) вершинами.

Вам необходимо создать массив \(a_1, a_2, \ldots, a_n\) длины \(n\), состоящий из различных целых чисел от \(1\) до \(2 \cdot n\). При этом для каждого ребра \(u_i \leftrightarrow v_i\) дерева значение \(|a_{u_i} - a_{v_i}|\) не должно быть простым числом.

Найдите любой массив, удовлетворяющий этим условиям, либо сообщите, что такого массива нет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \le n \le 2 \cdot 10^5\)) — количество вершин в дереве.

В следующих \(n - 1\) строках каждого набора входных данных заданы ребра дерева: по одному в строке. В \(i\)-й строке заданы два целых числа \(u_i\) и \(v_i\) (\(1 \le u_i, v_i \le n\); \(u_i \neq v_i\)), обозначающих ребро между вершинами \(u_i\) и \(v_i\).

Гарантируется, что заданные ребра образуют дерево.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10 ^ 5\).

Выходные данные

Для каждого набора входных данных, если массив, удовлетворяющий условиям, существует, выведите его элементы \(a_1, a_2, \ldots, a_n\). Иначе, выведите единственное число \(-1\).

Примечание

Ниже представлены возможные ответы. Вместо номеров вершин в них записаны соответствующие элементы массива \(a\).

Изображение дерева в первом наборе
Изображение дерева во втором наборе

E. Beautiful Array

Конструктив математика *1200

Image generated by ChatGPT 4o.

A-Ming's birthday is coming and his friend A-May decided to give him an integer array as a present. A-Ming has two favorite numbers \(a\) and \(b\), and he thinks an array is beautiful if its mean is exactly \(a\) and its median is exactly \(b\). Please help A-May find a beautiful array so her gift can impress A-Ming.

The mean of an array is its sum divided by its length. For example, the mean of array \([3, -1, 5, 5]\) is \(12 \div 4 = 3\).

The median of an array is its middle element after sorting if its length is odd, or the mean of two middle elements after sorting if its length is even. For example, the median of \([1, 1, 2, 4, 8]\) is \(2\) and the median of \([3, -1, 5, 5]\) is \((3 + 5) \div 2 = 4\).

Note that the mean and median are not rounded to an integer. For example, the mean of array \([1, 2]\) is \(1.5\).

Input

The only line contains two integers \(a\) and \(b\).

  • \(-100 \leq a, b \leq 100\).
  • The length of the array must be between \(1\) and \(1000\).
  • The elements of the array must be integers and their absolute values must not exceed \(10^6\).
Output

In the first line, print the length of the array.

In the second line, print the elements of the array.

If there are multiple solutions, you can print any. It can be proved that, under the constraints of the problem, a solution always exists.

D. Задача посложнее

жадные алгоритмы Конструктив математика *1100

Дана последовательность положительных целых чисел. Положительное целое число называется модой последовательности, если оно встречается максимальное количество раз среди всех положительных целых чисел. Например, модой последовательности \([2,2,3]\) является \(2\), а для последовательности \([9,9,8,8,7,7]\) может считаться модой любое из чисел \(9\), \(8\) или \(7\).

Вы дали НЛО массив \(a\) длиной \(n\). Чтобы поблагодарить вас, НЛО решает построить другой массив \(b\) длиной \(n\) так, чтобы \(a_i\) была модой последовательности \([b_1, b_2, \ldots, b_i]\) для всех \(1 \leq i \leq n\).

Однако НЛО не знает, как построить массив \(b\), поэтому вы должны ей помочь. Обратите внимание, что для вашего массива должно выполняться условие \(1 \leq b_i \leq n\) для всех \(1 \leq i \leq n\).

Входные данные

Первая строка содержит \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длина массива \(a\).

Следующая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq n\)).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите \(n\) чисел \(b_1, b_2, \ldots, b_n\) (\(1 \leq b_i \leq n\)) в новой строке. Можно показать, что массив \(b\) всегда можно построить. Если существует несколько возможных массивов, вы можете вывести любой из них.

Примечание

Давайте проверим корректность нашего образца вывода в наборе входных данных \(2\)

  • При \(i = 1\), \(1\) является единственной возможной модой для \([1]\).
  • При \(i = 2\), \(1\) является единственной возможной модой для \([1, 1]\).
  • При \(i = 3\), \(1\) является единственной возможной модой для \([1, 1, 2]\).
  • При \(i = 4\), \(1\) или \(2\) могут считаться модой для \([1, 1, 2, 2]\). Поскольку \(a_i = 2\), этот массив является допустимым.

H. Сложная демоническая задача

дп Конструктив математика реализация Структуры данных *2100

Swing открывает фабрику блинов! Хорошая фабрика блинов должна хорошо уметь разравнивать вещи, поэтому Swing собирается протестировать свое новое оборудование на 2D матрицах.

Swing дана матрица \(n \times n\) \(M\), содержащая положительные целые числа. У него есть \(q\) запросов, которые он хочет вам задать.

Для каждого запроса он дает вам четыре целых числа \(x_1\), \(y_1\), \(x_2\), \(y_2\) и просит вас разровнять подматрицу, ограниченную \((x_1, y_1)\) и \((x_2, y_2)\), в массив \(A\). Формально, \(A = [M_{(x1,y1)}, M_{(x1,y1+1)}, \ldots, M_{(x1,y2)}, M_{(x1+1,y1)}, M_{(x1+1,y1+1)}, \ldots, M_{(x2,y2)}]\).

Следующее изображение иллюстрирует разравнивание подматрицы, ограниченной красными пунктирными линиями. Оранжевые стрелки указывают направление, в котором элементы подматрицы добавляются в конец \(A\), а \(A\) показан внизу изображения.

После этого он спрашивает вас о значении \(\sum_{i=1}^{|A|} A_i \cdot i\) (сумма \(A_i \cdot i\) по всем \(i\)).

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^3\)) — количество наборов входных данных.

Первая строка каждого теста содержит два целых числа \(n\) и \(q\) (\(1 \leq n \leq 2000, 1 \leq q \leq 10^6\)) — размер \(M\) и количество запросов.

Следующие \(n\) строк содержат по \(n\) целых чисел, \(i\)-я из которых содержит \(M_{(i,1)}, M_{(i,2)}, \ldots, M_{(i,n)}\) (\(1 \leq M_{(i, j)} \leq 10^6\)).

Следующие \(q\) строк содержат четыре целых числа \(x_1\), \(y_1\), \(x_2\) и \(y_2\) (\(1 \leq x_1 \leq x_2 \leq n, 1 \leq y_1 \leq y_2 \leq n\)) — границы запроса.

Гарантируется, что сумма \(n\) по всем тестовым случаям не превышает \(2000\), а сумма \(q\) по всем тестовым случаям не превышает \(10^6\).

Выходные данные

Для каждого теста выведите результаты \(q\) запросов на новой строке.

Примечание

Во втором запросе первого набора входных данных, \(A = [9, 5, 5, 2]\). Поэтому сумма равна \(1 \cdot 9 + 2 \cdot 5 + 3 \cdot 5 + 4 \cdot 2 = 42\).

L. Buggy DFS

Конструктив *3000

You are currently studying a graph traversal algorithm called the Depth First Search (DFS). However, due to a bug, your algorithm is slightly different from the standard DFS. The following is an algorithm for your Buggy DFS (BDFS), assuming the graph has \(N\) nodes (numbered from \(1\) to \(N\)).


BDFS():
let S be an empty stack
let FLAG be a boolean array of size N which are all false initially
let counter be an integer initialized with 0

push 1 to S

while S is not empty:
pop the top element of S into u
FLAG[u] = true

for each v neighbour of u in ascending order:
counter = counter + 1
if FLAG[v] is false:
push v to S

return counter

You realized that the bug made the algorithm slower than standard DFS, which can be investigated by the return value of the function BDFS(). To investigate the behavior of this algorithm, you want to make some test cases by constructing an undirected simple graph such that the function BDFS() returns \(K\), or determine if it is impossible to do so.

Input

A single line consisting of an integer \(K\) (\(1 \leq K \leq 10^9\)).

Output

If it is impossible to construct an undirected simple graph such that the function BDFS() returns \(K\), then output -1 -1 in a single line.

Otherwise, output the graph in the following format. The first line consists of two integers \(N\) and \(M\), representing the number of nodes and undirected edges in the graph, respectively. Each of the next \(M\) lines consists of two integers \(u\) and \(v\), representing an undirected edge that connects node \(u\) and node \(v\). You are allowed to output the edges in any order. This graph has to satisfy the following constraints:

  • \(1 \leq N \leq 32\,768\)
  • \(1 \leq M \leq 65\,536\)
  • \(1 \leq u, v \leq N\), for all edges.
  • The graph is a simple graph, i.e. there are no multi-edges nor self-loops.

Note that you are not required to minimize the number of nodes or edges. It can be proven that if constructing a graph in which the return value of BDFS() is \(K\) is possible, then there exists one that satisfies all the constraints above. If there are several solutions, you can output any of them.

Note

Explanation for the sample input/output #1

The graph on the left describes the output of this sample. The graph on the right describes another valid solution for this sample.

Explanation for the sample input/output #3

The following graph describes the output of this sample.

E1. Хеопс и контест (простая версия)

жадные алгоритмы Конструктив *2900

Это простая версия задачи. Отличие между версиями заключается в том, что в этой версии \(m\) равно \(2\). Вы можете делать взломы только в том случае, если решили все версии этой задачи.

В Древнем Египте проходит соревнование по решению задач с \(n\) участниками, пронумерованными от \(1\) до \(n\). Каждый участник представляет определенный город; города пронумерованы от \(1\) до \(m\). Из каждого города есть как минимум один участник.

У \(i\)-го участника есть сила \(a_i\), специализация \(s_i\) и мудрость \(b_i\), при этом \(b_i \ge a_i\). Каждая задача в соревновании будет иметь некоторую сложность \(d\) и уникальную тему \(t\). \(i\)-й участник решит задачу, если

  • \(a_i \ge d\), т.е. его сила не меньше сложности задачи, или
  • \(s_i = t\), и \(b_i \ge d\), т.е. его специализация соответствует теме задачи, и его мудрость не меньше сложности задачи.

Хеопс хочет выбрать задачи таким образом, чтобы каждый участник из города \(i\) решил строго больше задач, чем каждый участник из города \(j\), для всех \(i < j\).

Пожалуйста, найдите набор из не более чем \(5n\) задач, где темы всех задач попарно различны, чтобы воля Хеопса была удовлетворена, или укажите, что это невозможно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(T\) (\(1 \le T \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка содержит два целых числа \(n\), \(m\) (\(2 \mathbf{=} m \le n \le 3 \cdot {10}^5\)) — количество участников и количество городов.

Следующие \(n\) строк описывают участников. \(i\)-я строка содержит три целых числа — \(a_i\), \(b_i\), \(s_i\) (\(0 \le a_i, b_i, s_i \le {10}^9\), \(a_i \le b_i\)) — силу, мудрость и специализацию \(i\)-го участника соответственно.

Следующие \(m\) строк описывают города. В \(i\)-й строке первое число является целым \(k_i\) (\(1 \le k_i \le n\)) — количество участников из \(i\)-го города. За ним следуют \(k_i\) целых числа \(q_{i, 1}, q_{i, 2}, \ldots, q_{i, k_i}\) — (\(1 \le q_{i, j} \le n\), \(1 \le j \le k_i\)) — индексы участников из этого города. Гарантируется, что каждый участник упоминается ровно один раз.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Если существует набор задач, который удовлетворяет условиям Хеопса, то в первой строке выведите одно целое число \(p\) (\(1 \le p \le 5n\)) — количество задач в вашем решении.

Затем выведите \(p\) строк, каждая из которых содержит два целых числа \(d\) и \(t\) (\(0 \le d, t \le {10}^9\)) — сложность и тема соответствующей задачи. Темы должны быть различными.

Если нет набора задач, который соответствует желаниям Хеопса, выведите \(-1\) вместо этого.

F1. Яндексовая клинопись (простая версия)

жадные алгоритмы Конструктив Структуры данных *3300

Это простая версия задачи. Отличие между версиями заключается в том, что в этой версии в шаблоне нет знаков вопроса. Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Долгое время никто не мог расшифровать шумерскую клинопись. Все же она поддалась напору! Сегодня вам выпал шанс расшифровать Яндексовую клинопись.

Яндексовые клинописи задаются следующими правилами:

  1. Пустая строка является Яндексовой клинописью.
  2. Если вставить в Яндексовую клинопись три буквы «Y», «D» и «X» (каждую в одном экземпляре) таким образом, что после применения операции никакие две соседние буквы не стали равны, получится Яндексовая клинопись.
  3. Если строка не может быть получена с помощью описанных выше операций, она не является Яндексовой клинописью.

Вам задается шаблон. Шаблоном называется строка, состоящая из символов «Y», «D», «X» и «?».

Проверьте, существует ли способ заменить каждый знак вопроса на одну букву «Y», «D» или «X» так, чтобы получилась Яндексовая клинопись, и если он существует, выведите любой подходящий вариант, а также последовательность операций вставки, которая приводит к такой строке.

В этой версии задачи в шаблоне нет знаков вопроса.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор состоит из одной строки, содержащей шаблон длины \(n\) (\(3 \leq n < 2 \cdot 10^5\), \(n \bmod 3 = 0\)), состоящий только из символов «Y», «D», «X».

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственную строку, содержащую «NO», если не существует клинописи, подходящей под заданный шаблон.

Иначе, выведите на первой строке «YES», на второй — любую клинопись, которую можно получить. После вам необходимо вывести последовательность операций, приводящей к выведенной вами клинописи.

Последовательность операций описывается \(\frac{n}{3}\) тройками пар. Пара имеет вид c p, где \(c\) — один из символов «Y», «D» или «X», а \(p\) – позиция, на которую вставляется символ \(c\). Позиция для вставки – это количество символов, которое надо отступить от начала строки для вставки. Например, после вставки символа «D» в строку «YDX» с \(p=3\) получится строка «YDXD», а с \(p=0\) получится строка «DYDX». Заметьте, что индекс не может превышать текущую длину строки.

Операции применяются сверху вниз, слева направо. После вставки очередной тройки символов в получившейся строке не должно быть двух подряд идущих одинаковых символов.

Примечание

Во втором примере строка изменяется следующим образом: \("" \to \mathtt{YDX} \to \mathtt{YDXDYX}\).

F2. Яндексовая клинопись (сложная версия)

жадные алгоритмы Конструктив реализация Структуры данных *3500

Это сложная версия задачи. Отличие между версиями заключается в том, что в этой версии нет ограничений на количество знаков вопроса. Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Долгое время никто не мог расшифровать шумерскую клинопись. Все же она поддалась напору! Сегодня вам выпал шанс расшифровать Яндексовую клинопись.

Яндексовые клинописи задаются следующими правилами:

  1. Пустая строка является Яндексовой клинописью.
  2. Если вставить в Яндексовую клинопись три буквы «Y», «D» и «X» (каждую в одном экземпляре) таким образом, что после применения операции никакие две соседние буквы не стали равны, получится Яндексовая клинопись.
  3. Если строка не может быть получена с помощью описанных выше операций, она не является Яндексовой клинописью.

Вам задается шаблон. Шаблоном называется строка, состоящая из символов «Y», «D», «X» и «?».

Проверьте, существует ли способ заменить каждый знак вопроса на одну букву «Y», «D» или «X» так, чтобы получилась Яндексовая клинопись, и если он существует, выведите любой подходящий вариант, а также последовательность операций вставки, которая приводит к такой строке.

В этой версии задачи количество знаков вопроса может быть произвольным.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 5 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Каждый набор состоит из одной строки, содержащей шаблон длины \(n\) (\(3 \leq n < 2 \cdot 10^5\), \(n \bmod 3 = 0\)), состоящий только из символов «Y», «D», «X» и «?».

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственную строку, содержащую «NO», если не существует клинописи, подходящей под заданный шаблон.

Иначе, выведите на первой строке «YES», на второй — любую клинопись, которую можно получить. После вам необходимо вывести последовательность операций, приводящей к выведенной вами клинописи.

Последовательность операций описывается \(\frac{n}{3}\) тройками пар. Пара имеет вид c p, где \(c\) — один из символов «Y», «D» или «X», а \(p\) – позиция, на которую вставляется символ \(c\). Позиция для вставки – это количество символов, которое надо отступить от начала строки для вставки. Например, после вставки символа «D» в строку «YDX» с \(p=3\) получится строка «YDXD», а с \(p=0\) получится строка «DYDX». Заметьте, что индекс не может превышать текущую длину строки.

Операции применяются сверху вниз, слева направо. После вставки очередной тройки символов в получившейся строке не должно быть двух подряд идущих одинаковых символов.

Примечание

Во втором примере строка изменяется следующим образом: \("" \to \mathtt{YDX} \to \mathtt{YDXDYX}\).

B. Кевин и перестановка

жадные алгоритмы Конструктив *900

Кевин — мастер задач, связанных с перестановками. Вы прогуливаетесь с Кевин в Темном лесу, и во время досуга он хочет задать вам следующий вопрос.

Даны два положительных целых числа \( n \) и \( k \), постройте перестановку\(^{\text{∗}}\) \( p \) длины \( n \), чтобы минимизировать сумму минимальных значений всех подмассивов\(^{\text{†}}\) длины \( k \). Формально, вам нужно минимизировать

\(\) \sum_{i=1}^{n-k+1}\left( \min_{j=i}^{i+k-1} p_j\right). \(\)

\(^{\text{∗}}\)Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

\(^{\text{†}}\)Массив \(a\) является подмассивом массива \(b\), если \(a\) может быть получен из \(b\) удалением нескольких (возможно, ни одного или всех) элементов с начала и нескольких (возможно, ни одного или всех) элементов с конца. Два подмассива считаются различными, если различаются множества позиций удаленных элементов.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит количество наборов \(t\) (\(1 \le t \le 10^3\)).

Единственная строка каждого набора содержит два целых числа \( n \) и \( k \) (\( 1\le k\le n\le 10^5 \)).

Гарантируется, что сумма \( n \) по всем наборам не превышает \( 10^5 \).

Выходные данные

Для каждого набора выведите \( n \) целых чисел в одной строке — перестановку \( p \), которую вы построили.

Если есть несколько ответов, вы можете вывести любой из них.

Примечание

В первом наборе, для \( k=2 \), рассмотрим все подмассивы длины \( 2 \): минимальное значение \( p_1,p_2 \) равно \( 1 \), минимальное значение \( p_2,p_3 \) равно \( 1 \), и минимальное значение \( p_3,p_4 \) равно \( 2 \). Сумма \( 1+1+2=4 \) является наименьшей среди всех возможных перестановок.

Во втором наборе все подмассивы длины \( 1 \) имеют минимальные значения \( 5, 2, 1, 6, 4, 3 \), и сумма \( 5+2+1+6+4+3=21 \) доказано является наименьшей.

E. Кевин и двудольный граф

графы жадные алгоритмы Конструктив *2000

Оружейный завод нуждается в шаблоне дизайна постера и обращается за помощью к Кевину.

Шаблон дизайна постера — это двудольный граф с \( 2n \) вершинами в левой части и \( m \) вершинами в правой части, где существует ребро между каждой вершиной в левой части и каждой вершиной в правой части, в результате чего получается в общей сложности \( 2nm \) рёбер.

Кевин должен раскрасить каждое ребро в положительное целое число из отрезка \( [1, n] \). Шаблон дизайна постера является хорошим, если в двудольном графе нет одноцветных циклов\(^{\text{∗}}\).

Кевин нуждается в вашей помощи в построении хорошего двудольного графа или в том, чтобы сообщить ему, если это невозможно.

\(^{\text{∗}}\)Одноцветным циклом называется простой цикл, в котором все рёбра окрашены в один и тот же цвет.

Входные данные

Каждый тест содержит несколько наборов входных данных. Первая строка содержит количество наборов входных данных \( t \) (\( 1 \le t \le 100 \)).

Единственная строка каждого набора входных данных содержит два целых числа \( n \) и \( m \) (\( 1 \le n, m \leq 10^3 \)) — двудольный граф имеет \( 2n \) вершин в левой части и \( m \) вершин в правой части.

Гарантируется, что сумма \( n \) и сумма \( m \) по всем наборам входных данных не превышают \( 10^3 \).

Выходные данные

Для каждого набора входных данных, если решения нет, выведите «No».

В противном случае выведите «Yes», а затем выведите \( 2n \) строк, каждая из которых содержит \( m \) положительных целых чисел. \( j \)-е целое число в \( i \)-й строке представляет цвет ребра между \( i \)-й вершиной в левой части и \( j \)-й вершиной в правой части.

Если есть несколько ответов, вы можете вывести любой из них.

Вы можете выводить ответ в любом регистре (верхнем или нижнем). Например, строки «yEs», «yes», «Yes» и «YES» будут распознаны как положительные ответы.

Примечание

Для первого набора входных данных граф показан следующим образом:

Для второго набора входных данных можно доказать, что нет допустимого решения.

I1. Кевин и загадка (простая версия)

Конструктив *3500

Это простая версия задачи. Отличие между версиями заключается в том, что в этой версии вам необходимо найти один любой хороший массив. Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Кевин посещает Красную Церковь и нашел загадку на стене.

Пусть для массива \( a \) величина \( c(l,r) \) обозначает количество различных чисел среди \( a_l, a_{l+1}, \ldots, a_r \). В частности, если \( l > r \), \( c(l,r) = 0 \).

Вам дана строка \( s \) длиной \( n \), содержащая только \( \texttt{L} \) и \( \texttt{R} \). Назовем неотрицательный массив \( a \) хорошим, если для всех \( 1 \leq i \leq n \) выполняются следующие условия:

  • если \(s_i=\verb!L!\), то \(c(1,i-1)=a_i\);
  • если \(s_i=\verb!R!\), то \(c(i+1,n)=a_i\).

Если существуют хорошие массивы \(a\), выведите любой из них. Иначе сообщите, что хороших массивов не сущетсвует.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1\le t \le 10^4\)) — количество наборов. Далее следует описание наборов.

Первая строка каждого набора содержит одно целое число \(n\) (\(2\leq n\leq 2\cdot 10^5\)) — длина строки \(s\).

Вторая строка каждого набора содержит строку \(s\) длиной \(n\), содержащую только латинские заглавные буквы \(\verb!L!\) и \(\verb!R!\).

Гарантируется, что сумма \(n\) по всем наборам не превышает \(2\cdot 10^5\).

Выходные данные

Для каждого набора, если хороший массив существует, выведите \(n\) неотрицательных целых чисел: хороший массив \(a\). В противном случае выведите одно целое число \(-1\).

Если существует несколько массивов \(a\), удовлетворяющих условиям, вы можете вывести любой из них.

Примечание

В первом наборе массив \([0,1,0]\) удовлетворяет условиям, потому что:

  • Когда \(i=1\), \(s_i=\verb!L!\), и \(c(1,0)=0\);
  • Когда \(i=2\), \(s_i=\verb!L!\), и \(c(1,1)=1\), так как в \(a_1\) только одно различное число;
  • Когда \(i=3\), \(s_i=\verb!R!\), и \(c(4,3)=0\).

Во втором наборе другим подходящим ответом является \([1,1,1]\).

В третьем наборе можно доказать, что не существует массива, удовлетворяющего условиям.

B. Кис-кис-кис

Конструктив Паросочетания Перебор реализация *1300

Кошек привлекает «кис-кис-кис», но Эвирир, будучи достойным англоговорящим драконом, отзывается только на «pspspsp» с особыми условиями...

Дана строка \(s = s_1s_2\ldots s_n\) длины \(n\), состоящая из символов p, s и . (точка). Определите, существует ли перестановка\(^{\text{∗}}\) \(p\) длины \(n\), такая, что для каждого целого \(i\) (\(1 \le i \le n\)):

  • Если \(s_i\) равно p, то \([p_1, p_2, \ldots, p_i]\) образует перестановку (длины \(i\));
  • Если \(s_i\) равно s, то \([p_i, p_{i+1}, \ldots, p_{n}]\) образует перестановку (длины \(n-i+1\));
  • Если \(s_i\) равно ., то дополнительных ограничений нет.

\(^{\text{∗}}\)Перестановкой длины \(n\) является массив, состоящий из \(n\) различных целых чисел от \(1\) до \(n\) в произвольном порядке. Например, \([2,3,1,5,4]\) — перестановка, но \([1,2,2]\) не перестановка (\(2\) встречается в массиве дважды) и \([1,3,4]\) тоже не перестановка (\(n=3\), но в массиве встречается \(4\)).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(1 \le n \le 500\)) — длина \(s\).

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(n\), состоящую из символов p, s и ..

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(5000\).

Выходные данные

Для каждого набора входных данных в первой строке выведите YES или NO. Выведите YES, если искомая перестановка существует, и NO в противном случае.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

Для первого набора входных данных одна подходящая перестановка такова: \(p = [3, 4, 1, 2]\). Для неё выполняются все условия:

  • \(s_1 =\) s : \([p_1, p_2, p_3, p_4] = [3, 4, 1, 2]\) образует перестановку.
  • \(s_2 =\) . : Никаких дополнительных ограничений.
  • \(s_3 =\) s : \([p_3, p_4] = [1, 2]\) образует перестановку.
  • \(s_4 =\) p : \([p_1, p_2, p_3, p_4] = [3, 4, 1, 2]\) образует перестановку.

Для второго набора входных данных можно доказать, что не существует перестановки, удовлетворяющей всем ограничениям.

Для третьего набора входных данных одной перестановкой, удовлетворяющей условиям, является \(p = [1, 2, 3, 4, 5]\).

C. MEX-цикл

жадные алгоритмы Конструктив Перебор реализация *1500

У дракона Эвирира много друзей. У него есть целых 3 друга! Это на одного больше, чем у среднестатистического дракона.

Вам даны целые числа \(n\), \(x\), и \(y\). В кругу сидят \(n\) драконов, пронумерованных целыми числами \(1, 2, \ldots, n\). Для каждого \(i\) (\(1 \le i \le n\)) дракон номер \(i\) дружит с драконами \(i - 1\) и \(i + 1\) (здесь под номером \(0\) подразумевается дракон \(n\), а под номером \(n + 1\) подразумевается дракон \(1\)). Кроме того, драконы \(x\) и \(y\) дружат друг с другом (если они уже друзья, то ничего не меняется). Обратите внимание, что любая дружба является взаимной.

Выведите \(n\) целых неотрицательных чисел \(a_1, a_2, \ldots, a_n\) таких, чтобы для каждого дракона \(i\) (\(1 \le i \le n\)) выполнялось следующее:

  • Пусть \(f_1, f_2, \ldots, f_k\) — друзья дракона \(i\). Тогда \(a_i = \operatorname{mex}(a_{f_1}, a_{f_2}, \ldots, a_{f_k})\).\(^{\text{∗}}\)

\(^{\text{∗}}\)Наименьшее исключенное (MEX) набора чисел \(c_1, c_2, \ldots, c_m\) определяется как наименьшее неотрицательное целое число \(t\), которое не встречается в наборе чисел \(c\).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит три целых числа \(n\), \(x\), \(y\) (\(3 \le n \le 2 \cdot 10^5\), \(1 \le x < y \le n\)).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите на отдельной строке \(n\) целых неотрицательных чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i \le 10^9\)), которые удовлетворяют условию. Если существует несколько решений, выведите любое из них. Можно доказать, что при ограничениях задачи решение с \(0 \le a_i \le 10^9\) всегда существует.

Примечание

Для первого набора входных данных:

  • \(i = 1\): Друзья дракона \(1\) — драконы \(2, 3, 5\). \(\operatorname{mex}(a_2, a_3, a_5) = \operatorname{mex}(2, 1, 1) = 0 = a_1\), так что условие для дракона \(1\) выполнено.
  • \(i = 2\): Друзья дракона \(2\) — это драконы \(1, 3\). \(\operatorname{mex}(a_1, a_3) = \operatorname{mex}(0, 1) = 2 = a_2\).
  • \(i = 3\): Друзья дракона \(3\) — это драконы \(1, 2, 4\). \(\operatorname{mex}(a_1, a_2, a_4) = \operatorname{mex}(0, 2, 0) = 1 = a_3\).
  • \(i = 4\): Друзья дракона \(4\) — это драконы \(3, 5\). \(\operatorname{mex}(a_3, a_5) = \operatorname{mex}(1, 1) = 0 = a_4\).
  • \(i = 5\): Друзья дракона \(5\) — это драконы \(1, 4\). \(\operatorname{mex}(a_1, a_4) = \operatorname{mex}(0, 0) = 1 = a_5\).

E. Сломанные запросы

Бинарный поиск битмаски интерактив Конструктив Перебор реализация *2400

Вы — волшебник, чье творение было уничтожено драконом. Вы полны решимости выследить его с помощью волшебного AOE-трекера. Но с ним, похоже, кто-то играет...

Это интерактивная задача

Есть скрытый бинарный массив \(a\) длины \(n\) (\(\mathbf{n}\) является степенью 2) и скрытое целое число \(k\ (2 \le k \le n - 1)\). Массив \(a\) содержит ровно одну 1 (а все остальные элементы равны 0). Для двух целых \(l\) и \(r\) (\(1 \le l \le r \le n\)) определим сумму диапазона \(s(l, r) = a_l + a_{l+1} + \cdots + a_r\).

У вас есть волшебное устройство, которое принимает диапазоны и возвращает суммы диапазонов, но оно возвращает противоположный результат, когда диапазон имеет длину хотя бы \(k\). Формально, в одном запросе вы можете задать ему пару целых \([l, r]\), где \(1 \le l \le r \le n\), и он вернёт либо \(0\), либо \(1\), в соответствии со следующими правилами:

  • Если \(r - l + 1 < k\), то он вернёт \(s(l, r)\).
  • Если \(r - l + 1 \ge k\), то он вернёт \(1 - s(l, r)\).

Найдите \(k\), используя не более \(33\) запросов.

Устройство является неадаптивным. Это означает, что скрытые \(a\) и \(k\) фиксируются перед взаимодействием и не изменяются во время взаимодействия.

Протокол взаимодействия

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое положительное число \(n\) (\(4 \le n \le 2^{30}\)) — длину скрытого массива. Гарантируется, что \(\mathbf{n}\) — это степень 2; то есть \(n = 2^m\) для некоторого целого неотрицательного числа \(m\).

Вы можете делать запросы следующим образом — выведите одну строку вида «\(\mathtt{?}\,l\,r\)», где \(1 \le l \le r \le n\). После этого считайте одно целое число: \(0\) или \(1\), как описано в условии.

Если вы хотите дать ответ \(k\), выведите «\(\mathtt{!}\,k\)». Затем взаимодействие продолжается со следующим набором входных данных.

Вывод ответа не учитывается при подсчете количества выполненных запросов.

После вывода каждого запроса не забудьте вывести перевод строки и сбросить буфер вывода\(^{\text{∗}}\). В противном случае вы получите вердикт Решение «зависло».

На любом шаге взаимодействия, если вы считали \(-1\) вместо корректных данных, ваше решение должно немедленно завершиться. Это означает, что ваше решение получит вердикт Неправильный ответ из-за некорректного запроса или любой другой ошибки. Если программа не завершится, вы можете получить любой вердикт, так как ваша программа продолжит чтение из закрытого потока.

Взломы

Формат взломов должен быть следующим: первая строка должна содержать одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее должно следовать описание наборов входных данных.

Первая и единственная строка каждого набора входных данных должна содержать три целых числа \(n\), \(p\), и \(k\) (\(4 \le n \le 2^{30}\), \(1 \le p \le n\), \(2 \le k \le n - 1\)) — длина скрытого массива \(a\), позиция единственной 1 в \(a\) и скрытое \(k\). \(n\) должно быть степенью \(2\).

\(^{\text{∗}}\)Чтобы сбросить буфер вывода, используйте:

  • fflush(stdout) или cout.flush() в C++;
  • sys.stdout.flush() в Python;
  • смотрите документацию для других языков.
Примечание

В первом наборе входных данных \(k = 6\), а 1 в скрытом массиве находится на позиции 6, так что \(a = [0, 0, 0, 0, 0, 1, 0, 0]\).

  • Для запроса 3 5, поскольку \(5-3+1 = 3 < k\), устройство отвечает правильно. Поскольку значение 6 не входит в диапазон \([3, 5]\), устройство отвечает \(0\).
  • Для запроса 1 8, поскольку \(8 - 1 + 1 = 8 \ge k\), устройство неправильно отвечает \(0\).
  • Для запроса 4 8, поскольку \(8 - 4 + 1 = 5 < k\), устройство правильно отвечает \(1\).
  • Для запроса 3 8, поскольку \(8 - 3 + 1 = 6 \ge k\), устройство неправильно отвечает \(0\).
Затем решение в примере выводит \(6\), что является правильным ответом.

Во втором наборе входных данных \(k = 2\), а 1 в скрытом массиве находится на позиции 3, так что \(a = [0, 0, 1, 0]\).

Обратите внимание, что в примере решению может не хватать информации для определения \(k\).

C. Подготовка к экзамену

Конструктив реализация *1000

Монокарп готовится к своему первому экзамену в университете. Программа экзамена состоит из \(n\) вопросов, пронумерованных от \(1\) до \(n\). На экзамене Монокарпу попадется один из \(m\) различных билетов; каждый билет состоит из ровно \(n-1\) различных вопросов. Каждый билет \(i\) характеризуется одним числом \(a_i\), которое является индексом единственного вопроса, который отсутствует в \(i\)-м билете. Например, если \(n = 4\) и \(a_i = 3\), то \(i\)-й билет содержит вопросы \([1, 2, 4]\).

Во время экзамена Монокарп получит один из этих \(m\) билетов. Затем профессор заставит Монокарпа ответить на все вопросы из билета. Таким образом, Монокарп сдаст экзамен только в том случае, если он знает все вопросы из билета.

Монокарп знает ответы на \(k\) вопросов \(q_1, q_2, \dots, q_k\). Для каждого билета определите, сдаст ли Монокарп экзамен, если он получит этот билет.

Входные данные

Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных.

Каждый набор входных данных состоит из трех строк:

  • первая строка содержит три целых числа \(n\), \(m\) и \(k\) (\(2 \le n \le 3 \cdot 10^5\); \(1 \le m, k \le n\));
  • вторая строка содержит \(m\) различных целых чисел \(a_1, a_2, \dots, a_m\) (\(1 \le a_i \le n\); \(a_i < a_{i+1}\));
  • третья строка содержит \(k\) различных целых чисел \(q_1, q_2, \dots, q_k\) (\(1 \le q_i \le n\); \(q_i < q_{i+1}\)).

Дополнительные ограничения на входные данные:

  • сумма \(n\) по всем наборам входных данных не превышает \(3 \cdot 10^5\).
Выходные данные

Для каждого набора входных данных выведите строку из \(m\) символов. \(i\)-й символ должен быть 1, если Монокарп сдаст экзамен, если он получит \(i\)-й билет, или 0, если Монокарп не сдаст.

Примечание

В первом наборе входных данных Монокарп знает вопросы \([1, 3, 4]\). Рассмотрим все билеты:

  • первый билет состоит из вопросов \([2, 3, 4]\). Монокарп не знает \(2\)-й вопрос, поэтому он не сдаст;
  • второй билет состоит из вопросов \([1, 3, 4]\). Монокарп знает все эти вопросы, поэтому он сдаст;
  • третий билет состоит из вопросов \([1, 2, 4]\). Монокарп не знает \(2\)-й вопрос, поэтому он не сдаст;
  • четвертый билет состоит из вопросов \([1, 2, 3]\). Монокарп не знает \(2\)-й вопрос, поэтому он не сдаст.

H. Деликатные анти-монотонные операции

Конструктив реализация *3500

I shall be looking for you who would be out of Existence.
— HyuN, Disorder

В жизни всегда много повторяющихся задач. Ирис они всегда не нравились, поэтому она отказывается их повторять. Однако время нельзя повернуть вспять; нам нужно только двигаться вперед.

Формально, у Ирис есть целочисленная последовательность \(a_1, a_2, \ldots, a_n\), где каждое число в последовательности находится между \(1\) и \(w\) включительно. Гарантируется, что \(w \geq 2\).

Ирис определяет операцию как выбор двух чисел \(a_i, a_{i+1}\), удовлетворяющих \(a_i = a_{i+1}\), а затем изменение их на два произвольных целых числа в пределах диапазона \([1, w]\). Ирис не нравится равенство, поэтому она должна гарантировать \(a_i \neq a_{i+1}\) после операции. Каждая пара \(a_i, a_{i+1}\) может быть выбрана несколько раз.

Ирис хочет узнать максимально возможную сумму всех элементов \(a\) после нескольких (возможно, нуля) операций, а также минимальное количество операций, необходимое для достижения этого максимального значения.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \leq t \leq 10^5\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(w\) (\(1 \leq n \leq 2\cdot 10^5\), \(2 \leq w \leq 10^8\)) — длина массива и максимально допустимое значение элементов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \leq a_i \leq w\)) — элементы массива.

Гарантируется, что сумма \(n\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите два целых числа — максимально возможную сумму всех элементов \(a\) и минимальное количество требуемых операций соответственно.

Примечание

В первом наборе входных данных никаких операций не может быть выполнено, поэтому ответами являются \(\sum a_i = 15\) и \(0\), соответственно.

Во втором наборе входных данных операции могут быть выполнены следующим образом:

\(\)[3, 1, 2, 3, 4, \underline{1, 1}] \rightarrow [3, 1, 2, 3, \underline{4, 4}, 5] \rightarrow [3, 1, 2, \underline{3, 3}, 5, 5] \rightarrow [3, 1, \underline{2, 2}, 5, 5, 5] \rightarrow [3, \underline{1, 1}, 5, 5, 5, 5] \rightarrow [\underline{3, 3}, 5, 5, 5, 5, 5] \rightarrow [4, 5, 5, 5, 5, 5, 5]\(\)

Можно показать, что это оптимально, поэтому мы должны вывести \(\sum a_i = 34\) и количество операций \(6\), соответственно.

A. Две лягушки

жадные алгоритмы игры Конструктив математика *800

Бродя по кишащим аллигаторами болоту Эверглейдс, мужчина из Флориды попал в весьма своеобразную схватку.

В ряд расположено \(n\) кувшинок, пронумерованных от \(1\) до \(n\) слева направо. Алиса и Боб — лягушки, изначально расположенные на разных кувшинках \(a\) и \(b\), соответственно. Они прыгают по очереди, начиная с Алисы.

Во время хода лягушка может перепрыгнуть либо на одну позицию влево, либо на одну позицию вправо, но только если кувшинка, на которую она прыгает, существует. Например, в первый ход Алиса может перейти либо на кувшинку \(a-1\), либо на \(a+1\), при условии, что эти кувшинки находятся в пределах допустимых значений. Важно отметить, что каждая лягушка обязана прыгнуть во время своего хода и не может остаться на той же кувшинке.

Однако существуют некоторые ограничения:

  • Две лягушки не могут занимать одну и ту же кувшинку. Это означает, что Алиса не может перепрыгнуть на кувшинку, которую в данный момент занимает Боб, и наоборот.
  • Если лягушка не может совершить корректный прыжок в свой ход, она проигрывает игру. В результате выигрывает другая лягушка.

Определите, может ли Алиса гарантированно выиграть, предполагая, что оба игрока играют оптимально. Можно доказать, что игра закончится после конечного числа ходов, если оба игрока будут играть оптимально.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит три целых числа \(n\), \(a\) и \(b\) (\(2 \leq n \leq 100\), \(1 \leq a, b \leq n\), \(a\neq b\)) — количество кувшинок и начальные позиции Алисы и Боба, соответственно.

Обратите внимание, что нет ограничения на сумму \(n\) по всем наборам входных данных.

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую либо «YES», либо «NO», обозначающую, есть ли у Алисы выигрышная стратегия.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes», и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных у Алисы нет разрешённых ходов. Следовательно, Алиса проигрывает в первый ход.

Во втором наборе входных данных Алиса может перейти только на кувшинку \(2\). Тогда у Боба нет разрешённых ходов. Следовательно, в данном случае у Алисы есть выигрышная стратегия.

В третьем наборе входных данных Алиса может перейти только на кувшинку \(1\). Затем Боб может перейти на кувшинку \(2\). Алиса больше не в состоянии двигаться и проигрывает, отдавая победу Бобу. Можно показать, что Боб всегда может выиграть, независимо от ходов Алисы; следовательно, у Алисы нет выигрышной стратегии.

A. Две лягушки

жадные алгоритмы игры Конструктив математика *800

Бродя по кишащим аллигаторами болоту Эверглейдс, мужчина из Флориды попал в весьма своеобразную схватку.

В ряд расположено \(n\) кувшинок, пронумерованных от \(1\) до \(n\) слева направо. Алиса и Боб — лягушки, изначально расположенные на разных кувшинках \(a\) и \(b\), соответственно. Они прыгают по очереди, начиная с Алисы.

Во время хода лягушка может перепрыгнуть либо на одну позицию влево, либо на одну позицию вправо, но только если кувшинка, на которую она прыгает, существует. Например, в первый ход Алиса может перейти либо на кувшинку \(a-1\), либо на \(a+1\), при условии, что эти кувшинки находятся в пределах допустимых значений. Важно отметить, что каждая лягушка обязана прыгнуть во время своего хода и не может остаться на той же кувшинке.

Однако существуют некоторые ограничения:

  • Две лягушки не могут занимать одну и ту же кувшинку. Это означает, что Алиса не может перепрыгнуть на кувшинку, которую в данный момент занимает Боб, и наоборот.
  • Если лягушка не может совершить корректный прыжок в свой ход, она проигрывает игру. В результате выигрывает другая лягушка.

Определите, может ли Алиса гарантированно выиграть, предполагая, что оба игрока играют оптимально. Можно доказать, что игра закончится после конечного числа ходов, если оба игрока будут играть оптимально.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая и единственная строка каждого набора входных данных содержит три целых числа \(n\), \(a\) и \(b\) (\(2 \leq n \leq 100\), \(1 \leq a, b \leq n\), \(a\neq b\)) — количество кувшинок и начальные позиции Алисы и Боба, соответственно.

Обратите внимание, что нет ограничения на сумму \(n\) по всем наборам входных данных.

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую либо «YES», либо «NO», обозначающую, есть ли у Алисы выигрышная стратегия.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes», и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных у Алисы нет разрешённых ходов. Следовательно, Алиса проигрывает в первый ход.

Во втором наборе входных данных Алиса может перейти только на кувшинку \(2\). Тогда у Боба нет разрешённых ходов. Следовательно, в данном случае у Алисы есть выигрышная стратегия.

В третьем наборе входных данных Алиса может перейти только на кувшинку \(1\). Затем Боб может перейти на кувшинку \(2\). Алиса больше не в состоянии двигаться и проигрывает, отдавая победу Бобу. Можно показать, что Боб всегда может выиграть, независимо от ходов Алисы; следовательно, у Алисы нет выигрышной стратегии.

B. Крафтинг

жадные алгоритмы Конструктив сортировки *1000

Как и следовало ожидать, Флорида является домом для многих причудливых магических сил, и мужчина из Флориды стремится укротить их.

Существует \(n\) различных типов магических материалов, пронумерованных от \(1\) до \(n\). Изначально у вас есть \(a_i\) единиц материала \(i\) для каждого \(i\) от \(1\) до \(n\). Вы можете выполнять следующую операцию:

  • Выберите материал \(i\) (где \(1\le i\le n\)). Потратьте по \(1\) единице каждого из остальных материалов (то есть всех \(j\), таких, что \(j\neq i\)), чтобы получить \(1\) единицу материала \(i\). Более формально, после выбора материала \(i\) обновите массив \(a\) следующим образом: \(a_i := a_i + 1\) и \(a_j := a_j - 1\) для всех \(j\), где \(j\neq i\) и \(1\le j\le n\). Обратите внимание, что все \(a_j\) должны оставаться неотрицательными, т.е. вы не можете тратить ресурсы, которых у вас нет.

Вы пытаетесь создать артефакт, используя эти материалы. Чтобы успешно создать артефакт, у вас должно быть по крайней мере \(b_i\) единиц материала \(i\) для каждого \(i\) от \(1\) до \(n\). Определите, возможно ли создать артефакт, выполнив операцию любое количество раз (возможно, ноль).

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(2\le n\le 2\cdot 10^5\)) — количество типов материалов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \le a_i\le 10^9\)) — количество каждого материала \(i\), которое у вас есть в данный момент.

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(0 \le b_i\le 10^9\)) — количество каждого материала \(i\), необходимого для создания артефакта.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одну строку, содержащую либо «YES», либо «NO» — может ли артефакт быть создан.

Вы можете выводить каждую букву в любом регистре (строчную или заглавную). Например, строки «yEs», «yes», «Yes» и «YES» будут приняты как положительный ответ.

Примечание

В первом наборе входных данных выполните операцию над материалом \(1\). После этого у нас будет ровно столько ресурсов, сколько требуется: \(1\) единица материала \(1\) и по \(4\) единицы каждого из материалов \(2\) и \(3\).

Во втором наборе входных данных можно показать, что независимо от того, как выполняются операции, создать артефакт невозможно.

В третьем наборе входных данных мы можем выполнить операцию с материалом \(1\) дважды. После этих операций у нас будет \(3\) единицы материала \(1\) и \(8\) единиц материала \(2\), чего более чем достаточно для создания артефакта.

C. Тропа

жадные алгоритмы Конструктив математика Перебор *1400

Во Флориде нет гор, и мужчина из Флориды не может осознать их существование. Ему действительно нужна ваша помощь в этом деле.

Среди дикой природы находится горная местность, представленная в виде прямоугольной сетки с \(n\) строками и \(m\) столбцами. Каждая ячейка в сетке в соответствии с её положением обозначается \((i, j)\), где \(i\) — индекс строки, а \(j\) — индекс столбца. Высота ячейки \((i, j)\) обозначается \(a_{i,j}\).

Однако в этом регионе произошли некоторые изменения. Путь, состоящий из \(n + m - 1\) ячеек, начинающийся в левом верхнем углу \((1, 1)\) и заканчивающийся в правом нижнем углу \((n, m)\), был очищен. Иными словами, для каждой ячейки \((i, j)\) вдоль этого пути высота \(a_{i,j}\) была установлена равной \(0\). Каждая ячейка пути находится либо на одну ячейку ниже предыдущей (\(\mathtt{D}\)), либо на одну ячейку правее (\(\mathtt{R}\)).

Известно, что до того, как в регион были внесены изменения, он обладал магическим свойством: все строки и все столбцы имели одинаковую сумму высот. Более формально, существует целое число \(x\) такое, что \(\sum_{j=1}^m a_{i, j} = x\) для всех \(1\le i\le n\), и \(\sum_{i=1}^n a_{i, j} = x\) для всех \(1\le j\le m\).

Ваша задача состоит в том, чтобы назначить новые высоты ячейкам на пути таким образом, чтобы вышеупомянутое магическое свойство было восстановлено. Можно доказать, что решение всегда существует. Если существует несколько решений, удовлетворяющих данному свойству, выведите любое из них.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(2 \leq n, m \leq 1000\)) — количество строк и столбцов в таблице.

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(n+m-2\) (\(s_i = \mathtt{D}\) или \(s_i = \mathtt{R}\)) — шаги, которые путь выполняет от \((1, 1)\) до \((n, m)\). Символ \(\mathtt{D}\) представляет собой шаг вниз, а \(\mathtt{R}\) представляет шаг вправо.

В \(i\)-й из следующих \(n\) строк содержится по \(m\) целых чисел \(a_{i,1}, a_{i, 2}, \ldots, a_{i,m}\) (\(-10^6 \leq a_{i,j} \leq 10^6\)) — высота ячеек сетки. Гарантируется, что если ячейка \((i, j)\) лежит на пути, то \(a_{i,j} = 0\).

Гарантируется, что сумма значений \(n \cdot m\) по всем наборам входных данных не превосходит \(10^6\).

Выходные данные

Для каждого набора входных данных выведите \(n\) строк по \(m\) целых чисел, представляющих восстановленную сетку высот \(b_{i, j}\). Высоты должны удовлетворять \(-10^{15} \leq b_{i,j} \leq 10^{15}\), и дополнительно \(a_{i,j} = b_{i,j}\), если \((i, j)\) не находится на пути. Если существует несколько решений, выведите любое из них.

Примечание

В первом наборе входных данных сетка была заполнена таким образом, чтобы каждая строка и каждый столбец содержали числа \(1, 2, 3\) в некотором порядке, что приводит к общей сумме \(6\).

Во втором наборе входных данных сетка была заполнена таким образом, что сумма в каждой строке и в каждом столбце равнялась \(0\).

E. Стога сена

жадные алгоритмы Конструктив Перебор сортировки Структуры данных *2800

В следующее новолуние вселенная сбросится, начиная с Флориды. Мужчина из Флориды должен остановить это, но сначала ему нужно найти важный артефакт.

Есть \(n\) стогов сена, пронумерованных от \(1\) до \(n\), где стог сена \(i\) содержит \(a_i\) тюков сена. Под одним из стогов сена возможно спрятана иголка, но вы не знаете, под каким именно. Ваша задача состоит в том, чтобы переместить тюки сена так, чтобы каждый стог сена был пустым хотя бы один раз, что позволит вам проверить, спрятана ли иголка под этим конкретным стогом сена.

Однако этот процесс не так прост. Как только стог сена \(i\) будет опустошен в первый раз, ему будет присвоено ограничение по высоте, и он больше не сможет содержать более \(b_i\) тюков сена. Более формально ход описывается следующим образом:

  • Выберите два стога сена \(i\) и \(j\). Если стог сена \(i\) не был опустошен ранее или в стоге сена \(i\) содержится строго меньше, чем \(b_i\) тюков сена, вы можете переместить ровно \(1\) тюк сена из стога \(j\) в стог \(i\).

Обратите внимание: Перед опустошением стога его высота не ограничена, и вы можете переместить в этот стог столько тюков, сколько захотите.

Найдите минимальное количество ходов, необходимых для того, чтобы каждый стог сена был опустошен хотя бы один раз, или сообщите, что это невозможно.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(2\le n\le 5\cdot 10^5\)) — количество стогов сена.

В \(i\)-й из следующих \(n\) строк содержится по два целых числа \(a_i\) и \(b_i\) (\(1\le a_i, b_i\le 10^9\)) — начальное количество тюков сена в \(i\)-м стоге сена и предел высоты, который ему присваивается после того, как он опустошается в первый раз.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(5 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно целое число — минимальное количество ходов, необходимое для обеспечения того, чтобы каждый стог сена был опустошен хотя бы один раз. Если невозможно опустошить каждый стог сена хотя бы один раз, выведите -1.

Примечание

В первом наборе входных данных мы можем выполнить следующую последовательность действий:

  • Переместите \(3\) тюка из стога \(1\) в стог \(2\). Стог \(1\) теперь пуст, и ему присвоено ограничение по высоте, равное \(5\).
  • Переместите \(5\) тюков из стога \(2\) в стог \(1\). Стог \(2\) теперь пуст, и ему присвоено ограничение по высоте, равное \(4\).

Приведенная выше последовательность требует \(3 + 5 = 8\) ходов. Невозможно использовать менее \(8\) ходов, так как следующая последовательность ходов недопустима:

  • Переместите \(2\) тюка из стога \(2\) в стог \(1\). Стог \(2\) теперь пуст, и ему присвоено ограничение по высоте, равное \(4\).
  • Переместите \(4\) тюка из стога \(1\) в стог \(2\). В стоге \(1\) теперь \(1\) тюк, в то время как в стоге \(2\) находится \(4\) тюка.
  • Стог \(1\) нельзя очистить, так как высота стога \(2\) уже равна \(4\), поэтому больше нельзя перемещать тюки из стога \(1\) в стог \(2\).

Во втором наборе входных данных задача невыполнима. Это связано с тем, что ограничения по высоте обоих стогов слишком малы, и как только один из стогов опустошается, другой стог не может стать пустым из-за небольших ограничений по высоте.

В третьем наборе входных данных можно показать, что следующая последовательность ходов является оптимальной:

  • Переместите \(1\) тюк из стога \(1\) в стог \(3\). Стог \(1\) теперь пуст, и ему присвоено ограничение по высоте, равное \(3\).
  • Переместите \(3\) тюка из стога \(2\) в стог \(1\).
  • Переместите \(1\) тюк из стога \(2\) в стог \(3\). Стог \(2\) теперь пуст, и ему присвоено ограничение по высоте, равное \(3\).
  • Переместите \(3\) тюка из стога \(3\) в стог \(2\). Стог \(3\) теперь пуст, и ему присвоено ограничение по высоте, равное \(1\).

Приведенная выше последовательность требует \(1 + 3 + 1 + 3 = 8\) ходов.

A. Периметр фигуры

Конструктив математика *800

На бесконечном листе бумаги находится квадратная печать размером \(m\) на \(m\). Изначально левый нижний угол квадратной печати выравнивается по левому нижнему углу листа. Вам даны две целочисленные последовательности \(x\) и \(y\), каждая длиной \(n\). Для каждого шага \(i\) от \(1\) до \(n\) происходит следующее:

  • Переместите печать на \(x_i\) единиц вправо, а затем на \(y_i\) единиц вверх.
  • Прижмите печать к бумаге, оставив цветной квадрат размером \(m\) на \(m\) на месте печати.

Обратите внимание, что элементы последовательностей \(x\) и \(y\) имеют дополнительное ограничение: \(1\le x_i, y_i\le m - 1\).

Обратите внимание, что вы не ставите печать в левом нижнем углу листа. Обратитесь к примечаниям для лучшего понимания.

Можно доказать, что после всех операций цветная фигура на бумаге, сформированная печатями, представляет собой единую связанную область. Найдите периметр этой цветной фигуры.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n \le 100\), \(2 \le m \le 100\)) — количество выполненных операций и длину стороны квадратной печати.

\(i\)-я из следующих \(n\) строк содержит два целых числа \(x_i\) и \(y_i\) (\(1 \le x_i, y_i \le m - 1\)) — расстояние, на которое печать будет перемещена вправо и вверх во время \(i\)-й операции соответственно.

Обратите внимание, что нет дополнительного ограничения на сумму \(n\) по всем наборам входных данных.

Выходные данные

Для каждого набора входных данных выведите одно целое число — периметр цветной фигуры на бумаге.

Примечание

В первом наборе входных данных печать имеет длину стороны \(3\) и нажимается \(4\) раза на координатах \((1, 1)\), \((3, 3)\), \((5, 4)\) и \((6, 6)\). После этого лист бумаги выглядит так:

Здесь квадрат, образованный первым нажатием, окрашен в синий цвет, вторым — в красный, третьим — в зеленый, а четвертым — в фиолетовый. Объединённая фигура, периметр которой нам нужно вычислить, выглядит следующим образом:

Периметр этой фигуры равен \(32\).

C. Палиндромные подпоследовательности

Конструктив математика Перебор *1200

Для целочисленной последовательности \(a = [a_1, a_2, \ldots, a_n]\) определим \(f(a)\) как длину самой длинной подпоследовательности\(^{\text{∗}}\) из \(a\), которая является палиндромом\(^{\text{†}}\).

Пусть \(g(a)\) обозначает число подпоследовательностей длины \(f(a)\), которые являются палиндромами. Иными словами, \(g(a)\) подсчитывает количество палиндромных подпоследовательностей в \(a\), которые имеют максимальную длину.

Для данного числа \(n\), ваша задача состоит в том, чтобы найти любую последовательность \(a\) из \(n\) целых чисел, которая удовлетворяет следующим условиям:

  • \(1 \le a_i \le n\) для всех \(1 \le i \le n\).
  • \(g(a) > n\)

Можно доказать, что такая последовательность всегда существует при заданных ограничениях.

\(^{\text{∗}}\)Последовательность \(x\) является подпоследовательностью \(y\), если \(x\) может быть получена из \(y\) удалением нескольких (возможно, ни одного или всех) элементов на произвольных позициях.

\(^{\text{†}}\)Палиндром — это последовательность, которая читается одинаково слева направо и справа налево. Например, \([1, 2, 1, 3, 1, 2, 1]\), \([5, 5, 5, 5]\), и \([4, 3, 3, 4]\) являются палиндромами, в то время как \([1, 2]\) и \([2, 3, 3, 3, 3]\) — нет.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(\color{red}{6} \le n \le 100\)) — длина последовательности.

Обратите внимание, что нет дополнительного ограничения на сумму \(n\) по всем наборам входных данных.

Выходные данные

Для каждого набора входных данных выведите \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) — массив, удовлетворяющий условиям.

Если существует несколько решений, вы можете вывести любое из них.

Примечание

В первом примере одним из возможных решений является \(a = [1, 1, 2, 3, 1, 2]\). В этом наборе входных данных \(f(a) = 3\), поскольку самая длинная палиндромная подпоследовательность имеет длину \(3\). Существует \(7\) способов выбрать подпоследовательность длины \(3\), которая является палиндромом, как показано ниже:

  1. \([a_1, a_2, a_5] = [1, 1, 1]\)
  2. \([a_1, a_3, a_5] = [1, 2, 1]\)
  3. \([a_1, a_4, a_5] = [1, 3, 1]\)
  4. \([a_2, a_3, a_5] = [1, 2, 1]\)
  5. \([a_2, a_4, a_5] = [1, 3, 1]\)
  6. \([a_3, a_4, a_6] = [2, 3, 2]\)
  7. \([a_3, a_5, a_6] = [2, 1, 2]\)

\(g(a) = 7\), что больше, чем \(n = 6\). Следовательно, \(a = [1, 1, 2, 3, 1, 2]\) — это верное решение.

Во втором примере одним из возможных решений является \(a = [7, 3, 3, 7, 5, 3, 7, 7, 3]\). В этом наборе входных данных \(f(a) = 5\). Существует \(24\) способа выбрать подпоследовательность длины \(5\), которая является палиндромом. Некоторыми примерами являются \([a_2, a_4, a_5, a_8, a_9] = [3, 7, 5, 7, 3]\) и \([a_1, a_4, a_6, a_7, a_8] = [7, 7, 3, 7, 7]\). Следовательно, \(g(a) = 24\), что больше, чем \(n = 9\). Следовательно, \(a = [7, 3, 3, 7, 5, 3, 7, 7, 3]\) — это верное решение.

В третьем примере \(f(a) = 7\) и \(g(a) = 190\), что больше, чем \(n = 15\).

A. Таблица MEX

Конструктив математика *800

В один из дней школьник Марк плохо себя вел, поэтому преподаватель Саша вызвал его к доске.

Саша дал Марку таблицу из \(n\) строк и \(m\) столбцов. Его задача — расставить в таблице числа \(0, 1, \ldots, n \cdot m - 1\) (каждое нужно использовать ровно один раз) так, чтобы максимизировать сумму MEX\(^{\text{∗}}\) по всем строкам и столбцам. Более формально, нужно максимизировать \(\)\sum\limits_{i = 1}^{n} \operatorname{mex}(\{a_{i,1}, a_{i,2}, \ldots, a_{i,m}\}) + \sum\limits_{j = 1}^{m} \operatorname{mex}(\{a_{1,j}, a_{2,j}, \ldots, a_{n,j}\}),\(\) где \(a_{i,j}\) — число в \(i\)-й строке и \(j\)-м столбце.

Сашу не интересует, как Марк расставил числа, поэтому он просит его сказать лишь одно число — максимальную сумму MEX по всем строкам и столбцам, которую можно получить.

\(^{\text{∗}}\)Наименьшее исключенное (MEX) набора чисел \(c_1, c_2, \ldots, c_k\) определяется как наименьшее неотрицательное целое число \(x\), которое не встречается в наборе чисел \(c\).

Например:

  • \(\operatorname{mex}([2,2,1])= 0\), так как \(0\) не принадлежит массиву.
  • \(\operatorname{mex}([3,1,0,1]) = 2\), так как \(0\) и \(1\) принадлежат массиву, а \(2\) нет.
  • \(\operatorname{mex}([0,3,1,2]) = 4\), так как \(0\), \(1\), \(2\) и \(3\) принадлежат массиву, а \(4\) нет.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 10^9\)) — количество строк и столбцов в таблице соответственно.

Выходные данные

Для каждого набора входных данных выведите максимальную возможную сумму \(\operatorname{mex}\) по всем строкам и столбцам.

Примечание

В первом наборе входных данных единственный элемент равен \(0\), сумма \(\operatorname{mex}\) множества чисел первой строки и \(\operatorname{mex}\) множества чисел первого столбца это \(\operatorname{mex}(\{0\}) + \operatorname{mex}(\{0\}) = 1 + 1 = 2\).

Во втором наборе входных данных оптимальная таблица может выглядеть следующим образом:

\(3\)\(0\)
\(2\)\(1\)

Тогда \(\sum\limits_{i = 1}^{n} \operatorname{mex}(\{a_{i,1}, a_{i,2}, \ldots, a_{i,m}\}) + \sum\limits_{j = 1}^{m} \operatorname{mex}(\{a_{1,j}, a_{2,j}, \ldots, a_{n,j}\}) = \operatorname{mex}(\{3, 0\}) + \operatorname{mex}(\{2, 1\})\) \(+ \operatorname{mex}(\{3, 2\}) + \operatorname{mex}(\{0, 1\}) = 1 + 0 + 0 + 2 = 3\).

C. Поездка на олимпиаду

битмаски жадные алгоритмы Конструктив математика *1500

В предстоящем году будет много командных олимпиад, поэтому преподавателям «Т-поколения» предстоит собрать команду из трех школьников для участия в них. Любые три школьника покажут достойный результат на любой командной олимпиаде. Но выиграть олимпиаду это еще пол дела, для начала нужно до нее добраться...

У каждого школьника есть самостоятельность, выражаемая целым числом. В «Т-поколении» есть по одному школьнику с самостоятельностями от \(l\) до \(r\) включительно. Для команды из трех школьников с самостоятельностями \(a\), \(b\) и \(c\) значение их командной самостоятельности равно \((a \oplus b) + (b \oplus c) + (a \oplus c)\), где \(\oplus\) обозначает операцию побитового исключающего ИЛИ.

Ваша задача — выбрать любую тройку школьников с максимально возможной командной самостоятельностью.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(l\) и \(r\) (\(0 \le l, r < 2^{30}\), \(r - l > 1\)) — минимальная и максимальная самостоятельности школьников.

Выходные данные

Для каждого набора входных данных выведите три попарно различных целых числа \(a, b\) и \(c\), такие что \(l \le a, b, c \le r\) и значение выражения \((a \oplus b) + (b \oplus c) + (a \oplus c)\) максимально возможное. Если существует несколько троек с максимальным значением, можно вывести любую.

Примечание

В первом наборе входных данных единственная, с точностью до перестановки, подходящая тройка чисел (\(a, b, c\)) это (\(0, 1, 2\)).

Во втором наборе входных данных одна из подходящих троек это (\(8, 7, 1\)), \((8 \oplus 7) + (7 \oplus 1) + (8 \oplus 1) = 15 + 6 + 9 = 30\), можно показать, что \(30\) — максимально возможное значение \((a \oplus b) + (b \oplus c) + (a \oplus c)\) при \(0 \le a, b, c \le 8\).

G. Секретное сообщение

Конструктив математика поиск в глубину и подобное *3000

Каждую субботу Александр Б., преподаватель параллели X, вечером пишет Александру Г., преподавателю параллели B, секретное сообщение. Так как Александр Г. в это время проводит лекцию, а сообщение очень важное, то Александру Б. приходится писать это сообщение на интерактивной онлайн-доске.

Интерактивная онлайн-доска представляет собой клетчатое поле, состоящее из \(n\) строк и \(m\) столбцов, где каждая клетка имеет размер \(1 \times 1\). Некоторые клетки этой доски уже расписаны, и в них невозможно написать сообщение; такие клетки обозначены символом «.», остальные клетки называются свободными и обозначаются символом «#».

Введем две характеристики онлайн-доски:

  • \(s\) — количество свободных клеток.
  • \(p\) — периметр клетчатой фигуры, которая образована объединением свободных клеток.

Пусть \(A\) — множество свободных клеток. Ваша цель состоит в том, чтобы найти множество клеток \(S \subseteq A\), удовлетворяющее следующим свойствам:

  • \(|S| \le \frac{1}{5} \cdot (s+p)\).
  • Любая клетка из \(A\) либо лежит в \(S\), либо имеет общую сторону с некоторой клеткой из \(S\).

Можно показать, что хотя бы одно множество \(S\), удовлетворяющее этим свойствам, существует; вам требуется отыскать любое подходящее.

Входные данные

В первой строке указано число \(t\) (\(1 \le t \le 80\,000\)) — количество наборов входных данных.

В первой строке каждого набора входных данных указаны числа \(n\) и \(m\) (\(1 \le n, m \le 2 \cdot 10^6\)) — размеры поля.

В последующих \(n\) строках содержится описание поля.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(2 \cdot 10^6\).

Выходные данные

Для каждого набора выходных данных по \(n\) строк, состоящих из \(m\) символов, где каждый символ кодирует состояние клетки:

  • «#» — клетка содержится в \(A\), но не содержится в \(S\);
  • «S» — клетка содержится и в \(A\), и в \(S\);
  • «.» — клетка не содержится в \(A\) и не содержится в \(S\).
Примечание

В первом примере \(s=5\) и \(p=12\), таким образом, количество клеток в \(S\) не должно превышать \(\frac{1}{5} \cdot (5+12) = 3.4\), то есть \(|S| \le 3\). Заметим, что предъявленное множество \(S\) состоит из \(1\) клетки и, очевидно, удовлетворяет всем ограничениям.

Во втором примере \(s=12\) и \(p=16\), таким образом, количество клеток в \(S\) не должно превышать \(\frac{1}{5} \cdot (12+16)= 5.6\), то есть \(|S| \le 5\). Заметим, что предъявленное множество \(S\) состоит из \(4\) клеток и, очевидно, удовлетворяет всем ограничениям.

На третьем примере мы объясним, что такое периметр, так как это может быть не очевидно. Любая клетчатая фигура имеет границу, которая представляется в виде объединения отрезков, которые не пересекаются по внутренним точкам. Таким образом, на картинке ниже толстой черной линией обозначена граница фигуры, которая получается путем объединения свободных клеток. Суммарная длина этих отрезков равна \(p=24\).

При этом значение \(s=11\) и верхнее ограничение равно \(|S| \le 7\), предъявленное множество имеет размер \(6\) и, очевидно, удовлетворяет всем ограничениям.

A. Миля и два массива

жадные алгоритмы Конструктив сортировки *800

Массив называется хорошим, если для любого элемента \(x\), который встречается в этом массиве, верно, что \(x\) встречается хотя бы дважды в этом массиве. Например, массивы \([1, 2, 1, 1, 2]\), \([3, 3]\), \([1, 2, 4, 1, 2, 4]\) являются хорошими, а массивы \([1]\), \([1, 2, 1]\) и \([2, 3, 4, 4]\) не являются хорошими.

У Мили есть два хороших массива \(a\) и \(b\) длины \(n\). Он может произвольным образом переставить местами элементы в массиве \(a\). После этого он получает массив \(c\) длины \(n\), где \(c_i = a_i + b_i\) (\(1 \le i \le n\)).

Определите, может ли Миля переставить местами элементы в массиве \(a\) так, чтобы в массиве \(c\) было хотя бы \(3\) различных числа.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 1000\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит единственное целое число \(n\) (\(3 \le n \le 50\)) — длина массивов \(a\) и \(b\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива \(a\).

Третья строка каждого набора входных данных содержит \(n\) целых чисел \(b_1, b_2, \ldots, b_n\) (\(1 \le b_i \le 10^9\)) — элементы массива \(b\).

Выходные данные

Для каждого набора входных данных выведите \(«\)YES\(»\) (без кавычек), если можно получить хотя бы \(3\) различных элемента в массиве \(c\), и \(«\)NO\(»\) иначе.

Вы можете вывести каждую букву в любом регистре (например, \(«\)YES\(»\), \(«\)Yes\(»\), \(«\)yes\(»\), \(«\)yEs\(»\) будут распознаны как положительный ответ).

Примечание

В первом наборе входных данных можно поменять местами второй и третий элементы. Тогда массив \(a = [1, 1, 2, 2]\), \(b = [1, 2, 1, 2]\), а тогда \(c = [2, 3, 3, 4]\).

Во втором наборе входных данных можно не менять местами элементы. Тогда \(c = [2, 3, 4, 4, 3, 2]\).

В третьем наборе входных данных массив \(a\) не изменится от перестановки элементов в нём. Тогда \(c = [2, 2, 2]\), поэтому ответ \(«\)NO\(»\).

B. Стоимость массива

жадные алгоритмы Конструктив математика Перебор *1300

Вам дан массив \(a\) длины \(n\) и чётное число \(k\) (\(2 \le k \le n\)). Вам требуется разбить массив \(a\) на ровно \(k\) непустых подмассивов\(^{\dagger}\) так, чтобы каждый элемент массива \(a\) принадлежал ровно одному подмассиву.

Далее все подмассивы с чётными номерами (второй, четвёртый, \(\ldots\), \(k\)-й) склеивают в один массив \(b\). После этого в конец массива \(b\) добавляют \(0\).

Стоимостью массива \(b\) называется минимальный индекс \(i\), такой что \(b_i \neq i\). Например, стоимость массива \(b = [1, 2, 4, 5, 0]\) равна \(3\), т.к. \(b_1 = 1\), \(b_2 = 2\), \(b_3 \neq 3\). Определите минимальную стоимость массива \(b\), которую можно получить при оптимальном разбиении массива \(a\) на подмассивы.

\(^{\dagger}\)Массив \(x\) является подмассивом массива \(y\), если \(x\) может быть получен из \(y\) удалением нескольких (возможно, ни одного или всех) элементов с начала и нескольких (возможно, ни одного или всех) элементов с конца.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(k\) (\(2 \le k \le n \le 2 \cdot 10^5\), \(k\) — чётное) — длина массива \(a\) и количество подмассивов.

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(1 \le a_i \le 10^9\)) — элементы массива \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальную стоимость массива \(b\), которую можно получить при оптимальном разбиении.

Примечание

В первом наборе входных данных существует всего два возможных разбиения: \([[1], [1, 1]]\) и \([[1, 1], [1]]\). В любом случае \(b_1 = 1\), а \(b_2 \ne 2\), поэтому стоимость равна \(2\).

Во втором наборе входных данных существует единственное возможное разбиение, при котором \(b = [1, 2, 3, 4, 0]\), поэтому стоимость равна \(5\) (\(b_5 = 0 \ne 5\)).

В третьем наборе входных данных подходит следующее разбиение: \([[1], [1, 1], [2], [2]]\). Тогда \(b = [1, 1, 2, 0]\), и стоимость равна \(2\).

C. Обслуживание клиентов

жадные алгоритмы Конструктив математика Паросочетания Перебор сортировки *1600

Никир устроился работать регулировщиком очередей в компанию «Чёрный Контур». Ему нужно будет выбирать порядок обслуживания клиентов. Всего есть \(n\) очередей, в каждой из которых изначально стоит \(0\) человек. В каждый из следующих \(n\) моментов времени происходит два последовательных события:

  1. Во все очереди приходят новые клиенты. Более формально, в \(j\)-й момент времени количество людей в \(i\)-й очереди увеличивается на положительное целое число \(a_{i,j}\).
  2. Никир выбирает ровно одну из \(n\) очередей, которую будут обслуживать в этот момент времени. Количество клиентов в этой очереди становится равным \(0\).

Пусть количество людей в \(i\)-й очереди после всех событий равно \(x_i\). Никир хочет, чтобы MEX\(^{\dagger}\) набора чисел \(x_1, x_2, \ldots, x_n\) был как можно больше. Помогите ему определить максимальное значение, которое он сможет получить при оптимальном порядке обслуживания очередей.

\(^{\dagger}\)Наименьшее исключенное (MEX) набора чисел \(c_1, c_2, \ldots, c_k\) определяется как наименьшее неотрицательное целое число \(y\), которое не встречается в наборе чисел \(c\).

Например:

  • \(\operatorname{MEX}([2,2,1])= 0\), так как \(0\) не принадлежит массиву.
  • \(\operatorname{MEX}([3,1,0,1]) = 2\), так как \(0\) и \(1\) принадлежат массиву, а \(2\) нет.
  • \(\operatorname{MEX}([0,3,1,2]) = 4\), так как \(0\), \(1\), \(2\) и \(3\) принадлежат массиву, а \(4\) нет.
Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 2 \cdot 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(1 \le n \le 300\)) — количество очередей и моментов времени.

\(i\)-я из следующих \(n\) строк содержит \(n\) целых чисел \(a_{i,1}, a_{i,2}, \ldots, a_{i,n}\) (\(1 \le a_{i,j} \le 10^9\)) — количество новых клиентов в \(i\)-й очереди в каждый из моментов времени.

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — максимальное значение \(\operatorname{MEX}([x_1, x_2, \ldots, x_n])\), которое можно получить.

Примечание

В первом наборе входных данных можно обслужить вторую очередь в момент времени \(1\) и первую очередь в момент времени \(2\). В первой очереди останется \(x_1 = 0\) человек, во второй очереди останется \(x_2 = 1\) человек. Тогда ответ равен \(\operatorname{MEX}([0, 1]) = 2\).

Во втором наборе входных данных можно оба раза обслужить первую очередь. В первой очереди останется \(x_1 = 0\) человек, во второй очереди останется \(x_2 = 20\) человек. Тогда ответ равен \(\operatorname{MEX}([0, 20]) = 1\).

В третьем наборе входных данных можно обслужить третью очередь в момент времени \(1\), вторую очередь в момент времени \(2\) и первую очередь в момент времени \(3\). В первой очереди останется \(x_1 = 0\) человек, во второй очереди останется \(x_2 = 1\) человек, в третьей очереди останется \(x_3 = 2\) человека. Тогда ответ равен \(\operatorname{MEX}([0, 1, 2]) = 3\).

E1. Хватит гамать (простая версия)

жадные алгоритмы Конструктив Перебор Строки хэши *2500

Это простая версия задачи. Отличие между версиями заключается в том, что в этой версии вам нужно найти только минимальное количество операций. Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Вам даны \(n\) массивов, каждый из которых имеет длину \(m\). Обозначим \(j\)-й элемент \(i\)-го массива как \(a_{i, j}\). Гарантируется, что все \(a_{i, j}\) попарно различны. За одну операцию вы можете сделать следующее:

  • Выбрать какое-то целое число \(i\) (\(1 \le i \le n\)) и целое число \(x\) (\(1 \le x \le 2 \cdot n \cdot m\)).
  • Для всех целых чисел \(k\) от \(i\) до \(n\) в порядке возрастания сделать следующее:
    1. Добавить элемент \(x\) в начало \(k\)-го массива.

    2. Присвоить \(x\) значение, равное последнему элементу в \(k\)-м массиве.

    3. Удалить последний элемент из \(k\)-го массива.

Другими словами, вы можете вставить элемент в начало любого массива, после чего все элементы в этом и всех следующих массивах сдвигаются на один вправо. При этом последний элемент последнего массива удаляется.

Также вам дано описание массивов, которые необходимо получить после всех операций. То есть после выполнения операций \(j\)-й элемент в \(i\)-м массиве должен быть равен \(b_{i, j}\). Гарантируется, что все \(b_{i, j}\) попарно различны.

Определите минимальное количество операций, которое необходимо выполнить, чтобы получить нужные массивы.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 3 \cdot 10^5\)) — количество массивов и количество элементов в каждом массиве.

\(i\)-я из следующих \(n\) строк содержит \(m\) целых чисел \(a_{i, 1}, a_{i, 2}, \ldots, a_{i, m}\) (\(1 \le a_{i, j} \le 2 \cdot n \cdot m\)) — элементы в \(i\)-м изначальном массиве. Гарантируется, что все \(a_{i, j}\) попарно различны.

\(i\)-я из следующих \(n\) строк содержит \(m\) целых чисел \(b_{i, 1}, b_{i, 2}, \ldots, b_{i, m}\) (\(1 \le b_{i, j} \le 2 \cdot n \cdot m\)) — элементы в \(i\)-м конечном массиве. Гарантируется, что все \(b_{i, j}\) попарно различны.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите единственное целое число — минимальное количество операций, которые необходимо выполнить.

Примечание

В первом наборе входных данных подходит следующая последовательность из \(3\) операций:

  • Применим операцию к первому массиву с \(x = 1\). Тогда в начало первого массива добавится элемент \(1\), а значение \(x\) станет равным \(6\). Последний элемент удалится, и первый массив будет иметь вид \([1, 2]\). Далее, элемент \(x\) добавляется в начало второго массива, и значение \(x\) становится равным \(4\). Последний элемент второго массива удаляется, и оба массива имеют вид \([1, 2]\) и \([6, 3]\) соответственно после первой операции.
  • Применим операцию ко второму массиву с \(x = 8\). Тогда первый массив не изменится, и оба массива будут иметь вид \([1, 2]\) и \([8, 6]\) соответственно.
  • Применим операцию ко второму массиву при \(x = 7\), тогда оба массива будут иметь необходимый вид \([1, 2]\) и \([7, 8]\) соответственно.

Во втором наборе входных данных получить нужный массив можно только за \(5\) операций.

В третьем наборе входных данных подходит следующая последовательность из \(3\) операций:

  • Применим операцию с \(x = 11\) к первому массиву.
  • Применим операцию с \(x = 12\) ко второму массиву.
  • Применим операцию с \(x = 13\) к третьему массиву.

E2. Хватит гамать (сложная версия)

Конструктив Перебор Строки Структуры данных хэши *2900

Это сложная версия задачи. Отличие между версиями заключается в том, что в этой версии вам нужно вывести все операции, которые нужно сделать. Вы можете делать взломы только в том случае, если решили все версии этой задачи.

Вам даны \(n\) массивов, каждый из которых имеет длину \(m\). Обозначим \(j\)-й элемент \(i\)-го массива как \(a_{i, j}\). Гарантируется, что все \(a_{i, j}\) попарно различны. За одну операцию вы можете сделать следующее:

  • Выбрать какое-то целое число \(i\) (\(1 \le i \le n\)) и целое число \(x\) (\(1 \le x \le 2 \cdot n \cdot m\)).
  • Для всех целых чисел \(k\) от \(i\) до \(n\) в порядке возрастания сделать следующее:
    1. Добавить элемент \(x\) в начало \(k\)-го массива.

    2. Присвоить \(x\) значение, равное последнему элементу в \(k\)-м массиве.

    3. Удалить последний элемент из \(k\)-го массива.

Другими словами, вы можете вставить элемент в начало любого массива, после чего все элементы в этом и всех следующих массивах сдвигаются на один вправо. При этом последний элемент последнего массива удаляется.

Также вам дано описание массивов, которые необходимо получить после всех операций. То есть после выполнения операций \(j\)-й элемент в \(i\)-м массиве должен быть равен \(b_{i, j}\). Гарантируется, что все \(b_{i, j}\) попарно различны.

Определите минимальное количество операций, которое необходимо выполнить, чтобы получить нужные массивы, а также выведите саму последовательность всех операций.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. Первая строка содержит одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n\) и \(m\) (\(1 \le n, m \le 3 \cdot 10^5\)) — количество массивов и количество элементов в каждом массиве.

\(i\)-я из следующих \(n\) строк содержит \(m\) целых чисел \(a_{i, 1}, a_{i, 2}, \ldots, a_{i, m}\) (\(1 \le a_{i, j} \le 2 \cdot n \cdot m\)) — элементы в \(i\)-м изначальном массиве. Гарантируется, что все \(a_{i, j}\) попарно различны.

\(i\)-я из следующих \(n\) строк содержит \(m\) целых чисел \(b_{i, 1}, b_{i, 2}, \ldots, b_{i, m}\) (\(1 \le b_{i, j} \le 2 \cdot n \cdot m\)) — элементы в \(i\)-м конечном массиве. Гарантируется, что все \(b_{i, j}\) попарно различны.

Гарантируется, что сумма \(n \cdot m\) по всем наборам входных данных не превосходит \(3 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите в первой строке единственное целое число — минимальное количество операций, которые необходимо выполнить.

Далее, для каждой операции выведите два целых числа \(i\) и \(x\) (\(1 \le i \le n\), \(1 \le x \le 2 \cdot n \cdot m\)) — номер массива, куда вставляется элемент, и значение элемента, соответственно.

Если существует несколько возможных последовательностей с минимальным количеством операций, выведите любую из них.

Примечание

В первом наборе входных данных подходит следующая последовательность из \(3\) операций:

  • Применим операцию к первому массиву с \(x = 1\). Тогда в начало первого массива добавится элемент \(1\), а значение \(x\) станет равным \(6\). Последний элемент удалится, и первый массив будет иметь вид \([1, 2]\). Далее, элемент \(x\) добавляется в начало второго массива, и значение \(x\) становится равным \(4\). Последний элемент второго массива удаляется, и оба массива имеют вид \([1, 2]\) и \([6, 3]\) соответственно после первой операции.
  • Применим операцию ко второму массиву с \(x = 8\). Тогда первый массив не изменится, и оба массива будут иметь вид \([1, 2]\) и \([8, 6]\) соответственно.
  • Применим операцию ко второму массиву при \(x = 7\), тогда оба массива будут иметь необходимый вид \([1, 2]\) и \([7, 8]\) соответственно.

Во втором наборе входных данных получить нужный массив можно только за \(5\) операций.

В третьем наборе входных данных подходит следующая последовательность из \(3\) операций:

  • Применим операцию с \(x = 11\) к первому массиву.
  • Применим операцию с \(x = 12\) ко второму массиву.
  • Применим операцию с \(x = 13\) к третьему массиву.

G. Кевин и команды

графы интерактив Конструктив *2900

Это интерактивная задача.

У Кевина есть \(n\) одноклассников, пронумерованных \(1, 2, \ldots, n\). Каждая пара одноклассников может быть либо друзьями, либо нет.

Кевин хочет выбрать \(2k\) одноклассников, чтобы сформировать \(k\) команд, где в каждой команде будет ровно по \(2\) человека. Каждый человек может принадлежать не более чем к одной команде.

Пусть \(u_i\) и \(v_i\) — два человека в \(i\)-й команде. Чтобы избежать потенциальных конфликтов, команды должны удовлетворять одному из двух условий:

  • Для всех команд \(i\) (\(1\leq i \leq k\)), одноклассники \(u_i\) и \(v_i\) являются друзьями.
  • Для всех команд \(i\) (\(1\leq i \leq k\)), одноклассники \(u_i\) и \(v_i\) не являются друзьями.

Кевин хочет определить максимальное число \(k\), такое, что независимо от дружеских отношений между \(n\) одноклассниками, он всегда сможет найти \(2k\) человек для формирования команд. Далее ему нужно сформировать \(k\) команд. Но спрашивать, дружат ли два одноклассника, неудобно, поэтому Кевин хочет добиться этого, спросив о статусе дружбы не более чем у \(n\) пар одноклассников.

Интерактор является адаптивным. Это означает, что скрытые отношения между одноклассниками не фиксируются до взаимодействия и будут меняться во время взаимодействия.

Протокол взаимодействия

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое положительное число \(n\) (\(2\leq n \leq 10^5\)) — количество одноклассников.

Сначала вы должны вывести целое число \(k\) (\(1\leq k\leq \frac{n}2\)) — максимальное количество команд, которое вы можете сформировать.

Вы можете задавать вопросы. Для этого выведите строку вида \(?\;u\;v\), где \(1\leq u\neq v \leq n\). После этого прочитайте одно число \(0\) или \(1\) — являются ли они друзьями. \(1\) означает, что они друзья, а \(0\) означает, что нет.

Если вы хотите вывести ответ, выведите \(!\;u_1\;v_1\;u_2\;v_2\;\ldots\;u_k\;v_k\). Вы должны вывести ровно \(2k\) различных чисел. Затем взаимодействие продолжается со следующим набором входных данных.

Вы можете сделать не более \(n\) запросов. Вывод ответа не учитывается при подсчете количества выполненных запросов.

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(10^5\).

После вывода каждого запроса не забудьте вывести перевод строки и сбросить буфер вывода\(^{\text{∗}}\). В противном случае вы получите вердикт Решение «зависло».

На любом шаге взаимодействия, если вы считали \(-1\) вместо корректных данных, ваше решение должно немедленно завершиться. Это означает, что ваше решение получит вердикт Неправильный ответ из-за некорректного запроса или любой другой ошибки. Если программа не завершится, вы можете получить любой вердикт, так как ваша программа продолжит чтение из закрытого потока.

Взломы

Интерактор для взломов не является адаптивным. Чтобы произвести взлом, используйте следующий формат.

Первая строка содержит слово «manual».

Вторая строка содержит единственное целое число \(t\) (\(1\leq t \leq 10^4\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(2\leq n \leq 10^5\)) — количество одноклассников.

Вторая строка каждого набора входных данных содержит строку \(s\) длины \(\frac{n(n - 1)}{2}\), состоящую из '0' и '1', и указывающую на взаимосвязь между \((1, 2)\), \((1, 3)\), \(\ldots\), \((1, n)\), \((2, 3)\), \((2, 4)\), \(\ldots\), \((2, n)\), \(\ldots\), \((n - 1, n)\). '1' означает дружбу, а '0' означает её отсутствие.

Ниже приведён текст взлома, аналогичный примеру:


manual
2
3
011
5
1011101011

Сумма \(n\) по всем наборам входных данных не должна превосходить \(10^5\).

Существует дополнительное ограничение для взломов: сумма \(\frac{n(n-1)}{2}\) по всем наборам входных данных не должна превосходить \(10^7\).

\(^{\text{∗}}\)Чтобы сбросить буфер вывода, используйте:

  • fflush(stdout) или cout.flush() в C++;
  • sys.stdout.flush() в Python;
  • смотрите документацию для других языков.
Примечание

В первом наборе входных данных:

Кевин утверждает, что он может сформировать \(1\) команду независимо от дружеских отношений между \(3\) людьми.

Кевин спрашивает о дружеских отношениях между \(1\) и \(2\). Жюри отвечает, что они друзья.

Кевин отвечает, что он может сформировать команду из одноклассников \(1\) и \(2\).

Во втором наборе входных данных:

Кевин утверждает, что он может сформировать \(2\) команды независимо от дружеских отношений между \(5\) людьми.

Кевин спрашивает о дружеских отношениях между людьми \((1, 2), (3, 4), (3, 5), (1, 3), (2, 4)\). Жюри отвечает: \(1, 0, 1, 0, 0\).

Кевин отвечает, что он может сформировать две команды из людей \((1, 2)\) и \((3, 5)\).

Также возможно сформировать две команды из людей \((1, 3)\) и \((2, 4)\), поскольку обе пары не являются друзьями.

A. Строка

жадные алгоритмы Конструктив математика Строки *800

Вам дана строка \(s\) длины \(n\), состоящая из символов \(\mathtt{0}\) и \(\mathtt{1}\). За одну операцию вы можете выбрать непустую подпоследовательность \(t\) из \(s\), такую, что любые два соседних символа \(t\) различны. Затем вы инвертируете каждый символ в \(t\) (\(\mathtt{0}\) становится \(\mathtt{1}\), а \(\mathtt{1}\) становится \(\mathtt{0}\)). Например, если \(s=\mathtt{\underline{0}0\underline{101}}\) и \(t=s_1s_3s_4s_5=\mathtt{0101}\), то после операции \(s\) станет \(\mathtt{\underline{1}0\underline{010}}\).

Вычислите минимальное количество операций, необходимых для того, чтобы сделать все символы \(s\) равными \(\mathtt{0}\).

Напомним, что для строки \(s = s_1s_2\ldots s_n\), любая строка \(t=s_{i_1}s_{i_2}\ldots s_{i_k}\) (\(k\ge 1\)), где \(1\leq i_1 < i_2 < \ldots <i_k\leq n\), является подпоследовательностью \(s\).

Входные данные

Первая строка ввода содержит одно целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Единственная строка каждого набора входных данных содержит строку \(s\) (\(1\le |s|\le 50\)), где \(|s|\) обозначает длину строки \(s\).

Выходные данные

Для каждого набора входных данных выведите минимальное количество операций, необходимых для изменения всех символов в \(s\) на \(\mathtt{0}\).

Примечание

В первом наборе входных данных вы можете инвертировать \(s_1\). Строка \(s\) станет \(\mathtt{0}\), поэтому ответ равен \(1\).

В четвертом наборе входных данных вы можете выполнить следующие три операции по порядку:

  1. Инвертируйте \(s_1s_2s_3s_4s_5\). Тогда \(s\) станет \(\mathtt{\underline{01010}}\).
  2. Инвертируйте \(s_2s_3s_4\). Тогда \(s\) станет \(\mathtt{0\underline{010}0}\).
  3. Инвертируйте \(s_3\). Тогда \(s\) станет \(\mathtt{00\underline{0}00}\).

Можно показать, что вы не можете изменить все символы в \(s\) на \(\mathtt{0}\) менее чем за три операции, поэтому ответ равен \(3\).

F. Задача котовояжёра

геометрия графы дп жадные алгоритмы Конструктив математика сортировки *2900

Вы — кот, продающий интересные алгоритмические задачи. Сегодня вы хотите прорекламировать свои интересные алгоритмические задачи в \(k\) городах.

Всего есть \(n\) городов, каждый из которых имеет два параметра \(a_i\) и \(b_i\). Между любыми двумя городами \(i,j\) (\(i\ne j\)) есть двусторонняя дорога длиной \(\max(a_i + b_j , b_i + a_j)\). Стоимость пути определяется как сумма длин дорог между каждыми двумя соседними городами вдоль пути.

Для \(k=2,3,\ldots,n\) найдите минимальную стоимость среди всех простых путей, содержащих ровно \(k\) различных городов.

Входные данные

Первая строка входных данных содержит одно целое число \(t\) (\(1 \leq t \leq 1500\)) — количество наборов входных данных.

Первая строка каждого набора входных данных содержит одно целое число \(n\) (\(2 \leq n \leq 3\cdot 10^3\)) — количество городов.

Затем следуют \(n\) строк, \(i\)-я строка содержит два целых числа \(a_i,b_i\) (\(0 \leq a_i,b_i \leq 10^9\)) — параметры города \(i\).

Гарантируется, что сумма \(n^2\) по всем наборам входных данных не превышает \(9\cdot 10^6\).

Выходные данные

Для каждого набора входных данных выведите \(n-1\) целых числа в одной строке. \(i\)-е целое число представляет собой минимальную стоимость при \(k=i+1\).

Примечание

В первом наборе входных данных:

  • Для \(k=2\) оптимальный путь: \(1\to 2\) со стоимостью \(\max(0+1,2+2)=4\).
  • Для \(k=3\) оптимальный путь: \(2\to 1\to 3\) со стоимостью \(\max(0+1,2+2)+\max(0+3,3+2)=4+5=9\).

Во втором наборе входных данных:

  • Для \(k=2\) оптимальный путь: \(1\to 4\).
  • Для \(k=3\) оптимальный путь: \(2\to 3\to 5\).
  • Для \(k=4\) оптимальный путь: \(4\to 1\to 3\to 5\).
  • Для \(k=5\) оптимальный путь: \(5\to 2\to 3\to 1\to 4\).

B. Обновление подпоследовательности

жадные алгоритмы Конструктив сортировки Структуры данных *1100

После того как Маленький Джон несколько сотен раз одалживал у тетушки шурупы для расширения, она решила прийти и забрать неиспользованные.

Но поскольку они являются важной частью домашнего дизайна, Маленький Джон решает спрятать некоторые из них в самых недоступных местах — под экологически чистыми древесными фанерами.

Вам дана последовательность целых чисел \(a_1, a_2, \ldots, a_n\) и отрезок \([l,r]\) (\(1 \le l \le r \le n\)).

Вы должны выполнить следующую операцию над последовательностью ровно один раз.

  • Выберите любую подпоследовательность\(^{\text{∗}}\) последовательности \(a\) и разверните её. Обратите внимание, что подпоследовательность не обязательно должна быть непрерывной.

Формально, выберите любое количество индексов \(i_1,i_2,\ldots,i_k\) так, чтобы \(1 \le i_1 < i_2 < \ldots < i_k \le n\). Затем одновременно измените \(i_x\)-й элемент на оригинальное значение \(i_{k-x+1}\)-го элемента для всех \(1 \le x \le k\).

Найдите минимальное значение \(a_l+a_{l+1}+\ldots+a_{r-1}+a_r\) после выполнения операции.

\(^{\text{∗}}\)Последовательность \(b\) является подпоследовательностью \(a\), если \(b\) может быть получена из \(a\) удалением нескольких (возможно, ни одного или всех) элементов на произвольных позициях.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит три целых числа \(n\), \(l\), \(r\) (\(1 \le l \le r \le n \le 10^5\)) — длина \(a\) и отрезок \([l,r]\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1,a_2,\ldots,a_n\) (\(1 \le a_{i} \le 10^9\)).

Гарантируется, что сумма \(n\) по всем наборам тестовых данных не превышает \(10^5\).

Выходные данные

Для каждого тестового случая выведите минимальное значение \(a_l+a_{l+1}+\ldots+a_{r-1}+a_r\) в отдельной строке.

Примечание

Во втором тестовом случае массив \(a=[1,2,3]\), а интервал \([2,3]\).

После выбора подпоследовательности \(a_1,a_3\) и её разворота, последовательность становится \([3,2,1]\). Затем сумма \(a_2+a_3\) становится равной \(3\). Можно показать, что минимально возможное значение суммы равно \(3\).

A. Скибидус и Амог'у

жадные алгоритмы Конструктив Перебор реализация Строки *800

Скибидус приземляется на чужой планете, где местное племя Амог говорит на языке Амог'у. В Амог'у существуют две формы существительных: единственное и множественное.

Учитывая, что корень существительного записывается как \(S\), две формы записываются следующим образом:

  • Единственное: \(S\) \(+\) «us»
  • Множественное: \(S\) \(+\) «i»

Здесь \(+\) обозначает конкатенацию строк. Например, abc \(+\) def \(=\) abcdef.

Например, когда \(S\) записывается как «amog», то форма единственного числа записывается как «amogus», а форма множественного числа записывается как «amogi». Обратите внимание, что существительные Амог'у могут иметь пустой корень — в частности, «us» является формой единственного числа для «i».

Дано существительное Амог'у в форме единственного числа, пожалуйста, преобразуйте его в соответствующее существительное во множественном числе.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 100\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Единственная строка каждого набора входных данных содержит строку \(W\), которая является существительным Амог'у в единственном числе. Гарантируется, что \(W\) состоит только из строчных английских букв, имеет длину не более \(10\) и заканчивается на «us».

Выходные данные

Для каждого набора входных данных выведите соответствующее существительное во множественном числе на отдельной строке.

E. Скибидус и rizz

жадные алгоритмы Конструктив Строки *1600

С приближением Дня Святого Валентина Скибидус отчаянно нуждается в способе привлечь внимание своей возлюбленной! К счастью, он знает, как это сделать: создать идеальную двоичную строку!

Дана двоичная строка\(^{\text{∗}}\) \(t\), пусть \(x\) представляет количество \(\texttt{0}\) в \(t\), а \(y\) представляет количество \(\texttt{1}\) в \(t\). Тогда её баланс определяется как значение \(\max(x-y, y-x)\).

Скибидус дает вам три целых числа \(n\), \(m\) и \(k\). Он просит вас помочь ему построить двоичную строку \(s\) длиной \(n+m\) из ровно \(n\) символов \(\texttt{0}\) и \(m\) символов \(\texttt{1}\), так что максимальный баланс среди всех её подстрок\(^{\text{†}}\) равен ровно \(k\). Если это невозможно, выведите -1.

\(^{\text{∗}}\)Двоичная строка состоит только из символов \(\texttt{0}\) и \(\texttt{1}\).

\(^{\text{†}}\)Строка \(a\) является подстрокой строки \(b\), если \(a\) может быть получена из \(b\) путем удаления нескольких (возможно, нуля или всех) символов с начала и нескольких (возможно, нуля или всех) символов с конца.

Входные данные

Первая строка содержит целое число \(t\) (\(1 \leq t \leq 10^4\)) — количество наборов входных данных.

Первая и единственная строка каждого набора содержит три целых числа \(n\), \(m\) и \(k\) (\(0 \leq n, m \leq 2\cdot 10^5\), \(1 \leq k \leq n + m\), \(n+m\geq 1\)).

Гарантируется, что сумма \(n\) и сумма \(m\) по всем наборам входных данных не превышают \(2\cdot 10^5\).

Выходные данные

Для каждого набора входных данных, если возможно построить строку \(s\), выведите её на новой строке. Если существует несколько возможных строк \(s\), выведите любую. В противном случае выведите -1 на новой строке.

Примечание

В первом примере мы должны построить \(s\) так, чтобы он содержал одну \(\texttt{0}\), две \(\texttt{1}\) и максимальный баланс \(1\) среди всех её подстрок. Одним из возможных корректных \(s\) является \(\texttt{101}\), потому что:

  • Рассмотрим подстроку, ограниченную индексами \([1, 1]\). Её баланс равен \(\max(0 - 1, 1 - 0) = 1\).
  • Рассмотрим подстроку, ограниченную индексами \([1, 2]\). Её баланс равен \(\max(1 - 1, 1 - 1) = 0\).
  • Рассмотрим подстроку, ограниченную индексами \([1, 3]\). Её баланс равен \(\max(1 - 2, 2 - 1) = 1\).
  • Рассмотрим подстроку, ограниченную индексами \([2, 2]\). Её баланс равен \(\max(1 - 0, 0 - 1) = 1\).
  • Рассмотрим подстроку, ограниченную индексами \([2, 3]\). Её баланс равен \(\max(1 - 1, 1 - 1) = 0\).
  • Рассмотрим подстроку, ограниченную индексами \([3, 3]\). Её баланс равен \(\max(0 - 1, 1 - 0) = 1\).

Среди всех возможных подстрок максимальный баланс равен \(1\).

Во втором примере подстрока с максимальным балансом — это \(0100\), которая имеет баланс \(max(3-1, 1-3)=2\).

B. Белая магия

дп жадные алгоритмы Конструктив реализация Структуры данных *1900

Назовём последовательность чисел \(a_1, a_2, \ldots, a_n\) магической, если для всех \(1 \leq i \leq n-1\) верно, что: \(\operatorname{min}(a_1, \ldots, a_i) \geq \operatorname{mex}(a_{i+1}, \ldots, a_n)\). В частности, любая последовательность длины \(1\) является магической.

Наименьшее исключенное (MEX) набора чисел \(a_1, a_2, \ldots, a_k\) определяется как наименьшее неотрицательное целое число \(t\), которое не встречается в наборе чисел \(a\).

Вам дана последовательность \(a\) из \(n\) целых неотрицательных чисел. Найдите максимально возможную длину магической подпоследовательности\(^{\text{∗}}\) последовательности \(a\).

\(^{\text{∗}}\)Последовательность \(a\) является подпоследовательностью \(b\), если \(a\) может быть получена из \(b\) удалением нескольких (возможно, ни одного или всех) элементов на произвольных позициях.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 10^4\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит целое число \(n\) (\(1 \leq n \leq 2 \cdot 10^5\)) — длину последовательности \(a\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(0 \leq a_i \leq 10^9\)) — элементы последовательности \(a\).

Гарантируется, что сумма \(n\) по всем наборам входных данных не превышает \(2 \cdot 10^5\).

Выходные данные

Для каждого набора входных данных выведите одно число — максимально возможную длину магической подпоследовательности последовательности \(a\).

Примечание

В первом наборе входных данных сама последовательность \([4, 3, 2, 1, 0]\) является магической, так как:

  • \(\operatorname{min}(4) = 4, \operatorname{mex}(3, 2, 1, 0) = 4\). \(4 \geq 4\)
  • \(\operatorname{min}(4, 3) = 3, \operatorname{mex}(2, 1, 0) = 3\). \(3 \geq 3\)
  • \(\operatorname{min}(4, 3, 2) = 2, \operatorname{mex}(1, 0) = 2\). \(2 \geq 2\)
  • \(\operatorname{min}(4, 3, 2, 1) = 1, \operatorname{mex}(0) = 1\). \(1 \geq 1\)

Во втором наборе входных данных последовательность \([4, 3, 3, 2, 1, 0]\) не является магической, так как \(\operatorname{min}(4, 3) = 3, \operatorname{mex}(3, 2, 1, 0) = 4\), \(3 < 4\). Но подпоследовательность \([4, 3, 2, 1, 0]\) этой последовательности является магической, поэтому ответ \(5\).

F. Проклятье

дп Конструктив математика *3300

Вам даны два массива из целых чисел: \(a_1, a_2, \ldots, a_n\) и \(b_1, b_2, \ldots, b_m\)

Вам нужно определить, возможно ли превратить массив \(a\) в массив \(b\), используя следующую операцию некоторое количество раз.

  • Cреди всех непустых подмассивов\(^{\text{∗}}\) \(a\) выбрать любой с максимальной суммой и заменить этот подмассив на произвольный непустой массив целых чисел.

Если это возможно, вам нужно построить любую возможную последовательность операций. Ограничение: в вашем ответе сумма длин массивов, на которые идёт замена, не должна превышать \(n + m\) по всем операциям. А используемые числа по модулю не должны превышать \(10^9\).

\(^{\text{∗}}\)Массив \(a\) является подмассивом массива \(b\), если \(a\) может быть получен из \(b\) удалением нескольких (возможно, ни одного или всех) элементов с начала и нескольких (возможно, ни одного или всех) элементов с конца.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 200\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(n, m\) (\(1 \le n, m \le 500\)) — длины массива \(a\) и \(b\).

Вторая строка каждого набора входных данных содержит \(n\) целых чисел \(a_1, a_2, \ldots, a_n\) (\(-10^6 \le a_i \le 10^6\)) — элементы массива \(a\).

Третья строка каждого набора входных данных содержит \(m\) целых чисел \(b_1, b_2, \ldots, b_m\) (\(-10^6 \le b_i \le 10^6\)) — элементы массива \(b\).

Гарантируется, что сумма значений \(n\) по всем наборам входных данных не превосходит \(500\).

Гарантируется, что сумма значений \(m\) по всем наборам входных данных не превосходит \(500\).

Выходные данные

Для каждого набора входных данных выведите \(-1\), если невозможно преобразовать массив \(a\) в массив \(b\).

Иначе в первой строке выведите число операций \(0 \leq q \leq n + m\). Далее выведите операции в следующем формате в порядке выполнения:

В первой строке выведите три числа \(l, r, k\) (\(1 \leq l \leq r \leq |a|\)). А во второй строке \(k\) целых чисел \(c_1 \ldots c_k\). что означает замену отрезка \(a_l, \ldots, a_r\) на массив \(c_1, \ldots, c_k\).

Сумма \(k\) по всем \(q\) операциям не должна превышать \(n + m\). Также должно быть выполнено \(-10^9 \leq c_i \leq 10^9\).

Вам не нужно минимизировать число операций.

Примечание

В первом тесте изначальный массив изменяется следующим образом.

\(\) [2, -3, 2, 0] \to [2, -3, -3] \to [-3, -3, -3] \to [-3, -7, -3] \to [-3, -7, 0] \(\)

Вы можете выводить или не выводить пустые строки. В примере пустые строки добавлены для удобства.

A. Соседние суммы цифр

Конструктив математика Перебор *800

Дано два числа \(x, y\). Вам нужно определить, существует ли такое положительное число \(n\), что \(S(n) = x\), \(S(n + 1) = y\). Здесь \(S(a)\) обозначает сумму цифр числа \(a\) в десятичной системе счисления.

Входные данные

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число \(t\) (\(1 \le t \le 500\)) — количество наборов входных данных. Далее следует описание наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа \(x, y\) (\(1 \le x \le 1000, 1 \le y \le 1000\)).

Выходные данные

Для каждого набора входных данных выведите «NO», если подходящее \(n\) не существует. Иначе выведите «YES».

Вы можете выводить каждую букву в любом регистре (например, «YES», «Yes», «yes», «yEs» будут распознаны как положительный ответ).

Примечание

В первом тестовом примере подойдёт, например, \(n = 100\). \(S(100) = 1\), \(S(101) = 2\).

Во втором тестовом примере можно показать, что \(S(n) \neq S(n+1)\) для всех \(n\), поэтому ответ No.

В четвёртом тестовом примере подойдёт \(n = 10^{111}-1\), число, состоящее из \(111\) цифр \(9\).

B. Пиксели

Конструктив математика *2100

Во Флатландии живут пиксели трех цветов: красного, зеленого и синего. Известно, что если в кровопролитной битве встречаются два пикселя разных цветов, то после битвы выживает только один из них (то есть общее количество пикселей уменьшается на один). При этом, если в кровопролитной битве встречались пиксели цвета x и y (x ≠ y), то выживший в битве пиксель мгновенно перекрашивается в цвет z (z ≠ xz ≠ y). Пиксели одного цвета дружат, поэтому битв между ними не случается.

Король Флатландии знает, что когда в его владениях останутся пиксели только одного цвета, наступит мир и благодать. Для каждого из трех цветов Вам задано количество пикселей этого цвета, которые живут во Флатландии. Помогите королю, определите, может ли в результате битв пикселей наступить мир и благодать, и если такое возможно, найдите минимальное количество битв для достижения мира и благодати.

Входные данные

В первой строке записано три целых числа через пробел a, b и c (0 ≤ a, b, c ≤ 231a + b + c > 0) — количество пикселей красного, зеленого и синего цвета соответственно.

Выходные данные

Выведите одно число — минимальное количество битв пикселей для достижения мира и благодати. Если достигнуть мира и благодати никак не получится выведите -1.

Примечание

В первом тестовом примере для достижения мира и благодати нужна всего одна битва. Причем это может быть совершенно любая битва. Например, пусть бьются зеленый и синий пиксели, тогда выживший пиксель будет красного цвета. В итоге, после битвы, получится два красных пикселя. Других пикселей не будет.

Во втором тестовом примере возможна следующая последовательность битв: красный с синим, зеленый с красным, красный с синим. В итоге, после всех битв, останется только один зеленый пиксель.

C. Тропинки и полянки

графы жадные алгоритмы Конструктив снм *2400

Вася пришел погулять в парк. В парке есть n полянок пронумерованных от 1 до n. Между полянками есть m тропинок. Тропинки пронумерованы от 1 до m, причем i-ая тропинка соединяет полянки номер xi и yi. Номера соединяемых полянок могут совпадать (xi = yi) — это значит, что тропинка ведет с какой-то полянки на нее же. Также между двумя полянками может быть несколько непересекающихся тропинок.

Вася стоит на полянке номер 1, он хочет прогуляться по всем тропинкам парка ровно один раз, так чтобы в итоге вернуться на полянку номер 1. К сожалению, Вася не знает возможна такая прогулка или нет. Помогите Васе, определите возможна такая прогулка или нет. Если такая прогулка невозможна, найдите, какое минимальное количество тропинок придется дополнительно проложить в парке, чтобы описанная прогулка стала возможной.

Переходить с тропинки на тропинку Вася может только на полянках. По тропинкам можно двигаться в обоих направлениях. Если Вася зашел на тропинку, соединяющую полянки a и b, со стороны полянки a, то он обязан выйти с этой тропинки со стороны полянки b.

Входные данные

В первой строке записано два целых числа n и m (1 ≤ n ≤ 106, 0 ≤ m ≤ 106) — количество полянок в парке и количество тропинок в парке соответственно. В следующих m строках задано описание тропинок. В i-й строке задано описание i-й тропинки — два числа, записанных через пробел, xi, yi (1 ≤ xi, yi ≤ n) — номера полянок, которые эта тропинка соединяет.

Выходные данные

Выведите одно число — ответ на задачу. Если прогулка Васи возможна без строительства дополнительных тропинок выведите 0, иначе выведите минимальное количество тропинок, которые придется дополнительно проложить в парке, чтобы описанная прогулка стала возможной.

Примечание

В первом тестовом примере описанная прогулка возможна и без постройки дополнительных тропинок. Например, сначала можно пройти по первой тропинке, потом по второй и, наконец, по третьей.

Во втором тестовом примере описанная прогулка невозможна без постройки дополнительных тропинок. Чтобы прогулка стала возможной, достаточно построить одну тропинку между полянками номер один и два.

D. Звезды

геометрия Конструктив *2300

Фурик любит рисовать звезды. Звездой назовем фигуру, которая образовывается после проведения всех диагоналей в правильном пятиугольнике.

Недавно он решил научить Рубика рисовать звезды. После долгих лет тренировок Рубик стал с легкостью рисовать звезды. Но теперь Фурик решил проверить Рубика и усложнил задание. Рубик должен нарисовать n звезд следуя таким правилам:

  • все звезды должны быть нарисованы одним движением (то есть нельзя отрывать руку во время рисования);
  • нельзя проходить по одному отрезку ненулевой длины более одного раза;
  • звезды могут пересекаться только по вершинам;
  • длина стороны правильного пятиугольника, в котором построена каждая звезда, должна быть равна 10.

Помогите Рубику с этой нелегкой задачей.

Входные данные

В единственной строке дано целое число (1 ≤ n ≤ 100) — количество звезд, которые надо нарисовать.

Выходные данные

В первой строке выведите целое число m (1 ≤ m ≤ 5·n). В следующих m строках выведите координаты m различных точек с точностью не менее 9 и не более 100 знаков после десятичной точки. Все координаты не должны превышать 5000 по модулю. В следующих n строках выведите по 5 целых чисел — номера точек, которые образовывают данную звезду в порядке обхода по или против часовой стрелки. В следующей строке выведите n + 1 целых чисел — номера точек в порядке, в котором рисует звезды Рубик. То есть если число номер iai, а i + 1ai + 1, то между точками с номерами ai и ai + 1 будет нарисован отрезок.

Считайте, что выведенные m точек пронумерованы от 1 до m в том порядке, в котором они выведены. Числа в строках разделяйте пробельными символами.

Обратите внимание, что правильность ответа проверяется не абсолютно точно. Постарайтесь получить как можно более точное решение. Все вычисления в проверяющей программе выполняются в предположении, что абсолютная погрешность ответа участника не более 10 - 8.

Примечание

Изначальное положение точек в примере:

Порядок, в котором можно рисовать отрезки:

B. Домашнее задание

жадные алгоритмы Конструктив математика Перебор *1600

Фурик очень любит уроки математики, поэтому, в отличии от Рубика, он их не посещает. Но теперь Фурик хочет получить хорошую оценку по математике. Для этого Лариса Ивановна, учительница математики, дала ему новое задание. Фурик сразу же решил эту задачу, а вы сможете?

Задан набор из цифр, вам нужно найти максимальное целое число, которое можно составить из этих цифр. Составленное число должно делиться на 2, 3, 5 без остатка. Можно использовать не все цифры из набора, запрещено использовать лидирующие нули.

Каждую цифру разрешено использовать в числе столько раз, сколько она встречается в наборе.

Входные данные

В первой строке содержится единственное целое число n (1 ≤ n ≤ 100000) — количество цифр в наборе. Во второй строке находится n цифр, цифры разделены единичным пробелом.

Выходные данные

В единственной строке выведите ответ на задачу. Если такого числа не существует, тогда вы должны вывести -1.

Примечание

В первом примере существует только 1 число, которое можно составить — 0. Во втором примере искомое число 5554443330. В третьем примере невозможно составить нужного числа.

A. Горный пейзаж

Конструктив Перебор реализация *1100

Маленький Болек нашел картину, на которой изображены n горных вершин. Изображение n горных вершин представляет собой незамкнутую ломаную, состоящую из 2n отрезков. Отрезки проходят через 2n + 1 точек с координатами (1, y1), (2, y2), ..., (2n + 1, y2n + 1), i-й отрезок соединяет точку (i, yi) и точку (i + 1, yi + 1). Для любого четного i (2 ≤ i ≤ 2n) выполняется yi - 1 < yi и yi > yi + 1.

Назовем вершину ломаной с четной x координатой горным пиком.

На рисунке слева изображена изначальная картина, на рисунке справа изображена картина после действий Болека. Затронутые пики помечены красным, k = 2.

Болек решил похулиганить. Он выбрал ровно k горных пиков, стер отрезки проходящие через эти пики, увеличил высоту каждого выбранного пика на единицу (то есть увеличил координату y соответствующих точек), а затем дорисовал недостающие отрезки так, чтобы получился новый рисунок горных вершин. Обозначим точки, через которые проходит новая ломаная на рисунке, который изменил Болек, через (1, r1), (2, r2), ..., (2n + 1, r2n + 1).

Вам задан полученный Болеком рисунок. Восстановите исходный рисунок.

Входные данные

В первой строке записаны два целых числа через пробел n и k (1 ≤ k ≤ n ≤ 100). В следующей строке записаны 2n + 1 целых чисел через пробел r1, r2, ..., r2n + 1 (0 ≤ ri ≤ 100)y-координаты вершин ломаной на рисунке Болека.

Гарантируется, что данный рисунок можно получить описанными действиями из некоторого рисунка горных вершин.

Выходные данные

Выведите 2n + 1 целых чисел y1, y2, ..., y2n + 1y-координаты вершин ломаной на первоначальном рисунке. Если ответов несколько выведите любой.

B. Маленький Слоник и массив

Конструктив Структуры данных *1800

Маленький Слоник любит играть с массивами. У него есть массив a, состоящий из n целых положительных чисел, пронумерованных от 1 до n. Обозначим число с номером i через ai.

Дополнительно у Маленького Слоника есть m запросов к массиву, каждый запрос описывается парой целых чисел lj и rj (1 ≤ lj ≤ rj ≤ n). Для каждого запроса lj, rj Маленькому Слонику необходимо посчитать количество таких чисел x, что число x встречается ровно x раз среди чисел alj, alj + 1, ..., arj.

Помогите Маленькому Слонику посчитать ответы на все запросы.

Входные данные

В первой строке записаны через пробел два целых числа n и m (1 ≤ n, m ≤ 105) — размер массива a и количество запросов к нему. В следующей строке записаны n целых положительных чисел через пробел a1, a2, ..., an (1 ≤ ai ≤ 109). Следующие m строк содержат описания запросов, по одному на строку. В j-ой из этих строк содержится описание j-го запроса — два целых числа через пробел lj и rj (1 ≤ lj ≤ rj ≤ n).

Выходные данные

В m строках выведите m целых чисел — ответы на запросы. В j-ой строке должен содержаться ответ на j-ый запрос.

A. Башня из игральных костей

жадные алгоритмы Конструктив *1100

Игральная кость — это куб, на гранях которого изображены различные целые числа от 1 до 6 в виде черных точек. При этом сумма чисел на противоположных гранях игральной кости всегда равна 7. Обратите внимание, что под заданные ограничения подходят всего две игральные кости, которые являются зеркальным отражением друг друга (они изображены на рисунке слева).

Алиса и Боб играют в кости. Алиса построила башню из n игральных костей. Известно, что в этой башне соседние игральные кости соприкасаются гранями с разными числами. Боб хочет однозначно определить числа, написанные на гранях всех игральных костей, из которых построена башня. К сожалению, Боб смотрит на башню со стороны, и поэтому он не видит всех чисел на гранях. Боб видит число на вершине башни, а также числа на двух соседних боковых сторонах (то, что видно Бобу, показано на рисунке справа).

Помогите Бобу, скажите, можно ли по данной информации однозначно определить числа на всех гранях игральных костей, из которых сложена башня, или нет?

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 100) — количество игральных костей в башне.

Во второй строке записано целое число x (1 ≤ x ≤ 6) — число, которое видит Боб на вершине башни. В следующих n строках записаны по два целых числа через пробел: в i-ой строке записаны числа ai, bi (1 ≤ ai, bi ≤ 6; ai ≠ bi) — числа, которые видит Боб на боковых гранях i-ой игральной кости башни.

Считайте, что кости в башне пронумерованы сверху вниз от 1 до n. То есть самая верхняя игральная кость имеет номер 1 (та кость, верхнюю грань которой видит Боб). Гарантируется, что можно составить башню из игральных костей, которая будет иметь заданный во входных данных вид.

Выходные данные

Выведите «YES» (без кавычек), если можно однозначно определить числа на всех гранях всех игральных костей башни. Если этого сделать нельзя — выведите «NO» (без кавычек).

D. Всего лишь таблица

жадные алгоритмы Конструктив *2100

Гарри Поттеру задали сложное домашнее задание. Дана прямоугольная таблица, размера n × m клеток. В каждой клетке таблицы записано целое число. Гарри умеет применять два заклинания: первое меняет знак у каждого из чисел в выбранной мальчиком строке, второе — в выбранном столбце. Задача Гарри, используя эти заклинания, сделать так, чтобы сумма чисел в каждой строке и в каждом столбце стала неотрицательна.

В одиночку мальчику не справиться. Помогите юному волшебнику!

Входные данные

В первой строке записаны два числа n и m (1 ≤ n,  m ≤ 100) — количество строк и столбцов таблицы.

Далее следуют n строк, в каждой по m целых чисел: j-е число в i-й строке равно числу ai, j (|ai, j| ≤ 100), стоящему на пересечении j-го столбца и i-й строки таблицы.

Строки таблицы нумеруются от 1 до n. Столбцы таблицы нумеруются от 1 до m.

Выходные данные

В первую строку выведите число a — количество требуемых применений первого заклинания. Далее через пробел выведите a чисел: номера строк, к которым требуется применить заклинание. Номера строк не должны повторяться!

Во вторую строку выведите число b — количество требуемых применений второго заклинания. Далее через пробел выведите b чисел: номера столбцов, к которым требуется применить заклинание. Номера столбцов также не должны повторяться!

Если существует несколько решений, разрешается вывести любое.

B. Вечеринка

графы Конструктив математика *1600

На вечеринку пришли N человек. Затем те, у кого не было знакомых среди пришедших, ушли. Затем те, у кого был ровно 1 знакомый среди оставшихся, тоже ушли. Затем аналогично поступали те, у кого было ровно 2, 3, ..., N - 1 знакомых среди оставшихся к моменту их ухода.

Какое наибольшее число людей могло в итоге остаться?

Входные данные

В первой строке входного файла содержится одно число T — количество тестов (1 ≤ T ≤ 105). В каждой из следующих T строк записано одно целое число N (1 ≤ N ≤ 105).

Выходные данные

Для каждого теста выведите в отдельной строке одно число — наибольшее количество людей, которое могло остаться.

C. Апельсины и яблоки

Конструктив сортировки *2500

В 2N - 1 ящике лежат яблоки и апельсины. Требуется выбрать N ящиков так, что в них окажется не менее половины всех яблок и не менее половины всех апельсинов.

Входные данные

В первой строке входного файла содержится одно число T — количество тестов. Описание каждого теста начинается с натурального числа N — количества ящиков. Далее в каждой из следующих 2N - 1 строке записаны числа ai и oi — количество яблок и апельсинов в i-ом ящике (0 ≤ ai, oi ≤ 109). Сумма N по всем тестам во входных данных не превышает 105. Все числа во входных данных целые.

Выходные данные

Для каждого теста выведите две строки. В первой строке выведите YES, если возможно выбрать N ящиков, или NO — в противном случае. В случае положительного ответа во второй строке выведите N чисел — номера выбранных ящиков. Ящики нумеруются с 1 в том порядке, в котором они заданы во входных данных. Иначе оставьте вторую строку пустой. Разделяйте числа одним пробелом.

B. Магия, волшебство и чудеса

жадные алгоритмы Конструктив *1500

Великий Маг и Волшебник Вася очень любит всяческие чудеса и чародейство. Одним взмахом волшебной палочки он умеет превращать одни предметы в какие-нибудь иные. Но, как вы все прекрасно знаете, нет большей магии во Вселенной, чем магия чисел. Именно поэтому Вася очень любит математику и много время проводит, превращая одни числа в другие числа.

Сегодня утром перед ним лежат в ряд n карточек с целыми числами, каждое из которых не меньше 1, но и не больше l. Когда Вася взмахивает волшебной палочкой, то из ряда исчезают две самые правые карточки, а на их месте волшебным образом возникает новая карточка, на которой написана разность левого из исчезнувших чисел и правого. Васе было очень интересно узнать, что будет происходить дальше, и поэтому он махал и махал волшебной палочкой, пока на столе не осталась единственная карточка.

Предположим, что перед Васей изначально лежали такие карточки: 4, 1, 1, 3 (перечислены слева направо). Тогда после первого взмаха на столе будет: 4, 1, -2; после второго: 4, 3; и после третьего на столе останется единственная карточка с числом 1.

Обратите внимание, что несмотря на то, что изначально все числа на карточках были не меньше 1 и не больше l, числа на появившихся карточках могут быть любыми, никаких ограничений на них не накладывается.

Сейчас уже вечер. Вася очень устал и захотел вернуть все обратно, однако совершенно не помнит, какие карточки у него были утром. Он только помнит, что их было n штук, на них были написаны целые числа от 1 до l, и после всех волшебных действий у него осталась единственная карточка с числом d.

Помогите Васе восстановить набор карточек с числами.

Входные данные

В единственной строке через пробел записаны три целых числа: n (2 ≤ n ≤ 100) — начальное количество карточек на столе, d (|d| ≤ 104) — число на карточке, которая осталась на столе после всех магических действий, и l (1 ≤ l ≤ 100) — ограничение на начальные числа.

Выходные данные

Если Вася ошибся, то есть не существует ни одного набора, удовлетворяющего условию, то выведите единственное число -1, в противном случае выведите искомый набор из n целых чисел в пределах от 1 до l. Числа разделяйте пробелами. Числа выводите в том порядке, в котором они были записаны на карточках слева направо. Если существует несколько подходящих наборов чисел, то можете вывести любой из них.

A. Циклы

Бинарный поиск графы жадные алгоритмы Конструктив *1600

Джон Доу задумался о графах. После раздумья он понял, что хочет нарисовать неориентированный граф, в котором будет ровно k циклов длины 3.

Цикл длины 3 — это неупорядоченная тройка различных вершин графа a, b и c, таких, что каждая пара из них соединена ребром графа.

Джон долго рисовал, но у него ничего не получилось. Помогите ему найти такой граф. Обратите внимание, чтобы Джон смог без проблем за день нарисовать найденный граф, количество вершин в найденном графе не должно превышать 100.

Входные данные

В единственной строке записано целое число k (1 ≤ k ≤ 105) — количество циклов длины 3 в искомом графе.

Выходные данные

В первой строке выведите целое число n (3 ≤ n ≤ 100) — количество вершин в найденном графе. В следующих n строках выведите по n символов «0» и «1»: i-тый символ j-той из этих строк должен быть равен «0», если между вершинами i и j нет ребра и «1» в противном случае. Обратите внимание, так как искомый граф неориентированный, i-тый символ j-той строки должен быть равен j-тому символу i-той строки. Граф не должен содержать петель, поэтому i-тый символ i-той строки должен быть равен «0» для всех i.

C. Графы Доу

графы дп Конструктив кратчайшие пути разделяй и властвуй *2600

Джон Доу решил, что в его честь должен быть назван какой-нибудь математический объект и изобрел графы Доу. Графы Доу — это семейство неориентированных графов, каждый из которых характеризуются единственным целым неотрицательным числом — порядком.

Граф Доу порядка k обозначим за D(k), за |D(k)| обозначим количество вершин в графе D(k). Тогда определим графы Доу следующим образом:

  • D(0) состоит из единственной вершины, которая имеет номер 1.
  • D(1) состоит из двух вершин с номерами 1 и 2, соединенных ребром.
  • D(n) для n ≥ 2 получается из графов D(n - 1) и D(n - 2). D(n - 1) и D(n - 2) объединяются в один граф, при этом номера всех вершин графа D(n - 2) увеличиваются на |D(n - 1)| (например, вершина номер 1 графа D(n - 2) становится вершиной номер 1 + |D(n - 1)|). После этого в граф добавляются два ребра: первое — между вершинами с номерами |D(n - 1)| и |D(n - 1)| + 1, второе — между вершинами с номерами |D(n - 1)| + 1 и 1. Обратите внимание, что из определения графа D(n) следует, что D(n) является связным графом, вершины которого пронумерованы от 1 до |D(n)|.
На рисунке изображены, слева-направо, графы Доу порядка 1, 2, 3 и 4.

Графы Доу, по мнению Джона, хороши прежде всего тем, что для них существует полиномиальный алгоритм поиска Гамильтонова пути. Однако от Вас требуется отвечать на запросы о нахождении кратчайшего по длине пути между вершинами ai и bi в графе D(n).

Путь между парой вершин u и v в графе — это последовательность вершин x1, x2, ..., xk (k > 1) такая, что x1 = u, xk = v, и для любого i (i < k) вершины xi и xi + 1 связаны ребром графа. Длиной пути x1, x2, ..., xk называется число (k - 1).

Входные данные

В первой строке записаны два целых числа t и n (1 ≤ t ≤ 105; 1 ≤ n ≤ 103) — количество запросов и порядок рассматриваемого графа. В i-той из следующих t строк записано два целых числа ai и bi (1 ≤ ai, bi ≤ 1016, ai ≠ bi) — номера двух вершин в i-м запросе. Гарантируется, что ai, bi ≤ |D(n)|.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Для каждого запроса выведите в отдельной строке единственное целое число — длину кратчайшего пути между вершинами ai и bi. Ответы на запросы выводите в том порядке, в котором запросы заданы во входных данных.

G. Тренировки

Конструктив разделяй и властвуй реализация *1600

До ежегодного чемпионата Берляндии по футболу осталось совсем немного времени. Поэтому тренер «Мясгазочки» решил возобновить тренировки, прерванные по неопределенным причинам на неопределенный срок. Всего в «Мясгазочке» играет n футболистов. У каждого футболиста в команде есть номер — уникальное целое число от 1 до n. Для подготовки к чемпионату тренер Калич Евгеньевич решил провести некоторое количество тренировок.

Над тем, как нужно проводить тренировки, Калич Евгеньевич думал долгими ночами своего отпуска. Он пришел к очень сложной схеме тренировок. Каждая тренировка состоит из одной игры, в которой участвуют все n игроков команды. Игроки некоторым образом разбиваются на две команды. При этом в командах может быть разное количество игроков, но в каждой из команд должно оказаться хотя бы по одному игроку.

Тренер стремится к тому, чтобы после серии тренировок для каждой пары игроков существовала хотя бы одна тренировка, во время которой они играли в разных командах. Поскольку силы игроков ограничены, тренер хочет достигнуть цели за наименьшее число тренировок.

Помогите ему составить расписание тренировок.

Входные данные

В единственной строке входного файла находится целое число n (2 ≤ n ≤ 1000).

Выходные данные

В первой строке выведите m — наименьшее количество тренировок, которое придется провести тренеру. Затем выведите описания тренировок в m строках.

В i-ой из этих строк выведите fi — количество игроков в первой команде во время i-й тренировки (1 ≤ fi < n), и fi чисел от 1 до n — номера игроков в первой команде. Все остальные игроки во время этой тренировки будут играть во второй команде. Числа в строке разделяйте пробелами. Номера игроков выводите в любом порядке. Если оптимальных решений несколько, выведите любое из них.

H. Слияние двух колод

жадные алгоритмы Конструктив *2000

У вас на столе лежат две колоды карт, причем некоторые карты в этих колодах лежат рубашкой вверх, а некоторые — рубашкой вниз. Вы хотите получить из них одну колоду, в которой каждая карта лежит рубашкой вверх. Вы собираетесь сделать это в два этапа.

Первый этап заключается в слиянии обеих колод в одну так, что относительный порядок карт из одной и той же колоды не изменяется. То есть для любых двух различных карт i и j из одной колоды, если карта i лежала выше карты j, то после слияния карта i так же должна лежать выше карты j.

Второй этап заключается в выполнении над полученной после первого этапа колодой операций переворота. За одну операцию переворота вы можете взять несколько верхних карт, целиком перевернуть и положить обратно. Таким образом, переворачивается каждая из взятых карт, а порядок этих карт меняется на противоположный. То есть, самая нижняя карта из тех, что вы взяли, окажется сверху.

Ваша цель — добиться того, чтобы все карты стали лежать рубашкой вверх. Найдите такой такой порядок слияния карт на первом этапе и последовательность операций переворота на втором этапе, чтобы все карты лежали рубашкой вверх, а количество операций переворота было минимальным.

Входные данные

В первой строке входных данных находится единственное целое число n — количество карт в первой колоде (1 ≤ n ≤ 105).

Во второй строке входных данных находится n целых чисел, разделенных одиночными пробелами a1, a2, ..., an (0 ≤ ai ≤ 1). Значение ai равно 0, если i-я карта лежит рубашкой вверх, и 1, если карта лежит рубашкой вниз. Карты заданы в порядке от самой верхней к самой нижней.

В третьей строке входных данных находится целое число m — количество карт во второй колоде (1 ≤ m ≤ 105).

В четвертой строке входных данных находится m целых чисел, разделенных одиночными пробелами b1, b2, ..., bm (0 ≤ bi ≤ 1). Значение bi равно 0, если i-я карта лежит рубашкой вверх, и 1, если карта лежит рубашкой вниз. Карты заданы в порядке от самой верхней к самой нижней.

Выходные данные

В первую строку выведите n + m целых чисел, разделенных пробелом — номера карт в том порядке, в котором они будут находиться после первого этапа. Перечисляйте карты от самой верхней к самой нижней. Картам первой колоды должны соответствовать их номера от 1 до n в порядке от самой верхней карты к самой нижней, а картам второй колоды должны соответствовать их номера, увеличенные на n, то есть числа от n + 1 до n + m в порядке от самой верхней карты во второй колоде к самой нижней.

Во второй строке выведите одно целое число x — минимальное количество операций переворота, которое необходимо выполнить, чтобы все карты в колоде лежали рубашкой вверх. В третьей строке выведите x целых чисел: c1, c2, ..., cx (1 ≤ ci ≤ n + m), каждое из которых означает, сколько карт следует взять сверху колоды для выполнения очередной операции переворота. Операции выводите в том порядке, в котором их надо выполнять.

Если оптимальных решений несколько, выведите любой из них. Гарантируется, что минимальное количество операций не превышает 6·105.

A. Шерстяная Последовательность

Конструктив математика *1300

Последовательность неотрицательных целых чисел a1, a2, ..., an длины n называется шерстяной последовательностью тогда и только тогда, когда существует два целых числа l и r (1 ≤ l ≤ r ≤ n), таких, что . Иными словами, шерстяная последовательность содержит подпоследовательность из последовательных элементов, xor которых равен 0.

Выражение означает применение побитовой операции xor к числам x и y. Данная операция существует во всех современных языках программирования, например, в языках C++ и Java она обозначена как «^», в Pascal — как «xor».

В этой задаче Вас попросили подсчитать количество последовательностей, составленных из n чисел от 0 до 2m - 1, не являющихся шерстяными последовательностями. Выведите это количество по модулю 1000000009 (109 + 9).

Входные данные

Единственная строка входных данных содержит через пробел целые числа n и m (1 ≤ n, m ≤ 105).

Выходные данные

В единственной строке выходных данных выведите искомое количество последовательностей по модулю 1000000009 (109 + 9).

Примечание

Последовательности длины 3, сделанные из целых чисел 0, 1, 2 и 3, не являющиеся шерстяными последовательностями, таковы: (1, 3, 1), (1, 2, 1), (2, 1, 2), (2, 3, 2), (3, 1, 3) и (3, 2, 3).

B. Скучное Разбиение

Конструктив *1800

Эта задача самая скучная из всех, которые Вы когда-либо видели.

Дана последовательность целых чисел a1, a2, ..., an и неотрицательное целое число h, наша задача — разбить последовательность на две подпоследовательности (не обязательно состоящие из подряд идущих элементов). Каждый элемент исходной последовательности должен содержаться ровно в одной из полученных подпоследовательностей. Заметьте, что одна из полученных подпоследовательностей может быть пустой.

Определим функцию f(ai, aj), аргументами которой являются два различных элемента (то есть, i ≠ j) исходной последовательности. Если ai и aj находятся в одной и той же подпоследовательности в текущем разбиении, f(ai, aj) = ai + aj в противном случае f(ai, aj) = ai + aj + h.

Рассмотрим все возможные значения функции f для некоторого разбиения. Назовем хорошестью данного разбиения разность между максимальным значением функции f и минимальным значением функции f.

Ваша задача — найти разбиение данной последовательности a, которое имеет минимально возможную хорошесть среди всех возможных разбиений.

Входные данные

Первая строка входных данных содержит целые числа n и h (2 ≤ n ≤ 105, 0 ≤ h ≤ 108). Во второй строке записан список n целых чисел через пробел, обозначающих a1, a2, ..., an (0 ≤ ai ≤ 108).

Выходные данные

Первая строка выходных данных должна содержать искомую минимальную хорошесть.

Вторая строка описывает оптимальное разбиение. Выведите n разделенных пробелами целых чисел: i-ое целое число равняется 1, если ai находится в первой подпоследовательности, в противном случае оно должно равняться 2.

Если есть несколько возможных правильных ответов, Вам разрешается вывести любой.

Примечание

В первом примере значения f таковы: f(1, 2) = 1 + 2 + 2 = 5, f(1, 3) = 1 + 3 + 2 = 6 и f(2, 3) = 2 + 3 = 5. Таким образом, разность между максимальным и минимальным значением f равняется 1.

Во втором примере значение h велико, следовательно, лучше оставить одну из подпоследовательностей пустой.

G. Challenging Balloons

Конструктив *1900

Martha — as a professional problemsetter — proposed a problem for a world-class contest. This is the problem statement:

Tomorrow is Nadia's birthday, and Bardia (her brother) is assigned to make the balloons ready!

There are n balloons (initially empty) that are tied to a straight line on certain positions x1, x2, ..., xn. Bardia inflates the balloons from left to right. As a result, i-th balloon gets bigger and bigger until its radius reaches the pressure endurance pi or it touches another previously-inflated balloon.

While Bardia was busy with the balloons, he wondered "What will be the sum of radius of balloons after all of the balloons are inflated?". Being a nerdy type of guy, he is now thinking about the problem instead of preparing his sister's birthday. Calculate the answer to Bardia's problem so that Nadia's birthday won't be balloon-less.

Artha — Martha's student — claimed his solution got accepted. Martha (being his teacher for a long time!) knew he couldn't have solved the problem for real and thus thinks there is something wrong with the testcases. Artha isn't anyhow logical, which means there is no way for Martha to explain the wrong point in his algorithm. So, the only way is to find a testcase to prove him wrong!

Artha's pseudo-code is shown below:

You should output a small testcase for the problem such that Artha's algorithm is incorrect. The algorithm's output is considered correct if it differs from the correct value by no more than 1.

Input

Please pay attention! No input will be given to your program for this problem. So you do not have to read from the input anything.

Output

You should output the generated small testcase (which Artha's solution doesn't get it right). It should be in the following format:

  • First line must contain the only number n (1 ≤ n ≤ 500).
  • The i-th of the next n lines should contain the description of the i-th balloon — two space-separated integers xi, pi (1 ≤ pi ≤ 106, 0 ≤ x1 < x2 < ... < xn ≤ 106).
Note

The testcase depicted in the figure above (just showing how output should be formatted):


4
0 9
6 3
12 7
17 1

D. Восстановление таблицы

жадные алгоритмы Конструктив *1500

Недавно Поликарп изучил операцию «побитового И» (она же — операция «AND») целых неотрицательных чисел. Теперь он хочет продемонстрировать учителю информатики в школе свое виртуозное владение изученной операцией.

Для этого Поликарп пришел в школу пораньше и записал на доске последовательность целых неотрицательных чисел a1, a2, ..., an. А также квадратную матрицу b размера n × n. Элемент матрицы b, стоящий в i-той строке в j-том столбце (обозначим его bij), равен:

  • «побитовому И» чисел ai и aj (то есть bij = ai & aj), если i ≠ j;
  • -1, если i = j.

Выписав матрицу b, Поликарп очень обрадовался и стер с доски последовательность a. Вот незадача — без этой последовательности учитель не сможет проверить правильно ли Поликарп произвел вычисления. Поликарпу срочно надо восстановить стертую последовательность чисел, иначе он не докажет, что умеет правильно считать.

Помогите Поликарпу, по матрице b восстановите последовательность чисел a1, a2, ..., an, которую он стер с доски. Поликарп не любит большие числа, поэтому каждое число в восстановленной последовательности не должно превышать 109.

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 100) — размер квадратной матрицы b. В следующих n строках записана матрица b. В i-той из этих строк записаны n целых чисел, разделенных пробелами: j-тое число обозначает элемент матрицы bij. Гарантируется, что для всех i (1 ≤ i ≤ n) выполняется bii = -1. Гарантируется, что для всех i, j (1 ≤ i, j ≤ ni ≠ j) выполняется 0 ≤ bij ≤ 109, bij = bji.

Выходные данные

Выведите n целых неотрицательных чисел a1, a2, ..., an (0 ≤ ai ≤ 109) — последовательность, которую стер Поликарп. Выведенные числа разделяйте пробельными символами.

Гарантируется, что существует последовательность a, удовлетворяющая условиям задачи. Если существует несколько таких последовательностей, разрешается вывести любую.

Примечание

Если вы не знаете, что такое операция «побитовое И», можете прочитать: http://ru.wikipedia.org/wiki/Битовые_операции.

A. Неудачная сортировка

жадные алгоритмы Конструктив сортировки *900

Мальчик Валера изучает алгоритм сортировки массива целых чисел. После изучения теории он перешел к практике. В результате он написал программу, которая сортирует массив из n целых чисел a1, a2, ..., an по неубыванию. Ниже изображен псевдокод программы, которую написал Вася. На вход программе дается число n и массив a.


цикл по переменной i от 1 до n - 1
    цикл по переменной j от i до n - 1
        если (aj > aj + 1), то поменять местами значения элементов aj и aj + 1

Однако Валера мог допустить ошибку, поскольку еще не до конца выучил алгоритм сортировки. Если Валера все-таки ошибся в своей программе, Вам нужно привести контр-пример, для которого его программа будет работать неверно (то есть после выполнения программы, массив не будет отсортирован по неубыванию). Если такого примера для заданного значения n не существует, выведите -1.

Входные данные

Вам задано единственное целое число n (1 ≤ n ≤ 50) — размер сортируемого массива.

Выходные данные

Выведите через пробел n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 100) — контр-пример, для которого алгоритм сортировки Валеры будет неправильно работать. Если невозможно привести контр-пример, удовлетворяющий описанным условиям, выведите -1.

Если существует несколько контр-примеров, состоящих из n чисел, разрешается вывести любой.

C. Конкурс красоты

жадные алгоритмы Конструктив Перебор *1600

У генерала Генералова в батальоне n солдат. Совсем скоро будет проходить солдатский конкурс красоты, который будет длиться k дней. Генералов принял решение, что его батальон будет участвовать в конкурсе. Теперь ему нужно определиться с составом участников.

Все солдаты батальона обладают различной красотой, которая выражается целым положительным числом. Величина ai обозначает красоту i-го солдата.

В каждый день из k дней Генералов должен отправлять на конкурс отряд солдатов. Красота отряда солдатов вычисляется как сумма красот солдатов, которые входят в этот отряд. Генералов хочет удивить жюри конкурса красоты, поэтому в каждый из k дней красота посланного отряда должна быть уникальной. Другими словами все k красот посланных отрядов должны быть различными числами.

Помогите Генералову выбрать k различных по красоте составов для конкурса. Обратите внимание, что Генералов не может не посылать солдат в какой-то из дней, то есть отряд посланных на конкурс солдат никогда не должен быть пустым.

Входные данные

В первой строке заданы два целых числа n, k (1 ≤ n ≤ 50; 1 ≤ k ≤  ) — количество солдат и количество дней в конкурсе соответственно. Во второй строке через пробел заданы целые числа a1, a2, ..., an (1 ≤ ai ≤ 107) — красоты солдат батальона.

Гарантируется, что в батальоне Генералова нет двух солдат с одинаковой красотой.

Выходные данные

Выведите k строк: в i строке выведите описание состава, который будет участвовать в конкурсе в i-ый день. Описание состоит из целого числа ci (1 ≤ ci ≤ n) — количество солдат в отряде в i-ый день конкурса и ci различных целых чисел p1, i, p2, i, ..., pci, i — красоты солдат в отряде в i-ый день конкурса. Красоты солдат разрешается выводить в любом порядке.

Числа в строках разделяйте пробелами. Гарантируется, что существует решение, удовлетворяющее условиям задачи. Если существует несколько ответов, выведите любой из них.

A. Карточки с числами

Конструктив сортировки *1200

У Пети есть 2n карточек, на каждой из которых написано некоторое целое число. Числа на карточках могут совпадать. Пусть все карточки пронумерованы последовательными целыми числами от 1 до 2n. Число, записанное на карточке с номером i, обозначим как ai. Для того, чтобы сыграть с друзьями в одну увлекательную игру, Пете нужно разбить карточки на пары таким образом, чтобы в каждой паре числа на карточках были одинаковы. Помогите Пете это сделать.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 3·105). Во второй строке записана последовательность из 2n положительных целых чисел a1, a2, ..., a2n (1 ≤ ai ≤ 5000) — числа, которые написаны на карточках. Числа в строке разделяются одиночными пробелами.

Выходные данные

Если невозможно разбить карточки на пары так, чтобы в каждой паре на карточках были написаны одинаковые числа, в единственной строке выведите число -1. Если же искомое разбиение существует, то выведите n пар чисел, по одной паре в строке — номера карточек, образующих пары.

Числа в парах разделяйте пробелами. Пары и числа в парах можно выводить в любом порядке. Если решений несколько, выведите любое из них.

C. Паркет

жадные алгоритмы Комбинаторика Конструктив реализация *2000

Однажды Вася решил положить паркет у себя в гостиной, которая имела размеры n × m метров. У Васи были плитки трех типов: a плиток 1 × 2 метра, b плиток 2 × 1 метра и c плиток 2 × 2 метра. Помогите Васе выяснить, получится ли у него положить паркет в гостиной, и если получится, найдите один из возможных способов это сделать. Васе не обязательно использовать все имеющиеся плитки.

Входные данные

В первой строке входных данных через пробел записаны 5 целых чисел n, m, a, b, c (1 ≤ n, m ≤ 100, 0 ≤ a, b, c ≤ 104), n и m — размеры гостиной, a, b и c — соответственно число плиток 1 × 2, 2 × 1 и 2 × 2. Поворачивать плитки не разрешается.

Выходные данные

Если положить паркет, используя имеющиеся плитки, невозможно, выведите IMPOSSIBLE. Иначе выведите один из возможных вариантов паркета в гостиной — выведите n строк по m строчных латинских букв в каждой. Две соседние по стороне клетки должны содержать одинаковые буквы, если эти клетки относятся к одной и той же плитке, и различные буквы в противном случае. Разные плитки могут обозначаться одной и той же буквой (см. примеры). Если решений несколько, выведите любое.

E. Multithreading

Конструктив *2400

Дана следующая параллельная программа. Есть N процессов, i-ый процесс исполняет следующий псевдокод:

repeat ni times
yi := y
y := yi + 1
end repeat

Здесь y — общая переменная. Все остальное для каждого процесса является локальным. Каждое действие, записанное на отдельной строке, является атомарным, т. е. когда процесс исполняет некоторую строку, он не может быть прерван. Все остальные чередования возможны, т. е. каждый еще не завершивший свою работу процесс может получить право выполнить очередную строку своего кода. Вначале y = 0. Вам дано целое число W и ni, для i = 1, ... , N. Определите, возможно ли, что после выполнения всех процессов, y = W, и если это возможно, выведите любой порядок выполнения процессов, который приводит к этому.

Входные данные

В первой строке через пробел записаны два целых числа N (1 ≤ N ≤ 100) и W ( - 109 ≤ W ≤ 109). Во второй строке через пробел записано N целых чисел ni (1 ≤ ni ≤ 1000).

Выходные данные

В первую строку выведите Yes если возможно, что в конце y = W, или No в противном случае. Если ответ No, второй строки быть не должно, но если ответ Yes, во вторую строку выведите через пробел список целых чисел, описывающих некоторый порядок выполнения процессов, который приводит к нужному результату (см. Примечание).

Примечание

Предположим, что в коде процессов нет оператора цикла repeat, а код из тела цикла записан нужное число раз. Процессы пронумерованы начиная с 1. Каждое число из списка обозначает, какой процесс выполняет свое очередное действий на данном шаге. Например, рассмотрим порядок 1 2 2 1 3. Первый процесс 1 выполняет свое первое действие, затем процесс 2 свои первые два действия, потом процесс 1 выполняет свое второе действие, далее процесс 3 свое первое действие. Список должен содержать ровно 2·Σ i = 1...Nni чисел.

C. Коробки и шарики

жадные алгоритмы Конструктив реализация *1700

У маленького мальчика Васи в комнате стояло n коробок с шариками. Коробки стояли в ряд и были пронумерованы числами от 1 до n слева направо.

Однажды Вася выбрал одну из коробок, пусть она имеет номер i, вынул из нее все шарики (гарантируется, что в этой коробке изначально был хотя бы один шарик) и начал класть по одному шарику в коробки с номерами i + 1, i + 2, i + 3 и так далее. Если Вася кладет шарик в коробку номер n, то следующий шарик он положит в коробку 1, затем в коробку 2 и так далее. Так он действовал пока в его руках не осталось ни одного шарика. Возможно, что Вася положит несколько шариков в одну и ту же коробку, а также возможно, что один или несколько шариков попадут в коробку номер i. В случае i = n первый шарик Вася положит в коробку 1, затем в коробку 2 и так далее.

Например, пусть изначально у Васи было четыре коробки, и в первой коробке лежало 3 шарика, во второй — 2, в третьей — 5, в четвертой — 4 шарика. Тогда если i = 3, то Вася вынет все пять шариков из третьей коробки и разложит их в коробки с номерами: 4, 1, 2, 3, 4. После всех действий Васи шарики будут лежать в коробках таким образом: в первой коробке — 4, во второй — 3, в третьей — 1, в четвертой — 6.

На данный момент Вася совсем забыл, как изначально располагались шарики в коробках, но он знает, как они лежат сейчас, и число x — номер коробки, куда он положил последний из вынутых шариков.

Он просит Вас помочь найти начальное расположение шариков в коробках.

Входные данные

В первой строке входных данных находятся два целых числа — n и x (2 ≤ n ≤ 105, 1 ≤ x ≤ n), означающие количество коробок и номер коробки, куда Вася положил последний шарик, соответственно. Во второй строке через пробел записаны n целых чисел a1, a2, ..., an, где число ai (0 ≤ ai ≤ 109, ax ≠ 0) означает количество шариков в коробке номер i после того, как Вася выполнил все действия.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Выведите n целых чисел, где i-ое означает количество шариков в коробке номер i до начала действий Васи. Числа при выводе разделяйте пробелами. Если существует несколько правильных решений, то разрешается вывести любое.

D. Черно-белое дерево

графы Деревья жадные алгоритмы Конструктив снм *2100

На доске нарисован граф-дерево из n вершин. Напомним, что неориентированный граф называется деревом, если он связен и не содержит циклов.

Каждая вершина графа покрашена в черный или белый цвет таким образом, что не существует двух вершин одного цвета, соединенных ребром. На каждом ребре записана его стоимость — неотрицательное целое число.

Плохой мальчик Вася подошел к доске и написал около каждой вершины v число sv — сумму стоимостей всех инцидентных этой вершине ребер, после чего он стер ребра и их стоимости с доски.

Ваша задача — восстановить исходное дерево по цветам вершин и числам sv.

Входные данные

В первой строке входных данных записано единственное целое число n (2 ≤ n ≤ 105) — количество вершин в дереве. Далее в n строках записаны пары разделенных пробелом целых чисел ci, si (0 ≤ ci ≤ 1, 0 ≤ si ≤ 109), где ci означает цвет i-ой вершины (0 — белый, 1 — черный), а si означает сумму стоимостей инцидентных i-ой вершине ребер в нарисованном на доске дереве.

Выходные данные

Выведите описание n - 1 ребер графа-дерева. Каждое описание — это тройка чисел vi, ui, wi (1 ≤ vi, ui ≤ n, vi ≠ ui, 0 ≤ wi ≤ 109), где vi и ui — номера вершин, которые соединяет i-ое ребро, а wi — его стоимость. Обратите внимание, что должно выполняться условие cvi ≠ cui.

Гарантируется, что для любых входных данных существует по крайней мере один соответствующий этим данным граф. Если существует несколько решений, то выведите любое. Ребра разрешается выводить в любом порядке. Числа при выводе разделяйте пробелами.

C. Максим и матрица

дп Конструктив математика *2000

Максим любит заполнять матрицу специальным образом. Ниже приведен псевдокод заполнения матрицы размера (m + 1) × (m + 1):

Максим просит вас посчитать, сколько существует таких чисел m (1 ≤ m ≤ n), что сумма значений ячеек в строке с номером m + 1, полученной матрицы будет равна t.

Выражение (x xor y) обозначает применение операции побитового исключающего «ИЛИ» к числам x и y. Данная операция есть во всех современных языках программирования, например, в языке C++ и Java она обозначается символом «^», в Pascal — «xor».

Входные данные

В единственной строке заданы два целых числа n и t (1 ≤ n, t ≤ 1012, t ≤ n + 1).

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на C++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

В единственную строку выведите целое число — ответ на задачу.

A. Спастись от камней

Конструктив реализация Структуры данных *1200

Жила-была себе мирно в лесу Белка Лисска, но беды приходят неожиданно. С горы падают камни. Изначально Белка Лисска находится на интервале [0, 1]. Потом упадут n камней, а Лисска будет убегать от камней. Камни последовательно пронумерованы от 1 до n в порядке их падения.

Камни всегда падают точно в центр интервала Лисски. Когда Лисска занимает интервал [k - d, k + d] и камень падает в точку k, белочка бежит налево или направо. Если она убежит налево, ее новый интервал будет [k - d, k]. Если побежит направо, ее новый интервал будет [k, k + d].

Вам дана строка s длины n. В строке s i-ый символ — это либо «l», либо «r», то есть, когда падает i-ый камень, Лиска побежит налево или направо, соответственно. Найдите последовательность номеров камней слева направо после того, как упадут все n камней.

Входные данные

Во входных данных содержится единственная строка. Единственная строка содержит строку s (1 ≤ |s| ≤ 106). Каждый символ в s будет либо «l», либо «r».

Выходные данные

Выведите n строк — в i-ой строке надо вывести номер i-го слева камня.

Примечание

В первом примере расположения камней 1, 2, 3, 4, 5 будут , соответственно. Поэтому надо вывести последовательность: 3, 5, 4, 2, 1.

B. Очередь в школе

Конструктив кратчайшие пути Паросочетания реализация *800

На перемене в школьной столовой образовалась очередь из n человек, в которой стоят мальчики и девочки. Изначально ребята встали в таком порядке, в котором они забежали в столовую. Однако через некоторое время мальчикам стало неловко, что они стоят в очереди перед девочками, и они стали каждую секунду пропускать девочек вперед.

Опишем процесс более точно. Пусть позиции в очереди последовательно пронумерованы целыми числами от 1 до n, причем тот, кто стоит на позиции номер 1 обслуживается первым. Тогда, если в момент времени x на i-ой позиции стоит мальчик, а на (i + 1)-ой — девочка, то в момент времени x + 1 на i-ой позиции будет находиться девочка, а на (i + 1)-ой — мальчик. Моменты времени заданы в секундах.

Вам задано расположение ребят в начальный момент времени, определите, как будет выглядеть очередь через t секунд.

Входные данные

В первой строке заданы два целых числа n и t (1 ≤ n, t ≤ 50), обозначающие количество ребят в очереди и время, спустя которое требуется определить, как будет выглядеть очередь.

В следующей строке задана строка s, обозначающая начальную расстановку школьников. Если на i-ой позиции в очереди стоит мальчик, то i-ый символ строки s равен «B», иначе i-ый символ равен «G».

Выходные данные

Выведите строку a, обозначающую расположение ребят в очереди спустя t секунд. Если на i-ой позиции через заданное время будет стоять мальчик, то i-ый символ a должен быть равен «B», иначе он должен быть равен «G».

C. Ниже диагонали

жадные алгоритмы Конструктив математика *2100

Вам задана квадратная матрица, состоящая из n строк и n столбцов. Будем считать, что строки пронумерованы целыми числами от 1 до n сверху вниз, а столбцы пронумерованы целыми числами от 1 до n слева направо. Некоторые клетки матрицы (всего n - 1 клеток) содержат единицы, остальные клетки — нули. Разрешается производить над матрицей следующие операции:

  1. Обменять местами i-ую и j-ую строки матрицы;
  2. Обменять местами i-ый и j-ый столбцы матрицы.

Требуется при помощи данных операций привести матрицу к такому виду, чтобы все единицы стояли в клетках, лежащих ниже главной диагонали. Клетка матрицы, находящаяся на пересечении i-ой строки и j-ого столбца, лежит ниже главной диагонали, если i > j.

Входные данные

В первой строке задано число n (2 ≤ n ≤ 1000) — количество строк и столбцов матрицы. Далее в n - 1 строках заданы позиции единиц, по одной в каждой строке. Каждая позиция описывается двумя целыми числами xk, yk (1 ≤ xk, yk ≤ n), разделенными пробелом. Пара (xk, yk) обозначает, что в клетке матрицы, находящейся на пересечении xk-ой строки и yk-ого столбца, стоит единица.

Гарантируется, что все заданные положения единиц различны.

Выходные данные

Выведите описание действий, которые нужно произвести, чтобы получить матрицу с единицами ниже главной диагонали, в следующем формате.

В первой строке нужно вывести целое неотрицательное число m (m ≤ 105) — количество необходимых действий. Далее в каждой из следующих m строк выведите через пробел три целых числа t, i, j (1 ≤ t ≤ 2, 1 ≤ i, j ≤ n, i ≠ j), где t = 1, если нужно произвести обмен строк, t = 2, если нужно произвести обмен столбцов, а i и j обозначают, соответственно, номера строк или столбцов.

Обратите внимание, что минимизировать количество операций не требуется, однако их число не должно превышать 105. Если существует несколько решений, выведите любое.

C. Красивые множества точек

Конструктив реализация *1500

Манао изобрел новый математический термин — красивое множество точек. Он называет множество точек на плоскости красивым, если выполняются следующие условия:

  1. Координаты каждой точки множества — целые числа.
  2. Для любых двух точек из этого множества, расстояние между ними — нецелое число.

Рассмотрим все точки (x, y), удовлетворяющие неравенствам: 0 ≤ x ≤ n; 0 ≤ y ≤ m; x + y > 0. Выберите из них как можно больше точек, так чтобы все выбранные точки образовывали красивое множество.

Входные данные

В единственной строке записаны два разделенных пробелом целых числа n и m (1 ≤ n, m ≤ 100).

Выходные данные

В первой строке выведите целое число — размер найденного красивого множества k. В следующих k строках выведите по паре разделенных пробелом целых чисел — соответственно x- и y- координаты выбранных в множество точек.

Если существует несколько оптимальных решений, разрешается вывести любое.

Примечание

Рассмотрим первый пример. Расстояние между точками (0, 1) и (1, 2) равно , между (0, 1) и (2, 0) — , между (1, 2) и (2, 0) — . Таким образом, эти точки составляют красивое множество. Красивое множество с больше чем тремя точками из заданных точек выбрать невозможно. Заметьте, что это не единственный возможный ответ.

C. Неисправный Поток

графы жадные алгоритмы Конструктив Потоки *2100

Эмускальд считает себя мастером алгоритмов по нахождению потока. Он только что завершил самую искусную из всех своих программ: она вычисляет максимальный поток в неориентированном графе. Граф состоит из n вершин и m ребер. Вершины пронумерованы от 1 до n. Вершины 1 и n — исток и сток, соответственно.

Однако, его алгоритм максимального потока, похоже, немного неисправен: для каждого ребра он находит только величину потока, протекающего по этому ребру, но не направление, в котором течет поток. Помогите ему для каждого ребра найти направление, в котором должен протекать поток по этому ребру, чтобы в итоге получился корректный максимальный поток.

Более формально: дан неориентированный граф, в котором для каждого неориентированного ребра (ai, bi) задана величина ci. Вы должны ориентировать все ребра так, чтобы выполнялись следующие условия:

  1. для каждой вершины v (1 < v < n), сумма ci входящих ребер равняется сумме ci исходящих ребер;
  2. вершина номер 1 не имеет входящих ребер;
  3. полученный ориентированный граф не имеет циклов.
Входные данные

Первая строка входных данных содержит два целых числа через пробел n и m (2 ≤ n ≤ 2·105, n - 1 ≤ m ≤ 2·105), количество вершин и ребер в графе. Каждая из следующих m строк содержит три целых числа ai, bi и ci (1 ≤ ai, bi ≤ n, ai ≠ bi, 1 ≤ ci ≤ 104) через пробел, которые обозначают неориентированное ребро от ai до bi, по которому протекает в некотором направлении ci единиц потока.

Гарантируется, что не существует двух ребер, соединяющих одни и те же вершины; данный граф связный; решение всегда существует.

Выходные данные

Выведите m строк, в каждой строке должно быть по целому числу di, равному 0, если направление i-го ребра равняется ai → bi (поток протекает от вершины ai к вершине bi), и равному 1 в противном случае. Считайте, что ребра пронумерованы от 1 до m в том порядке, в котором они заданы во входных данных.

Если существует несколько решений, выведите любое из них.

Примечание

В первом тестовом примере 10 единиц потока проходят по пути , а 5 единиц потока проходят прямо от истока к стоку: .

C. Неотсортированная подпоследовательность

жадные алгоритмы Конструктив *1900

Последовательность называется отсортированной, если она является неубывающей или невозрастающей. Например, последовательности [3, 1, 1, 0] и [1, 2, 3, 100] — отсортированы, но последовательность [1, 3, 3, 1] — нет. Вам дана последовательность чисел. Ваша задача — найти ее кратчайшую подпоследовательность, не являющуюся отсортированной.

Подпоследовательность — это последовательность, которая получается из данной путем удаления нуля или более ее элементов.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105). Далее через пробел записано n целых чисел, по модулю не превосходящих 106 — заданная последовательность чисел.

Выходные данные

Если кратчайшей неотсортированной подпоследовательности не существует, выведите 0. Иначе выведите ее длину k, а затем k целых чисел от 1 до n включительно — индексы элементов последовательности, образующих кратчайшую неотсортированную подпоследовательность. Если решений несколько, выведите любое.

C. Секрет

Конструктив реализация *1500

Самый Великий Секрет состоит из n слов, пронумерованных натуральными числами от 1 до n. Секрет требуется разделить между k Хранителями (пронумеруем их натуральными числами от 1 до k), i-ый Хранитель получает непустое множество слов c номерами из множества Ui = (ui, 1, ui, 2, ..., ui, |Ui|). Здесь и далее будем подразумевать, что при записи элементов множества они перечисляются в порядке возрастания.

Скажем, что секрет надежно хранится, если выполняются следующие условия:

  • для любых двух индексов i, j (1 ≤ i < j ≤ k) пересечение множеств Ui и Uj — пустое множество;
  • объединение множеств U1, U2, ..., Uk — это множество (1, 2, ..., n);
  • в каждом множестве Ui его элементы ui, 1, ui, 2, ..., ui, |Ui| не образуют арифметическую прогрессию (в частности должно выполняться |Ui| ≥ 3).

Напомним, что элементы множества (u1, u2, ..., us) образуют арифметическую прогрессию, если существует такое число d, что для всех i (1 ≤ i < s) выполняется: ui + d = ui + 1. Например, элементы множеств (5), (1, 10) и (1, 5, 9) образуют арифметические прогрессии, а множеств (1, 2, 4) и (3, 6, 8) — не образуют.

Вам требуется найти разбиение множества слов на подмножества U1, U2, ..., Uk, чтобы секрет был надежно сохранен, либо указать, что искомого разбиения не существует.

Входные данные

Входные данные состоят из единственной строки, в которой записаны два целых числа n и k (2 ≤ k ≤ n ≤ 106) — количество слов в секрете и количество Хранителей. Числа разделены единственным пробелом.

Выходные данные

Если не существует ни одного способа надежно хранить секрет, то выведите единственное целое число «-1» (без кавычек). Иначе выведите n целых чисел, i-ое из которых означает номер Хранителя, которому принадлежит i-ое слово секрета.

Если существует несколько решений, то выведите любое.

E. Три коня

Конструктив математика теория чисел *2200

В стране коней живут три коня: один серый, другой белый, третий серо-белый. Кони очень забавные животные, поэтому им очень нравятся особенные карточки. На каждой такой карточке должно быть написано два целых числа, первое — вверху карточки, второе — внизу карточки. Обозначим карточку, на которой сверху написано число a, а снизу написано число b как (a, b).

Каждый из трех коней умеет рисовать особенные карточки. Если серому коню показать карточку (a, b), он может нарисовать новую карточку (a + 1, b + 1). Если белому коню показать карточку (a, b) , такую что a и b четные числа, он может нарисовать новую карточку . Если серо-белому коню показать две карточки (a, b) и (b, c), то он может нарисовать новую карточку (a, c).

Поликарп очень хочет получить n особенных карточек (1, a1), (1, a2), ..., (1, an). Для этого Поликарп собирается в страну коней. Он может взять с собой в страну коней ровно одну карточку (x, y), такую что 1 ≤ x < y ≤ m. Сколькими способами он может выбрать эту карточку, чтобы в результате некоторых действий в стране коней он смог получить требуемые карточки?

Поликарп может получать карточки только от коней в результате действий описанных выше. Кроме требуемых карточек, Поликарпу разрешается получить некоторые дополнительные карточки.

Входные данные

В первой строке записаны два целых числа n, m (1 ≤ n ≤ 105, 2 ≤ m ≤ 109). Во второй строке записана последовательность целых чисел a1, a2, ..., an (2 ≤ ai ≤ 109). Обратите внимание, числа в последовательности могут повторяться.

Числа в строках разделяются одиночными пробелами.

Выходные данные

Выведите единственное целое число — ответ на задачу.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на C++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

E. Дима и кони

графы Комбинаторика Конструктив *2200

Дима приехал в страну коней. В стране коней живет n коней. У каждого коня в стране коней есть несколько врагов (отношение вражды симметричное). Страна коней не очень враждебная, поэтому количество врагов каждого коня не превышает трех.

Сейчас в стране коней выборы. Поэтому кони поручили Диме разделить их на две партии. При этом кони хотят, чтобы выполнялось следующее условие: у каждого коня не должно быть более одного врага в своей партии.

Помогите Диме разделить коней на партии. Обратите внимание, что одна из партий может оказаться пустой.

Входные данные

В первой строке записаны два целых числа n, m — количество коней в стране коней и количество пар врагов.

В следующих m строках заданы пары врагов. В i-той строке записаны целые числа ai, bi (1 ≤ ai, bi ≤ nai ≠ bi), которые обозначают, что конь ai враг коня bi.

Считайте, что кони пронумерованы некотором образом от 1 до n. Гарантируется, что у каждого коня не более трех врагов. Никакая пара врагов не задана во входных данных более одного раза.

Выходные данные

Выведите строку, состоящую из n символов: i-тый символ строки должен быть равен «0», если конь номер i будет принадлежать первой партии, иначе этот символ должен быть равен «1».

Если не существует способа разделить коней требуемым образом выведите -1.

B. Выпуклая фигура

Конструктив реализация *1700

Рассмотрим таблицу размера n × m. Изначально все ячейки таблицы закрашены белым цветом. Ленни закрасил некоторые из ячеек (по красней мере, одну) черным. Назовем таблицу выпуклой, если можно пройти от любой черной ячейки до любой другой черной ячейки (разрешено переходить с ячейки на любую из соседних по стороне черных ячеек), изменяя направление не больше одного раза на протяжении пути. На картинке ниже левая таблица выпуклая, а правая — нет, поскольку существуют две ячейки, путь между которыми в любом случае требует более одного изменения направления движения.

Во входных данных задана таблица. Скажите Ленни, является она выпуклой или нет.

Входные данные

Первая строка входных данных содержит два целых числа n и m (1 ≤ n, m ≤ 50) — размер таблицы. В каждой из следующих n строк содержится по m символов «B» или «W». Символ «B» обозначает черную ячейку таблицы, а «W» обозначает белую ячейку таблицы.

Гарантируется, что в таблице содержится хотя бы одна черная ячейка.

Выходные данные

В единственной строке выходных данных выведите «YES», если таблица выпуклая, в противном случае выведите «NO». Кавычки не выводите.

B. Множество точек

геометрия Конструктив *2300

Выпуклость множества точек на плоскости — это размер максимального по размеру подмножества точек, которые образуют выпуклый многоугольник. Ваша задача — построить множество из n точек с выпуклостью ровно m. Никакие три точки не должны лежать на одной прямой.

Входные данные

В единственной строке записано два целых числа n и m (3 ≤ m ≤ 100, m ≤ n ≤ 2m).

Выходные данные

Если решения не существует, выведите «-1». Иначе выведите n пар целых чисел — координаты точек любого множества, выпуклость которого равна m. Координаты не должны по модулю превосходить 108.

C. XOR или OR

Конструктив математика реализация *1500

Необъяснимый народ эти битландцы. Все-то они делают по-своему. У них свой алфавит и свое определение строки.

Битландская строка — это строка, которая состоит только из символов «0» и «1».

BitHaval (мэр Битландии) любит поиграть с битландскими строками. Он берет некоторую битландскую строку a и затем применяет к ней несколько (возможно, ноль) операций. За одну операцию мэр может выбрать любые два соседних символа строки, обозначим один из них через x, второй — через y. После чего он считает две величины p и q: p = x xor y, q = x or y. Далее, один из двух выбранных символов мэр заменяет на p, второй — на q.

Операция xor обозначает операцию битового исключающего ИЛИ. Операция or обозначает операцию битового ИЛИ.

Например, строка 11 может быть за одну операцию преобразована в строку 10 или в строку 01. Строка 1 не может быть преобразована ни в какую другую строку.

Вам заданы две битландские строки a и b. Ваша задача — определить, сможет ли мер за несколько (возможно, ноль) описанных операций получить из строки a строку b.

Входные данные

В первой строке записана битландская строка a, во второй строке записана битландская строка b. Строки могут иметь разную длину.

Гарантируется, что заданные строки состоят только из символов «0» и «1». Строки не пустые, их длина не превышает 106.

Выходные данные

Выведите «YES» — если преобразовать a в b можно, иначе выведите «NO». Кавычки выводить не нужно.

A. Коровки и последовательность

Конструктив реализация Структуры данных *1600

Бесси с коровками играют с последовательностями, и им нужна Ваша помощь. Игра начинается с последовательности, изначально содержащей только одно число 0, во время игры коровки выполняют n операций. Операции бывают следующих типов:

  1. Прибавить целое число xi к каждому из ai первых элементов последовательности.
  2. Добавить целое число ki к концу последовательности (размер последовательности увеличивается на 1).
  3. Удалить последний элемент последовательности. Таким образом, размер последовательности уменьшается на один. Обратите внимание, что эту операцию можно выполнить, только если в последовательности есть по меньшей мере два элемента.

После каждой операции коровкам интересно знать среднее арифметическое всех чисел в последовательности. Помогите им!

Входные данные

Первая строка содержит единственное целое число n (1 ≤ n ≤ 2·105) — количество операций. Следующие n строк описывают операции. Каждая строка начинается с целого числа ti (1 ≤ ti ≤ 3), обозначающего тип операции (см. выше). Если ti = 1, то за ним последуют два целых числа ai, xi (|xi| ≤ 103; 1 ≤ ai). Если ti = 2, то за ним последует единственное целое число ki (|ki| ≤ 103). Если ti = 3, то за ним ничего не последует.

Гарантируется, что все операции корректны (не затрагивают несуществующих элементов) и что в последовательности всегда будет хотя бы одно целое число.

Выходные данные

Выведите n строк, в каждой должно содержаться среднее арифметическое всех чисел в последовательности после выполнения соответствующей операции.

Ответ считается корректным, если абсолютная или относительная погрешность не превышает 10 - 6.

Примечание

Во втором примере последовательность преобразуется следующим образом:

A. Счастливая перестановка

Конструктив математика *1400

Перестановкой p порядка n назовем последовательность p1, p2, ..., pn, состоящую из n различных целых чисел, каждое из которых от 1 до n (1 ≤ pi ≤ n).

Счастливой перестановкой назовем такую перестановку p, что для любого целого i (1 ≤ i ≤ n), выполняется условие ppi = n - i + 1.

Вам дано число n. Найдите какую-нибудь счастливую перестановку p порядка n.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105) — требуемый размер перестановки.

Выходные данные

Выведите «-1» (без кавычек), если счастливой перестановки p порядка n не существует.

Иначе выведите n различных целых чисел p1, p2, ..., pn (1 ≤ pi ≤ n) через пробел — искомая перестановка.

Если существует несколько ответов, разрешается вывести любой из них.

E. Дамский магазин

бпф Конструктив математика *2800

В городе Крайняя Туле открывается дамский магазин. Для подготовки к открытию дамского магазина было куплено n пакетов. Каждый пакет характеризуется суммарным весом предметов ai, которые можно туда положить. Довольно странно, но в такие пакеты нельзя положить набор предметов, суммарный вес которых строго меньше ai. Однако веса товаров, которые будут продаваться в магазине еще не определены. Их-то и требуется сейчас определить.

Нужно найти набор весов товаров p1, p2, ..., pk (1 ≤ p1 < p2 < ... < pk), такой, что:

  1. Любой пакет будет востребован. То есть, для любого i (1 ≤ i ≤ n) найдется набор товаров, такой, что их суммарный вес равен ai. Считается, что имеется неограниченное количество товара каждого веса. А в пакет можно класть несколько товаров одного веса.
  2. Для любого набора товаров с суммарным весом, меньшим либо равным m, существует пакет, в который можно положить этот набор. Аналогично, в набор товаров может входить несколько товаров одинакового веса.
  3. Из всех наборов весов товаров, удовлетворяющих пунктам 1 и 2, нужно найти минимальный набор по количеству весов. Другими словами, значение k должно быть как можно меньше.

Найдите и выведите любой подходящий набор.

Входные данные

В первой строке записаны через пробел целые числа n и m (1 ≤ n, m ≤ 106). Во второй строке записаны через пробел n различных целых чисел a1, a2, ..., an (1 ≤ a1 < a2 < ... < an ≤ m) — вместимости пакетов.

Выходные данные

Выведите «NO» (без кавычек) в первой строке, если не существует набора pi, удовлетворяющего условиям.

Иначе в первой строке выведите «YES» (без кавычек), во второй — целое число k (количество чисел в минимальном по количеству элементов подходящем наборе), в третьей строке выведите через пробел k целых чисел p1, p2, ..., pk (1 ≤ p1 < p2 < ... < pk). Если решений несколько — выведите любое.

D. Муравей на дереве

Деревья Конструктив поиск в глубину и подобное *2000

Дерево — это связный неориентированный граф без циклов. Деревья представляют собой широкий класс графов, интересный не только людям, но и муравьям.

В корне одного дерева стоит муравей. Он видит, что в дереве n вершин, и они соединены n - 1 ребрами так, что от любой вершины можно дойти до любой другой. Лист в дереве — это отличная от корня вершина, которая соединена ровно с одной другой вершиной.

Муравей хочет обойти все вершины дерева и вернуться назад к корню, пройдя по каждому ребру ровно два раза. При этом он хочет обойти все листья в заданном порядке. Ваша задача найти любой возможный путь муравья.

Входные данные

В первой строке записано целое число n (3 ≤ n ≤ 300) — количество вершин в дереве. Далее следует n - 1 строк — описания ребер. Каждое ребро описывается двумя числами — номерами вершин, которые оно соединяет. По каждому ребру можно идти в любом направлении. Вершины нумеруются с 1. Корень дерева имеет номер 1.

На следующей строке задан порядок обхода всех листьев дерева — k целых чисел, где k — количество листьев в дереве. Гарантируется, что этот порядок обхода содержит все листья дерева и только их ровно один раз.

Выходные данные

Если искомого порядка обхода всех n вершин не существует, выведите -1. Иначе выведите 2n - 1 чисел — сам обход. Каждый раз, когда муравей приходит в вершину, выводите номер этой вершины.

E. HQ

*особая задача Конструктив *2500

В известном шуточном языке программирования HQ9+ всего 4 команды. В этой задаче речь пойдет о его подмножестве — языке под названием HQ...

Входные данные

В первой строке входных данных содержится строка длиной от 1 до 106 символов.

Выходные данные

Выведите «Yes» или «No».

Примечание

Остальная часть условия была уничтожена бродячим енотом. Мы приносим свои извинения за доставленные неудобства.

A. Игра на четность

Конструктив *1700

Вы ловите рыбу с белыми медведями Алисой и Робертом. Мишки заскучали ждать, когда заклюет, и придумали игру. Сначала и Алиса, и Роберт пишут по 01-строке (строке, в которой есть только символы «0» и «1») a и b. Затем Вы пробуете трансформировать a в b, используя операции двух типов:

  • Приписать parity(a) к концу строки a. Например, .
  • Убрать первый символ из строки a. Например, . Вы не можете провести эту операцию, если a — пустая строка.

Можно использовать какое угодно количество операций. Вопрос вот в чем: можно ли превратить a в b?

Значение parity 01-строки равняется 1, если в строке нечетное количество символов «1», и 0 в противном случае.

Входные данные

Первая строка содержит строку a, а вторая строка содержит строку b (1 ≤ |a|, |b| ≤ 1000). Обе строки содержат только символы «0» и «1». Здесь |x| обозначает длину строки x.

Выходные данные

Выведите «YES» (без кавычек), если возможно трансформировать a в b, и «NO» (без кавычек) в противном случае.

Примечание

В первом примере действия следующие: 01011 → 1011 → 011 → 0110

B. Вес рыб

жадные алгоритмы Конструктив *1600

Известно, что в Северном Ледовитом океане обитает k видов рыб, пронумерованных от 1 до k. Виды отсортированы по неубыванию веса, который является положительным числом. Пусть вес i-го вида равняется wi, тогда выполняется условие 0 < w1 ≤ w2 ≤ ... ≤ wk.

Медведи Алиса и Роберт поймали несколько рыбок и теперь угадывают, у кого суммарный вес наловленной рыбы больше. Зная пойманные ими виды рыб, определите, может ли общий вес пойманной Алисой рыбы быть строго больше общего веса рыбы Роберта. Иными словами, существует ли последовательность значений весов — чисел wi (не обязательно целых), такая, что пойманная Алисой рыба имеет строго больший общий вес?

Входные данные

В первой строке записаны три целых числа n, m, k (1 ≤ n, m ≤ 105, 1 ≤ k ≤ 109) — количество пойманной Алисой и Робертом рыбы, соответственно, и количество видов рыбы.

Во второй строке записано n целых чисел, каждое от 1 до k — список пойманных Алисой видов рыбы. В третьей строке записано m целых чисел, каждое от 1 до k — список пойманной Робертом рыбы.

Обратите внимание, что можно поймать несколько рыб одного вида.

Выходные данные

Выведите «YES» (без кавычек), если это возможно, в противном случае выведите «NO» (без кавычек).

Примечание

В первом примере, если w1 = 1, w2 = 2, w3 = 2.5, тогда у Алисы всего есть 2 + 2 + 2 = 6 единиц веса, в то время, как у Роберта есть только 1 + 1 + 2.5 = 4.5.

Во втором примере пойманная Алисой рыба является подмножеством пойманной Робертом рыбы. Следовательно, общий вес рыбы Роберта всегда будет не меньше веса рыбы Алисы.

C. Делим уникальное

Конструктив *2400

Белые мишки любят уникальные массивы — то есть, массивы, не содержащие повторяющихся элементов.

Вам дан уникальный массив s длиной n, состоящий из неотрицательных целых чисел. Так как Алиса и Роберт — Ваши закадычные друзья, Вы решаете разделить массив на две части. Точнее, Вам надо построить два массива a и b той же длины n, так, чтобы выполнялись следующие условия для всех i (1 ≤ i ≤ n):

  • ai, bi — целые неотрицательные числа;
  • si = ai + bi .

В идеале a и b также должны быть уникальными массивами. Однако в суровых арктических условиях такое не всегда возможно. К счастью, Алиса и Роберт будут рады, даже если массивы окажутся почти уникальными. Мы считаем массив длины n почти уникальным тогда и только тогда, когда его можно преобразовать в уникальный массив удалением не более чем элементов.

Например, массив [1, 2, 1, 3, 2] является почти уникальным, потому что после удаления первых двух элементов он становится равен [1, 3, 2]. Массив [1, 2, 1, 3, 1, 2] не является почти уникальным, потому что надо удалить по меньшей мере 3 элемента, чтобы сделать его уникальным.

Таким образом, надо разбить данный массив s на два почти уникальных массива a и b.

Входные данные

В первой строке входных данных содержится целое число n (1 ≤ n ≤ 105).

Во второй строке содержится n различных целых чисел s1, s2, ... sn (0 ≤ si ≤ 109).

Выходные данные

Если возможно обрадовать Алису и Роберта (если можно разделить данный массив), выведите в первой строке «YES» (без кавычек). Во второй строке выведите массив a. В третьей строке выведите массив b. Возможно, имеется несколько решений — любое из них будет засчитано.

Если невозможно разделить s на почти уникальные массивы a и b, выведите «NO» (без кавычек) в первой строке.

Примечание

В данном примере можно удалить первые два элемента из a и второй элемент из b, чтобы сделать оба массива уникальными.

D. Раскрашиваем ковер

Конструктив *2500

Даже белым медведям холодно лежать на льду. И вот, белая медведица Алиса собралась сделать ковер. Ковер можно рассматривать как сетку с высотой h и шириной w. Затем сетка делится на h × w квадратов. Алиса собирается покрасить в один из k различных цветов каждый квадрат. Цвета пронумерованы от 1 до k. Она может не использовать все доступные ей цвета.

Однако есть ограничения. Для любых двух соседних ячеек (ячеек, имеющих общую сторону) x и y, есть цветовое ограничение в одной из следующих форм:

  • color(x) = color(y), или
  • color(x) ≠ color(y).

Пример цветовых ограничений:

В идеале Алиса хочет удовлетворить всем цветовым ограничениям. Но как мы уже говорили, жизнь в Арктике — не сахар. Не всегда можно удовлетворить всех цветовым ограничениям. К счастью, медведица все же будет рада, даже если хотя бы цветовых ограничений будут удовлетворены.

Если у Алисы есть 4 цвета, она может раскрасить изображенный на рисунке ковер следующим образом:

И она рада, потому что цветовых ограничений удовлетворены и . Ваша задача — помочь ей раскрасить ковер.

Входные данные

Первая строка содержит три целых числа h, w, k (2 ≤ h, w ≤ 1000, 1 ≤ k ≤ w·h).

Следующие 2h - 1 строк содержат цветовые ограничения сверху вниз, слева направо. Они содержат w - 1, w, w - 1, w, ..., w - 1 символов соответственно. Каждое цветовое ограничение представлено символом «E» или «N», где «E» означает « = », а «N» означает « ≠ ».

Цветовые ограничения перечисляются в том порядке, в котором они изображены на рисунке в условии.

Выходные данные

Если существует раскраска, удовлетворяющая по крайней мере цветовых ограничений, выведите в первой строке «YES» (без кавычек). В каждой из следующих h строк выведите по w целых чисел, описывающих раскраску.

В противном случае выведите «NO» (без кавычек).

E. Хитрый и умный пароль

Бинарный поиск жадные алгоритмы Конструктив Строки Структуры данных хэши *2800

В эпоху своей молодости герой нашего рассказа Царь Цопа решил, что все его личные данные не очень хорошо скрыты от посторонних глаз, а для монарха это недопустимо. Поэтому он придумал хитрый и умный пароль (лишь спустя много лет Цопа узнал, что его пароль — это палиндром нечетной длины), а затем зашифровал все свои данные.

Как известно, монархи в душе такие же люди, как и все остальные смертные, и поэтому чтобы не забыть свой хитрый и умный пароль, Цопа решил записать его на бумажку. Зная, что опасно хранить пароль в таком виде, он решил его зашифровать следующим образом: с конца и с начала своего пароля-палиндрома он отрезал по x символов (x может быть равно 0, и 2x строго меньше, чем длина пароля). У него получились 3 части пароля. Назовем их prefix, middle и suffix соответственно, причем prefix и suffix имеют одинаковую, возможно нулевую, длину, а middle — всегда нечётной длины. Из этих трех частей он сделал строку A + prefix + B + middle + C + suffix, где A, B и C — некоторые придуманные Цопой строки (возможно нулевой длины), а « + » означает операцию конкатенации («склеивания» строк).

Прошло много лет, и буквально вчера Царь Цопа нашел бумажку, где был записан его пароль, зашифрованный описанным выше способом. Сам пароль, а также строки A, B и C давно уже забыты, и поэтому Цопа просит вас найти пароль максимальной длины, который мог бы быть придуман, зашифрован и записан Цопой.

Входные данные

Входные данные представляют собой единственную строку из прописных латинских букв длиной от 1 до 105 символов.

Выходные данные

В первую строку выведите одно целое число k — количество непустых частей пароля в получившемся у вас ответе (). Далее выведите k строк по два целых числа xi и li — позицию начала и длину соответствующей части пароля. Пары выводите в порядке возрастания xi. Числа в паре при выводе разделяйте одним пробелом.

Позиция начала xi — целое число от 1 до длины входной строки. Никакая длина li не может быть равна 0, так как части пароля нулевой длины выводить не нужно. Среднее из чисел li обязательно должно быть нечётным.

Если решений несколько, выведите любое. Учтите, что ваша задача — максимизировать не k, а сумму li.

A. Массив

Конструктив Перебор реализация *1100

У Виталия есть массив из n различных целых чисел. Виталий хочет разделить этот массив на три непустых множества так, чтобы были выполнены условия:

  1. Значение произведения всех чисел в первом множестве было меньше нуля ( < 0).
  2. Значение произведения всех чисел во втором множестве было больше нуля ( > 0).
  3. Произведение всех чисел в третьем множестве было равно нулю.
  4. Каждое число из исходного массива должно находиться ровно в одном из множеств.

Помогите Виталию. Разделите заданный массив.

Входные данные

В первой строке входных данных записано целое число n (3 ≤ n ≤ 100). Во второй строке через пробел записаны n различных целых чисел a1, a2, ..., an (|ai| ≤ 103) — элементы массива.

Выходные данные

В первой строке выведите целое число n1 (n1 > 0) — количество чисел в первом множестве. Далее выведите n1 чисел — числа, которые попали в первое множество.

В следующей строке выведите целое число n2 (n2 > 0) — количество чисел во втором множестве. Далее выведите n2 чисел — числа, которые попали во второе множество.

В следующей строке выведите целое число n3 (n3 > 0) — количество чисел в третьем множестве. Далее выведите n3 чисел — числа, которые попали в третье множество.

Выведенные множества должны удовлетворять описанным условиям. Гарантируется, что решение существует. Если существует несколько решений, разрешается вывести любое.

A. Ярослав и последовательность

Конструктив *1800

У Ярослава есть массив, состоящий из (2·n - 1) целых чисел. За одну операцию Ярослав может поменять знак у ровно n элементов массива. Другими словами, за одну операцию Ярослав может выбрать ровно n элементов массива и каждый из них домножить на -1.

Сейчас Ярослава интересует вопрос: какую максимальную сумму элементов массива можно получить, если разрешается выполнить любое количество описанных операций?

Помогите Ярославу.

Входные данные

В первой строке содержится целое число n (2 ≤ n ≤ 100). Во второй строке содержится (2·n - 1) целых чисел — элементы массива. Элементы массива не превосходят 1000 по модулю.

Выходные данные

В единственную строку выведите ответ на задачу — максимальную сумму, которою может получить Ярослав.

Примечание

В первом примере ничего менять не нужно. Сумма элементов равна 150.

Во втором примере стоит поменять знак у первых двух элементов. Тогда получим сумму элементов равную 100.

C. Ярослав и алгоритм

Конструктив *2500

Ярослав любит алгоритмы. Опишем один из его самых любимых алгоритмов.

  1. В качестве входных данных алгоритму дается строка. Обозначим эту входную строку через a.
  2. Алгоритм состоит из некоторого количества команд. Команда номер i имеет вид либо si >> wi, либо si <> wi, где si и wi, некоторые, возможно, пустые строки, длины не более 7, состоящие из цифр и символов «?».
  3. На каждой итерации алгоритма ищется команда с минимальным номером i, такая, что si содержится в a как подстрока. Если такая команда не найдена алгоритм завершается.
  4. Обозначим номер найденной команды через k. В строке a первое вхождение строки sk заменяется на строку wk. Если при этом найденная команда имела вид sk >> wk, то алгоритм продолжает исполняться и переходит к следующей итерации. Иначе алгоритм завершает работу.
  5. Значение строки a после завершения алгоритма считается выходом алгоритма.

Ярославу задан набор из n целых положительных чисел, ему требуется разработать алгоритм (конечно, алгоритм должен быть его самым любимым алгоритмом), который будет увеличивать каждое из заданных чисел на единицу. Более формально, если рассмотреть каждое число как строку, представляющую собой десятичную запись числа, то будучи запущенным на каждой из этих строк отдельно, алгоритм должен получать на выходе строку, являющуюся записью соответствующего числа, увеличенного на один.

Помогите Ярославу.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 100) — количество чисел в наборе. В следующих n строках содержится по одному целому положительному числу. Все заданные числа меньше 1025.

Выходные данные

Выведите алгоритм, который сможет по отдельности увеличить каждое число из набора. В i-той строке выведите команду номер i без пробелов.

Ваш алгоритм будет запущен для каждого из данных чисел. Ответ будет считаться правильным, если:

  • Каждая строка будет корректной командой алгоритма (смотри описание в условии задачи).
  • Количество команд не будет превышать 50.
  • Алгоритм будет увеличивать каждое из заданных чисел на единицу.
  • Для получения ответа алгоритм выполнит не более 200 итераций для каждого числа.

A. Тройка счастливых перестановок

Конструктив математика реализация *1300

Байк увлекается перестановками. Перестановка длины n представляет собой последовательность целых чисел, такую, что каждое число от 0 до (n - 1) встречается в ней ровно один раз. Например, [0, 2, 1] — это перестановка длины 3, а вот [0, 2, 2] и [1, 2, 3] — нет.

Тройка перестановок длины n (a, b, c) называется Счастливой Тройкой Перестановок тогда и только тогда, когда . Переменная ai обозначает i-ый элемент перестановки a. Описанное выше модульное равенство означает, что остатки после деления ai + bi на n и деления ci на n равны.

Теперь у Байка есть целое число n и он хочет найти Счастливую Тройку Перестановок. Пожалуйста, помогите ему!

Входные данные

В первой строке содержится единственное целое число n (1 ≤ n ≤ 105).

Выходные данные

Если не существует Счастливой Тройки Перестановок длины n, выведите -1.

В противном случае следует вывести три строки. В каждой строке содержится по n целых чисел через пробел. В первой строке надо вывести перестановку a, во второй — перестановку b, в третьей — перестановку c.

Если ответов несколько, выведите любой.

Примечание

В примере 1, тройка перестановок ([1, 4, 3, 2, 0], [1, 0, 2, 4, 3], [2, 4, 0, 1, 3]) является счастливой, так как выполняются следующие условия:

  • ;
  • ;
  • ;
  • ;
  • .

В примере 2 легко заметить, что счастливых троек перестановок вообще нет.

A. Странное сложение

Конструктив Перебор реализация *1600

Вася, к сожалению, умеет складывать только пары чисел (a, b) такие, что для каждого разряда десятичной записи хотя бы одно из чисел имеет цифру 0 в этом разряде. Например, Вася может сложить числа 505 и 50, но не может сложить 1 и 4.

У Васи есть множество из k различных целых неотрицательных чисел d1, d2, ..., dk.

Вася хочет выбрать из этого множества несколько чисел так, чтобы любые два выбранных числа он мог сложить. Какое максимальное количество чисел он может выбрать требуемым способом?

Входные данные

В первой строке входных данных задано целое число k (1 ≤ k ≤ 100) — количество чисел.

В второй строке записаны k различных целых чисел через пробел d1, d2, ..., dk (0 ≤ di ≤ 100).

Выходные данные

В первую строку выведите одно целое число n — максимальное количество выбранных чисел. Во второй строке выведите n различных целых неотрицательных чисел — искомые числа.

Если возможных решений несколько — выведите любое из них. Числа можно выводить в любом порядке.

D. Многоугольник

геометрия Конструктив *2300

Поликарп любит выпуклые многоугольники, у которых все углы равны и все длины сторон различны. Постройте для него любой такой многоугольник с заданным количеством вершин.

Входные данные

Входные данные содержат одно целое число n (3 ≤ n ≤ 100) — количество вершин многоугольника.

Выходные данные

Выведите n строк, содержащие координаты вершин n-угольника «xi yi» в порядке обхода против часовой стрелки. Координаты вершин не должны превышать 106 по абсолютной величине. Длины сторон должны быть в диапазоне [1, 1000] (не обязательно целые). Сравнение углов и сторон вашего многоугольника между собой при проверкe будет производиться с точностью 10 - 3.

Если решения не существует, выведите «No solution» (без кавычек).

A. Ближайшая пара

Конструктив реализация *1300

На данный момент Тайни изучает вычислительную геометрию. Когда он пытался решить задачу под названием «Ближайшая пара точек на плоскости», то обнаружил, что код, имеющий неверную временную сложность, был засчитан как правильный, а не отвергнут по причине превышения лимита времени.

Задача выглядит следующим образом. Вам дано n точек на плоскости, найдите пару точек, между которыми минимальное расстояние. Расстояние между (x1, y1) и (x2, y2) равняется .

Псевдокод кода с неверной сложностью имеет следующий вид:


ввести n
for i from 1 to n
ввести координаты i-той точки в переменную p[i]
отсортировать массив p[] в первую очередь по возрастанию x координаты, во вторую по возрастанию y
d=INF //здесь INF — это достаточно большое число
tot=0
for i from 1 to n
for j from (i+1) to n
++tot
if (p[j].x-p[i].x>=d) then break //обратите внимание, что "break" используется
//только для того, чтобы выйти из цикла "for j"
d=min(d,distance(p[i],p[j]))
вывести d

В этом коде значение tot можно рассматривать как время выполнения кода. Так как компьютер выполняет фиксированное количество операций в секунду, значение tot не должно превышать k для того, чтобы не превысить лимит времени.

Вы — первоклассный хакер. Не поможете Тайни сгенерировать данные для теста, на которых код получит превышение лимита времени?

Входные данные

В первой строке записаны два целых числа через пробел — n и k (2 ≤ n ≤ 2000, 1 ≤ k ≤ 109).

Выходные данные

Если данных, при которых код получит TLE (превышение лимита времени), не существует, выведите «no solution» (без кавычек); в противном случае, выведите n строк, так чтобы i-ая строка содержала два целых числа xi, yi (|xi|, |yi| ≤ 109) — координаты i-ой точки.

Должны выполняться следующие условия:

  • Все точки должны быть различны.
  • |xi|, |yi| ≤ 109.
  • После запуска данного кода значение tot должно превосходить k.

C. Илья и матрица

жадные алгоритмы Конструктив реализация сортировки *1400

Илья — очень добрый лев, который любит математику. Из всех математических объектов Илья больше всего любит матрицы. Сейчас перед ним стоит непростая задача о матрицах, которую нужно решить.

Заданы квадратная матрица размера 2n × 2n и 4n целых чисел. Нужно разместить все эти числа в матрице (каждое число поместить в отдельную ячейку) так, чтобы красота полученной матрицы с числами была максимальна.

Красотой матрицы размера 2n × 2n называется целое число, получаемое по следующему алгоритму:

  1. Найти максимальный элемент в матрице. Обозначим его за m.
  2. Если n = 0, тогда красота матрицы равна m. Иначе, матрицу можно разбить на 4 непересекающиеся подматрицы размера 2n - 1 × 2n - 1, тогда красота матрицы равна сумме числа m и четырех красот описанных подматриц.

Как можно заметить, этот алгоритм — рекурсивный.

Помогите Илье, решите задачу и выведите результирующую максимальную красоту матрицы.

Входные данные

В первой строке записано целое число 4n (1 ≤ 4n ≤ 2·106). В следующей строке находится 4n целых чисел ai (1 ≤ ai ≤ 109) — числа, которые нужно разместить в матрице размера 2n × 2n.

Выходные данные

В единственную строку выведите максимальное значение красоты полученной матрицы.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Примечание

Рассмотрим второй пример, числа в матрице надо расставить следующим способом:


1 2
3 4

Тогда красота матрицы будет равна: 4 + 1 + 2 + 3 + 4 = 14.

E. Илья и два числа

жадные алгоритмы Конструктив снм Структуры данных *2300

Илья в последнее время начал увлекаться археологией. Недавно он нашел два числа, записанных в системе счисления по основанию m. Каждое из найденных чисел состояло ровно из n цифр. Илья сразу начал искать информацию об этих числах, он узнал, что числа — это часть шифра, а тот, кто разгадает шифр, обретет невиданное сокровище.

После длительных исследований Илья понял: чтобы разгадать шифр, нужно сделать следующее:

  • Переставить цифры в первом числе некоторым образом, аналогично, переставить цифры во втором числе некоторым образом. В результате этой операции у чисел могут появиться лидирующие нули.
  • Поцифренно сложить числа по модулю m. Другими словами, нужно получить третье число, длины n, каждая цифра которого, есть сумма соответствующих цифр найденных чисел. Например, пусть есть два числа, записанных в троичной системе счисления, 001210 и 012111, тогда, если их сложить поцифренно по модулю 3, получится число 010021.
  • Ключ к шифру — это максимально возможное число, которое можно получить на предыдущем шаге.

Помогите Илье, найдите ключ к шифру.

Входные данные

В первой строке записано два целых числа n, m (1 ≤ n, m ≤ 105, m > 1). Во второй строке записано первое найденное число, в третьей строке записано второе найденное число.

Числа записываются как последовательность цифр в системе счисления по основанию m. Каждая цифра — это целое число от 0 до m - 1. Цифры в строке записаны в порядке от старших разрядов к младшим.

Заданные числа могут содержать лидирующие нули.

Выходные данные

Выведите n цифр в системе счисления по основанию m — полученное третье число. Цифры выводите в порядке от старших разрядов к младшим.

C. Баланс

графы Деревья Конструктив поиск в глубину и подобное *2500

Имеется система из n сосудов с водой, некоторые пары которых соединены трубками с клапанами и механизмами для переливания. Через трубки, соединяющие сосуды, можно переливать целое число литров из одного сосуда в другой (в любом направлении). Два сосуда могут быть соединены более чем одной трубкой. Общее количество трубок равно e. Объемы всех сосудов одинаковы и равны v, и объем воды в сосудах, разумеется, не должен превышать объема сосуда в процессе переливаний.

Известны начальные объемы ai воды в сосудах и объемы bi, которые требуется получить. Найдите последовательность переливаний, которая выполняет эту задачу. Число переливаний не должно превышать n2.

Входные данные

Первая строка содержит целые числа n, v, e (1 ≤ n ≤ 300, 1 ≤ v ≤ 109, 0 ≤ e ≤ 50000).

Следующие две строки содержат по n неотрицательных целых чисел каждая — изначальные ai и требуемые объемы bi соответствующих сосудов (0 ≤ ai, bi ≤ v).

В следующих e строках содержится описание всех трубок в формате x y (1 ≤ x, y ≤ n, x ≠ y) для трубки, соединяющей сосуды с номерами x и y. Два сосуда могут быть соединены более чем одной трубкой. Считайте, что сосуды пронумерованы некоторым образом от 1 до n.

Выходные данные

Выведите «NO» (без кавычек), если такой последовательности переливаний не существует.

Иначе выведите любую подходящую последовательность переливаний в следующем формате. В первой строчке выведите число переливаний k (k не должно превышать n2). В последующих строчках выведите переливания по одному на строке в формате x y d (переливание d литров из сосуда номер x в сосуд номер y, x и y должны быть различны). Для всех операций число d должно быть целым неотрицательным.

E. Принцесса и ее тень

Конструктив кратчайшие пути *3100

Юная Принцесса Влада любит прыгать по лужайкам и гулять по лесу. Как-то раз в один замечательный солнечный день во время прогулки Принцесса с удивлением обнаружила, что ее тень куда-то пропала. «Ну и дела», — подумала она и отправилась гулять по лесу в поисках своей тени.

Обычно Тень живет под Принцессой. Но именно в тот самый чрезвычайно солнечный день Тени наскучил однообразный образ жизни, и она решила поиграть с Владой.

Лес, в котором развлекаются наши герои, можно представить как множество целочисленных клеток на плоскости, и перемещаться Тень с Принцессой могут только вверх, вниз, вправо и влево на 1. В некоторых клетках, как и положено лесу, растут деревья. Тень и Принцесса не могут ходить в клетку, где расположено дерево. Стоит отметить, что лес переживает трудные времена. В лесу растет совсем немного деревьев...

В начальный момент времени Принцесса гуляет в клетке с координатами (vxvy), в то время как Тень спряталась от Принцессы в клетке (sxsy). Принцесса, Тень и деревья находятся в разных клетках.

Тень играет с Принцессой. Как только Принцесса ходит на 1 в каком-либо направлении, Тень одновременно с Принцессой отлетает на 1 в том же направлении, если это возможно (если клетка, в которую она отлетает, не содержит дерево); в противном случае, Тень остается на своем месте. Тень эфемерна, поэтому наши герои никоим образом не мешают друг другу.

Считается, что Принцесса поймает Тень, если после какого-либо хода она окажется с ней в одной клетке. Владе удалось отыскать свою Тень. А смогли бы Вы?

Входные данные

Первая строка входных данных содержит координаты героев vx, vy, sx, sy и количество деревьев m (0 ≤ m ≤ 400), разделенные пробелом. Следующие m строк содержат координаты деревьев.

Координаты героев и деревьев целые и лежат в границах от -100 до 100 включительно. Принцесса, Тень и деревья расположены в различных клетках.

Выходные данные

Если Принцесса никак не сможет поймать Тень, выведите «-1» (без кавычек).

Иначе выведите последовательность символов «L», «R», «D», «U», соответствующих ходам Принцессы, следуя которым, она поймает Тень в некоторой клетке своего пути (L — ход налево, R — направо, U — вверх, D — вниз; ось x направлена вправо, y — вверх).

Количество символов (то есть количество ходов) не должно превышать 106. Все ходы Принцессы должны быть корректны, то есть не могут вести туда, где стоит дерево. Принцессе разрешается вставать с Тенью в одну клетку и до последнего хода.

Примечание

Ниже приведены картинки к примерам (Принцессе, Тени и деревьям отвечают розовый, серый и черный цвета соответственно; синим цветом помечен центр плоскости).

В первом случае Принцесса может сделать два хода влево, один вверх и один вправо:

В следующем случае Принцесса не сможет добраться до Тени:

В данном примере можно сделать два хода влево и один вниз (в любом порядке):

C. Командир Ciel

Деревья жадные алгоритмы Конструктив поиск в глубину и подобное разделяй и властвуй *2100

Лиса Ciel становится командиром Древоземелья. В Древоземелье, как это следует из названия, есть n городов, соединенных n - 1 ненаправленными дорогами, а между любыми двумя городами существует путь по дорогам Древоземелья.

Лиса Ciel должна назначить каждому городу офицера. У каждого офицера есть ранг — буква от 'A' до 'Z'. Таким образом, имеется 26 различных рангов, самый высокий — 'A', самый низкий — 'Z'.

У Ciel имеется достаточно офицеров каждого ранга. Но не все так просто, должно быть выполнено особое условие: если x, y — два различных города и у их офицеров одинаковые ранги, то на простом пути между x и y должен быть город z, имеющий офицера более высокого ранга. Таким образом, общение между офицерами одного ранга будет гарантированно проходить под присмотром офицера более высокого ранга.

Помогите Ciel составить подходящий план назначения офицеров городам. Если это невозможно, выведите «Impossible!».

Входные данные

В первой строке записано целое число n (2 ≤ n ≤ 105) — количество городов в Древоземелье.

В каждой из следующих n - 1 строк записано два целых числа a и b (1 ≤ a, b ≤ n, a ≠ b) — это значит, что существует дорога между городами a и b. Считайте, что города пронумерованы от 1 до n некоторым образом.

Гарантируется, что заданный граф будет деревом.

Выходные данные

Если подходящий план существует, выведите n символов, разделенных пробелами — i-ый символ обозначает ранг офицера в городе i.

В противном случае, выведите «Impossible!».

Примечание

В первом примере для любых двух офицеров ранга 'B', офицер с рангом 'А' будет на пути между ними. То есть, такое решение подходит.

A. Черно-белый куб

Комбинаторика Конструктив *1600

Вам дан куб размера k × k × k единичных кубиков. Два единичных кубика считаются соседними, если у них есть общая грань.

Ваша задача — покрасить каждый из k3 единичных кубиков в один из двух цветов (черный или белый), так чтобы выполнялись два условия:

  • у каждого белого кубика есть ровно 2 соседних кубика белого цвета;
  • у каждого черного кубика есть ровно 2 соседних кубика черного цвета.
Входные данные

В первой строке входных данных задано целое число k (1 ≤ k ≤ 100) — размер куба.

Выходные данные

Если решения не существует, то выведите -1. Иначе выведите искомую раскраску куба последовательно по слоям. В первых k строках выведите матрицу k × k — как должен быть раскрашен первый слой куба. В следующих k строках выведите матрицу k × k — как должен быть раскрашен второй слой куба. И так далее до последнего k-го слоя. Обратите внимание, что ориентация куба в пространстве не имеет значения.

Единичный куб белого цвета обозначайте символом «w», черного — «b». Следуйте формату выходных данных, который указан в тестовых примерах. При проверке правильности ответа пустые строки никак не учитываются.

B. Граф-турнир

графы Конструктив *2200

В данной задаче от Вас требуется построить граф-турнир, состоящий из n вершин, такой, что для любой ориентированной пары вершин (v, u)(v ≠ u) существует путь из вершины v в вершину u длины не более двух ребер.

Ориентированный граф без петель называется турниром, если между любыми его двумя различными вершинами есть ровно одно ребро (в одном из двух возможных направлений).

Входные данные

В первой строке записано единственное целое число n (3 ≤ n ≤ 1000) — количество вершин графа.

Выходные данные

Выведите -1, если не существует ни одного графа, удовлетворяющего описанным условиям.

Иначе выведите n строк, в каждой строке по n целых чисел, разделенных пробелами, — матрицу смежности a найденного турнира. Считайте, что вершины графа пронумерованы целыми числами от 1 до n. Тогда av, u = 0, если в турнире нет ребра из вершины v в вершину u, и av, u = 1, если ребро есть.

Так как выведенный граф должен быть турниром, то должны выполняться следующие равенства:

  • av, u + au, v = 1 для всех v, u (1 ≤ v, u ≤ nv ≠ u);
  • av, v = 0 для всех v (1 ≤ v ≤ n).

D. Башни из кирпичей

графы Конструктив поиск в глубину и подобное *1900

Наигравшись на бумаге, Яхуб перешел на компьютерные игры. Он играет в игру под названием «Башни из кирпичей». Играется она на прямоугольной таблице, состоящей из n строк и m столбцов (таблица содержит n × m ячеек). Цель игры — построить свой собственный город. Некоторые ячейки таблицы — это огромные дыры, и там Яхуб никакого здания построить не может. Остальные ячейки — пустые. В некоторой пустой ячейке можно построить ровно одну башню одного из двух следующих видов:

  1. Синие башни. Лимит населения каждой равен 100.
  2. Красные башни. Лимит населения каждой равен 200. Однако, красную башню можно построить в некоторой ячейке только тогда, когда на момент постройки хотя бы одна из соседних ячеек имеет синюю башню. Две ячейки являются соседними, если они имеют общую сторону.

Яхубу также разрешено уничтожить здание в любой ячейке. Он может выполнять эту операцию какое угодно количество раз. Уничтожение одного здания не влияет на остальные здания, а ячейка, в которой уничтожили здание, становится пустой (таким образом, Яхуб может, если это нужно, построить башню в этой ячейке — такой случай показан во втором примере).

Яхуб может привезти в свой город столько населения, сколько хочет. Итак, ему нужно построить свой город так, чтобы в нем помещалось как можно больше людей. То есть нужно найти оптимальную последовательность застройки, такую, что итоговый суммарный лимит населения как можно больше.

Яхуб говорит, что в этой игре он лучший, и все же, у него нет оптимального решения. Напишите программу, которая высчитывает оптимальное решение и покажите зазнайке, что он не так уж и крут!

Входные данные

В первой строке содержатся два целых числа n и m (1 ≤ n, m ≤ 500). В каждой из следующих n строк содержится m символов, описывающих таблицу. Если j-ой символ в i-ой строке равен «.», значит, в ячейке с координатами (i, j) разрешается строить башню (пустая ячейка). А если символ равен «#», значит, в ячейке огромная дыра.

Выходные данные

В первой строке выведите целое число k (0 ≤ k ≤ 106) — количество операций, которое должен совершить Яхуб, чтобы застроить город оптимально.

Каждая из следующих k строк должна содержать одну из трех описанных операций в формате:

  1. «B x y» (1 ≤ x ≤ n, 1 ≤ y ≤ m) — операция постройки синей башни в клетке (x, y);
  2. «R x y» (1 ≤ x ≤ n, 1 ≤ y ≤ m) — операция постройки красной башни в клетке (x, y);
  3. «D x y» (1 ≤ x ≤ n, 1 ≤ y ≤ m) — операция разрушения башни в клетке (x, y).

Если существует несколько решений, разрешается вывести любое. Обратите внимание, минимизировать количество операций не требуется.

E. Идем по оси

meet-in-the-middle битмаски дп Комбинаторика Конструктив *2300

Яхуб хочет встретиться со своей подружкой Яхубиной. Они оба живут на оси Ox (горизонтальной оси координат). Яхуб живет в точке 0, а Яхубина живет в точке d.

У Яхуба есть n целых положительных чисел a1, a2, ..., an. Сумма этих чисел равняется d. Предположим, что p1, p2, ..., pn — это перестановка чисел {1, 2, ..., n}. Затем, пусть b1 = ap1, b2 = ap2 и так далее. Будем называть массив b — «путь». Существует n! различных путей, один путь для каждой перестановки p.

Яхуб запланировал поход к своей подружке следующим образом. Сначала он проходит b1 шагов по оси Ox, затем делает привал в точке b1. Затем он проходит еще b2 шагов по оси Ox и устраивает привал в точке b1 + b2. Аналогично, в j-ый раз (1 ≤ j ≤ n) он проходит еще bj шагов по оси Ox и делает привал в точке b1 + b2 + ... + bj.

Яхуб очень суеверный человек. У него есть k несчастливых целых чисел. Яхуб называет путь «хорошим», если он никогда не делает привала в точке, соответствующей хотя бы одному из этих k чисел. Просто из любопытства посчитайте, сколько существует хороших путей по модулю 1000000007 (109 + 7).

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 24). В следующей строке записано n целых чисел: a1, a2, ..., an (1 ≤ ai ≤ 109).

В третьей строке записано целое число k (0 ≤ k ≤ 2). В четвертой строке записано k положительных целых чисел, обозначающих несчастливые для Яхуба числа. Каждое из этих чисел не превышает 109.

Выходные данные

Выведите единственное целое число — ответ на дилемму Яхуба.

Примечание

В первом тесте посмотрим на шесть возможных путей:

  • [2, 3, 5]. Яхуб остановится в точках 2, 5 и 10. Среди них несчастливое число — 5.
  • [2, 5, 3]. Яхуб остановится в точках 2, 7 и 10. Среди них несчастливое число — 7.
  • [3, 2, 5]. Остановка в несчастливой точке 5.
  • [3, 5, 2]. Такое расположение подходит.
  • [5, 2, 3]. Два несчастливых привала (5 и 7).
  • [5, 3, 2]. Яхуб не согласится, так как здесь есть привал в точке 5.

Во втором тесте заметьте, что два разных способа могут иметь идентичные наборы привалов. В конкретном случае, все шесть возможных способов имеют одни и те же остановки: [2, 4, 6], так что тут неудача не грозит Яхубу.

A. Очищение

жадные алгоритмы Конструктив *1500

Вы — искатель приключений. Сейчас Вы путешествуете по злому храму. Одолев пару злых зомби, Вы прибыли в квадратную комнату, состоящую из плиток, выложенных в таблицу размера n × n. Строки пронумерованы от 1 до n сверху вниз, а столбцы пронумерованы с 1 до n слева направо. В дальнем углу комнаты находится дверь, закрытая злыми магическими силами. На двери написано следующее:

Очищение от всякого зла пробудит дверь!

Так как Вы довольно опытный искатель приключений, Вы мгновенно понимаете, в чем тут дело. Вы замечаете, что каждая ячейка в таблице изначально является злой. Надо очистить все эти ячейки.

Единственный известный Вам способ очищения плиток — заклинание «Очищение». Заклинание накладывается на одну плитку, а затем все ячейки в той же строке, а также все ячейки в том же столбце (включая выбранную плитку) очищаются! Разрешается очищать клетку несколько раз.

Вы хотели бы очистить все n × n ячеек, накладывая заклинание очищения как можно меньше раз. В теории все просто, но вы только что заметили, что есть еще особо злые плитки. На них заклинание очищения нельзя накладывать, даже после того, как они были очищены. Но эти плитки все же можно очистить, если наложить заклинание очищения на ячейку в той же строке или столбце.

Пожалуйста, найдите способ очистить все ячейки минимальным количеством накладываемых заклинаний. Если такого способа нет, выведите -1.

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 100). В следующих n строках записано по n символов: j-ый символ i-ой строки обозначает ячейку, расположенную в строке i и столбце j. Особо злые плитки заданы символом «E», остальные — символом «.».

Выходные данные

Если очистить все клетки не удастся, то выведите -1. В противном случае, если Ваше решение накладывает x заклинаний очищения, выведите x строк. Каждая строка должна состоять из двух целых чисел, обозначающих номер строки и столбца ячейки, на которую следует наложить заклинание очищения.

Примечание

Первый пример иллюстрируется следующим образом. Фиолетовым выделены неочищенные злые плитки. Красным выделена плитка, на которую наложено заклинание очищения. Желтым выделены плитки, на которые распространяется текущее заклинание (возможно, ранее они уже были очищены). Зеленым выделены ранее очищенные плитки.

Во втором примере очистить ячейку, расположенную в строке 1 и столбце 1, невозможно.

К третьему примеру:

C. Перестроим граф

Конструктив *2400

Дан неориентированный граф, состоящий из n вершин, пронумерованных от 1 до n. У каждой вершины есть не более двух инцидентных ребер. Для каждой пары вершин существует не более одного соединяющего их ребра. Ни одно ребро не соединяет вершину с самой собой.

Мне хотелось бы построить новый граф таким образом, чтобы:

  • Новый граф состоял из такого же количества вершин и ребер, что и старый граф.
  • Свойства, указанные в первом абзаце, выполнялись.
  • Для каждых двух вершин u и v, если в старом графе есть соединяющее их ребро, то в новом графе соединяющего их ребра нет.

Помогите мне построить новый граф.

Входные данные

Первая строка содержит два целых числа через пробел, n и m (1 ≤ m ≤ n ≤ 105), обозначающих количество вершин и ребер, соответственно. Далее следуют m строк. Каждая из m строк состоит из двух разделенных пробелом целых чисел u и v (1 ≤ u, v ≤ nu ≠ v), обозначающих ребро между вершинами u и v.

Выходные данные

Если построить новый граф с упомянутыми выше свойствами невозможно, то выведите в единственной строке -1. В противном случае выведите ровно m строк. Каждая строка должна описывать ребро в формате, указанном во входных данных.

Примечание

Старый граф из первого примера:

Возможный новый граф для первого примера:

Во втором примере мы не можем построить новый граф, удовлетворяющий ограничениям.

Старый граф из третьего примера:

Возможный новый граф для третьего примера:

D. Злой храм и двигающиеся камни

Конструктив *2500

Важная информация: Вы не должны взламывать по этой задаче, так как претесты содержат все возможные тесты. Это значит, если Ваше решение пройдет претесты, Ваше решение пройдет финальное тестирование.

Вы — искатель приключений. Сейчас Вы путешествуете по злому храму. Одолев пару слабых чудищ, Вы прибыли в квадратную комнату, состоящую из плиток, выложенных в таблицу размера n × n. Комната полностью окружена стенами. В дальнем углу комнаты лежит дверь, закрытая злыми магическими силами. На двери написано следующее:

Дверь пробудит звук сталкивающихся камней!

Так как Вы довольно опытный искатель приключений, Вы мгновенно понимаете, в чем тут дело. В соседней комнате лежит бесконечное количество магических камней. Камни бывают четырех типов:

  • '^': этот камень двигается вверх;
  • '<': этот камень двигается влево;
  • '>': этот камень двигается вправо;
  • 'v': этот камень двигается вниз.

Чтобы открыть дверь, необходимо сначала поместить камни на некоторые плитки (одна плитка может быть занята не более чем одним камнем). Затем вы выбираете один из размещенных Вами камней и активируете его. Активированный камень будет двигаться в своем направлении, пока не встретит другой камень или попадет в стену комнаты (камень не будет двигаться, если что-то уже блокирует его в соответствующем направлении). Затем камень отключается. Если он ударяется о стену, или если уже произошло 107 активаций, то движение прекращается. В противном случае, ударенный камень активируется и процесс продолжается.

Если камень движется хотя бы одну ячейку, прежде чем попасть в стену, или другой камень, удар производит звук. Дверь откроется, как только число произведенных звуков достигнет по крайней мере x. Возможно, что камни будут двигаться и после получения x звуков.

Следующий рисунок иллюстрирует четыре возможных сценария передвижения камней.

  • Движется хотя бы одну ячейку и ударяется о камень. Слышится звук, ударенный камень активируется.
  • Движется хотя бы одну ячейку и ударяется о стену (то есть, бок комнаты). Слышится звук, движения прекращаются.
  • Не двигается, так как на пути стоит камень. Блокирующий камень активируется, но звука нет.
  • Не движется, так как впереди стена. Звука нет и движения прекращаются.

Предположим, что в соседней комнате лежит бесконечное количество камней каждого типа. Вы знаете, что надо делать: расставьте камни и откройте дверь!

Входные данные

В первой строке записано два целых числа n и x, обозначающие размер комнаты и количество звуков, необходимых для того, чтобы открыть дверь. Для этой задачи будет ровно три тестовых примера:

  • n = 5, x = 5;
  • n = 3, x = 2;
  • n = 100, x = 105.

Все эти тестовые примеры будут содержаться в претестах.

Выходные данные

Выведите n строк. Каждая строка состоит из n символов — j-ый символ i-ой строки указывает на содержимое плитки в j-ом столбце i-ой строки таблицы, его значение должно быть одним из следующих:

  • '^', '<', '>', или 'v': камень, как описано в условии задачи.
  • '.': пустая плитка.

Затем в следующей строке выведите два целых числа r и c (1 ≤ r, c ≤ n) — это значит, что камень, который Вы активизируете первым, находится в r-ой строке сверху и c-ом столбце слева. В этой ячейке должен быть камень.

Если есть несколько вариантов решения, можно выводить любой.

Примечание

Рассмотрим первый пример, ниже приведена его пошаговая симуляция вместе с количеством воспроизведенных звуков.

0 звуков
1 звук
2 звука
3 звука
4 звука
опять 4 звука

На картинке выше сначала активирован камень '^', потом камень '<'. Однако нет никакого звука, так как камень '^' не подвинулся ни на одну ячейку. Итак, 4 звука.

5 звуков

В этот момент 5 звуков уже есть, то есть решение верное. Однако, мы продолжим дальше, чтобы вы могли лучше понять условие.

6 звуков
7 звуков
опять 7 звуков
8 звуков

И движение оканчивается. В целом, произведено 8 звуков. Обратите внимание, что последнее движение производит звук.

Симуляция второго примера такова:

0 звуков
1 звук
2 звука

Теперь камни начинают активировать друг друга без звука, пока не достигнут лимита 107. После этого движение прекратится.

В целом, произведено ровно два звука и решение верно.

B. Строим дорогу

графы Конструктив *1300

В одной стране есть n городов. Изначально в этой стране нет дорог. Но вот, однажды король решает построить дороги, соединяющие пары городов. По дорогам можно путешествовать в любую сторону. Король хочет построить дороги так, чтобы можно было добраться из любого города в любой другой, проехав не более двух дорог. Также дано m пар городов — между этими парами городов дороги строить нельзя.

Ваша задача — построить как можно меньше дорог так, чтобы вышеперечисленные условия выполнялись. Ограничения гарантируют, что это возможно всегда.

Входные данные

Первая строка содержит два целых числа, n и m .

Затем следует m строк, каждая строка состоит из двух целых чисел, ai и bi (1 ≤ ai, bi ≤ n, ai ≠ bi), показывающих, что нельзя строить дорогу между городами ai и bi. Считайте, что города пронумерованы от 1 до n.

Гарантируется, что каждая пара городов упоминается во входных данных ровно один раз.

Выходные данные

В первой строке выведите целое число s: наименьшее количество дорог, которые надо построить. Затем следует вывести s строк, по два целых числа ai и bi (1 ≤ ai, bi ≤ n, ai ≠ bi) в каждой, означающих, что надо построить дорогу между городами ai и bi.

Если существует несколько решений, можно выводить любое.

Примечание

Ниже показано одно из возможных решений тестового примера:

Примеры неправильных решений:

Решение, изображенное на картинке выше, неверно из-за того, что количество построенных дорог не минимально (4 против 3). Также, здесь строится дорога между городами 1 и 3, несмотря на то, что во входных данных указан запрет на строительство дороги между этой парой.
Решение, изображенное на картинке выше, неверно, так как нужно проехать по меньшей мере 3 дороги, чтобы попасть из города 1 в город 3, а в Вашем ответе должно быть возможно добраться из любого города в любой другой, пройдя не более 2 дорог.
И наконец, это решение неверно потому, что должна быть возможность добраться от любого города до любого другого, а в этом ответе невозможно добраться от 1 до 3, от 2 до 3, и от 4 до 3.

C. Счастливые билеты

Конструктив Перебор *2700

У Геральда есть друг Поллард. Поллард увлекается счастливыми билетами. Причем, сначала он считал счастливым билет, между некоторыми цифрами номера которого можно поставить знаки действий и скобки так, чтобы результатом полученного арифметического выражения было число 100. Но он быстро исследовал такие билеты и перешел к более общему вопросу. Теперь он исследует k-счастливые билеты.

Поллард считает билет k-счастливым, если между, а так же слева и справа от цифр его номера можно поставить знаки арифметических действий (а именно, «+», «-», « × ») и скобки так, чтобы получилось корректное арифметическое выражение, значение которого равно k. К примеру, билет номер «224201016» является 1000-счастливым, поскольку ( - 2 - (2 + 4)) × (2 + 0) + 1016 = 1000.

Поллард настолько увлекся счастливыми билетами, что записался на семинар по счастливым билетам и, насколько известно Геральду, будет ежедневно ездить на него в один известный институт к семи вечера на одном и том же трамвайчике в течение m дней. В этом трамвайчике билеты имеют восьмизначные номера. И Геральд хочет сделать Полларду сюрприз — каждый день Поллард будет получать в трамвайчике k-счастливый билет. Кондуктор трамвайчика уже согласился выдавать Полларду все эти m дней определенные билеты, и хочет только, чтобы Геральд сказал ему, какие именно билеты нужно выдавать. В связи с этим, помогите Геральду подобрать ровно m различных k-счастливых билетов.

Входные данные

В единственной строке находятся два целых числа k и m (0 ≤ k ≤ 104, 1 ≤ m ≤ 3·105).

Выходные данные

Выведите m строк. В каждой строке должно быть ровно 8 цифр — номер очередного k-счастливого билета. Номера могут начинаться с 0, все номера должны быть различны. Если существует больше, чем m различных k-счастливых билетов, то выведите любые m из них. Гарантируется, что хотя бы m различных k-счастливых билетов существуют. Билеты можно выводить в любом порядке.

C. Ксюша и гири

графы дп жадные алгоритмы Конструктив кратчайшие пути поиск в глубину и подобное *1700

У Ксюши есть набор из гирек, а также чашечные весы. Каждая гирька имеет целочисленный вес от 1 до 10 килограмм. Ксюша собирается поиграть с весами и гирьками. Для этого она последовательно кладет гирьки на весы. Первую гирьку на левую чашу весов, вторую гирьку — на правую чашу весов, третью — на левую чашу весов, четвертую — на правую чашу весов и так далее. Всего Ксюша хочет положить на весы m гирек.

Просто так класть гирьки на весы не интересно, поэтому Ксюша установила несколько правил. Во-первых, она не кладет на весы подряд две гирьки одинакового веса. То есть i-я положенная гирька, должна отличаться от (i + 1)-й по весу для любого i (1 ≤ i < m). Во-вторых, Ксюше хочется, чтобы каждый раз, когда она кладет гирьку на некоторую чашу весов, эта чаша весов перевешивала противоположную. То есть сумма весов гирек на соответствующей чаше должна быть строго больше, чем на противоположной.

Вам заданы все типы гирек, которые имеются у Ксюши. Можете считать, что у Ксюши имеется бесконечное количество гирек каждого заданного типа. Ваша задача, помочь Ксюше выложить m гирек на весы или сказать, что это сделать невозможно.

Входные данные

В первой строке записана строка, состоящая из ровно десяти нулей и единиц: i-тый (i ≥ 1) символ в этой строке равен «1», если у Ксюши имеются гирьки, которые весят i килограмм, и равен «0» иначе. Во второй строке записано целое число m (1 ≤ m ≤ 1000).

Выходные данные

В первой строке выведите «YES», если существует способ выложить m гирек на весы, соблюдая все правила, иначе в первой строке выведите «NO». Если выложить m гирек на весы возможно, то в следующей строке выведите m целых чисел — веса гирек в порядке их выкладывания на весы.

Если существует несколько решений, разрешается вывести любое.

E. Три переворота

жадные алгоритмы Конструктив поиск в глубину и подобное *2700

У коневода Ксении есть n (n > 1) коней, которые стоят в ряд. У каждого коня есть свой уникальный номер. Изначально, i-ый слева конь имеет номер i. То есть последовательность номеров коней в ряду выглядит следующим образом (слева направо): 1, 2, 3, ..., n.

Ксения тренирует коней перед выступлением. Она последовательно дает им команды. Каждая команда имеет вид пары чисел l, r (1 ≤ l < r ≤ n). Команда l, r означает, что кони, которые стоят на l-ом, (l + 1)-ом, (l + 2)-ом, ..., r-ом местах должны поменяться местами. Кони, которые стоят до выполнения команды на l-ом и r-ом местах, должны поменяться местами. Аналогично, кони на (l + 1)-ом и (r - 1)-ом местах должны поменяться местами. Кони на (l + 2)-ом на (r - 2)-ом местах должны поменяться местами. И так далее. Другими словами, кони на отрезке [l, r] в ряду поменяют свой порядок на обратный.

Например, если Ксения скомандовала l = 2, r = 5, а последовательность номеров коней до переворота имела вид (2, 1, 3, 4, 5, 6), то после переворота последовательность будет иметь вид (2, 5, 4, 3, 1, 6).

Известно, что на тренировке Ксения выдала не более трех команд описанного вида. Вам дана последовательность номеров коней, которая получилась в результате тренировки. Найдите, какие команды отдала Ксения. Обратите внимание, что Вам не требуется минимизировать количество команд в ответе, требуется найти любой корректный набор из не более чем трех команд.

Входные данные

В первой строке записано целое число n (2 ≤ n ≤ 1000) — количество коней в ряду. Во второй строке записано n различных целых чисел a1, a2, ..., an (1 ≤ ai ≤ n), где ai — это номер i-го слева коня в ряду после тренировки.

Выходные данные

В первой строке выведите целое число k (0 ≤ k ≤ 3) — количество команд, которые Ксения отдала на тренировке. В каждой из следующих k строк выведите два целых числа. В i-той из них выведите числа li, ri (1 ≤ li < ri ≤ n) — команда, которую Ксения отдала i-ой на тренировке.

Гарантируется, что решение существует. Если существует несколько решений, разрешается вывести любое.

E. Игра с конфетами

жадные алгоритмы Конструктив *3000

Яхуб играет в необычную игру. Изначально у него есть n коробок, пронумерованных 1, 2, 3, ..., n. В каждой коробке лежит некоторое количество конфет. В коробке с номером k лежит ak конфет.

Цель игры — переместить все конфеты ровно в 2 коробки. В оставшихся n - 2 коробках должно остаться ноль конфет. Для этого Яхуб должен сделать несколько (возможно, ноль) ходов. За один ход он выбирает две различные коробки i и j, такие, что ai ≤ aj. Затем, Яхуб перекладывает из коробки j в коробку i ровно ai конфет. Например, когда в двух коробках лежит одинаковое количество конфет, коробка номер j становится пустой.

Ваша задача — сказать Яхубу, какие ходы он должен сделать, чтобы достигнуть цели игры. Если Яхуб не может достигнуть цели для данной конфигурации коробок, выведите значение -1. Пожалуйста, обратите внимание, что если решение существует, вам не требуется искать решение с минимальным количеством ходов.

Входные данные

Первая строка содержит целое число n (3 ≤ n ≤ 1000). В следующей строке записано n целых неотрицательных чисел a1, a2, ..., an — элементы последовательности a. Гарантируется, что сумма всех элементов последовательности a не превышает 106.

Выходные данные

Если решения не существует, выведите -1. В противном случае, в первой строке выведите целое число c (0 ≤ c ≤ 106) — количество ходов. В каждой из следующих c строк выведите два целых числа i и j (1 ≤ i, j ≤ n, i ≠ j): числа i и j в k-ой строке обозначают, что на k-ом ходу Вы перекладываете конфеты из коробки с номером j в коробку с номером i.

Примечание

В первом тестовом примере после первого хода коробки будут содержать 3, 12 и 3 конфет. После второго хода, коробки будут содержать 6, 12 и 0 конфет. Итак, все конфеты ровно в двух коробках, что и требуется.

Во втором тестовом примере, вы можете увидеть, что данная конфигурация изначально не подходит, так как все конфеты в одной коробке. Никакая операция не сможет этого изменить, поэтому решения не существует.

В третьем тестовом примере, все конфеты изначально в двух коробках. Таким образом, не требуется выполнять никаких ходов.

A. Вычитание в ряду

Конструктив реализация сортировки *1300

Вы хотите выстроить в ряд n целых чисел a1, a2, ..., an в некотором порядке. Назовем стоимостью расположения сумму разностей между всеми парами соседних чисел.

Более формально, обозначим некоторое расположение чисел в строке последовательностью x1, x2, ..., xn, где x — это перестановка последовательности a. Стоимость такого расположения x — это (x1 - x2) + (x2 - x3) + ... + (xn - 1 - xn).

Найдите наибольшую возможную стоимость расположения. После этого выведите лексикографически наименьшую последовательность x, соответствующую некоторому расположению с наибольшей возможной стоимостью.

Входные данные

В первой строке записано целое число n (2 ≤ n ≤ 100). Во второй строке записано n целых чисел через пробел a1, a2, ..., an (|ai| ≤ 1000).

Выходные данные

Выведите требуемую последовательность x1, x2, ..., xn. Последовательность x должна быть лексикографически наименьшей перестановкой a, соответствующей некоторому расположению с наибольшей возможной стоимостью.

Примечание

В примере стоимость выведенного расположения равна (100 - ( - 50)) + (( - 50) - 0) + (0 - 50) + (50 - ( - 100)) = 200. Не существует расположения с большей стоимостью, а среди всех расположений со стоимостью 200 выведенное является лексикографически наименьшим.

Последовательность x1, x2, ... , xp лексикографически меньше последовательности y1, y2, ... , yp, если существует такое число r (0 ≤ r < p), что x1 = y1, x2 = y2, ... , xr = yr и xr + 1 < yr + 1.

E. Неверный Флойд

графы Конструктив Перебор поиск в глубину и подобное *2200

Валера проводит эксперименты с алгоритмами поиска кратчайших путей. Недавно он изучил алгоритм Флойда, сегодня Валера решил поэкспериментировать именно с ним.

Валера уже написал код, который посчитает ему кратчайшие расстояния между всеми парами вершин в неориентированном связном графе из n вершин и m ребер, не содержащем петли и кратные ребра. Также Валера решил часть вершин пометить, а именно он пометил ровно k вершин a1, a2, ..., ak.

Ниже приведена реализация его алгоритма.


ans[i][j] // кратчайшее расстояние для пары вершин i, j
a[i] // помеченные Валерой вершины

for(i = 1; i <= n; i++) {
for(j = 1; j <= n; j++) {
if (i == j)
ans[i][j] = 0;
else
ans[i][j] = INF; //INF — очень большое число
}
}

for(i = 1; i <= m; i++) {
считать пару вершин u, v, между которыми есть неориентированное ребро;
ans[u][v] = 1;
ans[v][u] = 1;
}

for (i = 1; i <= k; i++) {
v = a[i];
for(j = 1; j <= n; j++)
for(r = 1; r <= n; r++)
ans[j][r] = min(ans[j][r], ans[j][v] + ans[v][r]);
}

Валера понял, что его код неверный. Помогите Валере, найдите для заданного набора помеченных вершин a1, a2, ..., ak такой неориентированный связный граф, состоящий из n вершин и m ребер, для которого код Валеры хотя бы для одной из пар вершин (i, j) посчитает неверное кратчайшее расстояние. Валера очень хочет, чтобы найденный граф не содержал петли и кратные ребра. Если же такого графа не существует, выведите -1.

Входные данные

В первой строке входных данных записаны три целых числа n, m, k (3 ≤ n ≤ 300, 2 ≤ k ≤ n , ) — количество вершин, количество ребер, и количество помеченных вершин.

Во второй строке входных данных записаны k целых чисел через пробел a1, a2, ... ak (1 ≤ ai ≤ n) — номера помеченных вершин. Гарантируется, все числа ai различны.

Выходные данные

Если требуемого графа не существует выведите в единственной строке -1. Иначе выведите m строк по два целых числа u, v — описание ребер искомого Валерой графа.

B. Две кучки

жадные алгоритмы Комбинаторика Конструктив математика реализация сортировки *1900

У Валеры имеется n кубиков, на каждом из которых записано целое число от 10 до 99. Он произвольным образом выбирает n кубиков и откладывает в первую кучку. Оставшиеся кубики образуют вторую кучку.

Валера решил поиграть с кубиками. Для этого он достает кубик из первой кучки и записывает число, изображенное на нем. Затем он достает кубик из второй кучки и дописывает к имеющимся двум цифрам справа двузначное число, изображенное на этом кубике. В итоге у Валеры получается четырехзначное число, первые две цифры которого записаны на кубике из первой кучки, а вторые две — на кубике из второй кучки.

Валера увлекается арифметикой, поэтому он с легкостью посчитал количество различных четырехзначных чисел, которые можно получить в его забавной игре. Другой вопрос, а как разделить кубики на кучки так, чтобы можно было получить как можно больше различных четырехзначных чисел. Этого Валера не знает, поэтому хочет спросить у вас.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 100). Во второй строке через пробел заданы n целых чисел ai (10 ≤ ai ≤ 99), обозначающих числа, изображенные на кубиках.

Выходные данные

В первой строке выведите целое число — максимально возможное количество различных четырехзначных чисел, которое может получить Валера. Во второй строке выведите n целых чисел bi (1 ≤ bi ≤ 2), число bi обозначает номер кучки в которую Валера должен отнести i-ый кубик.

Если существует несколько вариантов разбиения кубиков на кучки, дающих максимально возможное количество различных четырехзначных чисел, которое может получить Валера, выведите любой из них.

Примечание

В первом примере Валера может отложить первый кубик в первую кучку, а второй — во вторую. В этом случае он сможет получить число 1099. Если же он поместит в первую кучку второй кубик, а во вторую — первый, то он сможет получить число 9910. В обоих случаях максимальное количество различных чисел равно единице.

Во втором тестовом примере Валера сможет получить числа 1313, 1345, 2413, 2445. Обратите внимание, что если бы Валера отложил в первую кучку первый и третий кубики, то он смог бы получить лишь два числа 1324 и 1345.

D. Очередь

дп Конструктив *2000

В школьной столовой собралась очередь за булочками, состоящая из n человек — мальчиков и девочек. В то время, пока булочки еще готовятся, в очереди происходят некоторые изменения. Каждую секунду все мальчики, которые стоят непосредственно перед девочками, одновременно пропускают их вперед. Другими словами, если в какой-то момент времени i-ым в очереди стоит мальчик, а (i + 1)-ой — девочка, то через секунду на i-ом месте будет стоять девочка, а на (i + 1)-ом — мальчик.

Рассмотрим пример очереди, в которой стоят четыре человека: мальчик, мальчик, девочка, девочка (перечислены от начала очереди). Тогда через одну секунду очередь будет выглядеть так: мальчик, девочка, мальчик, девочка. Через две — девочка, мальчик, девочка, мальчик. Через три — девочка, девочка, мальчик, мальчик. Далее очередь меняться не будет.

Вам требуется по заданной расстановке ребят в очереди определить, через какое время все девочки окажутся впереди мальчиков (в рассмотренном выше примере это время равно 3-ем секундам). Булочки готовятся чрезвычайно долго, поэтому никто не успевает покинуть очередь до того момента, как в ней перестанут происходить изменения.

Входные данные

В первой строке задана последовательность букв без пробелов s1s2... sn (1 ≤ n ≤ 106), состоящая из заглавных букв M и F латинского алфавита. Если буква si равна M, это значит, что изначально в очереди на i-ом месте стоит мальчик. Если буква si равна F, то изначально в очереди на i-ом месте стоит девочка.

Выходные данные

Выведите единственное целое число — количество секунд, через которое все девочки в очереди окажутся перед мальчиками. Если в очереди все ребята одного пола, выведите 0.

Примечание

В первом тестовом примере последовательность изменений выглядит следующим образом: MFM  →  FMM.

Второй тестовый пример соответствует примеру из условия. Последовательность изменений: MMFF  →  MFMF  →  FMFM  →  FFMM.

E. Счастливое представление числа

дп Конструктив поиск в глубину и подобное *2200

Как известно счастливыми цифрами являются 4 и 7, однако, у Васи есть еще одна любимая цифра — 0, и он ее тоже считает счастливой! Счастливыми числами называют те неотрицательные числа, десятичная запись которых состоит только из счастливых цифр. К примеру, числа 0, 47, 7074 — счастливые, а 1, 7377, 895,  -7 — нет.

У Васи есть t важных целых положительных чисел, которые ему необходимо запомнить. Вася очень суеверен и хочет запоминать только счастливые числа, поэтому просит вас для каждого важного числа представить его как сумму ровно шести счастливых чисел (больше Вася просто не сможет запомнить). Тогда Вася сможет спокойно запомнить эти шесть чисел и в любой момент вычислить важное число.

Для каждого из t важных чисел выразите его, как сумму шести счастливых чисел или определите, что это невозможно.

Входные данные

В первой строке задано целое число t (1 ≤ t ≤ 5000).

Следующие t строк содержат по одному целому положительному числу ni (1 ≤ ni ≤ 1018) — список важных чисел.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64 битных чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

Выходные данные

Выведите t строк; i-тая строка должна содержать ответ для i-того важного числа: если решение существует — строка должна содержать ровно шесть счастливых чисел, сумма которых равна ni, если решения не существует — строка должна содержать одно число -1.

Если решений несколько разрешается вывести любое.

A. Вася и цифровой корень

Конструктив реализация *1100

Недавно Вася узнал, что такое цифровой корень числа и решил поделиться этим знанием с вами.

Пусть S(n) — сумма цифр числа n, к примеру, S(4098) = 4 + 0 + 9 + 8 = 21. Тогда цифровой корень числа n равен:

  1. dr(n) = S(n), если S(n) < 10;
  2. dr(n) = dr( S(n) ), если S(n) ≥ 10.

К примеру, dr(4098)  =  dr(21)  =  3.

Вася боится больших чисел, поэтому он работает только с числами до 101000. Для всех таких чисел он доказал, что dr(n)  =  S( S( S( S(n) ) ) ) (n ≤ 101000).

Теперь Вася хочет быстро находить числа с заданным цифровым корнем, но пока не научился этого делать и обратился за помощью к вам. Ваша задача — по заданным числам k и d найти число, состоящее из ровно k цифр (лидирующие нули не допускаются), цифровой корень которого равен d, или определить, что такого числа не существует.

Входные данные

В первой строке задано два целых числа k и d (1 ≤ k ≤ 1000; 0 ≤ d ≤ 9).

Выходные данные

В единственной строке выведите любое подходящее число без лидирующих нулей или «No solution» (без кавычек), если не существует подходящего числа.

Выведенное число должно состоять из ровно k цифр. Считается, что число 0 не содержит лидирующих нулей.

Примечание

Для первого тестового примера dr(5881)  =  dr(22)  =  4.

Для второго тестового примера dr(36172)  =  dr(19)  =  dr(10)  =  1.

C. Купе

жадные алгоритмы Комбинаторика Конструктив реализация *2100

Команда школьников из города S направляется на Всеберляндскую олимпиаду по информатике. Традиционно, ребята едут на поезде. Всем школьникам купили билеты в один вагон, состоящий из n купе (в каждом купе едут ровно четыре человека). Известно, что если в купе едут один или два школьника-олимпиадника, то им становится скучно, а если едут три или четыре школьника-олимпиадника, то в этом купе весело на протяжении всей поездки.

Школьники хотят поменяться с другими людьми так, чтобы ни в каком купе, где едут школьники, им не было скучно. Чтобы поменяться с другим человеком местами, нужно убедить его, что это действительно необходимо. Школьники не могут самостоятельно найти нужные аргументы, поэтому они обратились за помощью к сочувствующей им проводнице. Проводница, пользуясь своим жизненным опытом, может уговорить любого пассажира поменяться местами с кем-то из школьников.

Однако, проводница не хочет терять время на уговоры зря, поэтому хочет узнать, какое минимальное количество людей ей надо уговорить поменяться местами со школьниками. Ваша задача — найти это количество.

После всех обменов в каждом купе должно остаться либо ни одного школьника, либо три или четыре школьника.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 106) — количество купе в вагоне. Во второй строке записано n целых чисел a1, a2, ..., an — количества школьников, едущих в каждом из купе (0 ≤ ai ≤ 4). Гарантируется, что в поезде едет хотя бы один школьник.

Выходные данные

В случае, если никакая последовательность обменов местами остальных людей со школьниками не приведет к желаемому результату, выведите число «-1» (без кавычек). В противном случае, выведите наименьшее количество людей, которых нужно уговорить поменяться местами.

D. Монеты и мешочки

битмаски дп жадные алгоритмы Конструктив *2700

Наверняка, в детстве вам рассказывали загадку про мешочки и монетки. Если нет, вот один из ее вариантов:

У Коня есть три мешочка. В первом лежит одна монетка, во втором — одна монетка, а в третьем — три монетки. Всего у Коня во всех мешочках лежит три монетки. Как такое может быть?

Ответ на эту загадку очень простой. А именно, в третьем мешочке лежат первые два и одна монетка.

Данная задача — это обобщение детской загадки. Имеется n мешочков. Известно, что в первом мешочке находится a1 монет, во втором мешочке находится a2 монет, ..., в n-ом — an монет. Общее количество монет равно s. Найдите, как расположить мешочки и монетки в них таким образом, чтобы описанное выполнялось, или сообщите, что сделать это невозможно.

Входные данные

В первой строке записаны два целых числа n и s (1 ≤ n, s ≤ 70000) — количество мешочков и общее количество монеток. В следующей строке записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 70000), где ai обозначает, сколько монеток лежит в i-ом мешочке.

Выходные данные

Если ответа не существует, выведите -1.

Иначе, выведите n строк. В i-ой строке выведите, что лежит в i-ом мешочке. Первое число в строке — ci (0 ≤ ci ≤ ai) — должно означать, сколько монеток лежит непосредственно в i-ом мешочке (монеты в мешочках, которые лежат в i-ом мешочке, не считаются). Второе число в строке — ki (0 ≤ ki < n) — должно означать, сколько мешочков лежит непосредственно в i-ом мешочке (мешочки, которые лежат внутри мешочков, которые лежат в i-ом мешочке, не считаются). Далее в строке должны следовать ki целых чисел — номера мешочков, которые лежат непосредственно в i-ом мешочке.

В выведенном ответе общее количество монет должно быть равно s. Если для i-го мешочка в ответе посчитать общее количество монет, которое находится внутри него, то должно получаться ai.

Никакой мешочек не должен лежать в более чем одном мешочке непосредственно. Допускается более одного уровня вложенности мешочков (смотрите второй тестовый пример). Если существует несколько правильных ответов, разрешается вывести любой.

Примечание

На рисунках снизу показаны два возможных решения одного и того же тестового примера из условия. Левый рисунок соответствует первому тестовому примеру, правый — второму тестовому примеру.

B. День Флага

Конструктив реализация *1400

В Берляндии приближается государственный праздник — День Флага. В честь этого события Президент страны решил устроить большой танцевальный вечер, организацию которого он поручил вашему агентству. При этом он поставил несколько условий:

  • всего должны быть исполнены m танцев;
  • в каждом танце должны участвовать ровно три человека;
  • в каждом танце должен участвовать один танцор в белой форме, один танцор в красной форме и один танцор в синей форме (это цвета государственного флага Берляндии).

В распоряжении агенства есть n танцоров, причем, их число может быть меньше, чем 3m. То есть, какие-то танцоры, возможно, будут участвовать более чем в одном танце, но при этом они все должны быть задействованы. Однако, если в каком-то танце участвуют два или более танцоров, которые уже танцевали ранее, то этот танец перестает быть зрелищным. Ваше агентство не может этого допустить, поэтому в каждом танце участвует максимум один танцор, который танцевал ранее.

На основании всех этих критериев был составлен план из m танцев: на каждый танец было определено по три танцора, которые будут в нем участвовать. Вам же было поручено определить для каждого из n танцоров цвет формы так, чтобы выполнялось третье условие Президента: в каждом танце должен быть танцор в белой форме, танцор в красной форме и танцор в синей форме. При этом танцоры не могут менять свою форму между танцами.

Входные данные

В первой строке через пробел заданы два целых числа n (3 ≤ n ≤ 105) и m (1 ≤ m ≤ 105) — количество танцоров и количество танцев соответственно. Далее идёт m строк, описывающих танцы в порядке их исполнения. В i-ой строке находятся три различных целых числа — номера танцоров, участвующих в i-ом танце. Танцоры пронумерованы от 1 до n. Каждый танцор принимает участие хотя бы в одном танце.

Выходные данные

Выведите через пробел n чисел: i-ое из этих чисел должно обозначать цвет формы i-го танцора (1 — белый, 2 — красный, 3 — синий). Если подходящих решений несколько, выведите любое из них. Гарантируется, что хотя бы одно решение существует.

C. Дима и контейнеры

жадные алгоритмы Конструктив реализация *2000

Скоро у Димы день рождения! Большой праздник! Сережа подарит Диме свое отсутствие в комнате и не будет мешать Диме и Инне праздновать день рождения. Инна подарит Диме стек, очередь и дек.

Своим подарком Инна хочет проверить, насколько Дима хороший программист. Для этого она будет поочередно давать Диме команды. Команды бывают двух типов:

  1. Добавить заданное число в один из контейнеров. Причем в очередь и стек можно добавлять элементы только в конец, в дек можно добавлять элементы как в начало, так и в конец.
  2. Извлечь из не более чем трех различных контейнеров по числу. Все извлеченные числа сказать Инне, после чего опустошить все контейнеры. Причем в контейнере очередь можно извлекать числа только из начала, в стеке — только из конца, в деке — из начала и из конца. Нельзя извлекать числа из пустых контейнеров.

Каждый раз, когда Дима выполняет команду второго типа, Инна целует Диму некоторое число (возможно, ноль) раз. Дима знает Инну как облупленную, он уверен, что это число равно сумме извлеченных из контейнеров чисел на данной операции.

Как уже было сказано, Дима знает Инну как облупленную, ему известно, какие команды Инна будет давать Диме и в каком порядке. Помогите Диме найти стратегию, используя которую, он получит как можно больше поцелуев на свой день рождения!

Входные данные

Первая строка содержит целое число n (1 ≤ n ≤ 105) — количество команд Инны. Далее следует n строк, описывающих команды Инны. Каждая строка содержит целое число:

  1. Целое число a (1 ≤ a ≤ 105) означает, что Инна дает Диме команду добавить число a в один из контейнеров.
  2. Целое число 0 означает, что Инна просит Диму сделать не более трех операций извлечения из различных контейнеров.
Выходные данные

Каждой команде из входных данных должна соответствовать одна строка выходных данных — действие Димы.

Для команды первого типа (добавление) выведите одну из строк в соответствии с выбором Димы:

  • pushStack — добавить в конец стека;
  • pushQueue — добавить в конец очереди;
  • pushFront — добавить в начало дека;
  • pushBack — добавить в конец дека.

Для команды второго типа выведите сначала целое число k (0 ≤ k ≤ 3), обозначающее количество операций извлечения, затем выведите k слов разделенных пробелом. Слова могут быть:

  • popStack — извлечь из конца стека;
  • popQueue — извлечь из начала очереди;
  • popFront — извлечь из начала дека;
  • popBack — извлечь из конца дека.

Выведенные операции не должны извлекать чисел из пустых контейнеров. А также должны извлекать числа из разных контейнеров.

Выведенная последовательность действий должна приводить к максимальному количеству поцелуев. Если существует несколько последовательностей действий, приводящих к максимальному количеству поцелуев, разрешается вывести любую из них.

A. Таблица

жадные алгоритмы Конструктив реализация *1000

У Семена есть прямоугольная таблица, состоящая из n строк и m столбцов. Семен пронумеровал строки таблицы, начиная от единицы, сверху вниз, а столбцы — начиная от единицы, слева направо. Ячейку, расположенную на пересечении x-ой строки и y-ого столбца, будем обозначать парой чисел (x, y). Углами таблицы будем называть ячейки: (1, 1), (n, 1), (1, m), (n, m).

Семен считает, что в этой таблице некоторые ячейки являются хорошими. Причем известно, что ни одна хорошая ячейка не является углом таблицы.

Изначально все ячейки таблицы бесцветны. Семен хочет покрасить все ячейки своей таблицы. За один ход он может выбрать любую хорошую ячейку таблицы (x1, y1), произвольный угол таблицы (x2, y2) и закрасить все ячейки таблицы (p, q), для которых выполняются оба неравенства: min(x1, x2) ≤ p ≤ max(x1, x2), min(y1, y2) ≤ q ≤ max(y1, y2).

Помогите Семену! Определите минимальное количество операций, необходимых ему для покраски всех ячеек таблицы. Обратите внимание, что одну ячейку разрешается покрасить несколько раз.

Входные данные

В первой строке заданы ровно два целых числа n, m (3 ≤ n, m ≤ 50).

Далее в n строках задано описание ячеек таблицы. А именно, в i-ой строке задано m целых чисел через пробел ai1, ai2, ..., aim. Если aij равно нулю, то ячейка (i, j) не является хорошей, иначе — aij равно единице. Гарантируется, что хотя бы одна ячейка является хорошей. Гарантируется, что ни одна хорошая ячейка не является углом.

Выходные данные

Выведите единственное число — минимальное количество операций, необходимых Семену для осуществления его затей.

Примечание

В первом примере последовательность операций может быть такой:

  • В первый раз нужно выбрать ячейку (2, 2) и угол (1, 1).
  • Во второй раз нужно выбрать ячейку (2, 2) и угол (3, 3).
  • В третий раз нужно выбрать ячейку (2, 2) и угол (3, 1).
  • В четвертый раз нужно выбрать ячейку (2, 2) и угол (1, 3).

В втором примере последовательность операций может быть такой:

  • В первый раз нужно выбрать ячейку (3, 1) и угол (4, 3).
  • Во второй раз нужно выбрать ячейку (2, 3) и угол (1, 1).

B. Перестановка

дп Конструктив математика *1400

Перестановкой p называется упорядоченный набор чисел p1,   p2,   ...,   pn, состоящий из n различных целых положительных чисел, каждое из которых не больше чем n. Число n будем называть длиной перестановки p1,   p2,   ...,   pn.

У Семена есть целое положительное число n и целое неотрицательное число k такое, что 2k ≤ n. Помогите ему найти перестановку a длины 2n такую, что выполнено равенство: .

Входные данные

В первой строке записаны два целых числа n и k (1 ≤ n ≤ 50000, 0 ≤ 2k ≤ n).

Выходные данные

Выведите 2n целых чисел a1, a2, ..., a2n — искомую перестановку a. Гарантируется, что решение существует. Если существует несколько решений, разрешается вывести любое.

Примечание

Под записью |x| следует понимать абсолютную величину или модуль числа x.

В первом примере |1 - 2| - |1 - 2| = 0.

Во втором примере |3 - 2| + |1 - 4| - |3 - 2 + 1 - 4| = 1 + 3 - 2 = 2.

В третьем примере |2 - 7| + |4 - 6| + |1 - 3| + |5 - 8| - |2 - 7 + 4 - 6 + 1 - 3 + 5 - 8| = 12 - 12 = 0.

E. Порядок

Конструктив поиск в глубину и подобное *2400

Семен любит порядок. Поэтому, перед тем, как лечь спать, Семен хочет завершить все дела в доме.

Дом Семена сверху выглядит как прямоугольная таблица, состоящая из n строк и n столбцов. Строки таблицы пронумерованы от 1 до n сверху вниз, а столбцы — от 1 до n слева направо. Каждая ячейка этой таблицы — это комната. Парой (i, j) будем обозначать комнату, расположенную на пересечении i-ой строки и j-ого столбца. Про каждую комнату известно, включен ли в ней свет, или нет.

Изначально Семен находится в комнате (x0, y0). Он хочет выключить свет во всех комнатах в доме и после этого вернуться в комнату (x0, y0). Обозначим комнату, в которой на данный момент находится Семен, (x, y). Чтобы выполнить желаемое, Семен может выполнять следующие действия:

  • Формат действия — «1». Во время выполнения этого действия, Семен включает свет в комнате (x, y). Запрещается выполнять действие, если в комнате уже включен свет.
  • Формат действия — «2». Во время выполнения этого действия, Семен выключает свет в комнате (x, y). Запрещается выполнять действие, если в комнате уже выключен свет.
  • Формат действия — «dir» (dir это символ). Во время выполнения этого действия, Семен перемещается в соседнюю по стороне комнату в направлении dir. Всего Семен может двигаться только в 4-х направлениях: влево, вправо, вверх и вниз (соответственно, dir равен L, R, U, D). Кроме того, Семен может перейти только в комнату, по направлению которой где-то горит свет. Более формально, если обозначить за (nx, ny) комнату, в которую Семен хочет перейти, то должно существовать такое целое число k (k > 0), что существует комната со включенным светом в ячейке (x + (nx - x)k, y + (ny - y)k). Конечно, Семену запрещается выходить за пределы дома.

Помогите Семену, найдите такую последовательность действий, что Семен выполнит желаемое.

Входные данные

В первой строке заданы три целых положительных числа n, x0, y0 (2 ≤ n ≤ 500, 1 ≤ x0, y0 ≤ n).

Далее в n строках задано описание комнат дома. В i-ой строке записано n целых чисел через пробел ai1, ai2, ..., ain. Если число aij равно нулю, то в комнате (i, j) свет выключен, если же число aij равно единице, то в комнате (i, j) свет включен. Гарантируется, что хотя бы в одной комнате свет включен.

Выходные данные

Если не существует требуемой последовательности действий, выведите «NO» (без кавычек). Иначе выведите «YES» (без кавычек) и описание требуемой последовательности действий в виде строки. Обратите внимание, что от Вас не требуется минимизировать длину последовательности действий, но тем не менее последовательность должна состоять из не более чем 3·106 действий.

E. Два пути

графы Конструктив реализация снм *2600

Как-то раз археологи нашли m таинственных бумажек, на каждой из которых была написана пара целых чисел. Известно, что в древние времена очень любили записывать номера дорог, по которым ходили, в виде «a b» или «b a», где a, b — номера двух различных городов, между которыми шла дорога. Также известно, что таинственные бумаги — это листы из двух путевых дневников (для каждого нового путешествия раньше всегда заводили новый дневник).

В течение одного путешествия странник мог проходить по одной и той же дороге несколько раз в одном или разных направлениях, но в этом случае он ровно столько же раз делал запись об этой дороге в своем дневнике. Кроме того, археологи предполагают, что направление движения путника по дороге никак не влияло на запись в дневнике: запись «a b» могла относиться как к дороге из a в b, так и к дороге из b в a.

Археологи очень хотят расположить страницы в правильной последовательности и восстановить два маршрута путешествия, но, увы, они не сильны в программировании, так что настал ваш час. Помогите им!

Входные данные

В первой строке входных данных находится целое число m (1 ≤ m ≤ 10000). В каждой из последующих m строк описана одна бумага. Каждое описание состоит из пары целых чисел a, b (1 ≤ a, b ≤ 10000, a ≠ b).

Выходные данные

В первой строке выведите число L1 — длину первого пути, т.е. количество бумаг в его описании. В следующей строке через пробел выведите L1 чисел — номера бумаг, описывающих первый из путей. В третьей и четвертой строках аналогичным образом выведите длину второго пути L2 и сам путь. Оба пути должны содержать по крайней мере по одной дороге, т.е. должно выполняться L1 > 0 и L2 > 0. Бумаги нумеруются числами от 1 до m в соответствии с порядком их задания во входном файле. Номера следует выводить в том порядке, в каком путешественник проходил соответствующие дороги. Если решений несколько, выведите любое из них.

Если построить два таких пути невозможно, выведите «-1».

Не забудьте, что использовать нужно все записи ровно по одному разу, т.е. L1 + L2 = m.

A. Левко и таблица

Конструктив реализация *800

Левко очень любит таблицы, состоящие из n строк и n столбцов. Особенно он любит красивые таблицы. Красивыми Левко называет таблицы, у которых сумма элементов в каждой строке и в каждом столбце равна k.

К сожалению, он не знает ни одной такой таблицы. Вам нужно помочь ему найти хотя бы одну.

Входные данные

В единственной строке задано два целых числа n и k (1 ≤ n ≤ 100, 1 ≤ k ≤ 1000).

Выходные данные

Выведите любую красивую таблицу. Левко не любит очень большие числа, поэтому все элементы таблицы не должны превышать по своему абсолютному значению 1000.

Если существует несколько подходящих таблиц, разрешается вывести любую.

Примечание

В первом примере сумма в первой строке 1 + 3 = 4, во второй строке 3 + 1 = 4, в первом столбце 1 + 3 = 4 и во втором столбце 3 + 1 = 4. Существуют и другие красивые таблицы для этого примера.

Во втором примере сумма элементов в каждой строке и каждом столбце равна 7. Также возможны и другие таблицы, удовлетворяющие условию.

B. Левко и перестановка

Конструктив математика теория чисел *1200

Левко очень любит перестановки чисел. Перестановкой длины n называется последовательность различных положительных целых чисел, каждое из которых не больше n.

Пусть запись gcd(a, b) обозначает наибольший общий делитель чисел a и b. Левко называет элемент pi перестановки p1, p2, ... , pn хорошим, если gcd(i, pi) > 1. Левко считает перестановку красивой, если у нее есть ровно k хороших элементов. К сожалению, он не знает ни одной красивой перестановки. Вам нужно помочь ему найти хотя бы одну.

Входные данные

В единственной строке записаны два целых числа n и k (1 ≤ n ≤ 105, 0 ≤ k ≤ n).

Выходные данные

В единственной строке выведите любую красивую перестановку или -1, если такой не существует.

Если существует несколько подходящих перестановок, разрешается вывести любую.

Примечание

В первом примере элементы 4 и 3 являются хорошими, потому что gcd(2, 4) = 2 > 1 и gcd(3, 3) = 3 > 1, а элементы 2 и 1 — нет, потому что gcd(1, 2) = 1 и gcd(4, 1) = 1. Так как хороших элементов ровно 2, перестановка является красивой.

Во втором примере не существует красивой перестановки.

B. Валера и олимпиада

Конструктив математика реализация *1400

Валера очень любит участвовать в олимпиадах. Особенно в олимпиадах по программированию. Сегодня он поучаствовал в олимпиаде в составе команды, состоящей из n студентов (включая Валеру). Соревнование было индивидуальное, поэтому каждый студент в команде решал задачи индивидуально.

После олимпиады Валера заинтересовался результатами участников. Ему удалось выяснить, что:

  • каждый студент в команде набрал не менее l очков и не более r очков;
  • в сумме все участники команды набрали ровно sall очков;
  • сумма очков тех k членов команды, которые набрали наибольшее количество очков, равна sk; более формально, если a1, a2, ..., an — очки, которые получили студенты команды, в невозрастающем порядке (a1 ≥ a2 ≥ ... ≥ an), то sk = a1 + a2 + ... + ak.

Однако Валера не узнал, сколько в точности очков набрал каждый из n студентов. Валера попросил вас восстановить любое распределение очков между студентами команды, удовлетворяющее всем перечисленным выше условиям.

Входные данные

В первой строке входных данных задано ровно шесть целых чисел n, k, l, r, sall, sk (1 ≤ n, k, l, r ≤ 1000; l ≤ r; k ≤ n; 1 ≤ sk ≤ sall ≤ 106).

Гарантируется, что входные данные таковы, что ответ существует.

Выходные данные

Выведите ровно n целых чисел a1, a2, ..., an — количество баллов, набранное каждым из студентов. Если существует несколько решений, разрешается вывести любое. Выводить распределение баллов можно в любом порядке.

C. Варежки

жадные алгоритмы Конструктив сортировки *1800

На новогоднюю елку в городе S. пришли n детей. Все дети пришли в варежках. Варежки бывают разных цветов, но у каждого ребенка и левая, и правая варежки были одинакового цвета. Пусть цвета варежек нумеруются целыми числами от 1 до m, а дети пронумерованы от 1 до n. Тогда у i-го ребенка обе варежки имели цвет ci.

На празднике был Дед Мороз, была Снегурочка, дети водили хоровод вокруг нарядно украшенной елки. В общем и целом все было настолько ярко и разноцветно, что детям вдруг перестало нравиться ходить в варежках одного цвета. Дети решили поменяться варежками таким образом, чтобы у каждого в итоге оказалась одна левая варежка, одна правая варежка, причем разного цвета. Все варежки имеют одинаковый размер, поэтому одинаково подходят всем детям.

Дети принялись беспорядочно обмениваться варежками, но у них никак не получалось добиться того, чтобы у всех были разноцветные пары варежек. Василий Петрович, папа одного из ребятишек, заметил, что, в общем случае желание детей может оказаться невыполнимым. Более того, как преподаватель математики, он предложил схему распределения варежек, при которой у наибольшего количества детей будет пара разноцветных варежек. Вам предстоит повторить его достижение. Помните, что левые и правые варежки отличаются: у каждого ребенка должна оказаться одна левая и одна правая варежка.

Входные данные

В первой строке записано два целых числа n и m — количество детей и количество возможных цветов варежек (1 ≤ n ≤ 5000, 1 ≤ m ≤ 100). Во второй строке записаны n целых чисел c1, c2, ... cn, где ci — цвет варежек i-го ребенка (1 ≤ ci ≤ m).

Выходные данные

В первой строке выведите наибольшее количество детей, у которых может оказаться разноцветная пара варежек. В следующих n строках выведите то, как именно могут быть распределены варежки в этом случае. В i-й из этих строк выведите через пробел два числа: цвет левой варежки, которая окажется у i-го ребенка, и цвет правой варежки, которая у него окажется. Если оптимальных решений несколько, разрешается вывести любое из них.

D. Сломанный монитор

жадные алгоритмы Конструктив Перебор реализация *2100

У Иннокентия беда — cломался монитор компьютера. Теперь некоторые пиксели его монитора являются «битыми», то есть всегда имеют черный цвет. Как следствие, Иннокентий не может играть в обыкновенные компьютерные игры. В настоящий момент он играет в следующую игру со своим младшим братом Поликарпом.

Иннокентий вслепую пишет программу, которая на черном экране рисует квадратную белую рамку шириной в один пиксель. Так как монитор неисправен, то некоторые пиксели, которые должны быть белыми, остаются черными. Глядя на результат работы программы на экране, Поликарп должен угадать позицию и размер рамки Иннокентия. Поликарпу не очень нравится игра, но Иннокентий убедил брата играть, ведь «игра развивает фантазию и наблюдательность».

Помогите Поликарпу, автоматизировав его участие в игре. Напишите программу, которая находит такую возможную квадратную рамку, что:

  • ширина рамки составляет 1 пиксель,
  • рамка полностью помещается на экране,
  • все белые пиксели монитора расположены на рамке,
  • из всех рамок, которые удовлетворяют предыдущим трем условиям, искомая рамка должна иметь наименьший размер.

Формально, квадратная рамка представляет собой такие пиксели сплошного квадрата, которые находятся на краю квадрата, то есть не являются полностью окруженными другими пикселями квадрата. Например, если рамка имеет размер d = 3, то она состоит из 8 пикселей, если ее размер d = 2, то из 4, а если d = 1, то она вырождается в один пиксель.

Входные данные

В первой строке содержится разрешение монитора в виде пары целых чисел n, m (1 ≤ n, m ≤ 2000). Следующие n строк содержат ровно по m символов — состояние пикселей монитора на момент игры. Символ «.» (точка) соответствует черному пикселю, а символ «w» (строчная латинская буква w) — белому. Гарантируется, что хотя бы один пиксель монитора — белый.

Выходные данные

Выведите экран монитора, обозначив искомую рамку символами «+» (знак «плюс»). Те пиксели, которые во время игры были белыми, изменять не следует. Их следует выводить, используя «w». Если возможных вариантов размещения рамки минимального размера несколько, выведите любой из них.

Если искомой рамки не существует, то выведите вместо n строк единственную строку, содержащую число -1.

Примечание

В первом примере размер искомой рамки равен 4. Во втором примере размер искомой рамки равен 3. В третьем примере искомая рамка имеет размер 1. В четвертом примере искомой рамки не существует.

B. Новогодний подарок

Конструктив реализация *1200

Совсем скоро начнется новый год. По этой причине большинство людей сегодня заняты подготовкой новогодних подарков. Программист Василий — не исключение.

Василий знает, что лучший подарок — это (нет, не контест) деньги. Он уже выложил в ряд слева направо n пустых кошельков и решил, сколько монеток в какой кошелек положить. В i-ый слева кошелек Василий решил положить ai монет.

Василий — человек очень занятой, поэтому монеты по кошелькам будет раскладывать его робот. Изначально робот стоит около самого левого кошелька в ряду. Робот умеет выполнять команды трех видов: перейти к кошельку, который находится слева от текущего (если такой имеется), перейти к кошельку, который находится справа от текущего (если такой имеется), положить монетку в текущий кошелек. В силу некоторых технических неполадок робот не может выполнить две команды вида «положить монетку» подряд.

Василий не может долго ждать, поэтому он хочет написать программу для робота, состоящую из не более 106 операций (не обязательно минимальную по длине), с помощью которой робот разложит монетки по кошелькам. Помогите ему.

Входные данные

В первой строке записано целое число n (2 ≤ n ≤ 300) — количество кошельков. В следующей строке записаны n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 300).

Гарантируется, что хотя бы одно ai положительное.

Выходные данные

Выведите последовательность, состоящую из k (1 ≤ k ≤ 106) символов, каждый из которых равен: «L», «R» или «P». Каждый символ последовательности — это команда роботу. Символ «L» — команда перейти влево, символ «R» — команда перейти вправо, символ «P» — команда положить монетку. Не разрешается выходить за пределы последовательности кошельков. Другими словами, нельзя выполнять команду «L», стоя около кошелька 1, и нельзя выполнять команду «R», стоя около кошелька n.

В результате проделанных операций в i-ом слева кошельке должно лежать ровно ai монет. Если существует несколько ответов, разрешается вывести любой.

B. Лиса и минимальный путь

битмаски графы Конструктив математика реализация *1900

Лисица Сиель хочет сделать задачку программистам на контест. Задача звучит так: «Дан простой неориентированный граф, состоящий из n вершин. Каждое его ребро имеет длину 1. Надо посчитать количество кратчайших путей между вершиной 1 и вершиной 2».

Как и все авторы, она хочет, чтобы некоторые из выходных данных были особенными: например, ее день рождения или количество ее друзей. Можете ли вы помочь ей составить такой тест для задачи, чтобы ответ на него был ровно k?

Входные данные

В первой строке записано единственное целое число k (1 ≤ k ≤ 109).

Выходные данные

Выведите граф G с n вершинами (2 ≤ n ≤ 1000). Между вершинами графа 1 и 2 должно быть ровно k наикратчайших путей.

В первой строке должно быть записано целое число n. Затем надо вывести матрицу смежности графа G, состоящую из n строк и n столбцов. Каждый элемент матрицы должен равняться 'N' или 'Y'. Если Gij равняется 'Y', то граф G имеет ребро, соединяющее вершину i и вершину j. Считайте, что вершины графа пронумерованы от 1 до n.

Граф должен быть неориентированным и простым: должны выполняться условия Gii = 'N' и Gij = Gji. Также, должен быть хотя бы один путь между вершинами 1 и 2. Гарантируется, что ответ существует. Если есть несколько правильных ответов, можно вывести любой из них.

Примечание

В первом примере есть 2 кратчайших пути: 1-3-2 и 1-4-2.

Во втором примере есть 9 кратчайших путей: 1-3-6-2, 1-3-7-2, 1-3-8-2, 1-4-6-2, 1-4-7-2, 1-4-8-2, 1-5-6-2, 1-5-7-2, 1-5-8-2.

D. Инна и матрица конфет

Конструктив

Инна очень любит сладкое. Поэтому она решила сыграть в игру «Матрица конфет».

Перед Инной матрица размером n × m и k конфет. Будем нумеровать строки матрицы от 1 до n, а столбцы — от 1 до m. Ячейку в i-ой строке и j-ом столбце будем обозначать (i, j). Две ячейки (i, j) и (p, q) матрицы будем называть смежными, если |i - p| + |j - q| = 1. Маршрутом будем называть последовательность ячеек матрицы, в которой каждая пара соседних (в последовательности) ячеек смежна. Количество ячеек в последовательности будем называть длиной маршрута.

В каждой ячейке матрицы может лежать не более одной конфеты. Изначально все ячейки пустые. Инна пытается разместить каждую из k конфет в матрице по очереди. Для каждой конфеты Инна выбирает ячейку (i, j), в которой будет лежать конфета, а также выбирает маршрут, начинающийся в ячейке (1, 1), заканчивающийся в ячейке (i, j) и не содержащий конфет. После чего Инна проводит конфету по маршруту от клетки (1, 1) до клетки (i, j), где конфета остается навсегда. Если в какой-то момент Инна не может выбрать маршрут для конфеты, она проигрывает. Если же Инне удается разместить все конфеты в матрице описанным способом, то ее штраф равен сумме длин всех маршрутов, которые она использовала.

Помогите Инне минимизировать штраф в игре.

Входные данные

Единственная строка входных данных содержит три целых числа n, m и k (1 ≤ n, m ≤ 50, 1 ≤ k ≤ n·m).

Выходные данные

В первой строке выведите целое число — минимальный штраф Инны в игре.

В следующих k строках выведите описание маршрута для каждой конфеты. Описание маршрута i-ой в порядке размещения конфеты должно находится в i-ой строке. Описание маршрута — это последовательность ячеек. Каждая ячейка должна быть записана в формате (i, j), где i — номер строки ячейки, а j — номер столбца. Разрешается выводить в строке дополнительные пробельные символы. Если существует несколько оптимальных решений — выведите любое.

Строго следуйте формату вывода! Если ваша программа прошла первый претест, значит формат вывода правильный.

Примечание

Пояснение к примеру. Изначально матрица пуста. Далее Инна прокладывает первый маршрут, штраф за него равен количеству ячеек в нем — 3. Заметим, что теперь ни один маршрут не может пройти через ячейку (2, 2), так как в ней теперь лежит конфета. Следующие две конфеты попадают в ячейки (1, 2) и (2, 1). Последнюю конфету Инна просто оставляет в ячейке (1, 1), маршрут содержит только ее. Суммарный штраф равен: 3 + 2 + 2 + 1 = 8.

Заметим, что Инна не могла оставить в ячейке (1, 1), к примеру, третью конфету, в этом случае она не смогла бы проложить маршрут для четвертой конфеты.

C. Доминошки

жадные алгоритмы Конструктив

На перемене мы решили отдохнуть и поиграть в домино. Наша коробочка с доминошками была пуста, поэтому мы решили одолжить доминошки у учителя.

На нашу просьбу учитель отреагировал моментально. Он выложил на стол nm доминошек в виде прямоугольника n × 2m так, что в каждой из n строк лежало m доминошек, расположенных горизонтально. На каждой половинке каждой доминошки было написано число (0 или 1).

Мы опешили, а учитель улыбнулся и произнес: «Рассмотрим некоторое расположение доминошек в матрице n × 2m. Давайте посчитаем для каждого столбца матрицы сумму чисел в этом столбце. Далее среди всех таких сумм найдем максимальную. Сможете ли вы так переставить доминошки в матрице, чтобы описанная максимальная сумма была минимальна? Учтите, запрещено менять ориентацию доминошек, все они должны остаться горизонтальными, тем не менее доминошки разрешено поворачивать на 180 градусов. В награду за сделанное я с легкостью отдам вам все мои доминошки.»

Мы еще больше опешили. А пока мы недоумеваем от происходящего, помогите нам составить оптимальную матрицу из доминошек.

Входные данные

В первой строке записаны целые числа n, m (1 ≤ n, m ≤ 103). Далее следует описание матрицы, которую составил учитель. В каждой из следующих n строк содержится m горизонтальных доминошек: каждая доминошка обозначается двумя символами (0 или 1), записанными без пробела — цифры на левой и правой половине соответствующей доминошки.

Выходные данные

Выведите полученную матрицу из доминошек в формате: n строк, в каждой из которых по m доминошек, записанных через пробел.

Если оптимальных ответов несколько, выведите любой.

Примечание

Рассмотрим ответ на первый пример. В нем максимальная сумма по столбцам равна 1 (количество столбцов — 6, а не 3). Очевидно, что меньше 1 эта сумма быть не может, значит такое расположение доминошек является оптимальным.

Обратите внимание, что доминошки можно поворачивать на 180 градусов.

B. О коррупции и числах

Конструктив математика реализация

Веселого берляндского абитуриента Алексея достала серая действительность, и он рьяно желает поступить в университет. Вузов нынче развелось очень много, поэтому глаза у Алексея разбегаются — ведь он еще не определился, какую профессию он хочет получить: в школе у него были плохие оценки по всем предметам, и только благодаря богатеньким родителям он смог получить аттестат.

Положение осложняется тем, что в каждом вузе определен размер добровольного пожертвования, которое новоявленный студент выплачивает при поступлении — ni берублей. При этом нельзя платить больше, чем ni, ведь тогда разница между выплаченной суммой и ni может быть расценена как взятка!

Каждый ректор носит фирменную одежду своего вуза. Поэтому в ее карманы не помещаются монеты номиналом больше, чем ri. Также ректор не носит в кармане монеты номиналом меньше li — ведь если все будут платить ему настолько мелкими монетами, то их скопится очень много, и карман порвется. Поэтому пожертвование можно выплачивать только монетами в x берублей, где li ≤ x ≤ ri (в Берляндии в обращении находятся монеты любого целого положительного номинала). При этом можно использовать монеты разных номиналов, а монеты одного и того же номинала можно использовать сколько угодно раз.

Алексей, впервые столкнувшись с такими порядками, был озадачен, ведь оказалось, что не во все вузы можно поступить! Алексей очень боится идти в армию (хоть он и давно хотел получить мундир зеленого цвета, но папа говорит, что в армии сына будут бить деды, а военные билеты в Берляндии не продаются), поэтому он хочет наверняка знать, в какие вузы он может поступить и поскорее выбрать свою альма матер.

Благодаря родителям, Алексей не ограничен в средствах и можно считать, что он имеет неограниченное количество монет каждого вида.

Другими словами, задано t запросов, каждый из которых содержит числа ni, li, ri. Для каждого запроса нужно ответить, можно ли набрать сумму ровно ni берублей, используя только монеты с целым номиналом от li до ri берублей. Можно использовать монеты разных номиналов. Монеты каждого номинала можно использовать сколько угодно раз.

Входные данные

В первой строке задано количество университетов t, (1 ≤ t ≤ 1000). В каждой из t следующих строк через пробел заданы три целых числа: ni, li, ri (1 ≤ ni, li, ri ≤ 109li ≤ ri).

Выходные данные

Для каждого запроса выведите на отдельной строке: «Yes», если Алексей может в него поступить или «No» в противном случае.

Примечание

Взнос в первый вуз можно оплатить двумя монетами: по одной номиналом 2 и 3 берубля. Взнос во второй университет оплатить не получится.

A. Карточки

Конструктив реализация

Пользователь ainta любит играть с карточками. У него есть a карточек с буквой «o» и b карточек с буквой «x». Играя, ainta выкладывает все карточки в ряд и затем считает, сколько очков он получит по следующей формуле:

  1. Изначально счет равняется 0.
  2. Для каждого блока последовательных букв «o» длины x счет увеличивается на x2.
  3. Для каждого блока последовательных букв «x» длины y счет уменьшается на y2.
 

Например, если a = 6, b = 3, а ainta расположил карточки в порядке, описанном строкой «ooxoooxxo», то счет равняется 22 - 12 + 32 - 22 + 12 = 9. Это потому что в ряду из карточек всего 5 блоков: «oo», «x», «ooo», «xx», «o».

Пользователь ainta любит большие числа, поэтому он хочет максимизировать счет, расположив карточки некоторым образом. Помогите ainta добиться максимально возможного счета. Обратите внимание, что он обязан выложить в ряд все свои карточки.

Входные данные

В первой строке через пробел записаны два целых числа a и b (0 ≤ a, b ≤ 105a + b ≥ 1) — количество карточек с «o» и количество карточек с «x».

Выходные данные

В первой строке выведите единственное целое число v — наибольший счет, которого может добиться ainta.

Во второй строке выведите a + b символов, описывающих оптимальный ряд карточек. Если k-ая карта в ряду содержит символ «o», то k-ый символ должен равняться «o». Если k-тая карта в ряду содержит «x», то k-ый символ должен равняться «x». Количество символов «o» должно равняться a, а количество символов «x» должно равняться b. Если есть несколько способов максимизировать v, выведите любой из них.

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-битных целых чисел на С++. Рекомендуется использовать потоки cin, cout или спецификатор %I64d.

C. Дерево и массив

Конструктив

Пользователь ainta любит деревья. В этот раз он собирается построить неориентированное дерево, состоящее из n вершин, пронумерованных целыми числами от 1 до n. Дерево — взвешенное, то есть каждое ребро дерева имеет некоторый целочисленный вес.

Также у юноши есть массив t: t[1], t[2], ..., t[n]. Сперва все элементы массива инициализируются значением 0. Затем для каждого ребра, соединяющего вершины u и v (u < v) дерева с весом c, ainta добавляет значение c к элементам t[u], t[u + 1], ..., t[v - 1], t[v] массива t.

Обозначим суммарный вес ребер на кратчайшем пути от вершины u до v записью d(u, v). Пользователь ainta называет пару целых чисел x, y (1 ≤ x < y ≤ n) хорошей тогда и только тогда, когда d(x, y) = t[x] + t[x + 1] + ... + t[y - 1] + t[y].

Пользователь ainta хочет получить не меньше хороших пар, но у него не получается построить соответствующее дерево. Помогите ainta найти такое дерево.

Входные данные

Первая строка содержит единственное целое число n (5 ≤ n ≤ 105).

Выходные данные

Выведите n - 1 строк, содержащих описание ребер: i-я строка должна содержать три целых числа через пробел ui, vi, ci (1 ≤ ui < vi ≤ n; 1 ≤ ci ≤ 105) — две вершины, соединенные ребром дерева, и вес этого ребра.

Дальше выведите строк, содержащих хорошие пары. В k-й строке должны быть записаны два целых числа через пробел, xk и yk (1 ≤ xk < yk ≤ n). Конечно же, xk, yk должны образовывать хорошую пару. Все пары должны быть различны — иными словами, для всех j, k , должно выполняться условие xj ≠ xk или yj ≠ yk.

Если существует несколько правильных ответов, разрешается вывести любой из них.

Примечание

x — это наибольшее целое число, не превышающее x.

Вы можете найти определение дерева по следующей ссылке: http://ru.wikipedia.org/wiki/Дерево_(теория_графов)

Также вы можете найти определение кратчайшего пути по следующей ссылке: http://ru.wikipedia.org/wiki/Задача_о_кратчайшем_пути

Дерево и массив t в тестовом примере выглядят следующим образом:

B. Перед экзаменом

жадные алгоритмы Конструктив *1200

Завтра у Пети экзамен по биологии. Он очень не любит этот предмет, но d дней назад узнал, что все-таки придется его сдавать. Строгие родители сразу же наказали Пете заниматься подготовкой, и при этом не менее чем minTimei и не более чем maxTimei часов в i-ый день. К тому же они предупредили Петю, что за день до экзамена проверят, как он следовал их указанию.

И вот именно сегодня родители требуют от Пети расписание его занятий. Однако мальчик подсчитал лишь суммарное число часов sumTime, затраченное им на подготовку. Теперь он хочет узнать, удастся ли ему предоставить родителям список sсhedule из d целых чисел, в котором каждое число sсhedulei означает время в часах, проведенное Петей в i-ый день за изучением биологии. Числа должны удовлетворять ограничениям родителей, а сумма всех schedulei должна быть в точности равна sumTime.

Входные данные

В первой строке входных данных заданы два целых числа d, sumTime (1 ≤ d ≤ 30, 0 ≤ sumTime ≤ 240) — количество дней, в течение которых занимался Петя и общее количество часов, затраченных на подготовку. В следующих d строках содержится по два целых числа minTimei, maxTimei (0 ≤ minTimei ≤ maxTimei ≤ 8), записанных через пробел — минимальное и максимальное число часов, которое Петя мог потратить в i-ый день.

Выходные данные

Выведите в первую строку YES, а во вторую d целых чисел через пробелы, каждое из которых — число часов, потраченных Петей на подготовку в соответствующий день. Если искомый список составить невозможно, то выведите NO в единственную строку выходных данных. Если решений несколько, выведите любое.

A. Определите цвет

геометрия Конструктив математика реализация *1300

Недавно в результате боевых действий была повреждена главная достопримечательность Берляндии — волшебные часы. Пушечные ядра пробили несколько дырок в часах, поэтому жители обеспокоены ремонтом. Волшебные часы можно представить в виде бесконечной плоскости с декартовой системой координат, где начало координат соответствует центру часов. Часы были покрашены в два цвета, как показано на рисунке:

На рисунке показана лишь центральная часть часов. Эта раскраска продолжается до бесконечности естественным образом.

Ядра можно считать точками на плоскости. Требуется определить цвет области, которая была повреждена заданным ядром.

Нужно считать, что все точки, которые находятся на границе одной из областей, покрашены в черный цвет.

Входные данные

В первой и единственной строке записано два целых числа x и y — координаты дырки, пробитой ядром в часах. Каждое из чисел x и y не превосходит 1000 по модулю.

Выходные данные

Вывести искомый цвет.

Нужно считать, что все точки, расстояние от которых до начала координат целочисленное, покрашены в черный цвет.

C. Команда

жадные алгоритмы Конструктив реализация *1400

Вот и подошел черед олимпиад. Ваня и Егор решили создать свою команду для участия в олимпиаде по программированию. Поскольку они с первого класса вместе, есть надежда, что это хоть как-то поможет ребятам в командной работе.

На каждую командную олимпиаду Ваня берет свои игровые карточки с числами. Он берет карточки исключительно с числами 1 и 0. Ребята — очень суеверны. Они считают, что олимпиада будет для них успешной, если перед ее началом можно разложить все карточки в ряд таким образом, чтобы:

  • не существовало пары соседних в ряду карточек с нулями;
  • не существовало тройки карточек, лежащих подряд, на которых записаны единицы.

Сегодня Ваня принес n карточек с нулями и m карточек с единицами. Карточек оказалось так много, что ребята не знают: можно ли разложить все эти карточки описанным способом или нет. Помогите им найти требуемое расположение карточек, или сообщите ребятам, что это невозможно.

Входные данные

В первой строке записано два целых числа: n (1 ≤ n ≤ 106) — количество карточек с числом 0; m (1 ≤ m ≤ 106) — количество карточек с числом 1.

Выходные данные

В единственной строке выведите требуемую последовательность из единичек и нулей без пробелов. Если же такую последовательность получить невозможно, выведите -1.

C. Ищем граф

графы Конструктив Перебор *1500

Будем называть неориентированный граф из n вершин p-интересным, если выполнены условия:

  • граф содержит ровно 2n + p ребер;
  • граф не содержит петель и кратных ребер;
  • для любого целого k (1 ≤ k ≤ n) любой подграф, состоящий из k вершин, содержит не более 2k + p ребер.

Подграфом графа будем называть некоторое множество вершин графа и некоторое множество ребер графа. Причем множество ребер должно удовлетворять условию: оба конца каждого ребра из множества должны принадлежать выбранному множеству вершин.

Ваша задача отыскать p-интересный граф, состоящий из n вершин.

Входные данные

В первой строке задано единственное целое число t (1 ≤ t ≤ 5) — количество тестовых данных. В следующих t строках задано по два целых числа: n, p (5 ≤ n ≤ 24; p ≥ 0; ) — количество вершин в графе и параметр интересности для соответствующего теста.

Гарантируется, что искомый граф существует.

Выходные данные

Для каждого из t тестов выведите 2n + p строк, содержащих описание ребер p-интересного графа: i-я строка должна содержать два целых числа через пробел ai, bi (1 ≤ ai, bi ≤ nai ≠ bi) — две вершины, соединенные ребром в результирующем графе. Считайте, что вершины графа пронумерованы целыми числами от 1 до n.

Ответы для тестов выводите в том порядке, в котором тесты заданы во входных данных. Если существует несколько решений, разрешается вывести любое из них.

H. A + B наносит ответный удар

*особая задача Конструктив Перебор реализация снм *1500

Задача A + B часто используется как пример простейшей задачи для демонстрации платформы спортивного программирования. Тем не менее, некоторые ученые отмечают, что иногда эту задачу не так-то просто сдать. Хотите попробовать?

Входные данные

Входные данные содержат два целых числа a и b (0 ≤ a, b ≤ 103), разделенных пробелом.

Выходные данные

Выведите сумму заданных чисел.

E. 3-циклы

графы жадные алгоритмы Конструктив *1900

В ходе своих недавних исследований берляндские ученые выяснили, что в Древней Берляндии было n городов, которые были соединены двусторонними дорогами. Любые два города соединены не более, чем одной дорогой. Никакая дорога не соединяет город сам с собой. Согласно известной традиции, сеть дорог строилась таким образом, что невозможно было выбрать такие три города, что из каждого можно проехать в каждый напрямую. То есть не существовало цикла длины ровно 3. К сожалению, карта дорог не дошла до наших времен. Сейчас ученым интересно, насколько развитым государством была Древняя Берляндия. Помогите им: найдите, какое наибольшее число дорог могло быть в государстве. Так же требуется восстановить любую из возможных карт дорог.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 100) — количество городов в Берляндии.

Выходные данные

В первой строке должно быть записано число m — наибольшее возможное число дорог в Берляндии. Далее выведите m строк по два числа в каждой — номера городов, которые соединяет очередная дорога. Города нумеруются целыми числами от 1 до n. Если решений несколько, выведите любое.

A. Машмох и числа

Конструктив теория чисел *1500

Начались выходные. Машмох и его начальник Бимох играют в придуманную Машмохом игру.

В этой игре Машмох записывает последовательность из n различных целых чисел на доске. Затем Бимох выполняет некоторое (возможно, нулевое) количество ходов. На первом ходу он стирает с доски первое и второе число, на втором ходу он стирает первое и второе число оставшейся последовательности и так далее. Бимох останавливается, когда на доске остается менее двух чисел. Когда Бимох стирает с доски числа x и y, он получает gcd(x, y) очков. В начале игры у Бимоха ноль очков.

Машмох хочет выиграть. Поэтому он хочет, чтобы в сумме Бимох набрал ровно k очков. К сожалению, Машмох не знает, как ему выбрать начальную последовательность, чтобы победить.

Пожалуйста, помогите ему. Найдите n различных целых чисел a1, a2, ..., an, таких что Бимох наберет ровно k очков, играя на них. К тому же, Машмох не запоминает очень длинные числа, поэтому каждое из выведенных вами чисел должно быть не больше 109.

Входные данные

В первой строке записано два целых числа через пробел: n, k (1 ≤ n ≤ 105; 0 ≤ k ≤ 108).

Выходные данные

Если требуемая последовательность не существует, выведите -1. В противном случае, выведите n различных целых чисел через пробел a1, a2, ..., an (1 ≤ ai ≤ 109).

Примечание

gcd(x, y) — это наибольший общий делитель чисел x и y.

C. Футбол

графы Конструктив реализация *1400

В качестве внеконкурсного мероприятия на «Russian Code Cup» было решено поиграть в футбол. Все участники разделились на n команд и провели несколько матчей, при этом две команды не могли сыграть друг против друга более одного раза.

Судьей назначили самого опытного участника — Павла. Но так как он был самым мудрым из всех, ему сразу наскучили игры, и он уснул. Проснувшись, он обнаружил, что турнир закончился, и команды хотят узнать результаты всех матчей.

Чтобы никто не обнаружил, что Павел заснул и не следил за результатами, он решил восстановить исходы всех матчей. Для этого он опросил все команды и узнал, что победила дружба, а именно каждая команда выиграла у других ровно k раз. Помогите Павлу придумать хронологию турнира, удовлетворяющую всем условиям или сообщите, что ее не существует.

Входные данные

В первой строке задано два целых числа — n и k (1 ≤ n, k ≤ 1000).

Выходные данные

В первой строке выведите целое число m — количество сыгранных матчей. В следующих m строках должна содержаться информация обо всех матчах, по матчу в строке. В i-й строке выведите два целых числа ai bi (1 ≤ ai, bi ≤ nai ≠ bi). Числа ai, bi обозначают, что в i-м матче команда с номером ai победила команду с номером bi. Считайте, что команды пронумерованы от 1 до n.

Если не существует турнира, удовлетворяющего условию задачи, выведите -1.

E. Квадратная таблица

Конструктив математика Теория вероятностей *2400

Во время прогулки на корабле после финала «Russian Code Cup» мальчик Миша придумал интересную игру. Он пообещал отдать свой квадрокоптер тому, кто первым составит такую прямоугольную таблицу размером n × m, состоящую из положительных чисел, что сумма квадратов чисел для каждой строки этой таблицы и для каждого столбца этой таблицы также будет квадратом.

Так как проверять вручную правильность таблицы сложно, Миша просит вас, чтобы каждое число таблицы не превышало 108.

Входные данные

В первой строке даны два целых числа n и m (1 ≤ n, m ≤ 100) — размеры таблицы.

Выходные данные

Выведите таблицу, удовлетворяющую условию: n строк по m целых чисел, разделенных пробелами. Если существует несколько правильных ответов, разрешается вывести любой. Гарантируется, что хотя бы один ответ на задачу существует.

C. Взлом сейфа

Конструктив Перебор *2200

Вам предстоит решить простую задачу — взломать сейф. На электронном кольце сейфа по кругу отображаются четыре натуральных числа. Вам известно, что если все четыре числа станут равными единице, то сейф будет вскрыт. С помощью интеллектуальной системы ввода можно выполнять следующие кодовые операции: выбрать два соседних числа и увеличить оба на единицу; выбрать два соседних четных числа и поделить их на два. Вот и все. Взломайте сейф!

Входные данные

Единственная строка входного файла содержит четыре разделенных пробелом натуральных числа, каждое не больше 109 — защитные числа сейфа в последовательном порядке.

Выходные данные

Выведите "-1" (без кавычек), если сейф взломать невозможно. Иначе выведите последовательность операций (каждую на отдельной строчке), которые приводят к взлому. Количество операций не требуется минимизировать, но оно не должно превосходить 1000. Будем считать, что числа на входе стоят на позициях от 1 до 4. Каждая операция задается двумя символами. Если это деление, то первый символ — '/', если сложение — '+'. Второй символ задает позицию первого из двух чисел в последовательном порядке (см. примеры).

Если решений несколько, выведите любое.

D. Странный город

Конструктив математика *2300

Володя недавно побывал в необычном туристическом городе. В городе всего N достопримечательностей, и между любыми двумя из них есть двусторонняя дорога. На каждой дороге установлена некоторая цена (натуральное число), за которую турист может по ней проехать, и все такие цены различны. Но самое удивительное не в этом, а в том, что как бы турист не выбрал обзорный тур по городу (то есть цикл, который посещает ровно по одному разу каждую достопримечательность), заплатить ему придется всегда одну и ту же сумму! Володе интересно, а удастся ли вам придумать такую систему цен, причем так, чтобы максимальная из цен не превосходила 1000.

Входные данные

Во входном файле находится единственное натуральное число N (3 ≤ N ≤ 20) — количество достопримечательностей в городе.

Выходные данные

Выведите N строк по N чисел в каждой — матрицу смежности графа цен за проезд (то есть в i-той строке j-ое число равно стоимости проезда между i-той и j-той достопримечательностями). На диагонали должны стоять нули. Каждое из чисел не должно превосходить 1000. Цены всех дорог должны быть положительны и различны. Если решений несколько, выведите любое.

A. Паша и хомяки

Конструктив реализация *800

У Паши есть два хомяка: Артур и Александр. Паша выложил перед ними n яблок. Паша знает, какие из этих яблок нравятся Артуру. Аналогично, Паша знает, какие из этих яблок нравятся Александру. Чтобы не произошло конфликта (ведь некоторые из этих яблок могут нравиться обоим хомякам), Паша решил поделить все яблоки между хомяками самостоятельно. Какие-то яблоки он отдаст Артуру, а какие-то Александру. Неважно сколько яблок получит каждый из хомяков, однако каждый должен получить только те яблоки, которые ему нравятся. Возможно кому-то не достанется ни одного яблока.

Помогите Паше поделить все яблоки между хомяками. Обратите внимание, что Паша хочет поделить именно все яблоки, а не их часть.

Входные данные

В первой строке записаны целые числа n, a, b (1 ≤ n ≤ 100; 1 ≤ a, b ≤ n) — количество яблок у Паши, количество яблок, которые нравятся Артуру, и количество яблок, которые нравятся Александру, соответственно.

В следующей строке записаны a различных целых чисел — номера яблок, которые нравятся Артуру. В следующей строке записаны b различных целых чисел — номера яблок, которые нравятся Александру.

Считается, что яблоки нумеруются от 1 до n. Входные данные таковы, что ответ существует.

Выходные данные

Выведите n символов, каждый из которых либо 1, либо 2. Если i-й символ равен 1, значит i-е яблоко нужно отдать Артуру, иначе его нужно отдать Александру. Если существует несколько правильных ответов, разрешается вывести любой.

D. Биатлонная трасса

Бинарный поиск дп Конструктив Перебор Структуры данных *2300

Недавно состоялось официальное заявление мирового олимпийского комитета, согласно которому зимние Олимпийские игры 2030 года пройдут в Томске. Городские власти решили основательно подготовиться к проведению олимпиады и как можно раньше построить все необходимые олимпийские объекты. Первой построена будет биатлонная трасса.

Для строительства биатлонной трассы был выделен участок земли, представляющий собой прямоугольник, разбитый на n × m одинаковых квадратов. Каждый квадрат имеет координаты: номер строки (от 1 до n), в которой он находится, и номер столбца (от 1 до m), в котором он находится. Более того, каждый из квадратов характеризуется своей высотой. В ходе спортивных состязаний биатлонисты будут вынуждены передвигаться из одного квадрата в другой. Если перемещение происходит из более высокого квадрата в более низкий, то биатлонист совершает спуск. Если биатлонист перемещается из более низкого квадрата в более высокий, то он совершает подъем. Если биатлонист перемещается между двумя квадратами с одинаковой высотой, то он двигается по ровной местности.

Биатлонная трасса должна представлять собой границу некоторой прямоугольной области выделенного земельного участка, по которой биатлонисты будут двигаться в направлении движения по часовой стрелке. Известно, что на одно перемещение по ровной местности среднестатистический биатлонист тратит tp секунд, на один подъем — tu секунд, на один спуск — td секунд. Томская администрация хочет выбрать трассу таким образом, чтобы время ее прохождения среднестатистическим биатлонистом было как можно ближе к t секундам. Другими словами, разность времени ts прохождения выбранной трассы и t должна быть минимальна.

Для более четкого понимания можно рассмотреть первый пример входных данных. В этом примере n = 6, m = 7, а администрация хочет, чтобы время прохождения трассы было как можно ближе к t = 48 секундам, причем tp = 3, tu = 6 и td = 2. Если рассмотреть показанный стрелками на изображении прямоугольник, то при движении по его границе по часовой стрелке у среднестатистического биатлониста уйдет ровно 48 секунд. Левый верхний угол этой трассы расположен в квадрате с номером строки 4 и номером столбца 3, а правый нижний — в квадрате с номером строки 6 и номером столбца 7.

Администрация, помимо всего прочего, хочет, чтобы все стороны прямоугольника, по границе которого будут двигаться биатлонисты, состояли не менее чем из трех квадратов и полностью размещалась внутри выделенного земельного участка.

Вас привлекли для написания программы, которая для заданного земельного участка и всех необходимых временных величин найдет наиболее подходящий прямоугольник для создания биатлонной трассы. Если таких прямоугольников несколько — разрешается вывести любой из них.

Входные данные

В первой строке входных данных содержатся три целых числа n, m и t (3 ≤ n, m ≤ 300, 1 ≤ t ≤ 109) — размеры земельного участка и желательное время прохождения.

Во второй строке так же содержатся три целых числа tp, tu и td (1 ≤ tp, tu, td ≤ 100) — время прохождения среднестатистическим биатлонистом ровного участка трассы, подъема и спуска соответственно.

Далее следует n строк по m целых чисел, задающих высоты каждого из квадратов выделенного земельного участка. Каждое из значений высот — целое положительное число, не превышающее 106.

Выходные данные

В единственной строке выходных данных требуется вывести четыре целых положительных числа — номер строки и номер столбца левого верхнего угла, а также номер строки и номер столбца правого нижнего угла выбранного для трассы прямоугольника.

C. Угадай дерево

битмаски Деревья дп жадные алгоритмы Конструктив *2300

Яхуб и Яхубина пошли на пикник. Зашли они в густой лес. Не прошло и пяти минут, как Яхуб вспомнил про деревья в информатике. Более того, он придумал новую задачу, и Яхубине надо ее решить, а не то Яхуб ее не покормит.

Яхуб спрашивает у Яхубины: можешь ли ты построить такое корневое дерево, что

  • каждая внутренняя вершина дерева (вершина, имеющая хотя бы одного сына) имеет по меньшей мере двух сыновей;
  • у вершины i в поддереве содержится ci вершин?

Яхубина должна придумать описанное дерево. Она девушка умная и поняла, что, возможно, описанного дерева вовсе не существует. Тогда вся еда достанется Яхубу. Вы должны помочь Яхубине: определите, есть ли хотя бы одно дерево, удовлетворяющее ограничениям Яхуба. Требуемое дерево должно состоять из n вершин.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 24). В следующей строке записано n положительных целых чисел: i-е число обозначает ci (1 ≤ ci ≤ n).

Выходные данные

Выведите в первой строке «YES» (без кавычек), если хотя бы одно дерево удовлетворяет ограничениям Яхуба, в противном случае выведите «NO» (без кавычек).

D. Путешествие

Конструктив Перебор реализация *2000

Территория Берляндии представляет собой прямоугольное поле n × m клеток. Король Берляндии живет в столице, расположенной в верхней левой клетке (1, 1). Нижняя правая клетка имеет координаты (n, m). Однажды король решил объехать всю страну и вернуться назад в столицу, побывав в каждой клетке (кроме столицы) ровно один раз. В столице король должен побывать ровно два раза — в самом начале и в самом конце путешествия. Король может переходить только в соседние по стороне клетки. Однако королевский советник сказал, что, возможно, у короля не получится это сделать. Но есть выход — построить систему односторонних телепортов между некоторыми клетками так, чтобы король сумел осуществить задуманное. В одну клетку можно установить не более одного телепорта, каждый телепорт можно использовать сколько угодно раз, но при каждом использовании он ведет в одну и ту же, заранее заданную для каждого телепорта в отдельности клетку. Когда король приходит в клетку, где есть телепорт, он сам выбирает, будет ли он пользоваться телепортом. Какое наименьшее количество телепортов необходимо построить, чтобы король смог успешно совершить запланированное путешествие? Также требуется составить для короля маршрут путешествия.

Входные данные

В первой строке через пробел записано два целых числа n и m (1 ≤ n, m ≤ 100, 2 ≤  n · m) — размеры поля. Верхняя левая клетка имеет координаты (1, 1), а нижняя правая — (n, m).

Выходные данные

В первой строке выведите целое число k — минимальное количество телепортов. Далее выведите k строк по 4 целых числа x1 y1 x2 y2 (1 ≤ x1, x2 ≤ n, 1 ≤ y1, y2 ≤ m) — координаты клетки, в которую ставится телепорт (x1, y1), и координаты клетки, куда ведет телепорт (x2, y2).

Далее выведите nm + 1 строк по два числа — координаты клеток, в порядке их обхода королем. Маршрут должен начинаться и заканчиваться в (1, 1). Король может переходить в соседние по стороне клетки, а так же в клетки, куда ведет телепорт. При этом он должен побывать в столице ровно 2 раза, а во всех остальных клетках — ровно по одному разу.

A. Точки и отрезки (легкая версия)

Конструктив сортировки *1600

Яхуб не очень хорошо умеет решать геометрические задачи, но он слышал, что в этом году на международной олимпиаде по программированию будет много геометрических задач. Яхуб напугался и заперся в подвале, чтобы уединиться с мыслями о новых геометрических задачах. Вот одна из них.

Яхуб хочет нарисовать n различных точек и m отрезков на оси OX. Каждая точка может быть красной или синей. Рисунок называется хорошим тогда и только тогда, когда выполняется следующее требование: для каждого отрезка [li, ri] рассмотрим все принадлежащие ему красные точки (ri точек), и все принадлежащие ему синие точки (bi точек); каждый отрезок i должен удовлетворять неравенству |ri - bi| ≤ 1.

Яхуб считает, что точка x принадлежит отрезку [l, r], если выполняется неравенство l ≤ x ≤ r.

Яхуб дал вам все координаты точек и отрезков. Пожалуйста, помогите ему найти какой-нибудь хороший рисунок.

Входные данные

В первой строке записано два целых числа: n (1 ≤ n ≤ 100) и m (1 ≤ m ≤ 100). В следующей строке записано n целых чисел через пробел x1, x2, ..., xn (0 ≤ xi ≤ 100) — координаты точек. В следующих m строках записаны описания m отрезков. В каждой строке записано по два целых числа, li и ri (0 ≤ li ≤ ri ≤ 100) — границы i-го отрезка.

Гарантируется, что все точки различны.

Выходные данные

Если хорошего рисунка для данного теста не существует, выведите единственное целое число -1. В противном случае, выведите n целых чисел, каждое число равно 0 или 1. При этом, i-е число обозначает цвет i-й точки (0 — синяя, 1 — красная).

Если существует несколько хороших рисунков, выведите любой из них.

E. Замощение квадратами

жадные алгоритмы Конструктив *2300

Задана прямоугольная таблица n × m, клетки которой изначально не покрашены. Требуется так разукрасить все клетки таблицы, что полученная раскраска образует замощение таблицы квадратами. Более формально:

  • каждая клетка должна быть покрашена в некоторый цвет (цвета обозначаются большими буквами латинского алфавита);
  • будем считать, что две клетки таблицы связны, если они одного цвета и имеют общую сторону; каждая связная область раскраски таблицы должна являться квадратом.

По заданным n и m найдите лексикографически минимальную раскраску таблицы, удовлетворяющую описанным свойствам.

Входные данные

В первой строке записаны два целых числа n и m (1 ≤ n, m ≤ 100).

Выходные данные

Выведите лексикографически минимальную раскраску таблицы, удовлетворяющую описанным условиям.

Одна раскраска (обозначим ее X) считается лексикографически меньше другой (обозначим ее Y), если:

  • будем рассматривать клетки таблицы в порядке слева направо, сверху вниз (сначала самая первая клетка в первой строке, затем вторая клетка в первой строке и так далее);
  • найдем первую клетку в таком порядке, цвет которой в двух раскрасках отличается;
  • буква, обозначающая цвет этой клетки в X, идет раньше в алфавите, чем буква, обозначающая цвет этой клетки в Y.

C. Деву и разбиение массива

Конструктив Перебор реализация теория чисел *1700

Деву еще маленький, поэтому он очень любит играть. Весьма удивительно, но играть он предпочитает только с массивами. Однажды во время игры ему в голову пришел интересный вопрос, который Деву сам для себя разрешить не мог. Сможете ли вы найти ответ на этот вопрос?

Дан массив, состоящий из различных целых чисел. Возможно ли так разбить весь массив на k непересекающихся непустых частей, чтобы ровно p частей имели четную сумму элементов (каждая из этих p частей должна иметь четную сумму), а оставшиеся k - p частей имели нечетную сумму элементов? (обратите внимание, что элементы какой-то части не обязаны идти в массиве подряд).

Если существует способ разбить массив описанным образом, требуется вывести также и само разбиение.

Входные данные

В первой строке записано три целых числа через пробел n, k, p (1 ≤ k ≤ n ≤ 105; 0 ≤ p ≤ k). В следующей строке записано n различных целых чисел через пробел, представляющих содержимое массива a: a1, a2, ..., an (1 ≤ ai ≤ 109).

Выходные данные

В первой строке выведите «YES» (без кавычек), если можно разбить массив требуемым способом. В противном случае выведите «NO» (без кавычек).

Если требуемое разбиение существует, выведите k строк вслед за первой. В i-й из них должно быть записано содержимое i-й части. Выводите содержимое части в строке следующим образом: сперва выведите количество элементов в этой части, затем выведите все элементы части в произвольном порядке. Сумма элементов у ровно p из всех выведенных частей должна быть четной. В каждой из оставшихся k - p частей сумма должна быть нечетная.

Так как может быть несколько способов разбиения, разрешается вывести любое корректное разбиение.

J. Триминошки

жадные алгоритмы Конструктив *2000

Бывает много интересных задач о замощении доминошками. Например, известен такой замечательный факт. Возьмем стандартную шахматную доску (8 × 8) и вырежем из нее ровно две клетки. Оказывается, что получившуюся доску всегда можно замостить доминошками 1 × 2, если две вырезанные клетки разного цвета, и нельзя в противном случае.

Пете наскучили доминошки, поэтому он взял шахматную доску (не обязательно 8 × 8), вырезал из нее некоторые клетки и пытается замостить ее триминошками. Триминошки — это прямоугольники 1 × 3 (или 3 × 1, потому что триминошки можно беспрепятственно поворачивать), причем две крайние клетки триминошки обязательно белые, а клетка в середине — черная. Триминошки разрешается класть на шахматную доску таким образом, чтобы их клетки совпадали с невырезанными клетками доски, причем должно выполняться соответствие цветов: черные клетки можно совмещать только с черными, а белые — с белыми. Триминошки не должны выступать за пределы доски или накладываться друг на друга. Все невырезанные клетки доски должны быть покрыты триминошками.

Помогите Пете определить, можно ли замостить его доску триминошками описанным способом и выведите один из вариантов замощения.

Входные данные

В первой строке заданы два целых числа n и m (1 ≤ n, m ≤ 1000) — размеры доски. Следующие n строк содержат по m символов каждая и представляют собой описание доски. Если в некоторой позиции содержится «.», то клетка в этой позиции вырезана. Белой клетке соответствует символ «w», черной — «b». Гарантируется, что путем добавления вырезанных клеток можно получить корректную шахматную доску (т.е. с чередованием черных и белых клеток), хотя, возможно, и нестандартного размера.

Выходные данные

Если хотя бы одно корректное замощение существует, выведите в первой строке «YES» (без кавычек), а затем — описание замощения. Описание должно содержать n строк, по m символов в каждой. Вырезанные клетки, как и во входных данных, обозначаются символом «.». Для обозначения триминошек можно использовать символы «a», «b», «c», «d», причем все три клетки каждой триминошки должны обозначаться одним символом. Если две триминошки граничат по стороне, то они должны обозначаться разными символами. Две триминошки, не граничащие по стороне, могут обозначаться одним и тем же символом (см. пример).

Если корректных замощений несколько, разрешается выводить любое. Если замостить доску триминошками невозможно или не существует корректного замощения, для описания которого было бы достаточно четырех символов «a», «b», «c», «d», выведите в первой строке «NO» (без кавычек).

C. Валера и трубы

Конструктив поиск в глубину и подобное реализация *1500

У Валеры есть прямоугольная таблица, состоящая из n строк и m столбцов. Валера пронумеровал строки таблицы, начиная от единицы, сверху вниз, а столбцы — начиная от единицы, слева направо. Ячейку, расположенную на пересечении строки x и столбца y, будем обозначать парой чисел (x, y).

Валера хочет разместить ровно k труб на своей прямоугольной таблице. Трубой будем называть такую последовательность ячеек таблицы (x1, y1), (x2, y2), ..., (xr, yr), что:

  • r ≥ 2;
  • для любого целого i (1 ≤ i ≤ r - 1) выполняется равенство |xi - xi + 1| + |yi - yi + 1| = 1;
  • каждая ячейка, принадлежащая трубе, встречается в последовательности ячеек ровно один раз.

Валера считает, что трубы размещены красиво, если выполнены условия:

  • никакая пара труб не имеет общих ячеек;
  • каждая ячейка таблицы принадлежит некоторой трубе.

Помогите Валере красиво разместить k труб на его прямоугольной таблице.

Входные данные

В первой строке задано три целых числа через пробел n, m, k (2 ≤ n, m ≤ 300; 2 ≤ 2k ≤ n·m) — количество строк, количество столбцов и количество труб, соответственно.

Выходные данные

Выведите k строк. В i-й строке выведите описание i-й трубы: сначала выведите целое число ri (количество ячеек трубы), затем выведите 2ri целых чисел xi1, yi1, xi2, yi2, ..., xiri, yiri (последовательность ячеек таблицы).

Если существует несколько решений, разрешается вывести любое. Гарантируется, что хотя бы одно решение существует.

Примечание

Иллюстрация к первому примеру:

Иллюстрация ко второму примеру:

D. Валера и обмены

графы Конструктив математика реализация снм строковые суфф. структуры *2100

Перестановкой p длины n называется последовательность различных целых чисел p1, p2, ..., pn (1 ≤ pi ≤ n). Перестановка называется тождественной, если для всех i выполняется равенство pi = i.

Обмен (i, j) — это операция, в результате которой элементы pi и pj меняются местами в перестановке. Пусть f(p) — это минимальное число обменов, которое нужно совершить, чтобы перестановка p стала тождественной.

Валера очень хочет узнать, как за минимальное число обменов из перестановки p получить перестановку q, такую, что f(q) = m. Помогите ему в этом.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 3000) — длина перестановки p. Во второй строке записано n различных целых чисел p1, p2, ..., pn (1 ≤ pi ≤ n) — изначальная перестановка Валеры. В последней строке записано целое число m (0 ≤ m < n).

Выходные данные

В первой строке выведите целое число k — минимальное число обменов.

Во второй строке выведите 2k целых чисел x1, x2, ..., x2k — описание последовательности обменов. Выведенные числа обозначают, что необходимо последовательно произвести обмены (x1, x2), (x3, x4), ..., (x2k - 1, x2k).

Если существует несколько последовательностей обменов минимальной длины, выведите лексикографически минимальную.

Примечание

Последовательность x1, x2, ..., xs лексикографически меньше последовательности y1, y2, ..., ys, если существует такое целое число r (1 ≤ r ≤ s), что x1 = y1, x2 = y2, ..., xr - 1 = yr - 1 и xr < yr.

A. Антон и буквы

Конструктив реализация *800

Недавно у Антона появилось множество, состоящие из маленьких латинских букв. Он аккуратно выписал все буквы, которые в него входят в одну строку через запятую. Для красоты он так же добавил в начало этой строки открывающуюся фигурную скобку, а в конец — закрывающуюся.

К сожалению, Антон иногда забывал, что уже записал некоторую букву, и выписывал ее снова. Он просит вас посчитать общее число различных букв в его множестве.

Входные данные

В первой и единственной строке задано описание множества букв. Длина строки не превышает 1000. Гарантируется, что строка начинается с открывающейся фигурной скобки, а заканчивается закрывающейся. Между ними через запятую перечислены маленькие латинские буквы. После каждой запятой следует пробел.

Выходные данные

Выведите единственное число — количество различных букв в множестве Антона.

C. Jzzhu и яблоки

Конструктив теория чисел *2500

Jzzhu собрал n яблок с большого яблочного дерева. Он пронумеровал яблоки от 1 до n и теперь хочет продать их яблочному магазину.

Jzzhu собирается продавать уже упакованные яблоки. В каждой пачке должно быть по два яблока, а наибольший общий делитель номеров яблок в пачке должен быть больше 1. Какое максимальное количество пачек сможет получить Jzzhu, если будет следовать описанным условиям? Также он должен знать, как именно упаковать яблоки оптимальным способом. Помогите ему найти оптимальное распределение яблок по упаковкам.

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 105) — количество яблок.

Выходные данные

В первой строке выведите целое число m, обозначающее максимальное количество пачек, которые юноша сможет получить. В каждой из следующих m строк должно быть записано два целых числа — номера яблок в текущей пачке.

Естественно, что одно яблоко может находиться не более чем в одной пачке. Если существует несколько оптимальных ответов, разрешается вывести любой из них.

E. Режиссер

жадные алгоритмы Конструктив *2000

Вася — известный берляндский кинорежиссер, сейчас он работает над новым блокбастером «Неожиданные». По собственному опыту Вася знает, как важно удачно подобрать имена и фамилии главных героев. Он составил список из n имен и n фамилий, которые хочет использовать. Вася еще не решил, как именно назовет героев, поэтому он может сопоставить любому имени любую фамилию. Теперь ему нужно составить список всех главных героев в формате: «Name1 Surname1, Name2 Surname2, ..., Namen Surnamen», то есть все пары имя-фамилия должны быть разделены ровно одной запятой и ровно одним пробелом, а имя и фамилия должны разделяться между собой ровно одним пробелом. В первую очередь Вася хочет максимизировать количество таких пар, в которых имя и фамилия начинаются с одной и той же буквы. Если таких списков несколько, Вася хочет получить лексикографически минимальный. Помогите ему.

Как ответ будет проверяться строка в формате, как указано выше, включая необходимые запятые и пробелы. Именно лексикографическую минимальность такой строки нужно обеспечить. Выводимая строка не должна заканчиваться пробелом или запятой.

Входные данные

В первой строке записано число n (1 ≤ n ≤ 100) — количество имен и фамилий. Далее следует n строк — список имен. Далее следует n строк — список фамилий. Никакие две из этих 2n строк не совпадают. Каждое имя и фамилия — непустая строка не более чем из 10 латинских букв. Гарантируется, что первая буква — большая, а остальные — маленькие.

Выходные данные

Выходные данные состоят из единственной строки — искомого списка. Обратите внимание, что следует строго придерживаться формата выходных данных!

J. Посадка деревьев

Конструктив *1800

Вася — активист общества охраны природы Greencode. Однажды, он нашел пустое никому не нужное поле, разбил его на n × m клеток, и решил посадить там лес. Вася посадит nm деревьев всех различных высот от 1 до nm. Чтобы его лес выглядел естественнее, он хочет, чтобы для любых двух деревьев, которые растут в соседних по стороне клетках, модуль разности высот был строго больше 1. Помогите Васе: составьте план посадки леса, для которого выполняется данное условие.

Входные данные

В первой строке через пробел записано два целых числа n и m (1 ≤ n, m ≤ 100) — количество строк и столбцов в Васином поле.

Выходные данные

Если решения не существует, выведите -1. Иначе выведите n строк по m чисел — план посадки деревьев. В каждой клетке плана должна быть записана высота дерева, которое нужно посадить в эту клетку. Если решений несколько, выведите любое.

B. Ломаная на четырех точках

геометрия Деревья Конструктив Перебор *1800

Вам дана прямоугольная сетка с целочисленными точками с координатами от (0, 0) до (n, m) включительно. Вам надо выбрать ровно 4 разных точки и построить из них ломаную, возможно, с самопересечениями и самокасаниями. Ваша задача — найти самую длинную такую ломаную.

Ломаная линия, построенная из точек p1, p2, p3, p4, состоит из трех отрезков p1p2, p2p3, p3p4, и ее длина определена как сумма длин этих отрезков.

Входные данные

Единственная строка входных данных содержит два целых числа n и m (0 ≤ n, m ≤ 1000). Гарантируется, что сетка содержит хотя бы четыре различных точки.

Выходные данные

Выведите 4 строки, по два целых числа на каждой — координаты точек p1, p2, p3, p4, образующих самую длинную ломаную соответственно.

Проверяющая программа сравнивает длину ответа участника и длину ответа жюри с точностью 10 - 6.

C. Маленькая пони и торжество летнего солнца

графы Конструктив поиск в глубину и подобное *2200

Twilight Sparkle узнала, что злая Nightmare Moon вернется во время предстоящего торжества летнего солнца после тысячелетнего заточения на луне. Она попыталась предупредить свою наставницу, принцессу Celestia, но принцесса проигнорировала ее и отправила в Ponyville, проверить как идет подготовка к торжеству.

Twilight Sparkle хочет выследить Nightmare Moon. К сожалению, она не знает, каким именно путем пойдет Nightmare Moon. К счастью, для каждого места в Ponyville Twilight Sparkle знает: четное или нечетное количество раз посетит его Nightmare Moon. Можете ли вы помочь Twilight Sparkle найти любой путь, который будет удовлетворять этим данным?

Ponyville может быть представлен как неориентированный граф без петлей и мульти-ребер (вершины — это места в Ponyville, ребра — это дороги, соединяющие места). Разрешается начать и закончить путь в любых местах (также, возможно, путь будет пустой). Одно место можно посетить несколько раз. Путь не должен посетить больше, чем 4n мест Ponyville.

Входные данные

Первая строка содержит два целых числа, n и m (2 ≤ n ≤ 105; 0 ≤ m ≤ 105) — количество мест и дорог в Ponyville. Каждая из следующих m строк содержит два целых числа: ui, vi (1 ≤ ui, vi ≤ nui ≠ vi), эти числа обозначают дорогу между местами ui и vi.

Следующая строка содержит n целых чисел: x1, x2, ..., xn (0 ≤ xi ≤ 1) — четность количества посещений для каждого места. Если xi = 0, то i-е место нужно посетить четное число раз, иначе — нечетное число раз.

Выходные данные

Выведите число посещенных мест k в первой строке (0 ≤ k ≤ 4n). Затем выведите k целых чисел — номера мест в порядке посещения их путем. Если xi = 0, то в данном пути место i должно встретиться четное число раз, иначе i-е место должно встретиться в нем нечетное число раз. Обратите внимание, что система дорог Ponyville не содержит петель, поэтому в выведенном пути любые два соседних места должны быть различны.

Если требуемого пути не существует, выведите -1. Если существует несколько правильных путей, можете вывести любой из них.

E. Оптимальный поток

Конструктив математика Потоки *3000

Рассмотрим сеть, состоящую из n вершин, пронумерованных от 1 до n. Некоторые пары вершин соединены ребрами. Пара вершин может быть соединена несколькими ребрами, тем не менее, не существует ребра, соединяющего какую-то вершину саму с собой.

Каждое ребро имеет бесконечную пропускную способность (в обоих направлениях), однако в один момент времени ребро может пропускать поток только в одном из направлений. Стоимость пропускания потока по ребру пропорциональна квадрату пропускаемого потока. Точнее, для каждого ребра задана характеристика (вес), стоимость пропускания x потока по ребру с весом w равна w·x2.

Известно, что сеть связна (между любой парой вершин есть путь по ребрам). Более того, сеть устроена таким образом, что при удалении любой вершины, она останется связной.

Вам нужно пропустить k (k > 0) потока из вершины 1 в вершину n. Другими словами, вы хотите для каждого ребра выбрать величину (не обязательно целочисленную) и направление, проходящего по этому ребру потока, так, чтобы для вершины 1 значение [сумма всех входящих потоков минус сумма всех выходящих потоков] равнялось  - k, для вершины n это значение равнялась k, а для всех остальных вершин оно равнялось 0.

Желая минимизировать стоимость пропускания k потока, вы нарисовали диаграмму сети и дали задание одному из подчиненных. Недавно, последний сказал, что он нашел оптимальное решение задачи и нарисовал его, но, к сожалению, пролил кофе на рисунок. Поэтому некоторые данные утрачены (вполне возможно, даже части изначальной диаграммы и значение k).

Имея все сохранившиеся данные, вам нужно определить, могло ли решение подчиненного быть оптимальным. Другими словами, определите, существуют ли корректная сеть, значение k (оно должно быть положительным) и оптимальное решение, которые не противоречат никакой сохранившейся информации. Дополнительно, если это возможно, определите эффективность решения подчиненного. Эффективность решения равна суммарной стоимости деленой на k.

Входные данные

Входные данные содержат два целых числа n и m (2 ≤ n ≤ 200000; 0 ≤ m ≤ 200000), количество вершин и ребер в сети. В каждой из m следующих строк записаны четыре целых числа: f, t, w, b (1 ≤ f ≤ n; 1 ≤ t ≤ nf ≠ t; 1 ≤ w ≤ 100; 0 ≤ b ≤ 100). Числа обозначают, что в оптимальном решении подчиненного поток величины b проходил по ребру из f в t, вес этого ребра был равен w.

Выходные данные

Если решение подчиненного точно не является оптимальным, выведите строку «BAD x», где x — это номер первого ребра, которое противоречит оптимальности решения. Если решение подчиненного может быть оптимальным, то выведите эффективность этого решения, округленную до ближайшего целого числа, если ее можно определить. Если определить эффективность нельзя выведите строку "UNKNOWN".

Примечание

Обратите внимание, что, несмотря на то, что заданные веса и потоки целочисленные, веса и потоки неизвестных ребер могут быть вещественными.

C. Пашмак и автобусы

Комбинаторика Конструктив математика *1900

Пашмак недавно устроился в транспортную компанию, которая владеет k автобусами. Недавно компания заключила договор со школой на перевозку школьников в течение d дней. Всего в школе учатся n ребят. Каждый день компания предоставляет школе все свои автобусы, Пашмак должен распределять детей по автобусам. Пашмак не хочет, чтобы кто-то из школьников подружился за эти d дней. Он считает, что два школьника сдружатся, если в течение всех d дней они будут ездить в одном автобусе.

Помогите Пашмаку воплотить в жизнь его странную идею, найдите распределение, при котором никакие два школьника не сдружатся. Считайте, что автобусы имеют бесконечную вместимость.

Входные данные

В первой строке записаны три целых числа через пробел n, k, d (1 ≤ n, d ≤ 1000; 1 ≤ k ≤ 109).

Выходные данные

Если подходящего распределения не существует, выведите -1. В противном случае, выведите d строк, по n чисел в каждой строке: j-е число i-й строки обозначает номер автобуса, в котором поедет j-й школьник в i-й день. Считайте, что автобусы нумеруются от 1 до k.

Примечание

Обратите внимание, что два школьника становятся друзьями, если они находятся в одном автобусе каждый день. При этом автобус, в котором они едут вместе, может меняться день ото дня.

D. Витя и множество

Конструктив математика Перебор *2300

Маленький Витя очень любит теорию множеств (напомним, что множество — это набор чисел, в котором все числа попарно различны). Сегодня Витя хочет найти множество целых чисел S, обладающее следующими свойствами:

  • для всех x выполняется неравенство l ≤ x ≤ r;
  • 1 ≤ |S| ≤ k;
  • обозначим i-й по порядку элемент множества S как si; значение как можно меньше.

Помогите Вите найти описанное множество.

Входные данные

В первой строке через пробел записаны три целых числа l, r, k (1 ≤ l ≤ r ≤ 1012; 1 ≤ k ≤ min(106, r - l + 1)).

Выходные данные

Выведите минимально возможное значение f(S). Затем выведите мощность множества |S|. Затем сами элементы множества в любом порядке.

Если существует несколько оптимальных множеств, разрешается вывести любое.

Примечание

Операция обозначает операцию побитого исключающего ИЛИ. Другими словами, операцию XOR.

B. Федя и новая игра

битмаски Конструктив Перебор реализация *1100

Как только вы помогли Юре с Лешей заселиться, они пошли помогать своему другу Феде играть в новую компьютерную игру «Call of Soldiers 3».

Всего в игре есть (m + 1) игроков и n видов солдат. Игроки «Call of Soldiers 3» пронумерованы от 1 до (m + 1), а виды солдат пронумерованы от 0 до n - 1. У каждого игрока есть армия, армия i-го игрока характеризуется целым неотрицательным числом xi. Рассмотрим битовое представление числа xi: если j-й бит числа xi равен единице, то в армии i-го игрока есть солдаты j-го вида.

Федя — игрок с номером m + 1. Федя считает, что два игрока могут дружить, если их армии отличаются не более чем на k видов солдат (другими словами, битовые представления соответствующих чисел различаются не более чем в k битах). Помогите Феде посчитать, сколько игроков могут с ним дружить.

Входные данные

В первой строке записаны три целых числа n, m, k (1 ≤ k ≤ n ≤ 20; 1 ≤ m ≤ 1000).

В i-й из (m + 1) последующих строк содержится одно целое число xi (1 ≤ xi ≤ 2n - 1), которое характеризует армию i-го игрока. Напомним, что Федя — это игрок с номером (m + 1).

Выходные данные

Выведите единственное целое число — количество возможных друзей Феди.

A. 24 Game

жадные алгоритмы Конструктив математика *1500

Little X раньше играл в карточную игру под названием «24 Game», но в последнее время она начала казаться ему слишком простой. И вот, он придумал новую игру.

Изначально у вас есть последовательность, состоящая из n целых чисел: 1, 2, ..., n. За один ход можно выбрать из последовательности два числа — обозначим их как a и b — удалить их из последовательности и добавить к последовательности либо a + b, либо a - b, либо a × b.

После n - 1 ходов последовательность будет состоять всего из одного числа. Можете ли вы сделать так, чтобы оно равнялось 24?

Входные данные

В первой строке записано единственное число n (1 ≤ n ≤ 105).

Выходные данные

Если это возможно, выведите в первой строке «YES». В противном случае выведите «NO» (без кавычек).

В случае положительного ответа, в следующих n - 1 строках выведите необходимые операции, по одной в строке. Каждая операция должна иметь вид: «a op b = c», где a и b — числа, выбранные вами на этой операции; op — это либо «+», либо «-», либо «*»; c — это результат соответствующей операции. Обратите внимание, что число c не должно превышать 1018 по модулю. Результат последней операции должен быть равен 24. Отделяйте знак оператора и знак равенства от чисел пробелами.

Если существует несколько корректных ответов, можно вывести любой.

C. Взламываем!

Бинарный поиск Конструктив математика *2500

Little X недавно наткнулся на следующую задачу.

Определим f(x) как сумму цифр в десятичной записи числа x (например, f(1234) = 1 + 2 + 3 + 4). Ваша задача — посчитать

Конечно, Little X быстро решил эту задачу, заблокировал решение и стал взламывать чужие решения. Открыв решение участника, он увидел следующий C++ код:


ans = solve(l, r) % a;
if (ans <= 0)
ans += a;

Этот код будет работать неправильно только на тесте с . Вам дано число a, помогите Little X найти подходящий тест для взлома.
Входные данные

В первой строке записано единственное целое число a (1 ≤ a ≤ 1018).

Выходные данные

Выведите два целых числа: l, r (1 ≤ l ≤ r < 10200) — данные для взлома. Не выводите ведущих нулей. Гарантируется, что решение существует.

E. Уроки дизайна задач: учимся у игр

Конструктив реализация *2800

Один из источников новых задач — игры. Надо выбрать игру и сосредоточиться на какой-то части механики игры. Так получится неплохая задача.

Давайте попробуем. Puzzle and Dragon стала популярной игрой в Японии — мы сосредоточимся только на части механики игры, в которой нужно передвигать сферы на доске.

(Картинка со странички Википедии: http://en.wikipedia.org/wiki/Puzzle_&_Dragons)

Задана доска размера n × m, в каждой ячейке доски находится сфера. Во время игры разрешено совершать следующие ходы. В начале хода вы прикасаетесь к одной из ячеек на доске, затем вы передвигаете палец в одну из соседних ячеек (у ячейки, которая не находится на границе, 8 соседей), затем вы можете еще раз передвинуть палец из текущей ячейки в одну из соседних и так далее. Каждый раз, когда вы двигаете палец от одной ячейки к другой, сферы, находящиеся в этих ячейках, меняются местами. Иными словами, какие бы движения пальцем вы не сделали, сфера в той клетке, к которой вы прикасаетесь, никогда не поменяется.

Задача игрока в игре — достичь такого расположения сфер, при котором сферы пропадут, а герой сможет атаковать врага — но эти детали нам не важны. Мы фокусируемся на другом. Пусть задано начальное расположение сфер, и конечное расположение сфер. Ваша задача — определить, можно ли получить из начального расположения конечное за один ход.

Входные данные

В первой строке записано два целых числа: n и m (1 ≤ n, m ≤ 30) — размеры игровой доски.

В каждой из следующих n строк записано по m целых чисел — описание изначальной доски: j-е число в i-й строке равняется si, j (1 ≤ si, j ≤ 900), где si, j обозначает тип сферы, расположенной в i-м ряду и в j-м столбце игровой доски.

Следующие n строк содержат конечную доску в аналогичном формате. Обратите внимание, что изначальная доска и конечная доска обязательно различаются.

Выходные данные

Если решения не существует, выведите: -1.

Если решение существует, то выведите в первой строке целое число k (1 ≤ k ≤ 106) — количество движений пальца в вашем ходе.

В следующей строке выведите два целых числа x0 и y0 (1 ≤ x0 ≤ n; 1 ≤ y0 ≤ m) — положение ячейки, к которой вы прикоснетесь в начале. В каждой из следующих k строк выведите два целых числа xi и yi (1 ≤ xi ≤ n; 1 ≤ yi ≤ m) — ячейка, в которую вы передвигаете палец в данный момент. Обратите внимание, что эта ячейка должна быть соседней с предыдущей, другими словами max(|xi - xi - 1|, |yi - yi - 1|) = 1.

Если у задачи несколько решений, можно вывести любое. Можно доказать, что при указанных ограничениях, если существует решение, то существует и решение с не более, чем 106 операциями.

F. Уроки дизайна задач: меняем цель задачи

Конструктив математика матрицы *2700

Существуют задачи со следующей структурой: вам дана модель, и вы можете выполнять некоторые операции, эти операции надо использовать для достижения определенной цели. Один из способ создания задач — использовать прежнюю модель и прежние операции, но поменять цель задачи.

Давайте попробуем. Как-то раз я придумал следующую сложную задачу для Topcoder SRM 557. Вам даны n целых чисел x1, x2, ..., xn. Разрешено выполнять сколько угодно присвоений следующего вида: xi ^= xj (в изначальной задаче i и j должны были быть различными, но в этой задаче мы позволим i равняться j). Ваша задача — максимизировать сумму всех xi.

Теперь мы просто меняем цель. Дополнительно вам заданы n целых чисел y1, y2, ..., yn. Вы должны добиться того, чтобы x1, x2, ..., xn в точности равнялись y1, y2, ..., yn. Иными словами, для каждого i число xi должно равняться yi.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 10000). Во второй строке записано n целых чисел: x1, x2, ..., xn (0 ≤ xi ≤ 109). В третьей строке записано n целых чисел: y1, y2, ..., yn (0 ≤ yi ≤ 109).

Выходные данные

Если решения не существует, выведите -1.

Если решение существует, то выведите в первой строке целое число m (0 ≤ m ≤ 1000000) — количество присвоений, которые надо выполнить. Затем выведите m строк, в каждой строке должно быть записано два целых числа i и j (1 ≤ i, j ≤ n), которые обозначают присвоение xi ^= xj.

Если существует несколько решений, разрешается вывести любое. Можно доказать, что при этих ограничениях если существует решение, то всегда существует решение с не более 106 операциями.

Примечание

Присвоение a ^= b обозначает присвоение a = a ^ b, где операция «^» является побитовым XOR двух целых чисел.

C. Картина Камаль оль-Молька

жадные алгоритмы Конструктив Перебор *2100

Ходят слухи, что одна из картин Камаль оль-Молька была подрисована. По картине провели прямоугольной кистью вправо и вниз.

Представим картину как прямоугольную сетку размера n × m. Сперва прямоугольная кисть размера x × y была поставлена где-то внутри картины так, что её стороны оказались параллельны линиям сетки, (1 ≤ x ≤ n, 1 ≤ y ≤ m). Затем кисть несколько раз сдвинули на клетку вниз или на клетку вправо. В процессе движения кисть оставалась строго в рамках картины. Кисть меняет каждую затронутую ей в какой-либо момент клетку.

Вы нашли одну из старых картин Камаль оль-Молька. Вы хотите знать, могла ли она быть подрисована указанным образом, и если да, то какого минимального размера могла быть кисть.

Входные данные

В первой строке входного файла записано два целых числа n и m, (1 ≤ n, m ≤ 1000), обозначающих высоту и ширину картины.

В следующих n строках содержится картина. В последующих n строках записано по m символов. Символ 'X' обозначает, что клетка была изменена, в противном случае клетка обозначается символом '.'. На картине присутствует хотя бы одна измененная клетка.

Выходные данные

Выведите минимальную площадь кисти, если картина могла быть подрисована указанным образом. В противном случае, выведите  - 1.

D. Dreamoon и множества

жадные алгоритмы Конструктив математика *1900

Dreamoon любит играть с множествами, целыми числами и . По определению, — это наибольший общий делитель a и b, то есть наибольшее положительное целое число, которое делит как a, так и b.

Рассмотрим некоторое множество S из ровно четырех различных положительных целых чисел. Будем говорить, что S имеет ранг k, тогда и только тогда, когда для всех пар различных элементов si, sj из S, .

Даны значения k и n, Dreamoon хочет образовать n множеств ранга k, используя только целые числа от 1 до m таким образом, что никакое число не участвует в двух различных множествах (конечно, некоторые числа можно не использовать ни в одном множестве).

Вычислите минимальное m, при котором это возможно сделать, и выведите одно возможное решение.

Входные данные

В единственной строке записано два целых числа через пробел n, k (1 ≤ n ≤ 10 000, 1 ≤ k ≤ 100).

Выходные данные

В первой строке выведите единственное целое число — минимально возможное m.

В каждой из следующих n строк выведите через пробел по четыре целых числа, составляющие i-е множество.

Порядок множеств и порядок чисел во множестве может быть любым. Если имеется несколько вариантов ответа с минимальным m, выведите любой из них.

Примечание

В первом примере легко увидеть, что множество {1, 2, 3, 4} не является корректным множеством ранга 1, так как .

B. Случайные команды

жадные алгоритмы Комбинаторика Конструктив математика *1300

Для участия в соревнованиях n участников были разбиты некоторым образом на m команд так, чтобы в каждой команде был хотя бы один участник. После соревнований каждая пара участников из одной команды стала друзьями.

Ваша задача — написать программу, которая определит, какое минимальное и какое максимальное количество пар друзей могло образоваться после соревнования.

Входные данные

В единственная строке содержатся два целых числа n и m, разделенных одним пробелом (1 ≤ m ≤ n ≤ 109) — количество участников и количество команд соответственно.

Выходные данные

Требуется вывести два целых числа kmin и kmax — минимальное возможное количество пар друзей и максимальное возможное количество пар друзей соответственно.

Примечание

В первом примере все участники попадают в одну команду, поэтому в любом случае будет образовано ровно десять пар друзей.

Во втором примере при любом разбиении в одной из команд будет два участника, а в другой — один. В таком случае количество пар друзей всегда будет равно одному.

В третьем примере минимальное количество друзей выходит при разбиении на команды по 2 человека, а максимальное — при разбиении на команды размерами 1, 1 и 4 человек.

B. Башни

жадные алгоритмы Конструктив Перебор реализация сортировки *1400

Как известно, все дети в Берляндии любят играть с кубиками. У маленького Пети имеется n башен, состоящих из кубиков одинакового размера. Башня под номером i представляет собой ai кубиков, поставленных друг на друга. Неустойчивостью набора башен Петя называет величину, равную разности высот самой высокой и самой низкой башни. К примеру, если Петя построил из кубиков пять башен с высотами (8, 3, 2, 6, 3), то неустойчивость этого набора равна 6 (самая высокая башня имеет высоту 8, самая низкая — высоту 2).

Мальчик хочет, чтобы неустойчивость его набора башен была как можно меньше. Все, что он может сделать, это несколько раз проделать следующую операцию: взять верхний кубик с какой-то из башен и положить его сверху на какую-то другую башню из своего набора. Обратите внимание, что Петя никогда не будет класть кубик на ту же башню, с которой тот был снят, потому что считает это пустой тратой времени.

Прежде чем отправиться в школу, мальчик успеет произвести не более k таких операций. Петя не хочет опоздать на урок, поэтому вам придется помочь ему выполнить эту задачу.

Входные данные

В первой строке через пробел записаны два целых положительных числа n и k (1 ≤ n ≤ 100, 1 ≤ k ≤ 1000) — количество башен в имеющемся наборе и максимальное число операций, которые Петя может произвести. Во второй строке через пробел записаны n целых положительных чисел ai (1 ≤ ai ≤ 104) — исходные высоты башен.

Выходные данные

В первой строке выведите через пробел два целых неотрицательных числа s и m (m ≤ k). Первое из чисел — это величина минимально возможной неустойчивости, которую можно достичь, применив не более k операций, а второе — количество операций, необходимых для этого.

Затем в m строках выведите описание каждой из операций в виде двух целых положительных чисел i и j, каждое из которых лежит в пределах от 1 до n. Они обозначают, что Петя переложил верхний кубик с i-й башни на j-ю (i ≠ j). Обратите внимание, что в процессе выполнения операций высоты некоторых башен могут стать равны нулю.

Если существует несколько корректных последовательностей операций, при которых достигается минимально возможная неустойчивость, разрешается вывести любую из них.

Примечание

В первом примере осуществляется два перекладывания, со второй башни на третью и со второй на первую. После этого высоты башен становятся одинаковыми и равными 6.

H. Черные и белые

Конструктив *2800

Согласно преданиям, король Берляндии Берл I отличался своей приверженностью к красоте и порядку. Однажды он приказал замостить пол залы дворца, где обычно проводились балы и приемы, черными и белыми плитками паркета в соответствии с задуманным им правильным геометрическим узором. Однако, как обычно водится, в связи с недофинансированием во дворец было доставлено всего лишь a черных и b белых плиток. Остальные c плиток были черно-белыми (см. рисунок).

Первоначальный план провалился! Узнав об этом, разгневанный король отдал новое приказание: замостить пол имеющимися плитками таким образом, чтобы ни одна черная сторона плитки не соприкасалась с белой. Плитки представляют собой квадраты одинакового размера 1 × 1, каждую черно-белую плитку можно поворачивать одним из четырех способов.

Разработать схему замощения было поручено придворному программисту, который справился с поставленной задачей, сохранив себе голову на плечах. А справитесь ли вы?

Входные данные

В первой строке заданы целые числа n и m (1 ≤ n, m ≤ 100) — размеры прямоугольника, который требуется замостить. В следующей строке содержатся неотрицательные числа a, b и c, a + b + c = nm, c ≥ m.

Выходные данные

Выведите 2n строк, каждая из которых содержит 2m символов — схему замощения. Каждая плитка обозначается квадратом 2 × 2 следующим образом (порядок соответствует рисунку выше):

Если существует несколько решений, выведите любое.

A. Разнообразная перестановка

жадные алгоритмы Конструктив *1200

Перестановкой p называется упорядоченный набор чисел p1,   p2,   ...,   pn, состоящий из n различных целых положительных чисел, каждое из которых не больше чем n. Число n будем называть длиной перестановки p1,   p2,   ...,   pn.

Ваша задача — найти такую перестановку p длины n, что среди чисел |p1 - p2|, |p2 - p3|, ..., |pn - 1 - pn| ровно k различных.

Входные данные

В единственной строке входных данных находятся два разделённых пробелом целых положительных числа n, k (1 ≤ k < n ≤ 105).

Выходные данные

Выведите n целых чисел — искомую перестановку. Если существует несколько ответов, разрешается вывести любой.

Примечание

Под записью |x| следует понимать абсолютную величину числа x.

B. Интересный массив

Деревья Конструктив Структуры данных *1800

Будем считать массив из n неотрицательных целых чисел a[1], a[2], ..., a[n] интересным, если он удовлетворяет m ограничениям. i-е из m ограничений состоит из трех целых чисел li, ri, qi (1 ≤ li ≤ ri ≤ n), которые означают, что величина в точности равна qi.

Ваша задача — найти любой интересный массив из n элементов, либо сообщить, что такого не существует.

Выражение x&y означает побитовое И чисел x и y. В языках программирования C++, Java и Python эта операция обозначается как «&», на Pascal она обозначается как «and».

Входные данные

В первой строке записано два целых числа n, m (1 ≤ n ≤ 105, 1 ≤ m ≤ 105) — количество элементов в массиве и количество ограничений.

В следующих m строках записано по три целых числа li, ri, qi (1 ≤ li ≤ ri ≤ n, 0 ≤ qi < 230), описывающих i-е ограничение.

Выходные данные

Если интересный массив существует, выведите «YES» (без кавычек) в первой строке, а во второй строке выведите n целых чисел a[1], a[2], ..., a[n] (0 ≤ a[i] < 230) — описание интересного массива. Если существует несколько ответов, разрешается вывести любой.

Если не существует интересного массива, выведите «NO» (без кавычек) в единственной строке.

A. Биты

битмаски Конструктив *1700

Обозначим за количество единиц в двоичной записи целого неотрицательного числа x.

Вам дано несколько запросов, каждый в виде пары целых чисел l и r. Для каждого запроса найдите такое x, что l ≤ x ≤ r, а максимально. Если таких чисел несколько, то требуется найти наименьшее из них.

Входные данные

Первая строка содержит целое число n — количество запросов (1 ≤ n ≤ 10000).

Следующие n строк содержат по два числа li, ri — параметры для очередного запроса (0 ≤ li ≤ ri ≤ 1018).

Выходные данные

На каждый запрос выведите требуемое число в отдельной строке.

Примечание

Двоичные представления чисел от 1 до 10 выглядят следующим образом:

110 = 12

210 = 102

310 = 112

410 = 1002

510 = 1012

610 = 1102

710 = 1112

810 = 10002

910 = 10012

1010 = 10102

E. Объявление на заборе

Бинарный поиск Конструктив Структуры данных *2500

Бизон-Чемпион недавно закончил покраску своего забора. Забор представляет из себя последовательность из n досок ширины 1 метр и произвольной высоты. i-я доска имеет высоту hi метров. Соседние доски следуют без зазора.

После покраски Бизон-чемпион решил разместить на заборе объявление о его продаже. Объявление будет выполнено на листе бумаги прямоугольного размера и расположено на заборе так, что боковые стороны листа параллельны доскам забора, и края листа совмещены с краями некоторых досок. Бизон-Чемпион ввел для себя следующие ограничения на размещение объявления:

  1. Ширина объявления после размещения должна быть ровно w метров.
  2. Объявление должно целиком находиться на участке забора с l-й по r-ю доски включительно (в том числе, нельзя выходить за пределы забора по вертикали).

Объявление будет красочным, поэтому Бизон-чемпион хочет, чтобы высота объявления была как можно больше.

Вам дано описание забора и несколько запросов на размещение объявления. Для каждого запроса выведите максимальную возможную высоту объявления, которое можно разместить на соответствующем участке забора при заданной фиксированной ширине объявления.

Входные данные

В первой строке ввода содержится целое число n — количество досок в заборе (1 ≤ n ≤ 105).

Во второй строке записаны n целых чисел hi, разделенных пробелом — высоты досок (1 ≤ hi ≤ 109).

В третьей строке содержится целое число m — количество запросов (1 ≤ m ≤ 105).

В последующих m строках идет описание запросов, каждый из которых представлен тремя целыми числами l, r и w (1 ≤ l ≤ r ≤ n, 1 ≤ w ≤ r - l + 1) — соответственно границы участка забора и ширина объявления.

Выходные данные

На каждый запрос выведите ответ в отдельной строке — максимальную высоту объявления, которую можно достичь на соответствующем участке забора при соблюдении всех условий.

Примечание

Забор, описанный в примере, выглядит следующим образом:

Ниже приведены возможные расположения объявлений при ответе на запросы.

Расположение объявления при ответе на первый запрос.
Расположение объявления при ответе на второй запрос.
Расположение объявления при ответе на третий запрос.

C. Последовательность частичных произведений

Конструктив математика теория чисел *2300

Рассмотрим последовательность [a1, a2, ... , an]. Определим последовательность частичных произведений как .

Вам дано число n. Найдите такую перестановку последовательности [1, 2, ..., n], что её последовательность частичных произведений это некоторая перестановка чисел [0, 1, ..., n - 1].

Входные данные

В единственной строке ввода записано целое число n (1 ≤ n ≤ 105).

Выходные данные

В первой строке выведите «YES», если такая последовательность существует, или «NO», если такой последовательности не существует.

Если решение существует, то выведите вывести ещё n строк. В i-ой строке надо вывести только число ai. Элементы последовательности должны быть различными целыми положительными числами, не превышающими n.

Если решений несколько, можно вывести любое из них.

Примечание

Во втором примере корректной последовательности не существует.

B. Коробки конфет

Конструктив математика Перебор *1900

В Киберленде есть древняя традиция держать в доме 4 коробки конфет. Количества конфет в коробках являются особенными, если их среднее арифметическое, медиана и диапазон совпадают. По определению, для набора чисел {x1, x2, x3, x4} (x1 ≤ x2 ≤ x3 ≤ x4) средним арифметическим называется , медианой называется , а диапазоном — x4 - x1. Среднее арифметическое и медиана не обязательно являются целыми числами. Хорошо известно, что набор коробок особенных размеров создаёт «отладочное поле» и программы в этом поле не будут содержать баги.

Например, 1, 1, 3, 3 — возможные 4 числа, которые удовлетворяют указанному условию, их среднее арифметиеское, медиана и диапазон равны 2.

У Джеффа есть 4 особенные коробки конфет. Но случилось нечто плохое! Некоторые коробки могли быть потеряны, и сейчас осталось ровно n (0 ≤ n ≤ 4) коробок. В i-й из оставшихся коробок лежит ai конфет.

Теперь Джефф хочет знать, возможно ли подобрать количества конфет в 4 - n пропавших коробках так, чтобы набор удовлетворял условию (среднее арифметическое, медиана и диапазон равны между собой)?

Входные данные

В первой строке ввода записано единственное целое число n (0 ≤ n ≤ 4).

В следующих n строках, записаны целые число ai, каждое из которых обозначает количество конфет в i-й коробке (1 ≤ ai ≤ 500).

Данные числа ai могут следовать в любом порядке во вводе, а не обязательно в неубывающем.

ai могли находиться на любых позициях в исходном наборе, а не обязательно на n первых позициях.

Выходные данные

В первой строке выведите «YES», если существует хотя бы одно решение, либо выведите «NO», если решения не существует.

Если существует хотя бы одно решение, выведите ещё 4 - n строк, в каждой строке выведите число b, обозначающее количество конфет в одной из пропавших коробок.

Значения b должны удовлетворять условию 1 ≤ b ≤ 106. Гарантируется, что если существует хотя бы одно положительное целочисленное решение, вы всегда сможете найти значения b, удовлетворяющие условию. Если есть несколько решений, можно вывести любое из них.

Выводить значения b можно в любом порядке.

Примечание

В первом примере количество конфет в 4 коробках может быть равно 1, 1, 3, 3. Среднее арифметическое, медиана и диапазон равны 2.

Во втором примере невозможно найти количества пропавших конфет.

В третьем примере ни одна из коробок не пропала, и количества конфет удовлетворяют условию.

C. Расстановка

Конструктив математика *1700

Вася купил полное собрание сочинений известного берляндского поэта Пети в n томах. Тома нумеруются от 1 до n. Вася решил поставить их на одну полку, на которой как раз было n свободных мест, пронумерованных от 1 до n. Он считает, что ставить книги просто по порядку — некрасиво. Вася хочет минимизировать количество делителей расстановки — таких целых положительных чисел i, что для хотя бы одного j (1 ≤ j ≤ n) выполняется: j mod i = 0 и в то же время p(j) mod i = 0, где p(j) — номер тома, который стоит на j-ом месте, а mod — операция взятия остатка от деления. Естественно, один том может занимать ровно одно место, и на одном месте стоит ровно один том.

Помогите Васе — найдите расстановку с наименьшим числом делителей.

Входные данные

В первой строке записано число n (1 ≤ n ≤ 100000) — количество томов и свободных мест.

Выходные данные

Выведите n чисел — искомую расстановку с наименьшим количеством делителей. j-ое число (1 ≤ j ≤ n) должно быть равно p(j) — номеру тома, который стоит на j-ом месте. Если решений несколько, выведите любое.

A. В гору пойдёт!

Конструктив реализация *1000

Команда туристического клуба «В гору пойдёт!» только что вернулась из очередного похода. Прямо сейчас участники экспедиции с жаром спорят о том, какой же горный хребет они покорили.

Достоверно известно, что на маршруте было N стоянок, причём все — на разной целочисленной высоте от 1 до N над уровнем моря. Альпинисты заблаговременно прибыли на место первой стоянки, а потом шли по маршруту в течении N - 1 дня: в первый день они шли от 1-й стоянки до 2-й, во второй — от 2-й до 3-й и так далее, пока в последний день не совершили переход от стоянки под номером N - 1 до стоянки под номером N, завершив этим свой маршрут.

Участники экспедиции пытаются понять, на какой высоте находилась каждая стоянка. В их распоряжении имеется запись в журнале, содержащая информацию о том, сколько дней они шли в гору, а сколько — спускались.

Помогите альпинистам! Подскажите им хоть какой-нибудь вариант маршрута, не противоречащий записи в журнале.

Входные данные

Входные данные содержат две строки. В первой строке записано целое неотрицательное число A — это количество дней, в которые альпинисты поднимались в гору. Вторая строка содержит целое неотрицательное число B — количество дней, в которые альпинисты спускались (A + B + 1 = N, 1 ≤ N ≤ 100 000).

Выходные данные

Выведите N различных целых чисел от 1 до N, разделённых пробелами, — маршрут, по которому могли пройти альпинисты. Маршрут описывается высотами стоянок в том порядке, в котором их могли посетить участники экспедиции.

D. Вася и шахматы

игры Конструктив математика *1700

Вася решил научиться играть в шахматы. Обычные шахматы для него не представляют большого интереса, поэтому он играет в свою разновидность шахмат.

Ферзь — это фигура, которая бьет все клетки на своей вертикали, горизонтали и диагонали. Если в клетке, которая находится под боем, расположена фигура вражеского цвета, ферзь может быть перемещён в эту клетку, при этом вражеская фигура снимается с доски. Ферзь не может побить вражескую фигуру, если между ферзем и этой фигурой есть какая-то другая фигура.

Есть шахматная доска n × n. Будем обозначать клетку на пересечении r-й горизонтали и c-й вертикали как (r, c). На поле (1, 1) стоит белый ферзь, на поле (1, n) — черный ферзь. На всех других полях стоят зеленые пешки, за которых никто не играет.

Игроки ходят по очереди. Игрок, делающий ход первым, играет за белого ферзя, его оппонент — играет за чёрного ферзя.

На каждом ходу игрок обязан бить своим ферзём некоторую фигуру (т. е. ходить в клетку, в которой расположена либо зелёная пешка, либо вражеский ферзь). Игрок проигрывает, если к его ходу нет ни одной фигуры, которую можно бить, либо если прошлым ходом оппонент взял его ферзя.

Помогите Васе определить, кто побеждает при правильной стратегии на доске n × n.

Входные данные

На вход даётся единственное число n (2 ≤ n ≤ 109) — размер доски.

Выходные данные

В первой строке выведите ответ на задачу — строку «white» или строку «black», в зависимости от того, кто выиграет при правильной игре.

Если ответ — «white», то также требуется вывести два числа r и c, обозначающих клетку (r, c), в которую следует совершить первый ход первому игроку, чтобы гарантированно победить. Если таких клеток несколько, выведите клетку с минимальным r. Если и таких клеток несколько, то выведите клетку с минимальным c.

Примечание

В первом тесте из условия у белого ферзя есть возможность сразу побить чёрного ферзя, таким образом, белые выигрывают.

Во втором тесте из условия если белый ферзь побьёт зелёную пешку, расположенную на центральной вертикали, он будет следующим ходом побит чёрным ферзём, поэтому единственный ход для белых — взять зелёную пешку, расположенную в (2, 1).

Аналогично, у чёрного ферзя нет другой возможности, кроме как взять зелёную пешку, расположенную в (2, 3), иначе, оказавшись на средней вертикали, он будет побит белым ферзём.

На следующем ходу происходит то же самое — ни у белого, ни у чёрного ферзя нет других возможностей, кроме как взять зелёные пешки, расположенные над ними. Таким образом, белый ферзь окажется на клетке (3, 1), а чёрный ферзь — на клетке (3, 3).

В этой ситуации белый ферзь обязан побить какую-то из зелёных пешек, расположенных на средней вертикали, после чего он будет бит чёрным ферзём. Таким образом, игрок, играющий за чёрного ферзя, выигрывает.

B. Секретный код

Конструктив Перебор реализация *1500

Вам в руки попала шкатулка с кодовым замком. На замке есть дисплей, который показывает n цифр. Рядом с дисплеем расположены две кнопки, каждая из которых изменяет цифры на дисплее. Вы быстро догадались, что первая кнопка прибавляет 1 ко всем цифрам (при этом все цифры 9 превращаются в цифры 0), а вторая — сдвигает все цифры на дисплее на одну позицию вправо (при этом последняя цифра становится первой). Например, если дисплей в данный момент показывает число 579, то если нажать первую кнопку, дисплей станет показывать 680, а если после этого нажать вторую кнопку, дисплей станет показывать 068.

Вам известно, что замок откроется, если на дисплее будет отображаться минимальное число из всех, которые можно получить нажатием на кнопки в каком-то порядке (каждая кнопка может быть нажать произвольное число раз). При сравнении чисел ведущие нули игнорируются. Теперь вам требуется определить, что это за число.

Входные данные

В первой строке записано одно целое число n (1 ≤ n ≤ 1000) — количество цифр на дисплее.

Во второй строке записано n цифр — исходное состояние дисплея.

Выходные данные

Выведите одну строку из n цифр — искомое состояние дисплея, содержащее минимально возможное число.

C. Удаление столбцов

Конструктив Перебор реализация *1500

Вам дана прямоугольная таблица размера n × m, состоящая из маленьких латинских букв. За одну операцию можно целиком удалить из таблицы один столбец; оставшиеся части образуют новую сплошную таблицу. Например, после удаления второго столбца из таблицы


abcd
edfg
hijk

 

получится таблица:


acd
efg
hjk

 

Таблица называется хорошей, если ее строки упорядочены сверху вниз в лексикографическом порядке, т.е. каждая строка лексикографически не превосходит следующую за ней. Определите минимальное количество операций удаления столбца, необходимых для того, что сделать данную таблицу хорошей.

Входные данные

В первой строке записано два целых числа — n и m (1 ≤ n, m ≤ 100).

В следующих n строках записано по m маленьких латинских букв — символы таблицы.

Выходные данные

Выведите одно число — минимальное число столбцов, которые необходимо удалить, чтобы таблица стала хорошей.

Примечание

В первом примере таблица уже является хорошей.

Во втором примере достаточно удалить первый и третий столбец.

В третьем примере необходимо удалить все столбцы (обратите внимание, что таблица, в которой все строки пустые, по определению является хорошей).

Пусть строки s и t имеют равную длину. Тогда строка s лексикографически больше строки t, если они не совпадают, и следующий за максимальным общим префиксом s и t (общий префикс может быть пустым) символ строки s идет в алфавитном порядке позже соответствующего символа строки t.

C. Наибольшая правильная скобочная подстрока

дп жадные алгоритмы Конструктив сортировки Строки Структуры данных *1900

И снова вам предлагается задача на правильные скобочные последовательности.

Напомним, что скобочная последовательность называется правильной, если путем вставки в нее символов «+» и «1» можно получить из нее корректное математическое выражение. Например, последовательности «(())()», «()» и «(()(()))» — правильные, в то время как «)(», «(()» и «(()))(» — нет.

Вам задана строка, состоящая из символов «(» и «)». Ваша задача найти её наидлиннейшую подстроку, которая является правильной скобочной последовательностью. Также вам надо найти количество таких подстрок.

Входные данные

В первой строке входного файла записана непустая строка, состоящая из символов «(» и «)». Её длина не превосходит 106.

Выходные данные

Выведите длину наибольшей подстроки, являющейся правильной скобочной последовательностью, и количество таких подстрок. Если искомых подстрок не существует, то выведите «0 1» в единственную строку выходных данных.

C. В Новый год — с книгой!

жадные алгоритмы Конструктив математика реализация *1600

Наступает Новый год и Jaehyun решил прочитать в наступающем 2015 году множество книг (в отличие от этого года, в котором он не преуспел). У него есть n книг, пронумерованных целыми числами от 1 до n. Вес i-й (1 ≤ i ≤ n) книги равняется wi.

Дом Jaehyun'а слишком маленький для книжного шкафа, поэтому он хранит свои n книг в вертикальной стопке. Когда он хочет прочитать некоторую книгу x, он выполняет следующие шаги:

  1. он поднимает все книги над книгой x;
  2. он вынимает книгу x из стопки;
  3. он опускает поднятые книги, не меняя их порядка;
  4. прочитав книгу x, он кладет её на вершину стопки.

Он решил читать книги на протяжении m дней. На j-й (1 ≤ j ≤ m) день он прочитает книгу, которой присвоен номер bj (1 ≤ bj ≤ n). Чтобы прочитать книгу, он использует последовательность действий, описанную выше. Возможно, что он несколько раз будет читать одну и ту же книгу.

Составив такой план, юноша понял, что суммарный вес книг, которые ему надо поднять за m дней, может быть слишком велик. Поэтому он решил поменять порядок книг в стопке до Нового года и минимизировать суммарный вес. Книги можно уложить в стопку в любом возможном порядке. Обратите внимание, что вес книги, которую он хочет почитать на очередном шаге, не учитывается среди поднятых на этом шаге. Можете ли вы помочь ему достичь желаемого?

Входные данные

В первой строке записано два целых числа через пробел, n (2 ≤ n ≤ 500) и m (1 ≤ m ≤ 1000) — количество книг и количество дней, в которые Jaehyun почитал бы книги.

Во второй строке записано n целых чисел через пробел w1, w2, ..., wn (1 ≤ wi ≤ 100) — вес каждой книги.

В третьей строке записано m целых чисел через пробел b1, b2, ..., bm (1 ≤ bj ≤ n) — порядок книг, которые парень хотел бы прочитать. Обратите внимание, что он может читать одну и ту же книгу более одного раза.

Выходные данные

Выведите минимальный суммарный вес книг, которые надо поднять парню, достижимый перестановкой уложенных книг.

Примечание

Приведем картинку, описывающую пример. Каждая вертикальная колонка обозначает уложенные книги.

C. Миша и лес

Деревья жадные алгоритмы Конструктив сортировки Структуры данных *1500

Назовем лесом неориентированный граф без циклов (петли и кратные рёбра также запрещены). Однажды Миша играл с лесом из n вершин. Для каждой вершины v от 0 до n - 1 он записал два числа degreev и sv, где первое число — количество вершин, смежных с вершиной v, а второе — XOR-сумма номеров вершин, смежных с v (в случае, если смежных вершин не было, он записал 0).

На следующий день Миша не смог вспомнить, какой граф у него был изначально. У Миши остались значения degreev и sv. Помогите ему найти количество ребер и сами ребра исходного графа. Гарантируется, что существует лес, которому соответствуют выписанные Мишей числа.

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 216), количество вершин в графе.

В i-й из последующих строк находятся числа degreei и si (0 ≤ degreei ≤ n - 1, 0 ≤ si < 216), разделенные пробелом.

Выходные данные

В первой строке выведите число m, количество ребер графа.

Далее выведите m строк, каждая из которых содержит два различных числа a и b (0 ≤ a ≤ n - 1, 0 ≤ b ≤ n - 1), соответствующие ребру (a, b).

Рёбра могут быть выведены в любом порядке; вершины одного ребра также могут быть выведены в любом порядке.

Примечание

XOR-суммой чисел называется результат побитового сложения чисел по модулю 2. Данная операция существует во многих современных языках программирования, например, в языках C++, Java и Python она обозначается как «^», а в Pascal — как «xor».

C. Аня и привидения

жадные алгоритмы Конструктив *1600

Аня очень любит смотреть фильмы ужасов. В лучших традициях хоррора, ее сегодня посетят m привидений. Для встречи с ними у Ани заготовлено множество свечей, каждая из которых горит ровно t секунд. За одну секунду она успевает зажечь одну свечу. Более формально, Аня может потратить одну секунду на то, чтобы зажечь одну свечу, после чего эта свеча горит ровно t секунд, а затем тухнет и больше не подлежит использованию.

Про каждое из m привидений Аня знает момент времени, в которое оно придет: i-е посещение произойдет через wi секунд после полуночи, при этом все wi различны. Каждое посещение длится ровно одну секунду.

Какое минимальное количество свечей нужно использовать Ане, чтобы во время каждого посещения горело не менее r свечей? Аня может начинать зажигать свечу в любое время, отстоящее от полуночи на целое число секунд, в том числе и до наступления полуночи.

Входные данные

В первой строке следуют три целых числа m, t, r (1 ≤ m, t, r ≤ 300), обозначающих соответственно количество привидений, которые посетят Аню, время горения одной свечи в секундах и минимальное количество свечей, которые должны гореть во время каждого посещения.

В следующей строке следуют через пробел m чисел wi (1 ≤ i ≤ m, 1 ≤ wi ≤ 300), i-е из которых обозначает, через сколько секунд после полуночи появится i-е привидение. Все wi различны и следуют в строго возрастающем порядке.

Выходные данные

Если возможно добиться того, что во время каждого посещения горит не менее r свечей, то выведите минимальное количество свечей, которое необходимо для этого зажечь Ане.

Если этого добиться невозможно, то выведите  - 1.

Примечание

Аня может начать зажигать свечу в ту же секунду, когда её посещает привидение. Но эта свеча не учитывается как горящая в это посещение.

Чтобы зажечь свечу, требуется ровно одна секунда, и после этой секунды свеча начинает гореть. Это значит, что если Аня начинает зажигать свечу в момент x, то свеча горит в секунды с (x+1)-й по (x+t)-ю включительно.

В первом тесте из условия будет достаточно трех свечей. Например, их можно начать зажигать в моменты времени 3, 5 и 7 секунд после полуночи.

Во втором тесте из условия будет достаточно одной свечи. Например, ее можно начать зажигать за одну секунду до полуночи.

В третьем тесте из условия ответом будет  - 1, так как в каждую секунду может гореть не более одной свечи, а в момент посещения привидением необходимо, чтобы горело три свечи.

B. Раскраска шаров

жадные алгоритмы Конструктив реализация *1300

На столе лежит n кучек камней, в i-й кучке находится ai камней. Требуется раскрасить каждый камень в один из k цветов так, чтобы для каждого цвета c и для любых двух кучек i и j количества камней цвета c в кучках i и j отличались не более чем на один.

Иными словами, пусть bi, c — количество камней в i-й кучке, покрашенных в цвет c. Тогда для любых 1 ≤ c ≤ k, 1 ≤ i, j ≤ n должно выполняться |bi, c - bj, c| ≤ 1. Необязательно использовать все k цветов: если цвет c не встречается в кучке i, то bi, c полагается равным нулю.

Входные данные

В первой строке входных данных заданы натуральные числа n и k (1 ≤ n, k ≤ 100), разделенные пробелом — количество кучек и количество цветов соответственно.

Во второй строке заданы n натуральных чисел a1, a2, ..., an (1 ≤ ai ≤ 100), задающие количества камней в кучках.

Выходные данные

Если раскраски камней, удовлетворяющей условию задачи, не существует, в единственной строке выведите «NO» (без кавычек).

Иначе в первой строке «YES» (без кавыечек). Далее должны следовать n строк, в i-й из них должны находиться ai чисел, разделенных пробелами. j-е (1 ≤ j ≤ ai) из этих чисел должно равняться цвету j-го камня в i-й кучке. Если возможных ответов несколько, разрешается вывести любой.

D. Восстановление чисел

Конструктив математика *2200

У Васи было два массива, составленных из целых неотрицательных чисел: a размера n и b размера m. Вася выбрал натуральное число k и построил таблицу v размера n × m по следующему правилу:

Вася записал таблицу v на листок и положил в стол.

Спустя год Вася, копаясь в кипе вещей в столе, нашёл какой-то листок, на котором была записана таблица w размера n × m. Он вспомнил, что когда-то давно строил таблицу по вышеописанным правилам, но он не уверен, что нашёл тот самый листок с таблицей v. Ваша задача — выяснить, могла ли найденная таблица w быть получена по этим правилам, и если да, то определить какой-нибудь набор чисел k, a1, a2, ..., an, b1, b2, ..., bm, по которым могла полуиться такая таблица.

Входные данные

В первой строке заданы натуральные числа n и m (1 ≤ n, m ≤ 100), разделенные пробелом — количество строк и столбцов в найденной таблице соответственно.

В i-й из последующих строк следуют числа wi, 1, wi, 2, ..., wi, m (0 ≤ wi, j ≤ 109), разделенные пробелами — элементы i-й строки таблицы w.

Выходные данные

Если таблица w не могла быть получена указанным в условии способом, в единственной строке выведите «NO» (без кавычек).

Иначе нужно вывести четыре строки.

В первой строке выведите «YES» (без кавычек).

Во второй строке выведите натуральное число k (1 ≤ k ≤ 1018). Обратите внимание, что каждый элемент таблицы w должен лежать в пределах от 0 до k - 1 включительно.

В третьей строке выведите n натуральных чисел a1, a2, ..., an (0 ≤ ai ≤ 1018).

В четвертой строке выведите m натуральных чисел b1, b2, ..., bm (0 ≤ bi ≤ 1018).

Примечание

Под записью подразумевается остаток от целочисленного деления b на c.

Гарантируется, что если существует какой-то набор чисел k, a1, ..., an, b1, ..., bm, по которому могла быть построена таблица w, то существует и набор чисел, удовлетворяющий ограничениям 1 ≤ k ≤ 1018, 1 ≤ ai ≤ 1018, 1 ≤ bi ≤ 1018. Иными словами, эти верхние границы введены только для удобства проверки.

E. Лиса и многоугольник

Конструктив разделяй и властвуй *2900

Лиса Ciel разработала игру-головоломку под названием «Многоугольник». В эту игру играют, используя триангуляции правильного n-угольника. Цель игры — преобразовать одну триангуляцию в другую, согласно определенным правилам.

Триангуляция n-угольника — это набор из n - 3 диагоналей, удовлетворяющих условию, что никакие две диагонали не имеют общих внутренних точек.

Например, изначальное состояние игры может выглядеть как (a) на рисунке, данном выше, а требуемое может выглядеть как (c). На каждом шагу вы можете выбрать диагональ триангуляции (но не ребро!) и инвертировать эту диагональ. Объясним, что значит инвертировать.

Допустим, вы хотите инвертировать диагональ a – b. Есть два треугольника со стороной a – b, обозначим их как a – b – c и a – b – d. В результате этой операции диагональ a – b заменяется диагональю c – d. Легко доказать, что после операции инвертирования получившийся набор диагоналей остается триангуляцией данного многоугольника.

Итак, чтобы решить приведенную выше задачу, можно сперва инвертировать диагональ 6 – 3, заменив её на диагональ 2 – 4. Затем можно инвертировать диагональ 6 – 4 и получить в результате рисунок (c).

Ciel только что доказала, что для любой начальной и конечной триангуляции у этой головоломки есть решение. Она хочет, чтобы вы решили задачу не более, чем за 20 000 шагов при условии n ≤ 1000.

Входные данные

В первой строке записано целое число n (4 ≤ n ≤ 1000), количество ребер правильного многоугольника.

Затем следуют две группы из (n - 3) строк, описывающих изначальную триангуляцию и конечную триангуляцию.

Описание каждой триангуляции состоит из (n - 3) строк. В каждой строке записано по 2 целых числа, ai и bi (1 ≤ ai, bi ≤ n), описывающих диагональ ai – bi.

Гарантируется, что и начальная, и конечная триангуляция корректны (то есть, никакие две диагонали не имеют общих внутренних точек в каждой из двух триангуляций).

Выходные данные

Сперва выведите целое число k (0 ≤ k ≤ 20, 000), количество шагов.

Затем выведите k строк, в каждой строке должно следовать 2 целых числа, ai и bi — концы диагонали, которую вы хотите инвертировать на шаге номер i. Между собой ai и bi можно выводить в любом порядке.

Если есть несколько возможных решений, выведите любое из них.

Примечание

Второй пример из условия обсуждается выше и показан на картинке.

A. Игра

Конструктив математика *800

Два игрока играют в простую игру. У каждого игрока есть коробка с шарами, причем коробка первого игрока содержит ровно n1 шаров, а коробка второго игрока содержит ровно n2 шаров. За один ход первый игрок может взять от 1 до k1 шаров из своей коробки и выкинуть их. Аналогичным образом, за один ход второй игрок может взять от 1 до k2 шаров из своей коробки и выкинуть их. Игроки ходят по очереди и первый игрок начинает игру. Проигрывает тот, кто не может сделать ход. Ваша задача определить, кто выигрывает игру, если оба игрока совершают ходы оптимальным образом.

Входные данные

Единственная строка входных данных содержит четыре целых числа n1, n2, k1, k2. Все числа во входных данных не меньше 1 и не больше 50.

В этой задаче нет подзадач. За ее решение вы получите 3 балла.

Выходные данные

Выведите "First" если выигрывает первый игрок и "Second" в противном случае.

Примечание

Рассмотрим первый тест из условия. Каждый игрок владеет коробкой с двумя шарами. Первый игрок может взять только один шар за один ход, а второй игрок за один ход может взять либо один либо два шара. Нетрудно заметить, что вне зависимости от ходов первого, второй игрок всегда выигрывает, если играет оптимально.

D. Drazil и плитка

жадные алгоритмы Конструктив *2000

Drazil собирался подготовить следующую задачу про замощение прямоугольного поля n × m плитками размера 1 × 2:

"Дано прямоугольное поле, некоторые ячейки которого пустые, а некоторые ячейки — занятые. Требуется замостить все пустые ячейки плитками размера 1 × 2, таким образом, что никакие две плитки не накладываются друг на друга. Выведите какой-нибудь способ замощения."

Но потом Drazil понял, что он не хочет писать программу-чекер для проверки этой задачи. Его друг Varda посоветовал: "А что, если попросить участника выводить решение, только если оно существует и оно единственное? В противном случае участник должен вывести 'Not unique' ".

Размышляя над новой задачей Drazil подметил, что в новой постановке можно установить ограничения на размеры поля выше, чем для исходной задачи.

Сможете ли вы решить новую задачу?

Обратите внимание, что выводить 'Not unique' требуется как в случае, когда решение не единственное, так и в случае, когда решения вовсе не существует.

Входные данные

В первой строке следуют два целых числа n и m (1 ≤ n, m ≤ 2000).

В следующих n строках описывается поле. Символ '.' обозначает пустую ячейку, а символ '*' обозначает занятую ячейку.

Выходные данные

Если решения не существует, или же оно не уникальное, выведите строку "Not unique".

В противном случае требуется вывести вариант покрытия всех пустых ячеек плитками размера 1 × 2. Обозначайте горизонтальные плитки символами "<>", а вертикальные плитки — символами "^v". Для полного понимания формата вывода обратитесь к примерам вывода.

Примечание

В первом примере действительно существует два решения исходной задачи:


<>^
^*v
v<>

и


^<>
v*^
<>v

Таким образом, ответ — "Not unique".

A. Виталий и строки

Конструктив Строки *1600

Виталий — прилежный студент, который за пять лет обучения в университете не пропустил ни одной пары, выполнял вовремя все домашние задания и всегда досрочно закрывал сессию.

На последней паре преподаватель продиктовал Виталию две строки s и t одинаковой длины, состоящие из строчных букв латинского алфавита, причем строка s лексикографически меньше строки t. Виталию стало интересно — существует ли такая строка, которая лексикографически больше строки s и одновременно лексикографически меньше строки t. Искомая строка Виталия также должна состоять из строчных букв латинского алфавита и иметь длину, равную длинам строк s и t.

Давайте поможем Виталию решить эту несложную задачу!

Входные данные

В первой строке задана строка s (1 ≤ |s| ≤ 100), состоящая из строчных букв латинского алфавита, где |s| — длина строки.

Во второй строке задана строка t (|t| = |s|), состоящая из строчных букв латинского алфавита, где |t| — длина строки.

Гарантируется, что длины строк s и t одинаковы, и строка s лексикографически меньше строки t.

Выходные данные

Если не существует строки, удовлетворяющей заданным требованиям, выведите единственную строку «No such string» (без кавычек).

Если же такая строка существует, выведите ее в первую строку выходных данных. Если подходящих строк несколько, разрешается вывести любую из них.

Примечание

По определению, строка s = s1s2... sn лексикографически меньше строки t = t1t2... tn, если существует такое i, что s1 = t1, s2 = t2, ... si - 1 = ti - 1, si < ti.

C. Аня и смартфон

Конструктив реализация Структуры данных *1600

Аня купила новый смартфон с операционной системой Berdroid. В меню смартфона ровно n приложений, у каждого своя иконка. Иконки расположены на различных экранах, на одном экране помещается k иконок. Иконки с первой по k-ю расположены на первом экране, с (k + 1)-й по 2k-ю на втором и так далее (последний экран может быть заполнен не полностью).

Изначально меню смартфона установлено на экран номер 1. Чтобы запустить приложение, чья иконка расположена на экране t, Ане надо сделать следующие движения пальцем: сначала домотать до нужного экрана номер t, сделав t - 1 движение (если иконка на экране t), а затем сделать еще одно движение — нажать ровно 1 раз на иконку нужного приложения для его запуска.

После запуска приложения меню откатывается на первый экран, то есть, чтобы запустить следующее приложение необходимо вновь листать меню с экрана номер 1.

Все приложения пронумерованы от 1 до n. Известен исходный порядок, в котором иконки приложений расположены в меню, но он изменяется по ходу использования операционной системы. Berdroid интеллектуально меняет порядок иконок, передвигая более часто используемые ближе к началу. Формально, сразу после запуска приложения его иконка меняется местами с впереди стоящей (т. е. имеющей на единицу меньший номер в порядке следования иконок), причем впереди стоящая иконка приложения может быть и на соседнем экране. Единственное исключение — если иконка запускаемого приложения уже стоит на первом месте, в этом случае расположение иконок не меняется.

Аня запланировала в каком порядке она будет запускать приложения. Сколько движений пальцем надо произвести Ане, чтобы запустить приложения в запланированном порядке?

Обратите внимание, что одно приложение может быть запущено многократно.

Входные данные

В первой строке входных данных следуют три целых числа n, m, k (1 ≤ n, m, k ≤ 105) — количество приложений, имеющихся на смартфоне Ани, количество приложений, которые будут запущены, и количество иконок, которые помещаются на одном экране соответственно.

Следующая строка содержит n целых чисел, перестановку a1, a2, ..., an — изначальный порядок иконок слева направо в меню (от первой до последней), ai — это номер приложения, иконка которого i-я в меню. Каждое целое число от 1 до n встречается ровно один раз среди ai.

Третья строка содержит m целых чисел b1, b2, ..., bm(1 ≤ bi ≤ n) — номера запускаемых приложений в запланированном порядке. Одно приложение может быть запущено несколько раз.

Выходные данные

Выведите одно целое число — сколько движений пальцем надо сделать Ане, чтобы запустить приложения в запланированном ею порядке.

Примечание

В первом тесте исходная конфигурация выглядит как (123)(456)(78), то есть на первом экране расположены иконки приложений 1, 2, 3, на втором экране — 4, 5, 6, а на третьем экране — 7, 8.

После запуска приложения номер 7 получим новое расположение иконок — (123)(457)(68). При этом для его запуска необходимо сделать 3 движения пальцем.

После запуска приложения номер 8 получим конфигурацию — (123)(457)(86). При этом для его запуска необходимо сделать 3 движения пальцем.

После запуска приложения номер 1 расположение иконок на экранах не меняется. При этом для его запуска необходимо сделать 1 движение пальцем.

Итого, Аня сделает 7 движений пальцем.

B. Паша и строка

жадные алгоритмы Конструктив математика Строки *1400

На День рождения Паше подарили очень красивую строку s, состоящую из строчных латинских букв. Буквы в строке пронумерованы от 1 до |s| слева направо, где |s| — длина подаренной строки.

Паше не совсем понравился подарок, и он решил его изменить. После Дня рождения в течение m дней Паша выполнял со своей строкой следующие преобразования — каждый день он выбирал целое число ai и переворачивал участок строки (отрезок) с позиции ai по позицию |s| - ai + 1. Гарантируется, что ai ≤ |s|.

Перед вами стоит следующая задача — определить, как будет выглядеть подаренная Паше строка через m дней.

Входные данные

В первой строке входных данных задана подаренная Паше строка s длины от 2 до 2·105 символов, состоящая из строчных латинских букв.

Во второй строке задано одно целое число m (1 ≤ m ≤ 105) — количество дней, в течении которых Паша изменял подаренную строку.

В третьей строке следуют через пробел m элементов ai (1 ≤ ai; ai ≤ |s|) — с какой позиции Паша начинал изменять строку в i-й день.

Выходные данные

Выведите единственной строкой как будет выглядеть подаренная Паше строка s через m дней.

D. Артур и стены

графы жадные алгоритмы Конструктив кратчайшие пути Структуры данных *2400

Наконец настал тот день, когда Артур накопил достаточную сумму денег и решил купить квартиру. Ему предложили отличный вариант — квартиру в самом центре города по отличной цене.

План предложенной Артуру квартиры представляет собой прямоугольник размера n × m, разделенный на квадраты размера 1 × 1. В каждом из таких квадратов находится либо стена (такой квадрат обозначен на плане символом "*"), либо свободное от стены место (такой квадрат обозначен на плане символом ".").

Комнаты в квартире представляют собой максимальные по размеру связные области из клеток, свободных от стен. Две клетки считаются соседними, если они имеют общую сторону.

Давней мечтой Артура была квартира, в которой все комнаты представляют собой прямоугольники. Он просит вас посчитать минимальное количество стен, которое нужно удалить для осуществления его мечты. После удаления из клетки стены в ней образуется свободное место. В процессе удаления стен несколько комнат могут объединиться в одну.

Входные данные

В первой строке входных данных следуют два целых числа n, m (1 ≤ n, m ≤ 2000) — размеры плана квартиры Артура.

В следующих n строках задано по m символов — описание плана квартиры.

Если клетка плана обозначена символом "*", значит в ней находится стена.

Если клетка карты обозначена символом ".", значит в этом месте квартиры свободное от стены место, и эта клетка относится к какой-то из комнат.

Выходные данные

Выведите n строк по m символов — как будет выглядеть план квартиры Артура, после удаления минимального количества стен для того, чтобы каждая комната (максимальная по размеру связная область из свободных от стен мест), представляла собой прямоугольник.

Если возможных ответов несколько, разрешается вывести любой из них.

C. Лягушонок

Конструктив *1200

Однажды лягушонок Вася решил отправиться в путешествие по своему родному болоту. Всего на болоте n кочек, расположенных на одной прямой. Расстояние между соседними кочками — один метр. Вася хочет за один день побывать на всех кочках, причем ровно по одному разу на каждой. Для этого он составляет маршрут — решить, в каком порядке он будет прыгать по кочкам. В качестве первой кочки Вася может выбрать любую. Он считает, что прыгать два раза на одно и то же расстояние — скучно. Поэтому он хочет, чтобы любые два прыжка по его маршруту имели разную длину. Помогите лягушонку Васе — составьте такой маршрут.

Входные данные

В единственной строке содержится число n (1 ≤ n ≤ 104) — количество кочек.

Выходные данные

Выведите n целых чисел pi (1 ≤ pi ≤ n) — маршрут лягушонка.

  • Все pi должны быть попарно различны.
  • Все |pipi + 1| должны быть попарно различны (1 ≤ i ≤ n - 1).

Если решений несколько, выведите любое.

A. Экзамен

Конструктив математика реализация *1100

Экзамен для n студентов будет проходить в длинной и узкой аудитории, таким образом, студенты будут сидеть в ряд в некотором порядке. Преподаватель подозревает, что студенты с соседними номерами (i и i + 1) в течение обучения всегда сидели рядом и подружились, и если их посадить рядом на экзамене, то они наверняка будут помогать друг другу.

Требуется выбрать максимальное количество студентов и составить такой вариант порядка размещения студентов в аудитории, что никакие два студента с соседними номерами не сидят рядом.

Входные данные

В единственной строке задано целое число n (1 ≤ n ≤ 5000) — количество студентов на экзамене.

Выходные данные

В первую строку выведите целое число k — максимальное количество студентов, которых можно рассадить так, что никакие два студента с соседними номерами не сидят рядом.

Во вторую строку выведите k целых различных чисел a1, a2, ..., ak (1 ≤ ai ≤ n), где ai — номер студента на i-й позиции. Студенты на соседних позициях не должны иметь соседние номера. Формально, |ai - ai + 1| ≠ 1 для всех i от 1 до k - 1.

Если возможных ответов несколько, выведите любой.

A. Экзамен

Конструктив математика реализация *1100

Экзамен для n студентов будет проходить в длинной и узкой аудитории, таким образом, студенты будут сидеть в ряд в некотором порядке. Преподаватель подозревает, что студенты с соседними номерами (i и i + 1) в течение обучения всегда сидели рядом и подружились, и если их посадить рядом на экзамене, то они наверняка будут помогать друг другу.

Требуется выбрать максимальное количество студентов и составить такой вариант порядка размещения студентов в аудитории, что никакие два студента с соседними номерами не сидят рядом.

Входные данные

В единственной строке задано целое число n (1 ≤ n ≤ 5000) — количество студентов на экзамене.

Выходные данные

В первую строку выведите целое число k — максимальное количество студентов, которых можно рассадить так, что никакие два студента с соседними номерами не сидят рядом.

Во вторую строку выведите k целых различных чисел a1, a2, ..., ak (1 ≤ ai ≤ n), где ai — номер студента на i-й позиции. Студенты на соседних позициях не должны иметь соседние номера. Формально, |ai - ai + 1| ≠ 1 для всех i от 1 до k - 1.

Если возможных ответов несколько, выведите любой.

A. Экзамен

Конструктив математика реализация *1100

Экзамен для n студентов будет проходить в длинной и узкой аудитории, таким образом, студенты будут сидеть в ряд в некотором порядке. Преподаватель подозревает, что студенты с соседними номерами (i и i + 1) в течение обучения всегда сидели рядом и подружились, и если их посадить рядом на экзамене, то они наверняка будут помогать друг другу.

Требуется выбрать максимальное количество студентов и составить такой вариант порядка размещения студентов в аудитории, что никакие два студента с соседними номерами не сидят рядом.

Входные данные

В единственной строке задано целое число n (1 ≤ n ≤ 5000) — количество студентов на экзамене.

Выходные данные

В первую строку выведите целое число k — максимальное количество студентов, которых можно рассадить так, что никакие два студента с соседними номерами не сидят рядом.

Во вторую строку выведите k целых различных чисел a1, a2, ..., ak (1 ≤ ai ≤ n), где ai — номер студента на i-й позиции. Студенты на соседних позициях не должны иметь соседние номера. Формально, |ai - ai + 1| ≠ 1 для всех i от 1 до k - 1.

Если возможных ответов несколько, выведите любой.

A. Экзамен

Конструктив математика реализация *1100

Экзамен для n студентов будет проходить в длинной и узкой аудитории, таким образом, студенты будут сидеть в ряд в некотором порядке. Преподаватель подозревает, что студенты с соседними номерами (i и i + 1) в течение обучения всегда сидели рядом и подружились, и если их посадить рядом на экзамене, то они наверняка будут помогать друг другу.

Требуется выбрать максимальное количество студентов и составить такой вариант порядка размещения студентов в аудитории, что никакие два студента с соседними номерами не сидят рядом.

Входные данные

В единственной строке задано целое число n (1 ≤ n ≤ 5000) — количество студентов на экзамене.

Выходные данные

В первую строку выведите целое число k — максимальное количество студентов, которых можно рассадить так, что никакие два студента с соседними номерами не сидят рядом.

Во вторую строку выведите k целых различных чисел a1, a2, ..., ak (1 ≤ ai ≤ n), где ai — номер студента на i-й позиции. Студенты на соседних позициях не должны иметь соседние номера. Формально, |ai - ai + 1| ≠ 1 для всех i от 1 до k - 1.

Если возможных ответов несколько, выведите любой.

A. Экзамен

Конструктив математика реализация *1100

Экзамен для n студентов будет проходить в длинной и узкой аудитории, таким образом, студенты будут сидеть в ряд в некотором порядке. Преподаватель подозревает, что студенты с соседними номерами (i и i + 1) в течение обучения всегда сидели рядом и подружились, и если их посадить рядом на экзамене, то они наверняка будут помогать друг другу.

Требуется выбрать максимальное количество студентов и составить такой вариант порядка размещения студентов в аудитории, что никакие два студента с соседними номерами не сидят рядом.

Входные данные

В единственной строке задано целое число n (1 ≤ n ≤ 5000) — количество студентов на экзамене.

Выходные данные

В первую строку выведите целое число k — максимальное количество студентов, которых можно рассадить так, что никакие два студента с соседними номерами не сидят рядом.

Во вторую строку выведите k целых различных чисел a1, a2, ..., ak (1 ≤ ai ≤ n), где ai — номер студента на i-й позиции. Студенты на соседних позициях не должны иметь соседние номера. Формально, |ai - ai + 1| ≠ 1 для всех i от 1 до k - 1.

Если возможных ответов несколько, выведите любой.

A. Экзамен

Конструктив математика реализация *1100

Экзамен для n студентов будет проходить в длинной и узкой аудитории, таким образом, студенты будут сидеть в ряд в некотором порядке. Преподаватель подозревает, что студенты с соседними номерами (i и i + 1) в течение обучения всегда сидели рядом и подружились, и если их посадить рядом на экзамене, то они наверняка будут помогать друг другу.

Требуется выбрать максимальное количество студентов и составить такой вариант порядка размещения студентов в аудитории, что никакие два студента с соседними номерами не сидят рядом.

Входные данные

В единственной строке задано целое число n (1 ≤ n ≤ 5000) — количество студентов на экзамене.

Выходные данные

В первую строку выведите целое число k — максимальное количество студентов, которых можно рассадить так, что никакие два студента с соседними номерами не сидят рядом.

Во вторую строку выведите k целых различных чисел a1, a2, ..., ak (1 ≤ ai ≤ n), где ai — номер студента на i-й позиции. Студенты на соседних позициях не должны иметь соседние номера. Формально, |ai - ai + 1| ≠ 1 для всех i от 1 до k - 1.

Если возможных ответов несколько, выведите любой.

A. Экзамен

Конструктив математика реализация *1100

Экзамен для n студентов будет проходить в длинной и узкой аудитории, таким образом, студенты будут сидеть в ряд в некотором порядке. Преподаватель подозревает, что студенты с соседними номерами (i и i + 1) в течение обучения всегда сидели рядом и подружились, и если их посадить рядом на экзамене, то они наверняка будут помогать друг другу.

Требуется выбрать максимальное количество студентов и составить такой вариант порядка размещения студентов в аудитории, что никакие два студента с соседними номерами не сидят рядом.

Входные данные

В единственной строке задано целое число n (1 ≤ n ≤ 5000) — количество студентов на экзамене.

Выходные данные

В первую строку выведите целое число k — максимальное количество студентов, которых можно рассадить так, что никакие два студента с соседними номерами не сидят рядом.

Во вторую строку выведите k целых различных чисел a1, a2, ..., ak (1 ≤ ai ≤ n), где ai — номер студента на i-й позиции. Студенты на соседних позициях не должны иметь соседние номера. Формально, |ai - ai + 1| ≠ 1 для всех i от 1 до k - 1.

Если возможных ответов несколько, выведите любой.

D. Рукопожатия

Бинарный поиск жадные алгоритмы Конструктив Структуры данных *1900

30 февраля в Центр олимпиадной подготовки программистов (ЦОПП) Берляндского государственного университета пришли n студентов. Они приходили по одному один за другим. Каждый из них, зайдя внутрь, прежде чем сесть за рабочее место, здоровался с присутствующими, пожимая руку. Каждый из пришедших студентов оставался в ЦОПП до конца дня, не покидая его.

В любой момент времени любые три студента могли объединиться и начать писать командный контест, который длился до конца дня. Команда не отвлекалась от контеста ни на минуту, поэтому очередной зашедший студент, здоровающийся с присутствующими, не пожимал руку участникам команд, пишущим контест. Каждая команда состояла ровно из трех студентов, а каждый студент мог стать членом не более чем одной команды. Разные команды могли начать писать контест в разное время.

Зная, скольким присутствующим каждый студент пожал руку, найдите возможный порядок, в котором студенты могли приходить в ЦОПП. Если такого порядка не существует, то сообщите, что это невозможно.

Обратите внимание, что какие-то студенты могли до конца дня работать самостоятельно, не участвуя в командном контесте.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 2·105) — количество студентов, пришедших в ЦОПП. В следующей строке содержатся n целых чисел a1, a2, ..., an (0 ≤ ai < n), где ai — количество студентов, которым i-й студент пожал руку.

Выходные данные

Если искомый порядок студентов существует, в первую строку выведите «Possible», а во вторую строку — перестановку номеров студентов, задающую порядок, в котором студенты приходили в центр. Число i стоящее левее числа j в этой перестановке будет означать, что i-й студент пришел раньше j-го студента. Если ответов несколько, выведите любой.

Если искомого порядка студентов не существует, в единственную строку выведите «Impossible».

Примечание

В первом примере из условия порядок событий мог быть следующим:

  • пришел студент с номером 4 (a4 = 0), здороваться ему было не с кем;
  • пришел студент с номером 5 (a5 = 1), пожал руку студенту с номером 4;
  • пришел студент с номером 1 (a1 = 2), пожал руку двум студентам (с номерами 4, 5);
  • пришел студент с номером 3 (a3 = 3), пожал руку трем студентам (с номерами 4, 5, 1);
  • студенты с номерами 4, 5, 3 объединились в команду и начали писать контест;
  • пришел студент с номером 2 (a2 = 1), пожал руку одному студенту (с номером 1).

Во втором примере из условия порядок событий мог быть следующим:

  • пришел студент с номером 7 (a7 = 0), здороваться ему было не с кем;
  • пришел студент с номером 5 (a5 = 1), пожал руку студенту с номером 7;
  • пришел студент с номером 2 (a2 = 2), пожал руку двум студентам (с номерами 7, 5);
  • студенты с номерами 7, 5, 2 объединились в команду и начали писать контест;
  • пришел студент с номером 1 (a1 = 0), здороваться ему было не с кем (все писали контест);
  • пришел студент с номером 6 (a6 = 1), пожал руку студенту с номером 1;
  • пришел студент с номером 8 (a8 = 2), пожал руку двум студентам (с номерами 1, 6);
  • пришел студент с номером 3 (a3 = 3), пожал руку трем студентам (с номерами 1, 6, 8);
  • пришел студент с номером 4 (a4 = 4), пожал руку четырем студентам (с номерами 1, 6, 8, 3);
  • студенты с номерами 8, 3, 4 объединились в команду и начали писать контест;
  • пришел студент с номером 9 (a9 = 2), пожал руку двум студентам (с номерами 1, 6).

В третьем примере из условия порядок событий восстанавливается однозначно:

  • пришел студент с номером 1 (a1 = 0), здороваться ему было не с кем;
  • пришел студент с номером 3 (или с номером 4) (a3 = a4 = 1), пожал руку студенту с номером 1;
  • пришел студент с номером 2 (a2 = 2), пожал руку двум студентам (с номерами 1, 3 (или 4));
  • оставшийся студент с номером 4 (или с номером 3), должен пожать руку одному студенту (a3 = a4 = 1), однако это невозможно, так как существует всего два варианта событий: либо образовалась команда, и он ни с кем не поздоровается, либо он поздоровается со всеми тремя присутствующими, работающими индивидуально.

E. Берляндская система локального позиционирования

жадные алгоритмы Конструктив реализация хэши *2400

В Берляндии вдоль главной улицы столицы курсирует автобус. Улица начинается от главной площади и представляет собой очень длинный отрезок. На протяжении всей улицы стоит n остановок, i-я из них расположена на расстоянии ai от центральной площади, все расстояния различны, остановки пронумерованы по возрастанию удаленности от площади, то есть ai < ai + 1 для всех i от 1 до n - 1. Автобус начинает свой путь от первой остановки, проезжает остановки 2, 3 и так далее. Он доезжает до остановки с номером n, разворачивается и едет в обратную сторону до остановки 1, проезжая все промежуточные остановки в обратном порядке. После этого он опять начинает движение в сторону остановки n. В течение дня автобус безостановочно курсирует по такому маршруту.

Автобус оснащен берляндской системой локального позиционирования. Когда автобус проезжает через остановку, система фиксирует ее номер.

Одна из ключевых возможностей системы — она может отвечать на запросы о пройденном расстоянии автобуса для участков его пути между некоторой парой остановок. Специальный модуль системы получает на вход информацию о наборе остановок на участке пути, причем номер остановки в наборе встречается столько раз, сколько раз мимо нее проехал автобус. Этот модуль возвращает длину пройденного участка пути (или -1, если длину однозначно определить невозможно). Работа модуля усложняется тем, что номера остановок передаются в запросе не в порядке их посещения, а в неубывающем порядке.

Например, если количество остановок равно 6, а участок пути автобуса начинается на остановке номер 5, заканчивается на остановке номер 3 и проходит остановки следующим образом: , то запрос об этом участке пути будет иметь вид: 3, 4, 5, 5, 6. Если же автобус на участке пути от остановки 5 до остановки 3 успевает проехать мимо 1-й остановки (то есть рассматривается участок, который заканчивается вторым посещением остановки 3 на пути из 5), то запрос будет иметь вид: 1, 2, 2, 3, 3, 4, 5, 5, 6.

Вам предстоит повторить подвиг берляндских программистов и реализовать данную функцию.

Входные данные

В первой строке записано целое число n (2 ≤ n ≤ 2·105) — количество остановок.

Вторая строка содержит n целых чисел (1 ≤ ai ≤ 109) — расстояние i-й остановки от центральной площади. Числа во второй строке идут в порядке возрастания.

В третьей строке записано целое число m (1 ≤ m ≤ 4·105) — количество остановок, которые проехал автобус на некотором участке пути.

Четвертая строка содержит m целых чисел (1 ≤ bi ≤ n) — номера остановок, которые проехал автобус на участке пути, в отсортированном порядке. Номер остановки встречается такое количество раз, сколько раз ее проехал автобус.

Гарантируется, что запрос соответствует некоторому участку пути.

Выходные данные

В единственную строку необходимо вывести расстояние, которое проехал автобус. Если это невозможно однозначно определить, необходимо вывести  - 1.

Примечание

Первый тест из условия демонстрирует первый, разобранный в условии задачи пример.

Второй тест из условия демонстрирует второй, разобранный в условии задачи пример.

В третьем примере возможны два разных маршрута, которые имеют разные длины, следовательно, искомая длина участка не определена однозначно.

В четвертом примере, несмотря на то, что запросу соответствуют два разных маршрута, они имеют одинаковые длины, следовательно, искомая длина участка определена однозначно.

B. Разрушение дорог

графы Конструктив кратчайшие пути *2100

В некоторой стране есть ровно n городов и m двусторонних дорог, соединяющих города. Пронумеруем города некоторым образом целыми числами от 1 до n. Если города a и b соединены дорогой, то за один час вы можете по ней проехать как из города a в город b, так и из города b в город a. Кроме того, сеть дорог такова, что из каждого города можно добраться до любого другого города, двигаясь по дорогам.

Вы хотите разрушить наибольшее количество дорог в стране так, чтобы с помощью оставшихся дорог можно было добраться из города s1 в город t1 не более чем за l1 часов и из города s2 в город t2 не более чем за l2 часов.

Определите, какое максимальное количество дорог можно разрушить так, чтобы удовлетворить условию вашего плана. Если добиться желаемого невозможно, выведите -1.

Входные данные

В первой строке задано два целых числа n, m (1 ≤ n ≤ 3000, ) — количество городов и дорог в стране соответственно.

Далее в m строках задано описание дорог в виде пар чисел ai, bi (1 ≤ ai, bi ≤ n, ai ≠ bi). Гарантируется, что по заданным в описании дорогам из каждого города можно добраться до любого другого города. Гарантируется, что между каждой парой городов существует не более одной дороги.

Последние две строки содержат по три числа s1, t1, l1 и s2, t2, l2, соответственно (1 ≤ si, ti ≤ n, 0 ≤ li ≤ n).

Выходные данные

Выведите единственное число — ответ на задачу. Если план выполнить невозможно, выведите -1.

E. Слушаем музыку

Конструктив Структуры данных *3200

Обратите внимание на нестандартное ограничение по памяти.

Вы очень любите слушать музыку. В течение следующих s дней вы будете слушать ровно по m песен из плейлиста, который состоит ровно из n песен. Пронумеруем песни из плейлиста числами от 1 до n включительно. Качество песни с номером i равно ai.

В i-й день вы выбираете некоторое целое v (li ≤ v ≤ ri) и слушаете песни с номерами v, v + 1, ..., v + m - 1. Кроме этого, в i-й день прослушивание одной песни с качеством меньше qi увеличивает ваше недовольство ровно на одну единицу.

Определите, какого минимального недовольства возможно достичь в каждый из s следующих дней.

Входные данные

В первой строке записано два целых положительных числа n, m (1 ≤ m ≤ n ≤ 2·105). Во второй строке записано n целых положительных чисел a1, a2, ..., an (0 ≤ ai < 230) — описание песен плейлиста.

В следующей строке записано единственное число s (1 ≤ s ≤ 2·105)— количество рассматриваемых дней.

В следующих s строках записано по три целых числа li, ri, xi (1 ≤ li ≤ ri ≤ n - m + 1; 0 ≤ xi < 230) — описание параметров для i-го дня. Чтобы вычислить значение qi необходимо воспользоваться формулой: , где ansi — ответ на задачу для дня i. Будем считать, что ans0 = 0.

Выходные данные

Выведите ровно s целых чисел ans1, ans2, ..., anss, где ansi — минимальное недовольство, которого можно достичь в день с номером i.

B. Море и острова

Конструктив реализация *1400

Карта некоторого объекта представляет из себя клетчатое поле, состоящее из n строк и n столбцов. Каждая клетка изначально занята морем, но вы можете засыпать песком некоторые из клеток клетчатого поля таким образом, чтобы на карте образовалось ровно k островов. Объединим набор клеток с песком в остров, если из каждой из них можно добраться до каждой из них, перемещаясь только по клеткам с песком, и переходя из клетки с песком в соседнюю с ней по стороне клетку с песком. Клетки называются соседними по стороне, если у них есть общая горизонтальная или вертикальная сторона. Легко видеть, что разные острова не могут пересекаться по клеткам (иначе бы они в объединении давали больший остров).

Найдите способ засыпать некоторые клетки песком таким образом, чтобы на карте n × n образовалось ровно k островов, либо сообщите, что такого способа не существует.

Входные данные

В единственной строке записано два целых положительных числа n, k (1 ≤ n ≤ 100; 0 ≤ k ≤ n2) — размер карты и количество островов, которые должны образоваться.

Выходные данные

Если искомого ответа не существует, выведите «NO» (без кавычек) в единственной строке. Иначе, выведите «YES» в первой строке. В следующих n строках выведите описание карты. Каждая из строк описания должна состоять только из символов 'S' и 'L', где 'S' обозначает клетку, занятую морем, а 'L' обозначает клетку, засыпанную песком. Кроме того, длина каждой строки описания должна быть равна n.

Если существует несколько ответов, разрешается вывести любой.

Максимизировать размер островов не требуется.

D. Солдат и игра с числами

дп Конструктив математика теория чисел *1700

Два солдата играют в игру. Сначала один солдат выбирает целое положительное число n и называет его второму солдату. Затем второй солдат пытается совершить наибольшее количество ходов. На каждом ходу солдат выбирает положительное целое число x > 1, такое, что n делится на x, и заменяет число n числом n / x. Когда n становится равно 1 и больше нет возможных ходов, тогда игра завершается и счет второго солдата равен количеству совершённых им ходов.

Чтобы сделать игру поинтереснее, в качестве n солдат выбирает число вида a! / b! для некоторых положительных целых чисел a и b (a ≥ b). Здесь под k! имеется в виду факториал числа k, который определяется как произведение всех положительных целых чисел, не превосходящих k.

Определите максимально возможный счет второго солдата.

Входные данные

В первой строке входа записано единственное целое число t (1 ≤ t ≤ 1 000 000) обозначающее количество игр, в которые играют солдаты.

Затем следуют t строк, в каждой строке записана пара чисел a и b (1 ≤ b ≤ a ≤ 5 000 000), обозначающая значение n для игры.

Выходные данные

Для каждой игры выведите максимальный счет, которого может достичь второй солдат.

D. Майк и рыба

графы Конструктив поиск в глубину и подобное *2600

Как известно, мишки любят рыбу. Но Майк — медведь необычный; он ненавидит рыбу! При этом как ни странно, у него есть бесконечное количество синей и красной рыбы.

Майк отметил n различных точек на плоскости. Координаты точки номер i это (xi, yi). Он хочет положить ровно одну рыбу на каждую из этих точек так, чтобы разница между количеством красной и синей рыбы на каждой горизонтальной и вертикальной прямой была не более 1.

Майк никак не может справиться с этим! Пожалуйста, помогите ему.

Входные данные

В первой строке ввода записано целое число n (1 ≤ n ≤ 2 × 105).

В следующих n строках записана инфомация о точках, в i-й строке записано два целых числа, xi и yi (1 ≤ xi, yi ≤ 2 × 105) — координаты i-й точки.

Гарантируется, что существует не менее одного корректного ответа.

Выходные данные

Выведите ответ как строку длины n из символов 'r' (красный) и 'b' (синий), i-й символ которой должен обозначать цвет рыбы в i-й точке.

B. Вечеринка в Looksery

графы жадные алгоритмы Конструктив поиск в глубину и подобное *2300

В компании Looksery, состоящей из n сотрудников, намечается очередная большая вечеринка. У каждого сотрудника в телефонной книге записан свой номер и номера друзей. Каждый, кто приходит на вечеринку, рассылает сообщения своим контактам о том, как там классно. При этом все стараются как можно больше времени потратить на веселье, поэтому рассылают сообщения всем, без разбора, и даже себе.

Игорь и Макс — разработчики Looksery — затеяли спор, кому сколько придёт сообщений. Игорь указывает n чисел, i-е из которых обозначает, сколько, по его мнению, сообщений придет i-му сотруднику. Если Игорь угадает правильно хотя бы одно из этих чисел, то он выиграет, в противном случае выиграет Макс.

Вы поддерживаете Макса в этом споре, поэтому вам требуется по заданным спискам контактов сотрудников определить, существует ли расклад, при котором Игорь проиграет. Точнее, Вам нужно определить, кто из сотрудников должен прийти на вечеринку, а кто — нет, так чтобы после того, как все пришедшие разошлют сообщения своим контактам, каждый сотрудник получил число сообщений отличное от того, что указал Игорь.

Входные данные

В первой строке задано одно целое число n (1 ≤ n ≤ 100) — количество сотрудников компании Looksery.

В следующих n строках задано описание списков контактов сотрудников. В i-й из этих строк записана строка длины n, состоящая из нулей и единиц, задающая список контактов i-го сотрудника. Если j-й символ i-й строки равен 1, то j-ый сотрудник находится в списке контактов i-го, в противном случае — не находится. Гарантируется, что i-й символ i-й строки всегда равен 1.

В последней строке задано n целых чисел, разделенных пробелами: a1, a2, ..., an (0 ≤ ai ≤ n), где ai обозначает число сообщений, которое должен получить i-й сотрудник по мнению Игоря.

Выходные данные

В первой строке выведите одно целое число m — количество сотрудников, которые должны прийти на вечеринку, чтобы Игорь проиграл спор.

Во второй строке через пробел выведите m целых чисел — номера этих сотрудников в произвольном порядке.

Если же Игорь в любом случае выиграет спор, выведите -1.

Если возможных ответов несколько, выведите любой из них.

Примечание

В первом примере по мнению Игоря первый сотрудник получит 0 сообщений. Т.к. его нет в списке контактов других сотрудников, то он должен прийти на вечеринку, чтобы получить сообщение от самого себя. Если на вечеринку придет только первый сотрудник, то он получит 1 сообщение, второй — 0 сообщений, и третий также 1 сообщение. В итоге Игорь не угадает ни одного числа.

Во втором примере, если единственный сотрудник придет на вечеринку, то он получит 1 сообщение и Игорь победит в споре, следовательно ему не стоит этого делать.

В третьем примере первый сотрудник компании получит 2 сообщения, второй — 3, третий — 2, четвертый — 3.

G. Счастливая очередь

жадные алгоритмы Конструктив сортировки *2200

Любите ли вы лето? Жители Берляндии любят. А особенно они любят в жаркую летнюю погоду полакомиться мороженым. Так и в этот летний день перед киоском с мороженым образовалась огромная очередь из n берляндцев. Известно, что у каждого из них есть с собой некоторая сумма берляндских долларов. Жители Берляндии сговорчивые, поэтому каждый берляндец всего за 1 доллар согласен поменяться местом с тем, кто стоит в очереди непосредственно за ним. Более формально, если человек a стоял сразу за человеком b, то человек a может заплатить человеку b 1 доллар, и тогда a и b поменяются местами. Разумеется, если у человека a нулевое количество долларов, то он не может поменяться местами с b.

Жители Берляндии — люди странные. В частности, они расстраиваются, когда в очереди перед ними стоит кто-то со строго меньшей суммой денег.

Сможете ли вы помочь жителям Берляндии упорядочиться в очереди так, чтобы все они были счастливы? Счастливый берляндец — это тот, который стоит в очереди первым, либо тот, впереди которого стоит другой житель с не меньшим количеством долларов. Учтите, что берляндцы — люди принципиальные, и согласны меняться местами только указанным выше способом.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 200 000) — количество жителей, которые стоят в очереди.

Во второй строке через пробел записаны n целых чисел ai (0 ≤ ai ≤ 109), где ai — это количество берляндских долларов у человека, стоящего на i-й позиции в очереди. Позиции пронумерованы, начиная с конца очереди.

Выходные данные

Если невозможно сделать так, чтобы все берляндцы стали счастливы, выведите ":(" без кавычек. В противном случае в единственной строке через пробел выведите n целых чисел, i-е из которых должно равняться количеству денег, которое будет у человека, оказавшегося на позиции i в новой очереди. Если существует несколько ответов, выведите любой из них.

Примечание

В первом примере два жителя должны поменяться местами, после чего у первого жителя станет 10 монет и он будет в начале очереди, а у второго - 9 монет, и, соответственно, он будет в конце очереди.

Во втором втором тесте добиться требуемого невозможно

В третьем примере первый человек может поменяться местами со вторым, тогда количества долларов у них будет следующими: 4 11 3, потом второй (в новой очереди) поменяется с третьим, и результирующие количества долларов будут равны: 4 4 10. В такой очереди все будут счастливы.

D. Регулярный мост

графы Конструктив реализация *1900

Неориентированный граф называется k-регулярным, если степени всех его вершин равны k. Ребро связного графа называется мостом, если после его удаления граф распадается на две компоненты связности.

Постройте неориентированный связный k-регулярный граф, содержащий по крайней мере один мост, либо определите, что такого графа не существует.

Входные данные

В единственной строке входных данных содержится целое число k (1 ≤ k ≤ 100) — требуемая степень вершин регулярного графа.

Выходные данные

Выведите "NO" (без кавычек), если искомого графа не существует.

Иначе выведите "YES" в первой строке и описание любого подходящего графа в последующих строках.

Описание построенного графа должно начинаться с чисел n и m — количества вершин и ребер соответственно.

Последующие m строк должны содержать по два целых числа a и b (1 ≤ a, b ≤ n, a ≠ b), означающих, что существует ребро, соединяющее данные вершины. Граф не должен содержать кратных ребер, а также ребер, ведущих из вершины в саму себя. Граф должен быть связным, степени всех вершин графа должны равняться k. Хотя бы одно ребро графа должно быть мостом. Ребра графа можно выводить в любом порядке. Концы каждого ребра можно выводить в любом порядке.

Построенный граф должен содержать не более 106 вершин и не более 106 ребер (гарантируется что, если хотя бы один граф, удовлетворяющий требованиям, существует, то существует и граф с не более, чем 106 вершин и не более, чем 106 рёбер).

Примечание

В примере из условия подходит граф из двух вершин, соединенных единственным ребром.

E. Скобки в импликациях

жадные алгоритмы Конструктив математика реализация *2200

Напомним, что импликация — это функция от двух логических аргументов, значение которой ложно тогда и только тогда, когда значение первого аргумента истинно, а второго аргумента ложно.

Для записи импликации используется символ '', а аргументы и результат импликации обозначаются '0' (ложное значение, false) и '1' (истинное значение, true). По определению импликации:

Когда логическое выражение содержит несколько импликаций, то при отсутствии скобок оно будет вычисляться слева направо. Например,

.

При наличии скобок сперва вычисляется выражение в скобках. Например,

.

Для заданного логического выражения определите, можно ли расставить в нем скобки так, чтобы значение логического выражения было ложно. Если это возможно, требуется найти такую расстановку скобок.

Входные данные

Первая строка содержит целое число n (1 ≤ n ≤ 100000) — количество аргументов в логическом выражении.

Вторая строка содержит n чисел a1, a2, ..., an (), обозначающих значения аргументов в выражении в порядке следования.

Выходные данные

Выведите "NO" (без кавычек), если расставить в выражении скобки так, чтобы его значение равнялось 0, невозможно.

Иначе выведите "YES" в первой строке и логическое выражение с нужной расстановкой скобок во второй строке.

Выражение должно содержать только символы '0', '1', '-' (символ с ASCII кодом 45), '>' (символ с ASCII кодом 62), '(' и ')'. Символы '-' и '>' могут встречаться в выражении только в паре ("->") и обозначают импликацию. Суммарное количество логических аргументов (т. е. цифр '0' и '1') в выражении должно равняться n. Порядок следования цифр в выражении слева направо должен совпадать с a1, a2, ..., an.

Выражение должно быть правильным. Более формально, правильное выражение определяется следующим образом:

  • Выражения "0", "1" (без кавычек) — правильные.
  • Если v1, v2 — правильные выражения, то v1->v2 — правильное выражение.
  • Если v — правильное выражение, то (v) — правильное выражение.

Общее количество символов в полученном выражении не должно превысить 106.

Если возможных ответов несколько, разрешается вывести любой.

B. ZgukistringZ

Конструктив Перебор реализация Строки *1800

Профессор GukiZ не всегда принимает строки такими, какие они есть. Получая строку, он иногда переставляет местами некоторые буквы в строке, таким образом, чтобы получалась новая строка.

У GukiZ есть строки a, b, и c. Он хочет получить строку k, поменяв местами некоторые буквы в a, так, чтобы в k содержалось как можно больше непересекающихся подстрок, равных либо b, либо c. Подстрока строки x — это строка, сформированная непрерывным подотрезком символов из x. Две подстроки строки x пересекаются, если есть такая позиция i в строке x, которая принадлежит обеим этим подстрокам.

GukiZ был разочарован, когда ни один из его учеников не смог решить эту задачу. Сможете помочь им и найти одну из возможных строк k?

Входные данные

В первой строке записана строка a, во второй строке записана строка b, а в третьей строке записана строка c (1 ≤ |a|, |b|, |c| ≤ 105, где |s| обозначает длину строки s).

Все три строки содержат только строчные буквы английского алфавита.

Строки b и c не обязательно различны.

Выходные данные

Найдите одну из возможных строк k, отвечающую описанию, данному в условии задачи. Если есть несколько возможных ответов, выведите любой.

Примечание

В третьем примере у данного оптимального решения есть три непересекающиеся подстроки, равные либо b, либо c в позициях 1 – 2 (ab), 3 – 4 (ab), 5 – 7 (aca). В этом примере существует много других оптимальных решений, одно из них: acaababbcc.

B. Кёя и перестановка

Бинарный поиск жадные алгоритмы Комбинаторика Конструктив математика реализация *1900

Определим перестановку длины n как последовательность p = [p1, p2, ..., pn], состоящую из n различных целых чисел от 1 до n. Мы говорим, что эта перестановка переводит число 1 в число p1, число 2 в число p2, и так далее.

Кёя Оотори только что узнал про циклическое разложение перестановки. Цикл — это последовательность чисел, таких, что каждый элемент этой последовательности переводится перестановкой p в следующий элемент этой последовательности (а последний элемент цикла переводится в первый элемент цикла). Циклическое разложение — это представление p в виде набора циклов, образующих p. Например, перестановка p = [4, 1, 6, 2, 5, 3] имеет циклическое разложение, которое выглядит как (142)(36)(5): действительно, 1 переводится в 4, 4 переводится в 2, 2 переводится в 1, 3 и 6 меняются местами, и 5 остаётся на месте.

Перестановка может иметь несколько циклических разложений, поэтому Кёя определяет стандартное циклическое разложение перестановки следующим образом. Сперва переставим элементы внутри каждого цикла таким образом, чтобы наибольший элемент был на первом месте. Затем переставим все циклы так, чтобы они были отсортированы по их первому элементу. Для данного выше примера стандартное циклическое разложение чисел [4, 1, 6, 2, 5, 3] равно (421)(5)(63).

Кёя заметил, что если убрать скобки внутри стандартного циклического разложения, то мы получаем ещё одну перестановку! Например, [4, 1, 6, 2, 5, 3] превращается в [4, 2, 1, 5, 6, 3].

Кёя заметил, что некоторые перестановки не меняются после применения операции, описанной выше. Он выписал все перестановки длины n, которые не меняются в результате применения описанной операции, в лексикографическом порядке. К сожалению, его друг Тамаки Суо этот список потерял. Кёя хочет воспроизвести список и ему нужна ваша помощь. Вам даны целые числа n и k, выведите перестановку, которая была k-й в списке Кёи.

Входные данные

В первой строке записано два целых числа n, k (1 ≤ n ≤ 50, 1 ≤ k ≤ min{1018, l}, где l — это длина списка Кёи).

Выходные данные

Выведите через пробел n целых чисел, обозначающих перестановку, являющуюся ответом на вопрос.

Примечание

В первом тесте из условия стандартное циклическое разложение выглядит как (1)(32)(4), что дает нам изначальную перестановку после удаления скобок. Первая перестановка в списке равна [1, 2, 3, 4], а вторая перестановка равна [1, 2, 4, 3].

B. Паша и чай

Конструктив математика реализация сортировки *1500

Паша решил позвать своих друзей на чаепитие. Как раз для этого случая у него был большой чайник объемом w миллилитров и 2n чашек для чая, каждая из которых достанется одному из друзей Паши. В i-ю чашку может быть налито не более ai миллилитров воды.

Оказалось, что среди друзей Паши ровно n мальчиков и ровно n девочек, и все они придут на чаепитие. Чтобы никто не обижался, Паша решил наливать воду для чая следующим образом:

  • Паша может вскипятить чайник ровно один раз, залив в него не более w миллилитров воды;
  • каждой девочке Паша нальет одинаковый объем воды;
  • каждому мальчику Паша нальет одинаковый объем воды,
  • если каждой девочке будет налито по x миллилитров воды, то каждому мальчику будет налито по 2x миллилитров воды.

Иными словами, каждому мальчику должно быть налито в 2 раза больше воды, чем каждой девочке.

Паша очень добрый и любезный, поэтому хочет суммарно налить своим друзьям как можно больше воды, чтобы заварить в ней чай. Вам предстоит помочь ему в этом и определить оптимальное распределение чашек между друзьями Паши.

Входные данные

В первой строке входных данных следует два целых числа n и w (1 ≤ n ≤ 105, 1 ≤ w ≤ 109) — количество друзей-мальчиков (равное количеству друзей-девочек) Паши и объем Пашиного чайника в миллилитрах.

Во второй строке входных данных задана последовательность целых чисел ai (1 ≤ ai ≤ 109, 1 ≤ i ≤ 2n) — объемы имеющихся у Паши чашек для чая в миллилитрах.

Выходные данные

Выведите одно вещественное число — максимальный суммарный объем воды в миллилитрах, который Паша может налить своим друзьям, не нарушая заданных условий. Ваш ответ будет признан правильным, если его абсолютная или относительная погрешность не превосходит 10 - 6.

Примечание

Также у Паши есть конфеты, которые он раздаст девочкам, но это уже совсем другая задача...

B. Геральд увлекается исскусством

Конструктив реализация *1200

Геральд приобрёл на аукционе «Сотбис» две редчайших картины и теперь хочет повесить их на стену. Для этого он купил специальный стенд, чтобы закрепить его на стене, а на нём разместить картины. Рабочая поверхность стенда, на которой будут располагаться картины, имеет форму прямоугольника a1 × b1, а сами картины имеют форму прямоугольников a2 × b2 и a3 × b3. Считается, что конструкция крепления дополнительного места не занимает.

Поскольку картины написаны в стиле абстракционизма, то совершенно неважно, как именно они будут повёрнуты, но, всё-таки, одна сторона как стенда, так и каждой из картин, должна быть параллельна полу. Картины могут касаться друг друга и краёв рабочей поверхности стенда, но не могут пересекаться и вылезать за края рабочей поверхности стенда. Геральд спрашивает — можно ли разместить картины на стенде или он купил недостаточно большой стенд?

Входные данные

В первой строке даны через пробел два числа a1 и b1 — стороны рабочей поверхности стенда. В следующих двух строках даны числа a2, b2, a3 и b3 — стороны картин. Все числа ai, bi во входных данных целые и находятся в пределах от 1 до 1000.

Выходные данные

Если картины можно разместить на стенде, выведите «YES» (без кавычек), а если нельзя, выведите «NO» (без кавычек).

Примечание

Вот так можно разместить картины в первом тесте:

А вот так — в третьем.

B. Простая игра

жадные алгоритмы игры Конструктив математика реализация *1300

Как-то Миша и Андрей играли в очень простую игру. Сначала каждый игрок выбирает целое число в пределах от 1 до n. Пусть Миша выбрал число m, а Андрей — число a.

Затем с помощью генератора случайных чисел выбирается случайное целое число c в пределах от 1 до n (любое целое число от 1 до n может быть выбрано с одной и той же вероятностью), после чего побеждает тот игрок, чьё число оказалось ближе к c. Ребята договорились, что в случае, когда m и a находятся на одинаковом расстоянии от c, выигрывает Миша.

Андрей хочет победить любой ценой и просит вас помочь ему. Вам известно число, выбранное Мишей, и число n. Нужно определить, какое число a, должен выбрать Андрей, чтобы вероятность его победы была максимальной.

Более формально, нужно найти такое целое число a (1 ≤ a ≤ n), чтобы вероятность того, что , была максимальна, где c — выбранное равновероятно случайное целое число от 1 до n (включительно).

Входные данные

В первой строке находятся два целых числа n и m (1 ≤ m ≤ n ≤ 109) — диапазон чисел в игре и выбранное Мишей число соответственно.

Выходные данные

Выведите одно целое число — такое значение a, чтобы вероятность победы Андрея была максимальной. Если таких значений несколько, выведите минимальное из них.

Примечание

В первом тесте: Андрей победит если c равно 2 или 3. Вероятность победы Андрея равна 2 / 3. Если Андрей выберет число a, равное 3, то вероятность победы будет 1 / 3. При a, равном 1, вероятность победы — 0.

Во втором тесте: Андрей победит если c равно 1 или 2. Вероятность победы Андрея — 1 / 2. При остальных вариантах выбора a вероятность победы меньше.

C. Замены

Конструктив реализация Структуры данных *1600

У Данила была строка s, состоящая из строчных английских букв и точек (знаков '.'). Определим операцию замены как следующую последовательность действий: найдём подстроку ".." (две подряд идущих точки) в строке s, из всех вхождений этой подстроки выберем самое первое, и заменим эту подстроку на строку ".". Иными словами, во время операции замены первые две подряд идущих точки заменяются на одну. Если в строке s нет двух подряд идущих точек, то ничего не происходит.

Обозначим за f(s) минимальное количество операций замены, которые необходимо произвести, чтобы в строке не осталось двух подряд идущих точек.

Вам требуется обработать m запросов, в результате i-го из них символу на позиции xi (1 ≤ xi ≤ n) строки s присваивается значение ci. После выполнения каждой операции вы должны определить и вывести значение f(s).

Помогите Данилу ответить на все запросы.

Входные данные

В первой строке находятся два целых числа n и m (1 ≤ n, m ≤ 300 000) — длина строки и количество запросов.

Во второй строке следует строка s, состоящая из n строчных английских букв и точек.

В последующих m строках следуют описания запросов. В i-й строке находятся целое число xi и ci (1 ≤ xi ≤ n, ci — строчная латинская буква или точка), описывающие запрос присваивания символа ci на позицию xi.

Выходные данные

Выведите m чисел по одному в строке, i-е из этих чисел должно равняться значению f(s) после применения i-го присваивания.

Примечание

Пояснение к первому тесту из условия (заменяемые точки окружены квадратными скобками).

Начальная строка — ".b..bz....".

  • после первого запроса f(hb..bz....) = 4    ("hb[..]bz...."  →  "hb.bz[..].."  →  "hb.bz[..]."  →  "hb.bz[..]"  →  "hb.bz.")
  • после второго запроса f(hbс.bz....) = 3    ("hbс.bz[..].."  →  "hbс.bz[..]."  →  "hbс.bz[..]"  →  "hbс.bz.")
  • после третьего запроса f(hbс.bz..f.) = 1    ("hbс.bz[..]f."  →  "hbс.bz.f.")

Пояснение ко второму тесту из условия.

Начальная строка — ".cc.".

  • после первого запроса: f(..c.) = 1    ("[..]c."  →  ".c.")
  • после второго запроса: f(....) = 3    ("[..].."  →  "[..]."  →  "[..]"  →  ".")
  • после третьего запроса: f(.a..) = 1    (".a[..]"  →  ".a.")
  • после четвёртого запроса: f(aa..) = 1    ("aa[..]"  →  "aa.")

D. Деревянные запросы

Бинарный поиск битмаски графы Деревья Конструктив поиск в глубину и подобное *2200

Роман посадил дерево из n вершин. В каждой вершине записана строчная английская буква. Вершина 1 является корнем дерева, у каждой из n - 1 оставшихся вершин есть предок в дереве, с которым вершина соединена ребром. Предком вершины i является вершина pi, причём номер предка всегда меньше, чем номер вершины (то есть, pi < i).

Глубина вершины — это количество вершин на пути по рёбрам от корня до v. В частности, глубина корня равна 1.

Скажем, что вершина u лежит в поддереве вершины v, если мы можем попасть из u в v, переходя из вершины в предка. В частности, вершина v лежит в своём поддереве.

Рома даёт вам m запросов, i-й из которых задаётся двумя числами vi, hi. Рассмотрим вершины, лежащие в поддереве vi, и находящиеся на глубине hi. Определите, можно ли из букв, записанных в этих вершинах, составить строку, являющуюся палиндромом? Буквы, записанные в вершинах, можно переставить в произвольном порядке для составления палиндрома.

Входные данные

В первой строке находятся два целых числа n, m (1 ≤ n, m ≤ 500 000) — количество вершин в дереве и запросов соответственно.

В следующей строке находятся n - 1 целых чисел p2, p3, ..., pn — предки вершин со второй по n-ю вершин (1 ≤ pi < i).

В следующей строке находятся n строчных английских букв, i-я из этих букв написана на вершине i.

В последующих m строках описаны запросы, в i-й строке находятся два числа vi, hi (1 ≤ vi, hi ≤ n) — вершина и глубина, фигурирующие в i-м запросе.

Выходные данные

Выведите m строк. В i-й строке выведите «Yes» (без кавычек), если в i-м запросе возможно составить палиндром из букв, написанных на вершинах, иначе выведите «No» (без кавычек).

Примечание

Строка s является палиндромом, если она одинаково читается слева направо и справа налево. В частности, пустая строка является палиндромом.

Пояснение к тесту из условия.

В первом запросе существует единственная вершина 1, подходящая под все условия, мы можем составить палиндром "z".

Во втором запросе вершины 5 и 6 удовлетворяют условиям, на этих вершинах написаны буквы "с" и "d". Составить палиндром невозможно.

В третьем запросе не существует ни одной вершины на глубине 1 в поддереве вершины 4. Мы можем составить пустой палиндром.

В четвертом запросе не существует вершин в поддереве 6 на глубине 1. Мы можем составить пустой палиндром.

В пятом запросе вершины 2, 3 и 4 удовлетворяют условиям, на этих вершинах написаны буквы a, с и с. Мы можем составить палиндром "cac"

C. КНФ-2

графы жадные алгоритмы Конструктив поиск в глубину и подобное *2500

«Конъюнкти́вная норма́льная фо́рма (КНФ) в булевой логике — нормальная форма, в которой булева формула имеет вид конъюнкции дизъюнкций литералов» (взято с https://ru.wikipedia.org/wiki/КНФ).

Иными словами, КНФ — это формула вида , где & обозначает логическое "И" (конъюнкцию), обозначает логическое "ИЛИ" (дизъюнкцию), а vij — это некоторые логические переменные или их отрицания. Каждое выражение в скобках называется дизъюнктом, а vij называются литералами.

Дана КНФ, в которой фигурируют переменные x1, ..., xm и их отрицания. Известно, что каждая переменная входит не более, чем в два дизъюнкта (суммарно как с отрицанием, так и без). Требуется определить выполнима ли эта КНФ, то есть, существуют ли такие значения переменных, при которых значение КНФ истинно. Если КНФ выполнима, то также требуется привести значения переменных, при которых КНФ истинна.

Гарантируется, что каждая переменная входит в каждый дизъюнкт не более одного раза.

Входные данные

В первой строчке заданы целые числа n и m (1 ≤ n, m ≤ 2·105) — количество дизъюнктов и количество переменных соответственно.

Далее в n строках заданы описания каждого из дизъюнктов. В i-й строке находится сначала число ki (ki ≥ 1) – количество литералов в i-м дизъюнкте, затем через пробел перечислены литералы vij (1 ≤ |vij| ≤ m). Литерал, соответствующий vij, это x|vij| либо с отрицанием, если vij отрицательно, либо без отрицания в противном случае.

Выходные данные

Если КНФ не выполнима, выведите единственную строку "NO" (без кавычек), в противном случае выведите две строки: строку "YES" (без кавычек), а затем строку из m нулей или единиц — значения переменных в выполняющем наборе в порядке от x1 до xm.

Примечание

В первом тестовом примере задана формула . Один из возможных ответов — x1 = ИСТИНА, x2 = ИСТИНА.

C. Мишка и рисование

Деревья Конструктив поиск в глубину и подобное *2300

Лимак — маленький мишка, который учится рисовать. Люди обычно начинают с домиков, заборов и цветов, ну а мишкам с чего бы так делать? Лимак живет в лесу и решает нарисовать дерево.

Напомним, что деревом называется связный граф, состоящий из n вершин и n - 1 ребра (n ≥ 1).

Лимак выбрал дерево, состоящее из n вершин. У него есть бесконечная полоска бумаги с двумя параллельными рядами точек. Маленький мишка хочет сопоставить вершины дерева некоторым n различным точкам так, чтобы рёбра могли пересекаться только в своих конечных точках — иными словами, должно получиться планарное изображение дерева. Ниже приведен один из корректных рисунков к первому тесту.

Сможет ли Лимак нарисовать выбранное дерево?

Входные данные

В первой строке записано единственное целое число n (1 ≤ n ≤ 105) — количество вершин в дереве.

В следующих n - 1 строках содержится описание рёбер дерева. i-я из них содержит два целых числа через пробел, ai и bi (1 ≤ ai, bi ≤ n, ai ≠ bi), обозначающих ребро между вершинами ai и bi. Гарантируется, что данное описание задаёт дерево.

Выходные данные

Выведите "Yes" (без кавычек), если Лимак может нарисовать выбранное дерево. В противном случае, выведите "No" (без кавычек).

D. Таблицград

Конструктив реализация *1700

В Таблицграде произошло крупное ограбление банка. Для поимки вора президент позвал никого иного, как Альберта — начальника полиции Таблицграда. Альберт не знает, где находится вор, но он знает, как вор движется.

Таблицград можно представить как сетку размера 1000 × 2, где каждая ячейка представляет один район. У каждого района есть свое уникальное название “(X, Y)”, где X и Y— это координаты на сетке. Вор движется следующим образом:

Каждый час вор покидает район (X, Y), в котором он на данный момент прячется, и переходит в один из районов: (X - 1, Y), (X + 1, Y), (X - 1, Y - 1), (X - 1, Y + 1), (X + 1, Y - 1), (X + 1, Y + 1) при условии, что этот район существует в Таблицграде.

Ниже приведен пример возможных движений вора, если он расположен в районе (7,1):

У Альберта достаточно людей, так что каждый час он может выбрать любые два района в Таблицграде и полностью обычскать их, удостоверяясь, что если вор расположен в одном из них, то он будет пойман. Альберт пообещал Президенту, что вор будет пойман не более чем за 2015 часов и ему нужна Ваша помощь, чтобы добиться такого результата.

Входные данные

У этой задачи нет ввода.

Выходные данные

В первой строке выведите целое число N — продолжительность полицейского расследования в часах. Каждая из следующих N строк должна содержать ровно по 4 целых числа, Xi1, Yi1, Xi2, Yi2 разделенных пробелами, обозначающих 2 района (Xi1, Yi1), (Xi2, Yi2), которые должны быть обыскана в i-й час. Пары районов должны следовать в хронологическом порядке (i-я строка содержит районы, которые будут обысканы в i-й час). Должно быть верно, что вор будет гарантированно пойман не более чем за 2015 часов, независимо от начального положения и перемещений вора.

  • N ≤ 2015
  • 1 ≤ X ≤ 1000
  • 1 ≤ Y ≤ 2
Примечание

Рассмотрим следующий вариант вывода:

2

5 1 50 2

8 1 80 2

Этот вывод не гарантирует поимки вора и не является верным, он дан вам лишь для пояснения формата вывода. Существует комбинация изначального положения и стратегии движений, такая, что полиция не поймает вора.

Рассмотрим следующую изначальную позицию и движение вора:

В первом часу вор расположен в районе (1,1). Полицейские обыскивают районы (5,1) и (50,2) и не находят его.

В начале второго часа вор переходит в район (2,2). Полицейские обыскивают районы (8,1) и (80,2) и не находят его.

Так как на этом полицейское расследование заканчивается, значит, вор не пойман!

B. Инвариантность дерева

Деревья жадные алгоритмы Конструктив поиск в глубину и подобное *2100

Деревом размера n называется неориентированный связный граф из n вершин без циклов.

Рассмотрим некоторое дерево из n вершин. Назовем дерево инвариантным относительно перестановки p = p1p2... pn, если для любых двух вершин дерева u и v выполняется утверждение: «Вершины u и v соединены ребром тогда и только тогда, когда вершины pu и pv соединены ребром».

Вам дана перестановка p размера n. Найдите какое-нибудь дерево размера n, инвариантное относительно данной перестановки.

Входные данные

В первой строке дано число n (1 ≤ n ≤ 105) — размер перестановки (совпадающий с размером искомого дерева).

Во второй строке дана сама перестановка pi (1 ≤ pi ≤ n).

Выходные данные

Если искомого дерева не существует, то выведите «NO» (без кавычек).

Иначе выведите «YES», а затем выведите n - 1 строку, в каждой из которых находится по два целых числа — концы очередного ребра искомого дерева. Вершины нумеруются с единицы, порядок следования рёбер и порядок следования вершин внутри ребра не имеет значения.

Если решений несколько, выведите любое из них.

Примечание

В первом тесте из условия, при применении к ребру перестановки, ребро (4, 1) перейдет в ребро (1, 4), ребро (4, 2) перейдет в ребро (1, 3), а ребро (1, 3) перейдет в ребро (4, 2). Все эти ребра есть в ответе.

Можно заметить, что во втором тесте из условия, ни одно дерево не подходит под ограничения.

C. Точки на плоскости

геометрия жадные алгоритмы Конструктив разделяй и властвуй сортировки *2100

На плоскости расположены n точек (xi, yi) с целочисленными координатами от 0 до 106. Расстоянием между двумя точках с номерами a и b назовем следующую величину: (расстояние, вычисляемое по такой формуле, называется манхеттенским расстоянием).

Назовем гамильтоновым путем некоторую перестановку pi от 1 до n. Назовем длиной этого пути величину .

Найдите какой-нибудь гамильтонов путь с длиной не более, чем 25 × 108. Обратите внимание, минимизировать длину гамильтонова пути не требуется.

Входные данные

В первой строке дано число n (1 ≤ n ≤ 106).

В i + 1-й строке даны координаты точки с номером i: xi и yi (0 ≤ xi, yi ≤ 106).

Гарантируется, что никакие две точки не совпадают.

Выходные данные

Выведите перестановку чисел pi от 1 до n — искомый гамильтонов путь. Перестановка должна удовлетворять неравенству .

Если возможных ответов несколько, разрешается вывести любой.

Гарантируется, что существует подходящая перестановка.

Примечание

В тесте из условия, суммарное расстояние равно:

(|5 - 3| + |0 - 4|) + (|3 - 0| + |4 - 7|) + (|0 - 8| + |7 - 10|) + (|8 - 9| + |10 - 12|) = 2 + 4 + 3 + 3 + 8 + 3 + 1 + 2 = 26

E. Шагаем!

жадные алгоритмы Конструктив *2700

Перед домом Элис есть песчаная дорожка.

Днем по дорожке ходят люди, каждый их шаг оставляет на дорожке след. Элис не может определить, в каком порядке были оставлены следы, но она может разобрать, оставлен ли каждый след левой или правой ногой. Также она уверена, что все люди ходят, наступая попеременно то левой, то правой ногой.

Например, предположим, что один человек пошел по тропинке и оставил какие-то следы. Пусть следы имеют вид RRLRL в порядке следования по дорожке ('R' обозначает правую ногу, а 'L' обозначает левую ногу). Можно подумать, что это какая-то странная последовательность следов. Но на самом деле, некоторые следы остаются от ходьбы задом наперед!

Есть несколько возможных последовательностей шагов, после которых могли остаться такие следы, например 1 → 3 → 2 → 5 → 4 или 2 → 3 → 4 → 5 → 1 (мы считаем, что расстояние между двумя последовательными шагами может быть произвольным). В двух примерах, приведенных выше, было сделано 2 шага назад и 1 шаг назад соответственно.

Элис заинтересовали эти следы. Каждый раз, когда по дорожке проходит человека, она делает фотографию всех его следов, а затем стирает их все, таким образом, каждый следующий человек оставляет новый набор следов. Мы знаем, что люди ходят, наступая попеременно то правой, то левой ногой, но мы не знаем, с какой ноги делается первый шаг.

Элис хочет знать минимальное возможное количество шагов назад, сделанных человеком, оставившим данную последовательность следов. Пожалуйста, помогите Элис посчитать его. Также вам надо составить возможный вариант последовательности шагов для получения наблюдаемой картины.

Входные данные

В единственной строке записана строка S (1 ≤ |S| ≤ 100 000), содержащая все следы в порядке следования по дорожке от её начала до её конца.

Гарантируется, что есть как минимум одна подходящая последовательность шагов.

Выходные данные

Надо вывести 2 строки.

В первой строке должно быть записано число, обозначающее минимальное количество шагов назад.

Во второй строке должна быть записана перестановка целых чисел от 1 до |S|. Эта перестановка должна обозначать порядок, в котором оставлялись следы.

Если существует несколько правильных ответов, разрешается вывести любой из них.

Примечание

В первом примере один из возможных порядков таков: 2 → 5 → 1 → 3 → 4, из них только шаг 5 → 1 является шагом задом наперед, так что ответ равен 1.

Во втором примере один из возможных порядков — просто пройти по всем следам в порядке следования во вводе, таким образом не будет произведено ни одного шага назад.

В третьем примере в любом случае будет произведено 4 шага назад, так как каждый шаг от L к R будет шагом назад.

D. Три логотипа

битмаски геометрия Конструктив математика Перебор реализация *1700

Три компании решили заказать рекламный щит с изображениями своих логотипов. Рекламный щит представляет собой большую квадратную доску. Логотип каждой из компаний представляет собой прямоугольник ненулевой площади.

Рекламодатели разместят рекламу только в том случае, если возможно расположить все три логотипа на щите без наложений так, что на нём не останется свободного места. При размещении логотипы можно поворачивать так, чтобы стороны были параллельны сторонам рекламного щита.

Перед вами стоит задача определить, возможно ли разместить логотипы трех компаний на щите квадратной формы, не нарушив никакое из описанных правил.

Входные данные

В единственной строке входных данных находятся шесть целых положительных чисел x1, y1, x2, y2, x3, y3 (1 ≤ x1, y1, x2, y2, x3, y3 ≤ 100), где xi и yi обозначают длину и ширину логотипа i-й компании соответственно.

Выходные данные

Если разместить все три логотипа на квадратном щите невозможно, выведите одно число "-1" (без кавычек).

Если же это возможно, выведите в первую строку длину стороны квадрата n, в котором можно разместить все три логотипа. В следующих n строках должно содержаться по n заглавных латинских букв "A", "B" или "C". Наборы одинаковых букв должны образовывать сплошные прямоугольники, причем:

  • размеры прямоугольника, составленного из букв "A", должны быть равны размерам логотипа первой компании,
  • размеры прямоугольника, составленного из букв "B", должны быть равны размерам логотипа второй компании,
  • размеры прямоугольника, составленного из букв "C", должны быть равны размерам логотипа третьей компании.

Напомним, что логотипы компаний в процессе нанесения их на рекламный щит можно поворачивать. Пустых мест на щите остаться не должно. Если квадратный рекламный щит можно заполнить логотипами несколькими способами, разрешается вывести любой из них.

Изучите тестовые примеры для лучшего понимания условия.

A. Таблица НОД

жадные алгоритмы Конструктив теория чисел *1700

Таблица НОД G размера n × n для массива целых положительных чисел a длины n задается формулой

Напомним, что наибольшим общим делителем (НОД) двух положительных целых чисел x и y называется наибольшее целое число, делящее одновременно и x и y, оно обозначается как . Например, для массива a = {4, 3, 6, 2} длины 4 таблица НОД будет выглядеть следующим образом:

Зная все числа таблицы НОД G, восстановите массив a.

Входные данные

В первой строке содержится число n (1 ≤ n ≤ 500) - длина массива a. Во второй строке содержатся n2 чисел, разделенных пробелом - элементы таблицы НОД G для массива a. Все числа таблицы целые положительные и не превышают 109. Обратите внимание, что элементы заданы в произвольном порядке. Гарантируется, что набору входных данных соответствует некоторый массив a.

Выходные данные

В единственную строку выведите n целых положительных чисел - элементы массива a. Если возможных решений несколько, разрешается вывести любое.

B. И снова ...

дп Конструктив матрицы *1900

Задан массив целых положительных чисел a1, a2, ..., an × T длины n × T. Известно, что для любого i > n верно, что ai = ai - n. Найдите длину наидлиннейшей неубывающей подпоследовательности заданного массива.

Входные данные

В первой строке записано два целых числа пробел: n, T (1 ≤ n ≤ 100, 1 ≤ T ≤ 107). Во второй строке записано n целых чисел через пробел a1, a2, ..., an (1 ≤ ai ≤ 300).

Выходные данные

Выведите единственное целое число — ответ на задачу.

Примечание

Массив, представленный в примере, имеет вид 3, 1, 4, 2, 3, 1, 4, 2, 3, 1, 4, 2. Выделенные элементы образуют наибольшую неубывающую подпоследовательность.

C. Марина и Вася

жадные алгоритмы Конструктив Строки *1700

Марина любит строки одинаковой длины, а Вася любит, когда существует третья строка, отличающаяся от них ровно в t символах. Помогите Васе найти хотя бы одну такую строку.

Более формально, вам дано даны две строки s1, s2 длины n и число t. Обозначим за f(a, b) количество символов, в которых отличаются строки a и b. Тогда вам требуется найти любую строку s3 длины n такую, что f(s1, s3) = f(s2, s3) = t. Если такой строки нет, то выведите  - 1.

Входные данные

В первой строке записаны два числа n и t (1 ≤ n ≤ 105, 0 ≤ t ≤ n).

Во второй строке записана строка s1 длины n, состоящая из строчных английских букв.

В третьей строке записана строка s2 длины n, состоящая из строчных английских букв.

Выходные данные

Выведите строку длины n, отличающуюся от s1 и от s2 ровно в t символах. Ваша строка должна состоять только из строчных букв английского алфавита. Если же такой строки не существует, выведите -1.

E. Антон и Ира

жадные алгоритмы Конструктив математика *2300

Антон любит получать из одной перестановки другую переставляя её элементы местами за деньги, а Ира не любит платить за глупые игры. Помогите им получить нужную перестановку, заплатив за это как можно меньше.

Более формально, у нас есть две перестановки p и s чисел от 1 до n. Мы можем поменять местами pi и pj, заплатив за это |i - j| монет. Найдите и выведите наименьшее количество монет,которое потребуется, чтобы получить из перестановки p перестановку s. Так же выведите последовательность операций обмена элементов, при которой достигается ответ.

Входные данные

В первой строке записано одно число n (1 ≤ n ≤ 2000) — длина перестановок.

Во второй строке записана последовательность из n чисел от 1 до n — перестановка p. Каждое число от 1 до n встречается по разу в этой строке.

В третьей строке записана последовательность из n чисел от 1 до n — перестановка s. Каждое число от 1 до n встречается по разу в этой строке.

Выходные данные

В первой строке выведите минимальное количество монет, которое нужно потратить для получения перестановки s из перестановки p.

Во второй строке выведите число k (0 ≤ k ≤ 2·106) - число операций для достижения ответа.

В следующих k строках выведите сами операции. Каждая строка должна содержать два числа i и j (1 ≤ i, j ≤ n, i ≠ j), что означает, что надо поменять местами pi и pj.

Гарантируется, что ответ существует.

Примечание

В первом тесте из условия первым ходом мы поменяем местами числа на позициях 3 и 4, и перестановка p примет вид 4 2 3 1. За это мы заплатим |3 - 4| = 1 монету. Вторым ходом поменяем местами числа на позициях 1 и 3, и получим перестановку 3241, которая равна s. За этот ход мы платим |3 - 1| = 2 монеты. Суммарно мы заплатим 3 монеты.

D. Распределение по командам

жадные алгоритмы Конструктив реализация *2000

Недавно в Центре Олимпиадной Подготовки Программистов Берляндского Государственного Университета завершились личные тренировки. По результатам этих тренировок определяются составы команд на предстоящий сезон командных соревнований. Каждая команда состоит из трех человек. Все обучающиеся в Центре имеют номера от 1 до 3n, а все команды — от 1 до n. Распределение по командам происходит следующим образом: пока остались нераспределенные люди, из них выбирается один с самым лучшим итоговым результатом (капитан новой команды), этот человек выбирает себе двоих сокомандников из оставшихся людей в соответствие со своим списком приоритетов. Список приоритетов каждого человека представляет собой перестановку из всех остальных 3n - 1 студентов, занимающихся в центре, исключая его самого.

Вам даны результаты личных тренировок — перестановка чисел от 1 до 3n, где i-ое число — номер студента, занявшего i-ое место. Никакие два студента не делят одно и то же место. Так же Вам заданы составы получившихся команд в том порядке, в каком эти команды были созданы. Ваша задача — определить список приоритетов для студента с номером k. Если возможных списков приоритетов несколько, найдите лексикографически наименьший.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 105) — количество получившихся команд. Во второй строке через пробел записано 3n целых чисел от 1 до 3n — результаты личных тренировок. Гарантируется, что каждый студент встречается в результатах ровно один раз.

Далее следует n строк по три целых числа от 1 до 3n — каждая строка описывает состав очередной команды. Члены одной команды могут быть перечислены в любом порядке, но сами команды перечислены в порядке их создания. Гарантируется, что распределение корректно, то есть каждый студент является членом ровно одной команды, и такие команды действительно могли быть получены по данным результатам описанным выше способом.

В последней строке записано число k (1 ≤ k ≤ 3n) — номер студента, для которого требуется найти список приоритетов.

Выходные данные

Выведите 3n - 1 чисел — лексикографически наименьший список приоритетов для студента с номером k.

Лексикографическое сравнение реализует оператор < в современных языках программирования. Список a лексикографически меньше списка b, если существует такое i (1 ≤ i ≤ 3n), что ai < bi, а для любого j (1 ≤ j < i) aj = bj. Учтите, что список 1 9 10 лексикографически меньше чем список 1 10 9. То есть сравнение списков отличается от сравнения строк.

C. Красивая функция

Конструктив математика *2200

Каждый день перед сном Руслан считал овец, но это ему не помогало. Теперь он нашёл себе занятие интереснее: он сначала загадывает какое-то множество окружностей на плоскости, а затем пытается определить какое-нибудь красивое множество точек, так чтобы внутри или на границе каждой загаданной окружности лежала хотя бы одна точка множества.

Вчера Руслан попробовал решить данную задачу, когда множество считается красивым, если оно определяется как (xt = f(t), yt = g(t)), для всех целых t от 0 до 50. При этом f(t) и g(t) должны быть корректными функциями.

Пусть w(t) и h(t) — корректный функции, а c — целое число от 0 до 50. Тогда функция s(t) является корректной, если она получена по одному из следующих правил:

  1. s(t) = abs(w(t)), где abs(x) означает взятие абсолютного значения числа x, то есть |x|;
  2. s(t) = (w(t) + h(t));
  3. s(t) = (w(t) - h(t));
  4. s(t) = (w(t) * h(t)), где  *  означает умножение, то есть (w(th(t));
  5. s(t) = c;
  6. s(t) = t;

Вчера Руслан промучился всю ночь, но так и не справился с задачей. Теперь он просит вас написать программу, вычисляющую подходящие f(t) и g(t) для любого набора из не более чем 50 окружностей.

В каждой из функций f(t) и g(t) должно быть использовано не более 50 операций умножения. Длина функции не должна превышать 100·n символов. В функции не должно быть пробелов.

Руслан плохо работает с большими числами, поэтому функции f(t) и g(t) должны быть выбраными такими, чтобы для всех t от 0 до 50 все промежуточные вычисления и итоговое значение по абсолютному значению не превосходили 109.

Входные данные

В первой строке входных данных записано число n (1 ≤ n ≤ 50) — количество окружностей, загаданных Русланом. Следующие n строк содержат по три целых числа xi, yi, ri (0 ≤ xi, yi ≤ 50, 2 ≤ ri ≤ 50) — координаты и радиус i-й окружности.

Выходные данные

В первой строке выведите корректную функцию f(t). Во второй строке вывести корректную функцию g(t). Множество точек (xt = f(t), yt = g(t)) (0 ≤ t ≤ 50) должно удовлетворять условию, что для любой из n окружностей найдётся точка из данного мноежства лежащая внутри ли на границе.

Примечание

Корректные функции:

  1. 10
  2. (1+2)
  3. ((t-3)+(t*4))
  4. abs((t-10))
  5. (abs((((23-t)*(t*t))+((45+12)*(t*t))))*((5*t)+((12*t)-13)))
  6. abs((t-(abs((t*31))+14))))

Некорректные функции:

  1. 3+5+7 (не хватает скобок, должно быть ((3+5)+7) или (3+(5+7)))
  2. abs(t-3) (не хватает скобок, должно быть abs((t-3))
  3. 2+(2-3 (лишняя скобка)
  4. 1(t+5) (нет арифметической операции между 1 и скобкой)
  5. 5000*5000 (число превышает максимальное)
На картинке показано одно из возможных решений. Например, при t = 0;10;20 полученные координаты принадлежат заданным окружностям.

A. Виталий и ночь

Конструктив реализация *800

Как-то раз Виталий возвращался домой поздно ночью и заинтересовался вопросом: а сколько ещё людей не спит в это время? Для этого Виталий решил посмотреть, какие окна горят в доме, мимо которого он в этот момент проходил.

Виталий видит перед собой n-этажный дом и m окон на каждом этаже. Согласно планировке, на каждом этаже располагается m квартир, пронумерованных от 1 до m, и каждой из них принадлежит два последовательных окна на данном этаже. Если пронумеровать окна от 1 до m слева направо, то j-й квартире i-го этажа принадлежат окна j - 1 и j в соответствующем ряду окон. Виталий считает, что люди в квартире не спят, если хотя бы в одном из окон этой квартиры горит свет.

Используя информацию о свете в окнах данного дома, вы должны посчитать количество квартир, в которых, по мнению Виталия, жители не спят.

Входные данные

В первой строке входных данных следует два целых числа n и m (1 ≤ n, m ≤ 100) — количество этажей в доме и количество квартир на каждом этаже соответственно.

Следующие n строк описывают этажы сверху вниз и содержат по m символов каждая. Если в i-м окне данного этажа горит свет, то в i-й позиции находится символ '1', иначе там находится символ '0'.

Выходные данные

Выведите единственно целое число — количество квартир, в которых горит свет хотя бы в одном окне, то есть, по мнению Виталия, там кто-то не спит.

Примечание

В первом тестовом примере дом двухэтажный, по две квартиры на каждом этаже, то есть всего в нем 4 квартиры. Свет не горит только на втором этаже в левой квартире, так как в обеих комнатах этой квартиры свет выключен.

Во втором тестовом примере дом одноэтажный, и на первом этаже есть три квартиры. Свет горит в самой левой квартире (в обоих окнах) и в средней квартире (в одном окне). В правой же квартире свет не горит.

C. Сделай палиндром

жадные алгоритмы Конструктив Строки *1800

Строка называется палиндромом, если она одинаково читается слева-направо и справа-налево. Например, строки «kazak», «oo», «r» и «mikhailrubinchikkihcniburliahkim» — палиндромы, а строки «abb» и «ij» — нет.

Замена символа — это выбор позиции символа в строке и замена символа в этой позиции на произвольную другую строчную букву. Таким образом, при замене символа длина строки не изменяется.

Задана строка s. Вы можете сначала заменить в строке s некоторые символы, а затем произвольным образом поменять местами порядок символов в строке. Изменение порядка не считается заменами.

Необходимо получить палиндром за наименьшее количество замен. Если это возможно сделать несколькими способами, то нужно получить лексикографически наименьший палиндром. Таким образом в первую очередь необходимо минимизировать количество замененных символов, а среди таких способов найти какой наименьший лексикографически (алфавитно) палиндром можно получить в результате.

Входные данные

В единственной строке входных данных находится строка s (1 ≤ |s| ≤ 2·105), состоящая из строчных латинских букв.

Выходные данные

Выведите лексикографически наименьший палиндром, который можно получить за наименьшее количество замен.

A. Сортировка вагонов

жадные алгоритмы Конструктив *1600

На бесконечно длинном железнодорожном пути стоит состав из n вагонов, пронумерованных от 1 до n (номера всех вагонов различны) и предварительно перемешанных. Дэвид Блейн хочет отсортировать вагоны по возрастанию их номеров. За одно действие он может заставить один из вагонов исчезнуть со своего места и телепортировать его либо в начало состава, либо в конец, по своему усмотрению. Какое минимальное количество действий потребуется Дэвиду Блейну, чтобы отсортировать состав?

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 100 000) — количество вагонов в составе.

Во второй строке записаны n целых чисел pi (1 ≤ pi ≤ n, pi ≠ pj при i ≠ j) — последовательность номеров вагонов в составе.

Выходные данные

Выведите целое число — минимальное количество действий, необходимое для сортировки вагонов.

Примечание

В первом примере можно сначала телепортировать 4-й вагон, а затем 5-й вагон в конец состава.

B. Неуспевающий студент

графы Конструктив Структуры данных *1700

Студент Владислав, как обычно, пришёл на экзамен по программированию, совершенно не подготовившись, и ему снова достался билет про какой-то непонятный алгоритм на графе, который абсолютно точно никогда не пригодится ему в жизни. Он попросил у сидящей рядом студентки шпаргалку по этому билету и обнаружил в ней следующее определение:

Минимальным остовным деревом T графа G называется такое дерево, что оно содержит все вершины исходного графа G, а сумма весов его рёбер — минимально возможная среди всех таких деревьев.

Владислав по привычке нарисовал граф с n вершинами и m ребрами, в котором не было петель и кратных ребер. Он нашел одно из его минимальных остовных деревьев, а потом записал для каждого ребра графа его вес, а также входит оно в найденное дерево или нет. К сожалению, бумажка, на которой был нарисован граф, исчезла, а преподаватель очень сердится и требует предоставить ему исходный граф. Помогите Владиславу придумать граф, соответствующий выписанной им информации о минимальном остовном дереве.

Входные данные

В первой строке записаны два целых числа n и m () — количество вершин и рёбер в графе.

Каждая из следующих m строк описывает ребро графа и состоит из двух чисел aj и bj (1 ≤ aj ≤ 109, bj = {0, 1}). Первое из этих чисел — это вес ребра, а второе число равно единице, если это ребро входило в минимальное остовное дерево, найденное Владиславом, и нулю, если не входило.

Гарантируется, что ровно n - 1 число из {bj} равны единице, и ровно m - n + 1 из них равны нулю.

Выходные данные

Если Владислав ошибся, и такого графа не существует, то выведите  - 1. В противном случае выведите m строк. В j-й строке выведите пару вершин (uj, vj) (1 ≤ uj, vj ≤ n, uj ≠ vj), которые должны быть соединены j-м ребром. Рёбра нумеруются в том же порядке, что и во входных данных. Граф, заданный этими ребрами, должен быть связным, не содержать петель и кратных ребер, а его ребра с bj = 1 должны задавать минимальное остовное дерево. Если существует несколько графов, удовлетворяющих условию, разрешается вывести любой.

B. Книга - лучший подарок

Конструктив реализация *1100

Совсем скоро Вика будет отмечать свой день рождения, и Саша решил сделать ей подарок.

Он пришел в книжный магазин, в котором в продаже есть n книг. Каждая из книг относится ровно к одному из m жанров.

Саша решил купить ровно две книги различных жанров. Перед вами стоит задача определить количество способов, которые есть у Саши, чтобы купить подарок Вике. Два способа считаются различными, если они отличаются хотя бы одной книгой.

Для удобства все жанры пронумерованы от 1 до m.

Входные данные

В первой строке содержатся два целых числа n и m (2 ≤ n ≤ 2·105,  2 ≤ m ≤ 10) — количество книг в магазине и количество жанров, в которых написаны эти книги.

Во второй строке содержится последовательность целых положительных чисел a1, a2, ..., an, где ai (1 ≤ ai ≤ m) обозначает жанр i-й книги.

Гарантируется, что в магазине есть хотя бы одна книга каждого жанра.

Выходные данные

В первой строке выходных данных должно содержаться единственное целое число — количество способов, которые есть у Саши, чтобы купить подарок Вике.

Гарантируется, что ответ на каждый тест не превышает 2·109.

Примечание

Ответ на первый тестовый пример равен 5, так как Саша может выбрать:

  1. первую и вторую книги,
  2. первую и третью книги,
  3. первую и четвертую книги,
  4. вторую и третью книги,
  5. третью и четвертую книги.

B. Вика и квадраты

Конструктив реализация *1300

У Вики есть n банок с красками различных цветов. Все банки пронумерованы от 1 до n, при этом в i-й банке содержится ai литров краски цвета i.

Также у Вики есть бесконечно длинный прямоугольный лист бумаги шириной 1, состоящий из квадратов размера 1 × 1, пронумерованных 1, 2, 3 и так далее до бесконечности. Вика решила, что будет закрашивать квадраты один за другим слева направо, начиная с квадрата номер 1 и некоторого цвета, при этом если предыдущий квадрат был закрашен в цвет x, то следующий квадрат она будет красить в цвет x + 1. Если же x = n, то Вика красит следующий квадрат цветом номер 1. Если цвет, которым Вика собирается красить очередной квадрат, уже кончился, то Вика останавливается и больше ничего не красит.

Один квадрат всегда полностью красится в один цвет, и на это уходит ровно 1 литр краски. Перед вами стоит задача посчитать максимально возможное количество закрашенных квадратов, если Вика правильно выберет цвет для покраски квадрата с номером 1.

Входные данные

В первой строке входных данных записано целое положительное число n (1 ≤ n ≤ 200 000) — количество баночек с красками различных цветов, которые есть у Вики.

Во второй строке входных данных следует последовательность целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109), где ai равно количеству литров краски с цветом i, которые есть у Вики.

Выходные данные

Выходные данные должны содержать единственное целое число — максимальное количесто квадратов размера 1 × 1, которые могут быть покрашены Викой, если она действует по описанным выше правилам.

Примечание

В первом примере выгоднее всего начинать красить с цвета номер 4. Тогда квадраты, начиная с левого, будут раскрашены в цвета: 4, 5, 1, 2, 3, 4, 5, 1, 2, 3, 4, 5.

Во втором примере можно начинать красить с любого цвета.

В третьем примере выгоднее всего начинать красить с цвета номер 5.

C. Гармонический анализ

Конструктив *1800

Семестр уже заканчивается, и Данил решил наконец посетить пару по гармоническому анализу, чтобы хотя бы знать, как выглядит преподаватель. На паре Данил сильно скучал, пока преподаватель не задал группе простенькую задачку: в пространстве размерности 4 найти 4 вектора, таких что все координаты всех векторов равны 1 или  - 1 и любые два вектора ортогональны. Напомним, что два вектора a и b в n-мерном пространстве называются ортогональными, если их скалярное произведение равно нулю, то есть:

Данил достаточно быстро придумал решение этой задачи, и преподаватель похвалил его, заметив, что задачу можно решить в более общем случае для 2k векторов в пространстве размерности 2k. Придя домой, Данил легко справился и с этой задачей, а сможете ли вы?

Входные данные

Единственная строка входных данных содержит число k (0 ≤ k ≤ 9).

Выходные данные

Выведите 2k строк по 2k символов в каждой. j-й символ i-й строки должен быть равен ' * ', если j-я координата i-го вектора равна  - 1, и ' + ', если она равна  + 1. Гарантируется, что решение всегда существует.

Если правильных ответов несколько, то выведите любой.

Примечание

Рассмотрим всевозможные скалярные произведения в примере:

  • Вектора 1 и 2: ( + 1)·( + 1) + ( + 1)·( - 1) + ( - 1)·( + 1) + ( - 1)·( - 1) = 0
  • Вектора 1 и 3: ( + 1)·( + 1) + ( + 1)·( + 1) + ( - 1)·( + 1) + ( - 1)·( + 1) = 0
  • Вектора 1 и 4: ( + 1)·( + 1) + ( + 1)·( - 1) + ( - 1)·( - 1) + ( - 1)·( + 1) = 0
  • Вектора 2 и 3: ( + 1)·( + 1) + ( - 1)·( + 1) + ( + 1)·( + 1) + ( - 1)·( + 1) = 0
  • Вектора 2 и 4: ( + 1)·( + 1) + ( - 1)·( - 1) + ( + 1)·( - 1) + ( - 1)·( + 1) = 0
  • Вектора 3 и 4: ( + 1)·( + 1) + ( + 1)·( - 1) + ( + 1)·( - 1) + ( + 1)·( + 1) = 0

D. Вика и отрезки

геометрия Конструктив Структуры данных *2300

У Вики есть бесконечный лист клетчатой бумаги. Изначально каждая клетка белого цвета. Она ввела на этом листе двумерную систему координат и нарисовала n чёрных горизонтальных и вертикальных отрезков, параллельных осям координат и шириной в одну клетку. Таким образом, каждый отрезок является множеством соседних клеток, расположенных в одной строке или в одном столбце.

Перед вами стоит задача посчитать число закрашенных клеток. Если клетка была покрашена более одного раза, в ответе она должна быть посчитана ровно один раз.

Входные данные

В первой строке входных данных следует целое положительное число n (1 ≤ n ≤ 100 000) — количество отрезков, нарисованных Викой.

В следующих n строках заданы по четыре целых числа x1, y1, x2, y2 ( - 109 ≤ x1, y1, x2, y2 ≤ 109) — координаты концов отрезков, нарисованных Викой. Гарантируется, что все отрезки параллельны осям координат. Отрезки могут пересекаться, накладываться друг на друга и даже полностью совпадать.

Выходные данные

Выведите количество закрашенных Викой клеток. Если клетка была покрашена более одного раза, то в ответе она должна быть посчитана ровно один раз.

Примечание

В первом тестовом примере Вика закрасит клетки (0, 1), (1, 1), (2, 1), (1, 2), (1, 3), (1, 4), (0, 3) и (2, 3).

H. Новый Год и забытое дерево

графы Конструктив Потоки *3200

Деревом называется связный неориентированный граф из n вершин и n - 1 ребра. Вершины пронумерованы от 1 до n.

Лимак — белый медвежонок, и его медвежья семья каждый год собирает новогоднее дерево. Год назад дерево получилось особенно замечательным, поэтому они решили запомнить его и собрать такое же в этом году. Эта миссия была поручена Лимаку.

Запомнить всё дерево и не забыть в течение года было бы слишком сложно, поэтому Лимак решил записать его рёбра в своем блокноте. Он взял ручку и записал n - 1 строку, по два целых числа в каждой — индексы двух вершин, соединённых общим ребром.

И вот новый год уже совсем близко, семья попросила Лимака восстановить прошлогоднее дерево. И тут начались проблемы. Год назад он был ещё очень маленьким медвежонком, и не знал ни цифр, ни алфавита, поэтому он просто заменил все цифры на вопросительные знаки — единственный известный ему символ. Это означает, что для каждого индекса вершины, записанного в его блокноте, он знает только количество цифр в его записи. По крайней мере, он уверен, что все индексы записывались без ведущих нулей.

Лимак очень не хочет всех разочаровать, поэтому он попросил вас построить какое-нибудь дерево, отвечающее его записям в блокноте. Найдите такое дерево и выведите его рёбра в любом порядке. Если Лимак допустил ошибку, и подходящего дерева не существует, то выведите "-1" (без кавычек).

Входные данные

В первой строке записано единственное число n (2 ≤ n ≤ 200 000) — количество вершин в прошлогоднем дереве.

В каждой из следующих n - 1 строк записано по две непустые строки через пробел, обе состоят только из знаков вопроса. Длина каждой из этих строк не превосходит количество цифр в числе n.

Выходные данные

Если подходящего дерева нет, выведите "-1" (без кавычек).

В противном случае, выведите любое дерево, подходящее под записи Лимака. Выведите n - 1 строк, каждая строка должна содержать два целых числа — номера вершин, соединённых ребром. Ребра можно выводить в любом порядке.

E. Корень квадратный из перестановки

графы Комбинаторика Конструктив математика поиск в глубину и подобное *2200

Перестановка длины n — это такой массив длины n, который содержит каждое из чисел от 1 до n ровно по одному разу. Например, q = [4, 5, 1, 2, 3] — это перестановка. Для перестановки q ее квадратом называется такая перестановка p что p[i] = q[q[i]] для всех i = 1... n. Например, квадрат перестановки q = [4, 5, 1, 2, 3] равен p = q2 = [2, 3, 4, 5, 1].

Эта задача об обратном понятии — квадратном корне. Вам задана перестановка p ваша задача найти такую перестановку q, что q2 = p. Если искомых перестановок q несколько, найдите любую из них.

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 106) — количество элементов в перестановке p.

Во второй строке находятся n различных чисел pi (1 ≤ pi ≤ n) — элементы перестановки p.

Выходные данные

Если перестановки q такой, что q2 = p не существует, выведите число "-1".

Если же ответ существует, то нужно вывести его. Единственная строка должна содержать n различных чисел qi (1 ≤ qi ≤ n) — элементы перестановки q. Если существует несколько перестановок q, удовлетворяющих условию q·q = p, то разрешается вывести любую из них.

C. Бусы

Конструктив математика *2500

Иван хочет сделать бусы в подарок своей возлюбленной. Бусы — это замкнутая в цикл последовательность бусинок разных цветов. Иван называет бусы красивыми относительно разреза в точке между соседними бусинками, если цепочка бус, остающаяся после этого разреза, является палиндромом (читается одинаково в обе стороны).

У Ивана есть бусинки n цветов. Он хочет составить бусы, которые будут являться красивыми относительно наибольшего числа разрезов, при этом он обязательно хочет использовать все имеющиеся бусинки. Помогите ему составить наиболее красивые бусы.

Входные данные

В первой строке входных данных задано единственное число n (1 ≤ n ≤ 26) — количество цветов бусинок. Во второй строке через пробел записано n целых положительных чисел ai — количество бусинок i-го цвета.

Гарантируется, что сумма ai не меньше двух и не превосходит 100 000.

Выходные данные

В первой строке выведите единственное число — наибольшее количество красивых разрезов, которого можно добиться. Во второй строке выведите бусы, обладающие таким числом красивых разрезов.

Каждый цвет бусинок кодируется соответствующей строчной английской буквой (начиная с a), содержимое бус можно выводить начиная с любой позиции. Если правильных ответов несколько, разрешается вывести любой.

Примечание

В первом тесте бусы не могут иметь более одного красивого разреза. Пример бус с одним красивым разрезом приведен на картинке.

Во втором тесте бусы можно составить единственным образом.

D. Ломаная

Конструктив реализация *1700

На координатной плоскости отмечены три различные точки. Через них требуется провести простую ломаную, без самопересечений и самокосаний, состоящую только из звеньев, параллельных осям координат. От вас требуется найти, из какого минимального количества звеньев эта ломаная может состоять.

Входные данные

В каждой из трёх строк входных данных записано по два целых числа. В i-й строке находятся числа xi, yi ( - 109 ≤ xi, yi ≤ 109) — координаты i-й точки. Гарантируется, что все точки различны.

Выходные данные

Выведите одно число — минимальное возможное количество звеньев подходящей ломаной.

Примечание

Вариант ломаной в первом примере: Вариант ломаной во втором примере: Вариант ломаной в третьем примере:

B. Угадай перестановку

Конструктив *1100

У Боба есть перестановка целых чисел от 1 до n. Обозначим эту перестановку как p, при этом i-й элемент p обозначается как pi. Для всех пар различных индексов i, j (1 ≤ i, j ≤ n) Боб выписал число ai, j = min(pi, pj). При этом ai, i = 0 для всех целых i от 1 до n.

Боб дал вам все выписанные им значения ai, j. Ваша задача — восстановить какую-нибудь перестановку размера n, по которой могли быть получены такие значения, если известно, что хотя бы одна такая перестановка существует.

Входные данные

В первой строке входных данных записано единственное целое число n (2 ≤ n ≤ 50).

В следующих n строках записаны значения ai, j. j-е число в i-й строке равняется ai, j и равно 0 для i = j. Гарантируется, что ai, j = aj, i и что существует хотя бы одна подходящая перестановка p.

Выходные данные

Выведите перестановку из n целых чисел, по которой могли бы быть получены такие значения ai, j. Если существует несколько возможных решений, то разрешается вывести любое из них.

Примечание

В первом примере подходят перестановки {1, 2} или {2, 1}.

Во втором примере ещё одной подходящей перестановкой является {2, 4, 5, 1, 3}.

F. Двойной рюкзак

Конструктив *3000

Вам даны мультимножества A и B. Каждое мультимножество состоит из n целых чисел от 1 до n включительно. Мультимножества могут содержать несколько копий одного и того же числа.

Вы хотели бы найти непустое подмножество мультимножества A и непустое подмножество мультимножества B, такие, что суммы всех составляющих их чисел равны. Подмножества также могут быть мультимножествами, то есть могут содержать элементы с одинаковыми значениями.

Если решения не существует, выведите -1. В противном случае выведите индексы элементов любых таких подмножеств A и B.

Входные данные

В первой строке входных данных будет записано единственное целое число n (1 ≤ n ≤ 1 000 000).

Во второй строке содержатся n целых чисел от 1 до n — элементы A. В третьей строке содержатся n целых чисел от 1 до n — элементы B.

Выходные данные

Если решения не существует, то выведите -1. В противном случае выведите своё решение на четырёх строках.

Первая строка должна содержать единственное целое число ka, определяющее размер соответствующего подмножества A. Вторая строка должна содержать ka различных чисел — индексы элементов подмножества A.

Третья строка должна содержать единственное целое число kb, определяющее размер соответствующего подмножества B. Четвёртая строка должна содержать kb различных чисел — индексы подмножества B.

Элементы обоих мультимножеств нумеруются от 1 до n. Если возможных решений несколько, то выведите любое из них.

D. Крыса Квеш и сыр

Конструктив математика Перебор *2400

Мокрая Акула предложил Крысе Квешу выбрать три положительных числа x, y и z от 0.1 до 200.0 включительно. Крыса Квеш хочет удивить Мокрую Акулу, поэтому он выбирает все числа ровно с одним знаком после десятичной точки.

Мокрая Акула знает, что Крыса Креш хочет получить как можно больше сыра, и он решил предоставить ему такую возможность. Он предлагает скомбинировать имеющиеся числа x, y и z одним из следующих двенадцати способов:

  1. a1 = xyz;
  2. a2 = xzy;
  3. a3 = (xy)z;
  4. a4 = (xz)y;
  5. a5 = yxz;
  6. a6 = yzx;
  7. a7 = (yx)z;
  8. a8 = (yz)x;
  9. a9 = zxy;
  10. a10 = zyx;
  11. a11 = (zx)y;
  12. a12 = (zy)x.

Пусть m — максимальное среди всех ai, а c — такой минимальный индекс (от 1 до 12), что ac = m. Именно это c вас и просит найти Крыса Креш. Поскольку он хотел бы увидеть, сколько именно сыра он получит, то он просит вывести не индекс c, а соответствующее ему выражение.

Входные данные

Единственная строка входных данных содержит три вещественных числа x, y и z (0.1 ≤ x, y, z ≤ 200.0), каждое из них дано ровно с одним знаком после десятичной точки.

Выходные данные

Среди выражений xyz, xzy, (xy)z, (xz)y, yxz, yzx, (yx)z, (yz)x, zxy, zyx, (zx)y и (zy)x выберите одно с максимальным значением. Если правильных ответов несколько, то выведите то, которое встречается в списке раньше.

xyz выводите как «x^y^z» (скобки не используются), а (xy)z как (x^y)^z (скобки используются).

D. Оптимальное расположение чисел

Конструктив *1900

У вас есть массив a, содержащий все целые числа от 1 до n по два раза. Вы можете произвольным образом переставлять числа в этом массиве.

Пусть число i в переставленном массиве находится в позициях xi, yi (xi < yi). Введём обозначение di = yi - xi — расстояние между позициями числа i. Вам нужно так переставить числа в массиве, чтобы минимизировать значениe суммы .

Входные данные

В единственной строке входных данных находится целое число n (1 ≤ n ≤ 5·105).

Выходные данные

Выведите 2n целых чисел — переставленный массив a, который минимизирует значение суммы s.

A. Граф и строка

графы Конструктив *1800

Однажды, сидя на лекции, студент Вася увидел, что на его парте написана строка s1s2... sn, состоящая только из букв «a», «b» и «c». Поскольку лекция была скучной, Вася решил дополнить рисунок, построив граф G, обладающий следующими свойствами:

  • G имеет ровно n вершин, пронумерованных от 1 до n;
  • Любая пара вершин i и j, где i ≠ j, соединена ребром тогда и только тогда, когда символы si и sj либо совпадают, либо являются соседними в алфавите. Так, пары букв «a»-«b» и «b»-«c» являются соседними, а пара «a»-«с» — нет.

Вася нарисовал получившийся граф рядом со строкой, а саму строку стёр. На следующий день друг Васи Петя, придя на свою лекцию, обнаружил на своей парте некоторый граф. Он слышал о приключениях Васи и теперь хочет узнать, мог ли это быть тот самый граф G, нарисованный Васей. Для этого Пете требуется знать, существует ли строка s, по которой Вася мог построить такой граф, и если она существует, то хотелось бы получить один из возможных вариантов.

Входные данные

В первой строке входных данных записаны два числа n и m  — количество вершин и рёбер в графе, обнаруженном Петей.

В следующих m строках заданы по два целых числа ui и vi (1 ≤ ui, vi ≤ n, ui ≠ vi), задающие рёбра графа. Гарантируется, что граф не содержит кратных рёбер, то есть любая пара вершин встречается в списке рёбер не более одного раза.

Выходные данные

В первой строке выведите «Yes» (без кавычек), если искомая строка существует, и «No» (без кавычек) в противном случае.

Если искомая строка s существует, то выведите её во второй строке. Длина s должна в точности равняться n, все буквы должны быть «a», «b» или «c», а построенный по этой строке граф должен совпадать с заданным во входных данных. Если существует несколько возможных ответов, то разрешается вывести любой.

Примечание

В первом примере дан граф из двух вершин, между которыми проведено ребро. Значит, эти вершины могут соответствовать как одинаковым буквам, так и соседним. Этому графу удовлетворяет любая из строк «aa», «ab», «ba», «bb», «bc», «cb» и «cc».

Во втором примере первая вершина соединена со всеми остальными тремя вершинами, но эти три вершины не соединены между собой. Это значит, что они должны соответствовать различным буквам, не являющимся соседними, а это невозможно.

B. Война корпораций

жадные алгоритмы Конструктив Строки *1200

Давным-давно в далёкой-далёкой галактике противоборствовали две огромные IT-корпорации: Pineapple и Gogol. Противостояние длится уже многие годы, но близится переломный момент: компания Gogol разработала абсолютно новое устройство, не имеющее аналогов — планшет Lastus 3000.

В этом устройстве используется впервые созданный искусственный интеллект (ИИ). Члены компании Pineapple пытались всеми силами отложить выход нового девайса. В конце концов, за неделю до выхода Lastus 3000 на рынок юристы обнаружили, что название искусственного интеллекта очень похоже на название телефона, который выпустила компания Pineapple 200 лет назад. Так как компания Pinapple обладает авторским правом на это название, она потребовала изменить имя искусственного интеллекта.

Pineapple утверждает, что название их телефона присутствует в качестве подстроки в имени ИИ. Название этой технологии уже было выгравировано на всех планшетах, поэтому директор Gogol предложил вместо некоторых букв в названии ИИ поставить символ «#». Так как это довольно затратно, надо найти минимальное количество символов, которые нужно заменить на «#», чтобы имя ИИ больше не содержало название телефона Pineapple в качестве подстроки. Помогите компании Gogol решить эту задачу.

Подстрокой называется непустая последовательность подряд идущих символов строки.

Входные данные

Первая строка входных данных содержит название ИИ компании Gogol, длина названия не превосходит 100 000 символов. Вторая строка входных данных содержит название телефона компании Pineapple, её длина не превосходит 30 символов. Обе строки непустые и содержат только маленькие буквы английского алфавита.

Выходные данные

Требуется вывести минимальное количество букв, которое надо заменить на символ «#» в названии ИИ, чтобы оно не содержало название телефона в качестве подстроки.

Примечание

В первом примере название ИИ можно заменить на «int#llect».

Во втором примере название можно не менять.

В третьем примере название ИИ можно поменять на «s#ris#ri». Обойтись меньшим количеством замен не получится.

C. K-специальные таблички

Конструктив реализация *1300

Чего не сделаешь ради того, чтобы выделиться из серой массы. Кто-то танцует, кто-то учит наизусть правила русского языка, кто-то пытается стать выдающимся спортивным программистом, ну а кто-то коллекционирует забавные математические объекты.

Алиса как раз из таких коллекционеров. Сейчас она очень хочет заполучить k-специальную табличку. Напомним, что табличка n × n называется k-специальной, если выполнены следующие три условия:

  • каждое число от 1 до n2 встречается в ней ровно 1 раз;
  • в каждой строке числа идут в возрастающем порядке;
  • сумма чисел, расположенных в k-м столбце, максимальна.

Помогите Алисе! Отыщите хотя бы одну k-специальную табличку размера n × n. Строки и столбцы нумеруются от 1 до n, при этом строки нумеруются сверху вниз, а столбцы слева направо.

Входные данные

В первой строке входных данных записаны два числа n и k (1 ≤ n ≤ 500, 1 ≤ k ≤ n) — размер искомой таблички и номер столбца, сумма в котором должна быть максимальна.

Выходные данные

В первой строке выведите сумму чисел в k-м столбце искомой таблички.

В следующих n строках выведите саму табличку: сначала n элементов первой строки, затем n элементов второй и так далее.

Если искомых табличек несколько, то выведите любую из них.

D. Контрольная по арифметике

Конструктив математика реализация *2400

Отличник Витя учится в третьем классе. На последнем уроке математики в четверти учительница Оксана Филипповна дала итоговую контрольную работу по арифметике. На контрольной сообразительный Витя быстрее всех справился со стандартными заданиями. Поскольку до конца урока оставалось ещё много времени, учительница предложила ему решить более сложное упражнение.

Рассмотрим операцию переворота целого положительного числа: при её применении десятичные цифры числа записываются в обратном порядке, затем если у результата есть ведущие нули, они отбрасываются. Например, при перевороте из числа 123 получается число 321, из числа 130 — число 31, а из числа 31 — число 13.

Оксана Филипповна загадала целое положительное число a без ведущих нулей и применила к нему операцию переворота, получилось число ar. После этого она сложила a и ar, дала Вите их сумму n и попросила его найти исходное число a.

Поскольку в предложенном учительницей примере числа a и ar были небольшими, Витя быстро угадал правильный ответ и задумался над построением общего алгоритма для решения задачи. Его интересует, как по заданному числу n найти какое-либо a или определить, что такого a не существует. Помогите Вите разработать такой алгоритм.

Входные данные

В первой строке входных данных находится одно целое число n (1 ≤ n ≤ 10100 000).

Выходные данные

В случае если не существует ни одного целого положительного числа a без ведущих нулей такого, что a + ar = n, выведите единственное число 0.

В противном случае выведите подходящее a без пробелов и ведущих нулей. Если удовлетворяющих условию вариантов несколько, выведите любой.

Для лучшего понимания формата вывода рекомендуется изучить примеры.

Примечание

В первом примере 4 = 2 + 2, a = 2 — единственный вариант.

Во втором примере 11 = 10 + 1, a = 10 — единственный вариант. Обратите внимание, что вариант a = 01 не подходит, поскольку a не может иметь ведущие нули.

Легко проверить, что в третьем примере ни одного подходящего a не существует.

В четвёртом примере 33 = 30 + 3 = 12 + 21, и существует три варианта для a: a = 30, a = 12, a = 21. Любой из них является правильным ответом.

B. Карты

дп Конструктив математика *1300

У Кэтрин есть колода из n карт, каждая карта либо красная, либо зеленая, либо синяя. Пока в колоде есть ещё хотя бы две карты, Кэтрин выполняет одно из двух действий:

  • взять две (необязательно соседние) карты различных цветов и заменить их на одну карту третьего цвета;
  • взять две (необязательно соседние) карты одного и того же цвета и заменить их на одну карту этого цвета;

Она применяет эти операции до тех пор, пока не останется ровно одна карта. Определите все возможные цвета этой последней карты.

Входные данные

Первая строка входных данных содержит единственное целое число n (1 ≤ n ≤ 200) — изначальное количество карт в колоде.

Следующая строка содержит строку s длины n — цвета карт в колоде. s содержит только символы «B», «G», и «R», обозначающие синий, зелёный и красный соответственно.

Выходные данные

Выведите одну строку, содержащую от одного до трёх символов, — возможные цвета последней карты (используйте те же символы, что и во входных данных) в алфавитном порядке.

Примечание

В первом примере у Кэтрин одна красная карта и одна синяя карта, которые она может поменять только на зелёную карту.

Во втором примере у Кэтрин две зелёных карты и одна красная карта. У неё два варианта: она может обменять две зелёных карты на одну зелёную, а затем обменять новую зелёную карту и красную карту на синюю карту. Или же она может обменять зелёную и красную карты на синюю карту, затем обменять синюю карту и оставшуюся зелёную карту на красную карту.

В третьем примере у Кэтрин есть только синие карты, так что она может обменять их только на другие синие карты.

A. Дальние родственники и торт

Комбинаторика Конструктив Перебор реализация *800

Семья Доров готовится праздновать день рождения Фомы Дора, для этого члены семьи приготовили ему весьма своеобразный торт.

Торт представляет собой квадрат n × n, состоящий из одинаковых квадратиков со стороной 1. Каждый квадрат либо пустой, либо содержит шоколадку. Члены семьи испекли торт и разложили на нём шоколадки. Они думают, что радость Фомы будет равна количеству пар клеток с шоколадками, расположенных в одной строке или в одном столбце. Теперь они пытаются вычислить, чему же будет равно это значение для данного торта.

Обратите внимание, что каждая пара может быть посчитана не более чем один раз, поскольку две различные клетки не могут быть одновременно расположены в одной строке и в одном столбце.

Входные данные

В первой строке входных данных записано единственное целое число n (1 ≤ n ≤ 100) — длина стороны торта.

Следующие n строк содержат по n символов, описывающих сам торт. Пустые клетки обозначаются символом «.», а клетки, содержащие шоколадку, задаются символом «C».

Выходные данные

Выведите, чему будет равна радость Фомы Дора, когда он увидит торт, то есть количество клеток с шоколадками, расположенных в одной строке или в одном столбце.

Примечание

Пронумеруем строки сверху вниз, а столбцы слева направо. Тогда в одной строке расположены:

  1. (1, 2) и (1, 3)
  2. (3, 1) и (3, 3)
В одном столбце расположены следующие клетки с шоколадками:
  1. (2, 1) и (3, 1)
  2. (1, 3) и (3, 3)

D. Раздел острова

Конструктив *1900

На острове Бука произошла революция. На место старого правительства пришло новое. Новое правительство включает в себя n партий, каждой из них положена некоторая доля острова в соответствии с их вкладом в становление революции. Вот только разделить остров у них не получается.

Остров условно можно представить как два прямоугольника размерами a × b и c × d единичных клеток соответственно, которые располагаются вплотную друг к другу. При этом одна из сторон длины a и одна из сторон длины c лежат на одной прямой. Более подробно это можно видеть на рисунке.

i-ой партии полагается доля острова в xi единичных клеток. Каждая такая доля должна целиком покрывать некоторые клетки острова (частично покрывать клетки не допускается) и быть связной фигурой. Связность подразумевает, что из любой клетки партии можно добраться до любой другой клетки этой же партии, передвигаясь через смежные по ребрам клетки, которые также принадлежат данной партии.

От Вас требуется разделить остров между партиями.

Входные данные

В первой строке содержится 5 целых чисел, разделенных пробелом — a, b, c, d и n (1 ≤ a, b, c, d ≤ 50, b ≠ d, 1 ≤ n ≤ 26). Во второй строке находится n чисел, разделенных пробелом. i-е из них равно числу xi (1 ≤ xi ≤ a × b + c × d). Гарантируется, что .

Выходные данные

Если разделить остров между партиями требуемым образом невозможно — выведите «NO» (без кавычек). Иначе выведите «YES» (тоже без кавычек), а, начиная со следующей строки, выведите max(b, d) строк, по a + c символов в каждой. Для обозначения, какой партии какую клетку острова отнести, используйте маленькие латинские буквы. Для первой по порядку партии из входных данных используйте «a», для второй — «b» и так далее. Для клеток, принадлежащих морю, используйте «.». Первый символ второй строки выходных данных должен соответствовать клетке, принадлежащей прямоугольнику a × b, последний символ второй строки — клетке, принадлежащей прямоугольнику c × d.

Если решений несколько, выведите любое.

B. Проверка печати

Конструктив реализация *1200

Крис работает в крупной компании «Blake Technologies». Ему как лучшему инженеру было поручено разработать уникальный принтер, который будет рисовать горизонтальные и вертикальные полоски. Первый прототип принтера уже готов, и Крис собирается протестировать его, а вас просит написать программу, проверяющую, что результат печати совпадает с ожидаемым.

Принтер умеет печатать только на прямоугольных клетчатых листах размера n × m. Представим лист как таблицу, состоящую из n строк и m столбцов. Строки нумеруются сверху вниз целыми числами от 1 до n, а столбцы — слева направо целыми числами от 1 до m. Изначально все клетки таблицы покрашены в цвет 0.

Ваша программа должна уметь выполнять два типа операций:

  1. Покрасить все клетки строки ri в цвет ai;
  2. Покрасить все клетки столбца ci в цвет ai.

Если при выполнении операции i какая-то клетка уже была покрашена, то она всё равно меняет свой цвет на цвет ai.

Ваша программа должна вывести итоговую таблицу, которая получится после последовательного выполнения всех k операций.

Входные данные

В первой строке входных данных записаны три целых числа n, m и k (1  ≤  n,  m  ≤ 5000, n·m ≤ 100 000, 1 ≤ k ≤ 100 000) — размеры листа и количество операций соответственно.

В следующих k строках идут запросы двух видов:

  • ri ai (1 ≤ ri ≤ n, 1 ≤ ai ≤ 109), означает, что строка ri красится в цвет ai;
  • ci ai (1 ≤ ci ≤ m, 1 ≤ ai ≤ 109), означает, что столбец ci красится в цвет ai.
Выходные данные

Выведите n строк по m чисел в каждой строке — итоговые цвета клеток таблицы.

Примечание

Приведенная ниже иллюстрация показывает все три операции для первого примера. Серым цветом выделены клетки, которые были перекрашены после соответствующей операции.

B. Алиса, Боб, две команды

Конструктив Перебор *1400

Алиса и Боб играют в игру. Частью игры является разделение игровых фигур на две группы. Всего в игре есть n фигур и i-я из них имеет силу pi.

Фигуры разделяются на группы за несколько шагов:

  1. Сначала Алиса разделяет фигуры на две группы A и B. Таким образом, Алиса записывает строку длины n, где i-й символ равен A или B в зависимости от группы i-й фигуры.
  2. Затем Боб выбирает некоторый суффикс или префикс, и меняет все символы на нём (то есть заменяет A на B, а B на A). Он это делает не больше одного раза.
  3. Алиса забирает все фигуры с буквой A, а Боб забирает фигуры с буквой B.

Сила игрока определяется как суммарная сила фигур в группе игрока.

Вам задано начальное разделение Алисы на команды, помогите Бобу найти оптимальную стратегию. Выведите наибольшую силу, которую Боб может получить.

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 5·105) — количество игровых фигур.

Во второй строке находятся n целых чисел pi (1 ≤ pi ≤ 109) — сила i-й фигуры.

В третьей строке находятся n символов A или B — разделение на команды после первого хода (после хода Алисы).

Выходные данные

Выведите одно целое число a — максимальную силу, которую Боб может получить.

Примечание

В первом примере Боб должен поменять символы на суффиксе длины один.

Во втором примере Боб должен поменять символы на префиксе или суффиксе (здесь это одно и то же) длины 5.

В третьем примере Боб должен ничего не делать.

B. Тривиальная задача

Конструктив математика Перебор теория чисел *1300

Мистер Санта поручил всем сильнейшим программистам мира решить тривиальную задачу. Он даёт им целое положительное число m и просит найти количество таких целых положительных чисел n, что десятичная запись факториала числа n будет заканчиваться ровно на m нулей. А вы считаете себя достаточно сильным программистом, чтобы решить эту задачу?

Входные данные

В единственной строке входных данных записано целое число m (1 ≤ m ≤ 100 000) — требуемое количество нулей в конце десятичной записи факториала.

Выходные данные

Сначала выведите k — количество таких целых чисел n, что их факториал заканчивается на m нулей. Затем выведите эти k целых чисел в порядке возрастания.

Примечание

Факториал n равняется произведению всех целых чисел от 1 до n включительно, то есть n! = 1·2·3·...·n.

В первом примере 5! = 120, 6! = 720, 7! = 5040, 8! = 40320 и 9! = 362880.

E. Финансирование стартапа

Бинарный поиск Конструктив Структуры данных Теория вероятностей *2400

Стартап, связанный с торговлей в интернете, просит инвесторов о финансировании. Он работает уже n недель, и у него даже есть сайт!

Для каждой недели менеджеры стартапа знают количество уникальных посетителей vi и доход ci. Чтобы оценить потенциал стартапа в промежутке с недели l по неделю r включительно, инвесторы используют минимум из максимального количества посетителей, умноженного на 100, и минимального дохода в течение этого промежутка времени. Формально:

Стоит честно заметить, что инвесторы понятия не имеют, как эффективно оценить стартап, поэтому они выберут k случайных различных недель в качестве li и дадут эти числа менеджерам стартапа. Для каждого li те выберут некоторое ri ≥ li и сообщат инвесторам максимальное количество посетителей и минимальный доход в течение соответствующего периода с li по ri.

Затем инвесторы вычислят потенциал стартапа для каждого из данных промежутков времени и выберут минимальное значение p(li, ri) в качестве итоговой оценки потенциала стартапа. Предполагается, что менеджеры стартапа всегда оптимально выбирают значения ri для данных li, то есть таким образом чтобы максимизировать итоговую оценку стартапа, чему равняется математическое ожидание этой величины?

Входные данные

В первой строке входных данных записаны два числа n и k (1 ≤ k ≤ n ≤ 1 000 000).

Во второй строке записаны n целых чисел vi (1 ≤ vi ≤ 107) — количество уникальных посетителей за каждую неделю.

В третьей строке записано n целых чисел ci (1 ≤ ci ≤ 107) — доход стартапа за каждую неделю.

Выходные данные

Выведите единственное вещественное число — математическое ожидание итоговой оценки стартапа. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 6.

А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .

Примечание

Рассмотрим первый пример.

Если инвесторы спросят про li = 1, менеджеры стартапа выберут ri = 1, так чтобы максимальное число посетителей равнялось 3, а минимальный доход равнялся 300. Таким образом потенциал будет равен min(3·100, 300) = 300.

Если инвесторы спросят про li = 2, менеджеры стартапа выберут ri = 3, так чтобы максимальное число посетителей равнялось 2, а минимальный доход равнялся 200. Таким образом потенциал будет равен min(2·100, 200) = 200.

Если инвесторы спросят про li = 3, менеджеры стартапа выберут ri = 3, так чтобы максимальное число посетителей равнялось 1, а минимальный доход равнялся 300. Таким образом потенциал будет равен min(1·100, 300) = 100.

Теперь нужно выбрать равновероятно множество размера 2, в каждом выбрать минимум. Возможные множества: {200, 300},{100, 300},{100, 200}. Оценки стартапа потенциалов получаются {200, 100, 100}. Таким образом, математическое ожидание (100 + 200 + 100) / 3 = 133.(3).

A. Островной пазл

Конструктив реализация *1300

В далёком островном государстве насчитывается n островов, пронумерованных целыми числами от 1 до n. Острова соединены двунаправленными мостами, так чтобы образовывать один цикл: остров номер 1 соединён с островом номер 2, остров номер 2 соединён с островом номер 3 и так далее, а остров номер n соединён с островом номер 1.

В центре каждого острова расположен пьедестал. На всех пьедесталах всех островов, кроме одного, находится очень хрупкая статуя, причём все статуи различны. У оставшегося острова пьедестал пуст.

Жители островов договорились переупорядочить статуи определённым образом. Единственная доступная им операция — это выбрать какой-то остров, непосредственно соединённый мостом с островом с пустым пьедесталом, и аккуратно перенести статую с одного пьедестала на свободный пьедестал.

Определите, смогут ли они добиться желаемого расположения статуй, используя только описанную выше операцию.

Входные данные

В первой строке входных данных записано число n (2 ≤ n ≤ 200 000) — количество островов.

Во второй строке записаны n целых чисел ai (0 ≤ ai ≤ n - 1) — номер статуи, расположенной на i-м острове. Если ai = 0, то пьедестал острова пуст. Гарантируется, что все ai различны.

В третьей строке записаны n целых чисел bi (0 ≤ bi ≤ n - 1) — номер статуи, которую жители хотят поместить на i-й остров. Как и до этого, bi = 0 означает, что жители острова не хотят иметь у себя на пьедестале никакой статуи. Гарантируется, что все bi различны.

Выходные данные

Выведите «YES» (без кавычек), если желаемое расположение статуй может быть достигнуто. В противном случае выведите «NO» (без кавычек).

Примечание

В первом примере островитяне могут сначала подвинуть статую 1 с острова 1 на остров 2, затем подвинуть статую 2 с острова 3 на остров 1 и, наконец, подвинуть статую 1 с острова 2 на остров 3.

Во втором примере островитяне могут просто подвинуть статую 1 с острова 1 на остров 2.

В третьем примере никакая последовательность перемещений не позволит островитянам добиться желаемого расположения статуй.

A. Голосование за фотографии

*особая задача Конструктив реализация *1000

После празднования «экватора» студенты одного из факультетов Берляндского государственного университета решили провести голосование за лучшую фотографию. Они разместили фотографии в социальной сети и определились с правилами определения победителя: выиграет та фотография, которая наберёт наибольшее количество лайков. Если же наибольшее количество лайков получат несколько фотографий, то победа достанется той, которая наберёт это количество первой.

Помогите ребятам определить фотографию-победительницу по записям о лайках.

Входные данные

В первой строке входных данных содержится единственное целое число n (1 ≤ n ≤ 1000) — суммарное количество лайков к опубликованным фотографиям.

Вторая строка содержит n положительных целых чисел a1, a2, ..., an (1 ≤ ai ≤ 1 000 000), где ai — это идентификатор фотографии, которой был поставлен i-й лайк.

Выходные данные

Выведите идентификатор победившей в голосовании фотографии.

Примечание

В первом тестовом примере фотография с идентификатором 1 набрала два лайка (первый и пятый), фотография с идентификатором 2 набрала два лайка (третий и четвертый), а фотография с идентификатором 3 набрала один лайк (второй).

Таким образом, в голосовании победила фотография с идентификатором 2, так как она набрала:

  • больше лайков, чем фотография с идентификатором 3;
  • столько же лайков, сколько и фотография с идентификатором 1, но второй лайк был поставлен фотографии с идентификатором 2 раньше.

B. Порядок чатов

*особая задача Бинарный поиск Конструктив сортировки Структуры данных *1200

Поликарп — большой любитель проводить время в соцсетях. Страница со списком чатов в его любимой соцсети устроена так, что при отсылке сообщения собеседнику чат с ним поднимается на самый верх страницы. Относительный порядок всех остальных чатов при этом не изменяется. Если ранее чата с этим собеседником не было, то просто в верх списка чатов вставляется новый чат.

Считая, что изначально список чатов пуст, по последовательности сообщений Поликарпа постройте список чатов после обработки всех его сообщений. Считайте, что никто из собеседников ничего Поликарпу не писал.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 200 000) — количество сообщений Поликарпа. Далее в n строках перечислены адресаты сообщений в порядке отсылки сообщений. Имя каждого адресата — непустая последовательность строчных букв английского алфавита длины не более 10.

Выходные данные

Выведите всех адресатов, с кем общался Поликарп, в порядке расположения чатов с ними сверху вниз.

Примечание

В первом тестовом примере Поликарп сначала напишет пользователю с именем «alex», и список примет вид:

  1. alex

Затем Поликарп напишет пользователю с именем «ivan» и список чатов будет выглядеть следующим образом:

  1. ivan
  2. alex

Третье сообщение Поликарп напишет пользователю с именем «roman». После этого список чатов будет выглядеть следующим образом:

  1. roman
  2. ivan
  3. alex

Четвёртое сообщение Поликарп напишет пользователю с именем «ivan», которому он уже отправлял сообщение, поэтому список чатов изменится следующим образом:

  1. ivan
  2. roman
  3. alex

C. Промокоды с ошибками

*особая задача Конструктив Перебор реализация *1400

Во время проведения новогодней акции в группе «Бары Судиславля» были разыграны n промокодов. Каждый промокод состоит из ровно шести цифр и даёт право на один бесплатный коктейль в баре «Приют комара». Разумеется, все промокоды различны.

Поскольку «Приют комара» открывается только в 9, а вечеринки в Судиславле, как правило, начинаются уже в 6, то у многих могут возникнуть проблемы с тем, чтобы вбить промокод без ошибок. Необходимо вычислить такое максимальное k, что промокод может быть однозначно идентифицирован, если был введён не более чем с k ошибками. При этом k = 0 означает, что промокоды необходимо вводить абсолютно точно.

Ошибкой в этой задаче следует считать ввод неправильной цифры. Например, значение «123465» содержит две ошибки относительно промокода «123456». Независимо от количества ошибок, введённое значение состоит ровно из шести цифр.

Входные данные

В первой строке выходных данных записано число n (1 ≤ n ≤ 1000) — количество промокодов.

В каждой из следующих n строк записан один промокод, состоящий из ровно шести цифр. Гарантируется, что все промокоды различны. Допустимо, что промокоды начинаются с цифры «0».

Выходные данные

Выведите максимальное k (разумеется, не превосходящее длины промокода), такое что любой промокод может быть однозначно идентифицирован, если введён с не более чем k ошибками.

Примечание

В первом примере k < 3, так как если посетитель бара вобьёт значение «090909», то будет невозможно определить, какой именно промокод ему соответствует.

A. Номера домов

*особая задача Конструктив математика *1100

Главная улица в Берляндии представляет собой прямую, вдоль которой построены n домов (n — чётное число). Дома расположены с обеих сторон улицы. Дома с нечётными номерами находятся с одной стороны улицы и нумеруются от 1 до n - 1 в порядке от начала улицы к её концу (на картинке слева направо). Дома с чётными номерами находятся с другой стороны улицы и нумеруются от 2 до n в порядке от конца улицы к её началу (на картинке справа налево). Соответствующие дома с чётными и нечётными номерами находятся строго друг напротив друга, то есть напротив дома номер 1 находится дом номер n, напротив дома номер 3 находится дом номер n - 2, напротив дома номер 5 находится дом номер n - 4 и так далее.

Васе необходимо как можно скорее добраться до дома номер a. Он заезжает с начала улицы и двигается на автомобиле по ней до дома номер a. Чтобы доехать от начала улицы до домов с номерами 1 и n, он тратит ровно 1 секунду. На то, чтобы проехать расстояние между двумя соседними домами, он также тратит ровно одну секунду. Вася может припарковаться с любой стороны дороги, поэтому расстояние от начала улицы до домов, стоящих друг напротив друга, следует считать одинаковым.

Перед вами стоит задача: найти минимальное время, по истечении которого Вася сможет добраться до дома с номером a.

Входные данные

В первой строке входных данных содержатся два целых числа n и a (1 ≤ a ≤ n ≤ 100 000) — количество домов на улице и номер дома, до которого нужно доехать Васе, соответственно. Гарантируется, что число n чётно.

Выходные данные

Выведите единственное целое число — минимальное время, за которое Вася сможет добраться от начала улицы до дома с номером a.

Примечание

В первом примере на улице всего четыре дома, по два с каждой стороны. Дом номер 2 будет последним по правую руку движения Васи.

Второй пример соответствует картинке с n = 8. Дом номер 5 — предпоследний по левой (относительно Васи) стороне дороги.

B. Медвежонок и забытое дерево 3

графы Деревья Конструктив *1600

Деревом называется связный неориентированный граф состоящий из n вершин и n - 1 ребра. Вершины пронумерованы от 1 до n.

У полярного медвежонка Лимака было дерево, пока его не украл злой Радевуш. Медвежонок очень расстроился, потому что он помнит о дереве только три числа n, d и h:

  • Дерево состояло ровно из n вершин.
  • Диаметр дерева был равен d. Другими словами, d это максимальное расстояние между какой-то парой вершин дерева.
  • Также Лимак помнит, что если сделать корнем дерева вершину 1, то его высота будет равна h. Другими словами, h это максимальное расстояние от 1 до какой-то другой вершины.

Расстоянием между двумя вершинами дерева называется количество рёбер на простом пути между ними.

Помогите Лимаку найти какое-нибудь дерево, удовлетворяющее всем условиям и выведите его рёбра в произвольном порядке. Если подходящего дерева не существует, то выведите «-1».

Входные данные

В первой строке входных данных содержатся три целых числа n, d и h (2 ≤ n ≤ 100 000, 1 ≤ h ≤ d ≤ n - 1) — количество вершин, диаметр и высота дерева, если сделать вершину номер 1 корнем.

Выходные данные

Если не существует ни одного дерева подходящего под описание Лимака, то выведите «-1» (без кавычек).

В противном случае выведите дерево, подходящее под описание Лимака. В n - 1 строке выведите пары вершин, соединённых рёбрами. Если подходящих деревьев несколько, разрешается вывести любое из них. Рёбра можно выводить в произвольном порядке.

Примечание

Ниже приведены рисунки для первого и третьего примеров.

C. Маленький Артёмка и Танцы

Конструктив Перебор реализация *1800

Маленький Артёмка очень любит танцевать. Особенно ему нравится танцевать руэду — кубинский танец, в котором все пары стоят по кругу.

Более детально: во время исполнения руэды n пар из мальчиков и девочек стоят по кругу. Изначально мальчик под номером 1 танцует с девочкой под номером 1, мальчик под номером 2 танцует с девочкой под номером 2 и так далее. Девочки пронумерованы в порядке по часовой стрелке. Во время танца громко объявляются различные команды, и все пары должны одновременно их исполнить, при этом мальчики могут в результате выполнения команд перемещаться вдоль круга, а девушки всегда стоят на своих изначальных местах. В данной задаче мы рассматриваем команды двух видов:

  1. Объявляется число x и направление, после чего все мальчики смещаются на x девушек в соответствующем направлении.
  2. Партнёры, которые танцуют с девушками с чётными индексами, меняются местами с партнёрами, которые танцуют с девушками с нечётными индексами, то есть тот, кто танцевал с девушкой 1, переходит к девушке номер 2, тот, кто танцевал с девушкой номер 2, переходит к девушке номер 1, тот, кто танцевал с девушкой номер 3, переходит к девушке номер 4 и так далее. Гарантируется, что n всегда чётно.

Ваша задача — определить конечное положение мальчиков после выполнения всех команд.

Входные данные

В первой строке входных данных записаны числа n и q (2 ≤ n ≤ 1 000 000, 1 ≤ q ≤ 2 000 000) — количество пар и количество выполненных команд соответственно. Гарантируется, что n чётно.

В следующих строках даны танцевальные команды в порядке их выполнения. Каждая команда начинается с целого числа, означающего ее тип, — 1 или 2. Команда первого типа является числом x ( - n ≤ x ≤ n), где 0 ≤ x ≤ n означает, что все мальчики переходят на x девушек в направлении по часовой стрелке, а x < 0 означает переход на  - x в направлении против часовой стрелки. Для команды второго типа нет дополнительных входных данных.

Выходные данные

Выведите n чисел, i-е из которых означает номер мальчика, с которым танцует девушка номер i после выполнения всех команд.

B. Медвежонок и два пути

графы Конструктив *1600

В Беарляндии n городов, пронумерованных целыми числами от 1 до n. Города соединены двусторонними дорогами. Никакая дорога не соединяет город с самим собой, и никакая пара городов не соединена больше чем одной дорогой.

Однажды медвежонок Лимак оказался в городе a и захотел пойти в город b. Между ними не было прямой дороги, поэтому он решил прогуляться и посетить каждый город ровно один раз. Формально:

  • Не существует дороги между городами a и b.
  • Существует путь, состоящий из n различных городов v1, v2, ..., vn, такой что v1 = a, vn = b, а города vi и vi + 1 соединены дорогой при .

На другой день ситуация повторилась. Лимак находился в городе c и хотел отправиться в город d, но дороги между ними не было, поэтому он решил прогуляться по длинному пути из n различных городов u1, u2, ..., un, такому что u1 = c, un = d, и между ui и ui + 1 есть дорога для .

Лимак полагает, что в Беарляндии не более k дорог, и просит вас проверить, может ли так быть, что он всё помнит правильно. По данным n, k и четырём различным индексам городов a, b, c и d, восстановите два пути (v1, ..., vn) и (u1, ..., un), которые удовлетворят всем условиям, или определите, что это невозможно.

Входные данные

В первой строке входных данных записаны два числа n и k (4 ≤ n ≤ 1000, n - 1 ≤ k ≤ 2n - 2) — количество городов и максимально допустимое количество дорог соответственно.

Во второй строке записаны четыре различных числа a, b, c и d (1 ≤ a, b, c, d ≤ n).

Выходные данные

Если выполнить все условия невозможно, то выведите -1 в единственной строке выходных данных. В противном случае выведите две строки с описанием путей.

Первая из них должна содержать n различных индексов городов v1, v2, ..., vn, и при этом должно выполняться v1 = a и vn = b. Вторая строка аналогично содержит n различных индексов u1, u2, ..., un, описывающих второй путь, то есть должно выполняться u1 = c и un = d.

Эти два пути определяют не более чем 2n - 2 дорог: (v1, v2), (v2, v3), ..., (vn - 1, vn), (u1, u2), (u2, u3), ..., (un - 1, un). Ваш ответ будет считаться неправильным, если различных дорог будет больше k или будет нарушено какое-то другое условие.

Обратите внимание, что (x, y) и (y, x) обозначают одну и ту же дорогу.

Примечание

В первом примере должно быть 7 городов и не более 11 дорог. В представленном решении содержится 10 дорог, как на картинке. Также показаны простые пути длины n между 2 и 4 и между 7 и 3.

A. Берляндский парламент

*особая задача Конструктив *1000

В парламенте Берляндии n парламентариев, пронумерованных целыми числами от 1 до n. Так получилось, что все парламентарии с нечётными номерами — демократы, а с чётными — республиканцы.

Новый парламентский зал представляет собой прямоугольник из a × b кресел — a рядов по b кресел в каждом. Два кресла называются соседними, если они примыкают друг к другу по стороне. Например, для кресла номер 5 в ряду номер 2 соседями являются кресла с номерами 4 и 6 в этом ряду и кресла с номерами 5 в рядах 1 и 3. Таким образом, в общем случае у кресла четыре соседа, кроме кресел на границе зала.

Известно, что если два парламентария из одной партии сидят рядом, то они отвлекаются на партийные вопросы.

Напишите программу, которая предложит какой-нибудь способ рассадить парламентариев в зале так, чтобы не нашлось пары соседних парламентариев из одной партии.

Входные данные

В первой строке входных данных записаны три целых числа n, a и b (1 ≤ n ≤ 10 000, 1 ≤ a, b ≤ 100), где n — количество парламентариев, a — количество рядов в зале, а b — количество кресел в каждом из рядов.

Выходные данные

Выведите единственное число -1, если не существует способа рассадить всех парламентариев в зале требуемым образом.

Если решение существует, то выведите любое из них в виде a строк по b чисел в каждой. В j-й позиции i-й строки выведите номер парламентария, которого следует посадить в соответствующее кресло, или 0, если кресло следует оставить пустым. Если вариантов решения может быть несколько, разрешается вывести любой из них.

Примечание

Для первого тестового примера существует еще несколько вариантов ответа, например:

3 2
0 1,

а также

2 1
3 0.

Следующая рассадка

3 2
1 0

является некорректной, так как парламентарии с номерами 1 и 3 — оба из партии демократов — будут сидеть на соседних креслах.

B. Обработка запросов

*особая задача Конструктив Структуры данных *1700

В этой задаче от вас требуется промоделировать поведение однопоточного сервера. Серверу поступят n запросов, для каждого из которых дан момент поступления ti и продолжительность обработки di. Известно, что все ti различны.

При поступлении нового запроса сервер может совершить одно из трёх действий:

  1. Если сервер свободен и очередь запросов пуста, то новый запрос сразу начинает выполняться.
  2. Если сервер занят и в очереди находится строго меньше b запросов, ожидающих выполнения, то новый запрос добавляется в конец очереди.
  3. Если сервер занят и в очереди находится ровно b запросов, ожидающих выполнения, то новый запрос отклоняется и выполнен уже не будет.

Как только сервер заканчивает обрабатывать очередной запрос, он переходит к следующему из очереди, если она не пуста. Считайте, что если какой-то запрос пришёл в момент времени x, и в этот же момент времени сервер освободился и очередь не пуста, то сначала начнёт обрабатываться запрос из очереди, а затем произойдет появление нового запроса.

Для каждого запроса найдите момент окончания его обработки или выведите для него -1, если он будет отклонён.

Входные данные

В первой строке входных данных содержатся целые числа n и b (1 ≤ n, b ≤ 200 000) — количество запросов и максимальный размер очереди соответственно.

Далее в n строках заданы описания запросов в хронологическом порядке. Каждое описание запроса записано на отдельной строке и состоит из двух целых чисел ti и di (1 ≤ ti, di ≤ 109), где ti — момент поступления i-го запроса, а di — продолжительность его обработки. Значения ti строго возрастают, то есть ti - 1 < ti для всех i > 1.

Выходные данные

Выведите последовательность n целых чисел e1, e2, ..., en, где ei — момент окончания обработки i-го запроса (нумерация в порядке поступления) или  - 1, если i-й запрос будет проигнорирован.

Примечание

Рассмотрим первый пример.

  1. Первый запрос начнёт обрабатываться сервером в момент времени 2, и сервер закончит его обработку в момент времени 11.
  2. За это время поступит второй запрос (в момент времени 4), но так как сервер будет занят, то этот запрос попадёт в очередь.
  3. В момент времени 10 (сервер все еще будет занят обработкой первого запроса) поступит третий запрос, но так как максимальный размер очереди равен 1 и в очереди уже будет находится второй запрос, то третий запрос будет отклонён.
  4. В момент времени 11 второй запрос будет взят из очереди и начнёт обрабатываться.
  5. В момент времени 15 поступит четвёртый запрос. Поскольку сервер занят, а очередь пуста, то запрос будет добавлен в очередь.
  6. В момент времени 19 происходят одновременно два события: сервер заканчивает обрабатывать второй запрос и поступает пятый запрос. Сначала будет завершена обработка второго запроса, затем запрос четыре будет изъят из очереди и отправлен на обработку, а потом в очередь будет добавлен запрос номер 5.
  7. Сервер закончит обработку четвертого запроса в момент времени 21. Из очереди будет извлечён пятый запрос.
  8. Сервер закончит обработку пятого запроса в момент времени 22.

A. Проверка дружбы

Конструктив Перебор реализация *1200

Корове Бесси и её лучшей подруге Элси подарили на день числа Пи пазлы. Каждый пазл состоит из таблички 2 × 2 и трёх костяшек с пометками «A», «B» и «C». Эти костяшки расположены в табличке таким образом, что одна клетка свободна. За один ход разрешается выбрать любую костяшку, расположенную в смежной со свободной клетке, и переложить её в свободную клетку, как показано на картинке:

Чтобы выяснить, являются ли они Лучшими Друзьями на Всю Жизнь (ЛДВЖ), Бесси и Элси хотя понять, существует ли такая последовательность ходов (ходить можно в обоих пазлах), которая переводит их пазлы в одинаковую конфигурацию. Конфигурации двух пазлов считаются одинаковыми, если одинаковые костяшки расположены на одинаковых позициях. Поворачивать и переворачивать пазл не разрешается.

Входные данные

В первых двух строках входных данных записана табличка 2 × 2 с изначальной конфигурацией пазла Бесси. Следующие две строки задают табличку 2 × 2 с конфигурацией пазла Элси. Костяшки обозначены буквами «A», «B» и «C», а пустая клетка обозначена как «X». Гарантируется, что оба пазла содержат ровно одну костяшку с каждой буквой и ровно одну пустую клетку.

Выходные данные

Выведите «YES» (без кавычек) если можно совершить такую последовательность ходов, что конфигурации пазлов совпадут (а значит, Бесси и Элси настоящие ЛДВЖ). В противном случае выведите «NO» (без кавычек).

Примечание

Решение для первого тестового примера представлено на рисунке. Бесси достаточно переместить вниз костяшку с пометкой «A».

Во втором примере два пазла нельзя привести в одну конфигурацию. Возможно Бесси и Элси не такие уж и друзья...

A. Наибольший подъем

Конструктив реализация *900

Профиль горного хребта схематично задан в виде прямоугольной таблицы из символов «.» (пустое пространство) и «*» (часть горы). Каждый столбец таблицы содержит хотя бы одну «звёздочку». Гарантируется, что любой из символов «*» либо находится в нижней строке матрицы, либо непосредственно под ним находится другой символ «*».

...........
.........*.
.*.......*.
**.......*.
**..*...**.
***********
Пример изображения горного хребта.

Маршрут туриста проходит через весь горный хребет слева направо. Каждый день турист перемещается вправо — в соседний столбец в схематичном изображении. Конечно, каждый раз он поднимается (или опускается) в самую верхнюю точку горы, которая находится в соответствующем столбце.

Считая, что изначально турист находится в самой верхней точке в первом столбце, а закончит свой маршрут в самой верхней точке в последнем столбце, найдите две величины:

  • наибольший подъём за день (равен 0, если в профиле горного хребта нет ни одного подъёма),
  • наибольший спуск за день (равен 0, если в профиле горного хребта нет ни одного спуска).
Входные данные

В первой строке входных данных записаны два целых числа n и m (1 ≤ n, m ≤ 100) — количество строк и столбцов в схематичном изображении соответственно.

Далее следуют n строк по m символов в каждой — схематичное изображение горного хребта. Каждый символ схематичного изображения — это либо «.», либо «*». Каждый столбец матрицы содержит хотя бы один символ «*». Гарантируется, что любой из символов «*» либо находится в нижней строке матрицы, либо непосредственно под ним находится другой символ «*».

Выходные данные

Выведите через пробел два целых числа:

  • величину наибольшего подъёма за день (или 0, если в профиле горного хребта нет ни одного подъёма),
  • величину наибольшего спуска за день (или 0, если в профиле горного хребта нет ни одного спуска).
Примечание

В первом тестовом примере высоты гор равны: 3, 4, 1, 1, 2, 1, 1, 1, 2, 5, 1. Наибольший подъем равен 3 и находится между горой номер 9 (её высота равна 2) и горой номер 10 (её высота равна 5). Наибольший спуск равен 4 и находится между горой номер 10 (её высота равна 5) и горой номер 11 (её высота равна 1).

Во втором тестовом примере высоты гор равны: 1, 2, 3, 4, 5. Наибольший подъём равен 1 и находится, например, между горой номер 2 (ее высота равна 2) и горой номер 3 (её высота равна 3). Так как в данном горном хребте нет спусков, то величина наибольшего спуска равна 0.

В третьем тестовом примере высоты гор равны: 1, 7, 5, 3, 4, 2, 3. Наибольший подъём равен 6 и находится между горой номер 1 (её высота равна 1) и горой номер 2 (её высота равна 7). Наибольший спуск равен 2 и находится между горой номер 2 (её высота равна 7) и горой номер 3 (её высота равна 5). Такой же спуск находится между горой номер 5 (её высота равна 4) и горой номер 6 (её высота равна 2).

A. Наибольший подъем

Конструктив реализация *900

Профиль горного хребта схематично задан в виде прямоугольной таблицы из символов «.» (пустое пространство) и «*» (часть горы). Каждый столбец таблицы содержит хотя бы одну «звёздочку». Гарантируется, что любой из символов «*» либо находится в нижней строке матрицы, либо непосредственно под ним находится другой символ «*».

...........
.........*.
.*.......*.
**.......*.
**..*...**.
***********
Пример изображения горного хребта.

Маршрут туриста проходит через весь горный хребет слева направо. Каждый день турист перемещается вправо — в соседний столбец в схематичном изображении. Конечно, каждый раз он поднимается (или опускается) в самую верхнюю точку горы, которая находится в соответствующем столбце.

Считая, что изначально турист находится в самой верхней точке в первом столбце, а закончит свой маршрут в самой верхней точке в последнем столбце, найдите две величины:

  • наибольший подъём за день (равен 0, если в профиле горного хребта нет ни одного подъёма),
  • наибольший спуск за день (равен 0, если в профиле горного хребта нет ни одного спуска).
Входные данные

В первой строке входных данных записаны два целых числа n и m (1 ≤ n, m ≤ 100) — количество строк и столбцов в схематичном изображении соответственно.

Далее следуют n строк по m символов в каждой — схематичное изображение горного хребта. Каждый символ схематичного изображения — это либо «.», либо «*». Каждый столбец матрицы содержит хотя бы один символ «*». Гарантируется, что любой из символов «*» либо находится в нижней строке матрицы, либо непосредственно под ним находится другой символ «*».

Выходные данные

Выведите через пробел два целых числа:

  • величину наибольшего подъёма за день (или 0, если в профиле горного хребта нет ни одного подъёма),
  • величину наибольшего спуска за день (или 0, если в профиле горного хребта нет ни одного спуска).
Примечание

В первом тестовом примере высоты гор равны: 3, 4, 1, 1, 2, 1, 1, 1, 2, 5, 1. Наибольший подъем равен 3 и находится между горой номер 9 (её высота равна 2) и горой номер 10 (её высота равна 5). Наибольший спуск равен 4 и находится между горой номер 10 (её высота равна 5) и горой номер 11 (её высота равна 1).

Во втором тестовом примере высоты гор равны: 1, 2, 3, 4, 5. Наибольший подъём равен 1 и находится, например, между горой номер 2 (ее высота равна 2) и горой номер 3 (её высота равна 3). Так как в данном горном хребте нет спусков, то величина наибольшего спуска равна 0.

В третьем тестовом примере высоты гор равны: 1, 7, 5, 3, 4, 2, 3. Наибольший подъём равен 6 и находится между горой номер 1 (её высота равна 1) и горой номер 2 (её высота равна 7). Наибольший спуск равен 2 и находится между горой номер 2 (её высота равна 7) и горой номер 3 (её высота равна 5). Такой же спуск находится между горой номер 5 (её высота равна 4) и горой номер 6 (её высота равна 2).

A. Наибольший подъем

Конструктив реализация *900

Профиль горного хребта схематично задан в виде прямоугольной таблицы из символов «.» (пустое пространство) и «*» (часть горы). Каждый столбец таблицы содержит хотя бы одну «звёздочку». Гарантируется, что любой из символов «*» либо находится в нижней строке матрицы, либо непосредственно под ним находится другой символ «*».

...........
.........*.
.*.......*.
**.......*.
**..*...**.
***********
Пример изображения горного хребта.

Маршрут туриста проходит через весь горный хребет слева направо. Каждый день турист перемещается вправо — в соседний столбец в схематичном изображении. Конечно, каждый раз он поднимается (или опускается) в самую верхнюю точку горы, которая находится в соответствующем столбце.

Считая, что изначально турист находится в самой верхней точке в первом столбце, а закончит свой маршрут в самой верхней точке в последнем столбце, найдите две величины:

  • наибольший подъём за день (равен 0, если в профиле горного хребта нет ни одного подъёма),
  • наибольший спуск за день (равен 0, если в профиле горного хребта нет ни одного спуска).
Входные данные

В первой строке входных данных записаны два целых числа n и m (1 ≤ n, m ≤ 100) — количество строк и столбцов в схематичном изображении соответственно.

Далее следуют n строк по m символов в каждой — схематичное изображение горного хребта. Каждый символ схематичного изображения — это либо «.», либо «*». Каждый столбец матрицы содержит хотя бы один символ «*». Гарантируется, что любой из символов «*» либо находится в нижней строке матрицы, либо непосредственно под ним находится другой символ «*».

Выходные данные

Выведите через пробел два целых числа:

  • величину наибольшего подъёма за день (или 0, если в профиле горного хребта нет ни одного подъёма),
  • величину наибольшего спуска за день (или 0, если в профиле горного хребта нет ни одного спуска).
Примечание

В первом тестовом примере высоты гор равны: 3, 4, 1, 1, 2, 1, 1, 1, 2, 5, 1. Наибольший подъем равен 3 и находится между горой номер 9 (её высота равна 2) и горой номер 10 (её высота равна 5). Наибольший спуск равен 4 и находится между горой номер 10 (её высота равна 5) и горой номер 11 (её высота равна 1).

Во втором тестовом примере высоты гор равны: 1, 2, 3, 4, 5. Наибольший подъём равен 1 и находится, например, между горой номер 2 (ее высота равна 2) и горой номер 3 (её высота равна 3). Так как в данном горном хребте нет спусков, то величина наибольшего спуска равна 0.

В третьем тестовом примере высоты гор равны: 1, 7, 5, 3, 4, 2, 3. Наибольший подъём равен 6 и находится между горой номер 1 (её высота равна 1) и горой номер 2 (её высота равна 7). Наибольший спуск равен 2 и находится между горой номер 2 (её высота равна 7) и горой номер 3 (её высота равна 5). Такой же спуск находится между горой номер 5 (её высота равна 4) и горой номер 6 (её высота равна 2).

A. Наибольший подъем

Конструктив реализация *900

Профиль горного хребта схематично задан в виде прямоугольной таблицы из символов «.» (пустое пространство) и «*» (часть горы). Каждый столбец таблицы содержит хотя бы одну «звёздочку». Гарантируется, что любой из символов «*» либо находится в нижней строке матрицы, либо непосредственно под ним находится другой символ «*».

...........
.........*.
.*.......*.
**.......*.
**..*...**.
***********
Пример изображения горного хребта.

Маршрут туриста проходит через весь горный хребет слева направо. Каждый день турист перемещается вправо — в соседний столбец в схематичном изображении. Конечно, каждый раз он поднимается (или опускается) в самую верхнюю точку горы, которая находится в соответствующем столбце.

Считая, что изначально турист находится в самой верхней точке в первом столбце, а закончит свой маршрут в самой верхней точке в последнем столбце, найдите две величины:

  • наибольший подъём за день (равен 0, если в профиле горного хребта нет ни одного подъёма),
  • наибольший спуск за день (равен 0, если в профиле горного хребта нет ни одного спуска).
Входные данные

В первой строке входных данных записаны два целых числа n и m (1 ≤ n, m ≤ 100) — количество строк и столбцов в схематичном изображении соответственно.

Далее следуют n строк по m символов в каждой — схематичное изображение горного хребта. Каждый символ схематичного изображения — это либо «.», либо «*». Каждый столбец матрицы содержит хотя бы один символ «*». Гарантируется, что любой из символов «*» либо находится в нижней строке матрицы, либо непосредственно под ним находится другой символ «*».

Выходные данные

Выведите через пробел два целых числа:

  • величину наибольшего подъёма за день (или 0, если в профиле горного хребта нет ни одного подъёма),
  • величину наибольшего спуска за день (или 0, если в профиле горного хребта нет ни одного спуска).
Примечание

В первом тестовом примере высоты гор равны: 3, 4, 1, 1, 2, 1, 1, 1, 2, 5, 1. Наибольший подъем равен 3 и находится между горой номер 9 (её высота равна 2) и горой номер 10 (её высота равна 5). Наибольший спуск равен 4 и находится между горой номер 10 (её высота равна 5) и горой номер 11 (её высота равна 1).

Во втором тестовом примере высоты гор равны: 1, 2, 3, 4, 5. Наибольший подъём равен 1 и находится, например, между горой номер 2 (ее высота равна 2) и горой номер 3 (её высота равна 3). Так как в данном горном хребте нет спусков, то величина наибольшего спуска равна 0.

В третьем тестовом примере высоты гор равны: 1, 7, 5, 3, 4, 2, 3. Наибольший подъём равен 6 и находится между горой номер 1 (её высота равна 1) и горой номер 2 (её высота равна 7). Наибольший спуск равен 2 и находится между горой номер 2 (её высота равна 7) и горой номер 3 (её высота равна 5). Такой же спуск находится между горой номер 5 (её высота равна 4) и горой номер 6 (её высота равна 2).

A. Наибольший подъем

Конструктив реализация *900

Профиль горного хребта схематично задан в виде прямоугольной таблицы из символов «.» (пустое пространство) и «*» (часть горы). Каждый столбец таблицы содержит хотя бы одну «звёздочку». Гарантируется, что любой из символов «*» либо находится в нижней строке матрицы, либо непосредственно под ним находится другой символ «*».

...........
.........*.
.*.......*.
**.......*.
**..*...**.
***********
Пример изображения горного хребта.

Маршрут туриста проходит через весь горный хребет слева направо. Каждый день турист перемещается вправо — в соседний столбец в схематичном изображении. Конечно, каждый раз он поднимается (или опускается) в самую верхнюю точку горы, которая находится в соответствующем столбце.

Считая, что изначально турист находится в самой верхней точке в первом столбце, а закончит свой маршрут в самой верхней точке в последнем столбце, найдите две величины:

  • наибольший подъём за день (равен 0, если в профиле горного хребта нет ни одного подъёма),
  • наибольший спуск за день (равен 0, если в профиле горного хребта нет ни одного спуска).
Входные данные

В первой строке входных данных записаны два целых числа n и m (1 ≤ n, m ≤ 100) — количество строк и столбцов в схематичном изображении соответственно.

Далее следуют n строк по m символов в каждой — схематичное изображение горного хребта. Каждый символ схематичного изображения — это либо «.», либо «*». Каждый столбец матрицы содержит хотя бы один символ «*». Гарантируется, что любой из символов «*» либо находится в нижней строке матрицы, либо непосредственно под ним находится другой символ «*».

Выходные данные

Выведите через пробел два целых числа:

  • величину наибольшего подъёма за день (или 0, если в профиле горного хребта нет ни одного подъёма),
  • величину наибольшего спуска за день (или 0, если в профиле горного хребта нет ни одного спуска).
Примечание

В первом тестовом примере высоты гор равны: 3, 4, 1, 1, 2, 1, 1, 1, 2, 5, 1. Наибольший подъем равен 3 и находится между горой номер 9 (её высота равна 2) и горой номер 10 (её высота равна 5). Наибольший спуск равен 4 и находится между горой номер 10 (её высота равна 5) и горой номер 11 (её высота равна 1).

Во втором тестовом примере высоты гор равны: 1, 2, 3, 4, 5. Наибольший подъём равен 1 и находится, например, между горой номер 2 (ее высота равна 2) и горой номер 3 (её высота равна 3). Так как в данном горном хребте нет спусков, то величина наибольшего спуска равна 0.

В третьем тестовом примере высоты гор равны: 1, 7, 5, 3, 4, 2, 3. Наибольший подъём равен 6 и находится между горой номер 1 (её высота равна 1) и горой номер 2 (её высота равна 7). Наибольший спуск равен 2 и находится между горой номер 2 (её высота равна 7) и горой номер 3 (её высота равна 5). Такой же спуск находится между горой номер 5 (её высота равна 4) и горой номер 6 (её высота равна 2).

B. Собери стол

Конструктив сортировки *800

Вася купил стол, у которого n ножек. Каждая ножка состоит из двух частей, которые соединяются друг с другом. Каждая часть может быть произвольной положительной длины, но гарантируется, что из всех 2n частей возможно составить n ножек одинаковой длины. При составлении ножки любые две части могут быть соединены друг с другом. Изначально все ножки стола разобраны, а вам заданы длины 2n частей в произвольном порядке.

Помогите Васе собрать все ножки стола так, чтобы все они были одинаковой длины, разбив заданные 2n части на пары правильным образом. Каждая ножка обязательно должна быть составлена ровно из двух частей, не разрешается использовать как ножку только одну часть.

Входные данные

В первой строке задано число n (1 ≤ n ≤ 1000) — количество ножек у стола, купленного Васей.

Во второй строке следует последовательность из 2n целых положительных чисел a1, a2, ..., a2n (1 ≤ ai ≤ 100 000) — длины частей ножек стола в произвольном порядке.

Выходные данные

Выведите n строк по два целых числа в каждой — длины частей ножек, которые надо соединить друг с другом. Гарантируется, что всегда возможно собрать n ножек одинаковой длины. Если ответов несколько, разрешается вывести любой из них.

C. Путь Робота

графы Конструктив поиск в глубину и подобное *1100

Вам задано прямоугольное клетчатое поле, состоящее из n строк и m столбцов. Поле содержит цикл из символов «*», такой что:

  • цикл можно обойти, посетив каждую его клетку ровно один раз, перемещаясь каждый раз вверх/вниз/вправо/влево на одну клетку;
  • цикл не содержит самопересечений и самокасаний, то есть две клетки цикла соседствуют по стороне тогда и только тогда, когда они соседние при перемещении вдоль цикла (самокасание по углу тоже запрещено).

Ниже изображены несколько примеров допустимых циклов:

Все клетки поля, отличные от цикла, содержат символ «.». Цикл на поле ровно один. Посещать клетки, отличные от цикла, Роботу нельзя.

В одной из клеток цикла находится Робот. Эта клетка помечена символом «S». Найдите последовательность команд для Робота, чтобы обойти цикл. Каждая из четырёх возможных команд кодируется буквой и обозначает перемещение Робота на одну клетку:

  • «U» — сдвинуться на клетку вверх,
  • «R» — сдвинуться на клетку вправо,
  • «D» — сдвинуться на клетку вниз,
  • «L» — сдвинуться на клетку влево.

Робот должен обойти цикл, побывав в каждой его клетке ровно один раз (кроме стартовой точки — в ней он начинает и заканчивает свой путь).

Найдите искомую последовательность команд, допускается любое направление обхода цикла.

Входные данные

В первой строке входных данных записаны два целых числа n и m (3 ≤ n, m ≤ 100) — количество строк и столбцов прямоугольного клетчатого поля соответственно.

В следующих n строках записаны по m символов, каждый из которых — «.», «*» или «S». Гарантируется, что отличные от «.» символы образуют цикл без самопересечений и самокасаний. Также гарантируется, что на поле ровно одна клетка содержит «S» и что она принадлежит циклу. Робот не может посещать клетки, помеченные символом «.».

Выходные данные

В первую строку выходных данных выведите искомую последовательность команд для Робота. Направление обхода цикла Роботом может быть любым.

Примечание

В первом тестовом примере для обхода по часовой стрелке последовательность посещенных роботом клеток выглядит следующим образом:

  1. клетка (3, 2);
  2. клетка (3, 1);
  3. клетка (2, 1);
  4. клетка (1, 1);
  5. клетка (1, 2);
  6. клетка (1, 3);
  7. клетка (2, 3);
  8. клетка (3, 3);
  9. клетка (3, 2).

A. Любимые числа Поликарпа

Конструктив реализация *1000

Поликарп мечтает стать программистом и фанатеет от степеней двойки. Среди двух чисел ему больше нравится то, которое делится на большую степень числа 2.

По заданной последовательности целых положительных чисел a1, a2, ..., an требуется найти r — максимальную степень числа 2, на которую делится хотя бы одно из чисел последовательности. Кроме того, требуется вывести количество чисел ai, которые делятся на r.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 100) — длина последовательности a.

Во второй строке записана последовательность целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109).

Выходные данные

Выведите два числа:

  • r — максимальную степень двойки, на которую делится хотя бы одно из чисел заданной последовательности,
  • количество элементов последовательности, которые делятся на r.
Примечание

В первом тестовом примере максимальная степень двойки, на которую делится хотя бы одно число, равна 16 = 24, на неё делятся числа 80, 16 и 48.

Во втором тестовом примере все четыре числа нечётные, поэтому делятся только на 1 = 20. Это и будет максимальной степенью двойки для данного примера.

B. Этажи

Конструктив *1400

Есть n-подъездный дом, в каждом подъезде по m этажей, и на каждом этаже каждого подъезда ровно k квартир. Таким образом, в доме всего n·m·k квартир. Они пронумерованы естественным образом от 1 до n·m·k, то есть первая квартира на первом этаже в первом подъезде имеет номер 1, первая квартира на втором этаже первого подъезда имеет номер k + 1 и так далее. Особенность этого дома состоит в том, что он круглый. То есть если обходить его по часовой стрелке, то после подъезда номер 1 следует подъезд номер 2, затем подъезд номер 3 и так далее до подъезда номер n. После подъезда номер n снова идёт подъезд номер 1.

Эдвард живёт в квартире номер a, а Наташа — в квартире номер b. Переход на 1 этаж вверх или вниз по лестнице занимает 5 секунд, переход от двери подъезда к двери соседнего подъезда — 15 секунд, а переход в пределах одного этажа одного подъезда происходит мгновенно. Также в каждом подъезде дома есть лифт. Он устроен следующим образом: он всегда приезжает ровно через 10 секунд после вызова, а чтобы переместить пассажира на один этаж вверх или вниз, лифт тратит ровно 1 секунду. Посадка и высадка происходят мгновенно.

Помогите Эдварду найти минимальное время, за которое он сможет добраться до квартиры Наташи. Считайте, что Эдвард может выйти из подъезда только с первого этажа соответствующего подъезда (это происходит мгновенно). Если Эдвард стоит перед дверью какого-то подъезда, он может зайти в него и сразу окажется на первом этаже этого подъезда (это также происходит мгновенно). Эдвард может выбирать, в каком направлении идти вокруг дома.

Входные данные

В первой строке входных данных следуют три числа n, m, k (1 ≤ n, m, k ≤ 1000) — количество подъездов в доме, количество этажей в каждом подъезде и количество квартир на каждом этаже каждого подъезда соответственно.

Во второй строке входных данных записаны два числа a и b (1 ≤ a, b ≤ n·m·k) — номера квартир, в которых живут Эдвард и Наташа, соответственно. Гарантируется, что эти номера различны.

Выходные данные

Выведите единственное целое число — минимальное время (в секундах), за которое Эдвард сможет добраться от своей квартиры до квартиры Наташи.

Примечание

В первом тестовом примере Эдвард находится в 4 подъезде на 10 этаже, а Наташа находится в 1 подъезде на 2 этаже. Поэтому Эдварду выгодно сначала спуститься на лифте на первый этаж (на это он потратит 19 секунд, из которых 10 — на ожидание и 9 — на поездку на лифте), затем обойти дом против часовой стрелки до подъезда номер 1 (на это он потратит 15 секунд), и наконец подняться по лестнице на этаж номер 2 (на это он потратит 5 секунд). Таким образом, ответ равен 19 + 15 + 5 = 39.

Во втором тестовом примере Эдвард живёт в подъезде 2 на этаже 1, а Наташа находится в подъезде 1 на этаже 1. Поэтому Эдварду выгодно просто обойти дом по часовой стрелке до подъезда 1, на это он потратит 15 секунд.

C. Печать условий

жадные алгоритмы Конструктив сортировки *1500

На тренировку по подготовке к соревнованиям по программированию пришли n команд. Тренер для каждой команды подобрал тренировку, комплект задач для i-й команды занимает ai страниц. В распоряжении тренера есть x листов бумаги, у которых обе стороны чистые, и y листов, у которых только одна сторона чистая. При печати условия на листе первого типа можно напечатать две страницы из условий задач, а при печати на листе второго типа — только одну. Конечно, на листе нельзя печатать условия из двух разных комплектов задач. Обратите внимание, что при использовании листов, у которых обе стороны чистые, не обязательно печатать условие на обеих сторонах, одна из них может остаться чистой.

Вам предстоит определить максимальное количество команд, которым тренер сможет напечатать комплекты задач целиком.

Входные данные

В первой строке входных данных следуют три целых числа n, x и y (1 ≤ n ≤ 200 000, 0 ≤ x, y ≤ 109) — количество команд, количество листов бумаги с двумя чистыми сторонами и количество листов бумаги с одной чистой стороной.

Во второй строке входных данных следует последовательность из n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 10 000), где i-е число равно количеству страниц в комплекте задач для i-й команды.

Выходные данные

Выведите единственное целое число — максимальное количество команд, которым тренер сможет напечатать комплекты задач целиком.

Примечание

В первом тестовом примере можно напечатать оба комплекта задач. Один из возможных ответов — напечатать весь первый комплект задач на листах с одной чистой стороной (после этого останется 3 листа с двумя чистыми сторонами и 1 лист с одной чистой стороной), а второй комплект напечатать на трех листах с двумя чистыми сторонами.

Во втором тестовом примере можно напечатать оба комплекта задач. Один из возможных ответов — напечатать первый комплект задач на двух листах с двумя чистыми сторонами (после этого останется 1 лист с двумя чистыми сторонами и 5 листов с одной чистой стороной), а второй комплект напечатать на одном листе с двумя чистыми сторонами и на пяти листах с одной чистой стороной. Таким образом, тренер использует все листы для печати.

В третьем тестовом примере можно напечатать только один комплект задач (любой из трёх 11-страничных). Для печати 11-страничного комплекта задач будет израсходована вся бумага.

D. Дефрагментация памяти

жадные алгоритмы Конструктив реализация *1600

Память компьютера состоит из n ячеек, которые выстроены в ряд. Пронумеруем ячейки от 1 до n слева направо. Про каждую ячейку известно, свободна она или принадлежит какому-либо процессу (в таком случае известен процесс, которому она принадлежит).

Для каждого процесса известно, что принадлежащие ему ячейки занимают в памяти непрерывный участок. С помощью операций вида «переписать данные из занятой ячейки в свободную, а занятую теперь считать свободной» требуется расположить все принадлежащие процессам ячейки в начале памяти компьютера. Другими словами, любая свободная ячейка должна располагаться правее (иметь больший номер) любой занятой.

Вам необходимо найти минимальное количество операций переписывания данных из одной ячейки в другую, с помощью которых можно достичь описанных условий. Допустимо, что относительный порядок ячеек в памяти для каждого из процессов изменится после дефрагментации, но относительный порядок самих процессов должен остаться без изменений. Это значит, что если все ячейки, принадлежащие процессу i, находились в памяти раньше всех ячеек процесса j, то и после перемещений это условие должно выполняться.

Считайте, что номера всех процессов уникальны, хотя бы одна ячейка памяти занята каким-либо процессом.

Входные данные

В первой строке входных данных записано число n (1 ≤ n ≤ 200 000) — количество ячеек в памяти компьютера.

Во второй строке входных данных следуют n целых чисел a1, a2, ..., an (1 ≤ ai ≤ n), где ai равно либо 0 (это означает, что i-я ячейка памяти свободна), либо номеру процесса, которому принадлежит i-я ячейка памяти. Гарантируется, что хотя бы одно значение ai не равно 0.

Процессы пронумерованы целыми числами от 1 до n в произвольном порядке. При этом процессы не обязательно пронумерованы последовательными числами.

Выходные данные

Выведите одно целое число — минимальное количество операций, которое нужно сделать для дефрагментации памяти.

Примечание

В первом тестовом примере достаточно двух операций:

  1. Переписать данные из третьей ячейки в первую. После этого память компьютера примет вид: 2 2 0 1.
  2. Переписать данные из четвертой ячейки в третью. После этого память компьютера примет вид: 2 2 1 0.

F. Муравьи на круге

Конструктив математика *2800

n муравьёв находятся на круге длины m. Каждый муравей может двигаться со скоростью в одну единицу длины в единицу времени. Изначально i-й муравей находится в позиции si и смотрит в направлении di (L или R). Позиции пронумерованы в порядке против часовой стрелки, начиная с некоторой точки. Изначальные положения всех муравьёв различны.

Муравьи двигаются одновременно. Два муравья при столкновении меняют напраление своего движения на противоположное. Обратите внимание, что возможна ситуация, когда половину единицы времени муравей движется в одном направлении, затем сталкивается с другим муравьём и двигается в противоположном направлении в течении оставшейся половины единицы времени.

Определите положения всех муравьёв спустя t единиц времени.

Входные данные

В первой строке находятся три целых числа n, m и t (2 ≤ n ≤ 3·105, 2 ≤ m ≤ 109, 0 ≤ t ≤ 1018) — количество муравьёв, длина круга и количество единиц времени.

В каждой из следующих n строк находится целое целое число si и символ di (1 ≤ si ≤ m, di равно L либо R) — положение и направление движения i-го муравья в начале. Направления L и R соответствуют направлениям по и против часов стрелки, соответственно.

Гарантируется, что все позиции si различны.

Выходные данные

Выведите n целых чисел xj — положение j-го муравья по прошествии t единиц времени. Муравьи пронумерованы от 1 до n в порядке их появления во входных данных.

B. Отбор на олимпиаду

Конструктив сортировки *1300

Совсем скоро в Берляндии состоится школьная командная олимпиада по программированию. От каждого из m регионов Берляндии для участия в олимпиаде приглашается команда из двух человек. Для формирования команд было решено провести отборочное соревнование, в котором приняли участие n берляндских школьников, причём от каждого из m регионов в нем участвовали хотя бы два школьника. Результатом каждого из участников отборочного соревнования является целое число баллов от 0 до 800 включительно.

Команда каждого региона формируется из двух таких участников отборочного соревнования от этого региона, что никого из них нельзя заменить школьником того же региона, не вошедшим в команду и набравшим большее число баллов. Может возникнуть ситуация, когда команду какого-либо региона нельзя сформировать однозначно, то есть существует больше одной команды школьников, удовлетворяющих описанному выше свойству. В таком случае в этом регионе требуется провести дополнительное соревнование. Две команды региона считаются различными, если существует хотя бы один школьник, который входит в одну команду и не входит в другую. Гарантируется, что в каждом регионе хотя бы два школьника участвовали в отборе.

Перед вами стоит задача, по результатам отборочного соревнования определить команду от каждого региона или сообщить, что в этом регионе для её формирования потребуется дополнительное соревнование.

Входные данные

В первой строке входных данных находятся два целых числа n и m (2 ≤ n ≤ 100 000, 1 ≤ m ≤ 10 000, n ≥ 2m) — количество участников отборочного соревнования и количество регионов в Берляндии.

Далее в n строках следует описание участников отборочного соревнования в следующем формате: фамилия (строка длиной от 1 до 10 символов, состоящая из строчных и прописных букв латинского алфавита), номер региона (целое число от 1 до m) и количество набранных участником баллов (целое число от 0 до 800 включительно).

Гарантируется, что все фамилии участников различны, а из каждого из m регионов участвуют хотя бы двое. Фамилии, различающиеся только регистром букв, следует считать различными.

Выходные данные

Выведите m строк. В i-й строке выведите команду i-го региона — фамилии двух участников команды в произвольном порядке или единственный символ «?» (без кавычек), если в этом регионе потребуется провести дополнительное соревнование.

Примечание

В первом примере команды от регионов определяются однозначно.

Во втором примере команда от региона 2 определяется однозначно, а от региона 1 подходят три команды: «Petrov»-«Sidorov», «Ivanov»-«Sidorov», «Ivanov»-«Petrov», поэтому однозначно команду определить невозможно.

D. Петя и его друзья

Конструктив математика теория чисел *1700

У маленького Пети скоро день рождения. В связи с таким замечательным событием, друзья Пети решили подарить ему конфеты. Всего друзей у Пети ровно n.

Напомним определение наибольшего общего делителя: НОД(a1, ..., ak) = d, где d — такое максимальное натуральное число, что каждое ai (1 ≤ i ≤ k) делится нацело на d. При этом мы считаем, что все ai больше нуля.

Друзья, зная, что Петя серьезно увлекается программированием, заранее договорились, что 1-ый друг подарит a1 конфет, 2-ой друг — a2 конфет, ..., n-ый друг — an конфет. При этом, они хотят, чтобы для любых i и j (1 ≤ i, j ≤ n) НОД(ai, aj) был не равен 1. Но в то же время, они хотят, чтобы НОД(a1, a2, ..., an) = 1. Еще одно условие: все ai должны быть различны.

Помогите друзьям выбрать подходящие числа a1, ..., an.

Входные данные

В первой строке записано целое число n (2 ≤ n ≤ 50).

Выходные данные

Если ответа не существует, выведите "-1" без кавычек. Иначе выведите набор из n различных натуральных чисел — a1, a2, ..., an, по одному числу в строке. Каждое из чисел должно состоять не более чем из 100 цифр, и не должно содержать ведущих нулей. Если решений несколько, выведите любое.

Не забудьте, что все условия должны выполняться:

  • Для любых i и j (1 ≤ i, j ≤ n): НОД(ai, aj) ≠ 1
  • НОД(a1, a2, ..., an) = 1
  • Для любых i и j (1 ≤ i, j ≤ n, i ≠ j): ai ≠ aj

Пожалуйста, не используйте спецификатор %lld для чтения или записи 64-х битовых чисел на С++. Рекомендуется использовать поток cout (также вы можете использовать спецификатор %I64d).

D. Международная олимпиада

жадные алгоритмы Конструктив математика реализация *2000

Международная олимпиада по сокращениям проходит каждый год, начиная с 1989-го года. Каждый год, когда проходит олимпиада, ей присваивается сокращённое название. Сокращённое название выглядит как IAO'y, где y — это несколько последних цифр текущего года. Организаторы выбирают сокращения таким образом, чтобы они не повторялись. Из всех ещё не использованных сокращений организаторы выбирают самое короткое и присваивают его текущей олимпиаде.

Таким образом, первые три олимпиады (1989, 1990 и 1991 соответственно) получили сокращения IAO'9, IAO'0 и IAO'1, а олимпиада 2015-го года получила сокращение IAO'15, так как IAO'5 уже было использовано в 1995-ом году.

Вам даны n сокращений, определите, в какие годы проходили соответствующие олимпиады.

Входные данные

В первой строке содержится целое число n (1 ≤ n ≤ 1000) — количество сокращений.

Следующие n строк содержат по одному сокращению. Каждое сокращение содержит не более девяти цифр.

Выходные данные

Для каждого сокращения, встречающегося во входных данных, выведите в том же порядке год, в который проходила соответствующая олимпиада.

A. Ребус

жадные алгоритмы Конструктив математика Разбор выражений *1800

Вам дан ребус вида ? + ? - ? + ? = n, то есть состоящий из знаков вопроса, разделённых знаками «+» и «-», знака равенства и целого положительного числа n. Требуется заменить каждый из знаков вопроса на целое число от 1 до n так, чтобы равенство выполнялось.

Входные данные

Во входных данных содержится ребус. Гарантируется, что ребус состоит из не более чем 100 знаков вопроса, число n целое положительное и не превосходит 1 000 000, все знаки и числа разделены пробелом, знаки арифметических операций стоят только между двумя знаками вопроса.

Выходные данные

В первой строке выходных данных выведите «Possible» (без кавычек), если ребус имеет решение, и «Impossible» (без кавычек) в противном случае.

Если решение ребуса существует, то во второй строке выведите ребус, в котором вопросики заменены на целые числа от 1 до n. Следуйте формату, используемому в примерах.

D. Красивое подмножество

жадные алгоритмы Конструктив теория чисел *1800

Кортеж положительных целых чисел {x1, x2, ..., xk} называется простым, если для всех пар положительных чисел (i, j) (1 ≤ i < j ≤ k) число xi + xj является простым.

Вам задан массив a из n положительных целых чисел a1, a2, ..., an (не обязательно различных). Вам нужно найти простое подмножество массива a наибольшего размера.

Простое число — натуральное (целое положительное) число, имеющее ровно два различных натуральных делителя — единицу и самого себя.

Подмножеством массива a называется кортеж, который может быть получен из a удалением некоторых (возможно всех) элементов массива.

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 1000) — количество целых чисел в массиве a.

Во второй строке находятся n целых чисел ai (1 ≤ ai ≤ 106) — элементы массива a.

Выходные данные

В первой строке выведите целое число m — наибольший размер простого подмножества массива a.

Во второй строке выведите m целых чисел bl — элементы наибольшего по размеру простого подмножества массива a.

Если существует несколько решений, вы можете вывести любое из них. Числа подмножества вы можете выводить в любом порядке.

B. Герб антикубизму

геометрия Конструктив *1100

Как некоторые знают, кубизм — направление в живописи, в котором на первый план выходит задача конструирования объёмной формы на плоскости с помощью комбинации трёхмерных геометрических фигур.

Знаменитый скульптор Кикассо, чей автопортрет вы можете лицезреть, ненавидит кубизм. Ему гораздо больше импонирует идея передачи двумерных объектов через трехмерные с помощью своих великолепных скульптур. И его новый проект связан именно с этим. Кикассо собирается сделать герб обществу ненавистников кубизма. Для этого он хочет создать скульптуру, изображающую всем известный геометрический примитив — выпуклый многоугольник.

Кикассо подготовил для этого несколько заготовок, представляющих собой стержни с целочисленными длинами, и теперь он хочет собрать их воедино, причём i-й стержень представляет собой отрезок прямой длины li.

Скульптор планирует составить выпуклый многоугольник ненулевой площади, используя все имеющиеся стержни в качестве его сторон. Каждый стержень необходимо использовать в качестве стороны на его полную длину. Резать, ломать или сгибать стержни нельзя. Однако, две стороны могут образовывать развернутый угол в .

Увы, как и многие другие гениальные личности своего времени, он рано бросил учёбу. Поэтому Кикассо не знал, что сложить выпуклый многоугольник ненулевой площади из стержней тех длин, которые он выбрал никак не получится. Не желая оставлять стержни неиспользованными, скульптор решил, что сделает ещё одну заготовку-стержень с целочисленной длиной так, чтобы его проблема решилась. При этом он, конечно, хочет сделать её как можно более короткой, ведь материалы дорогие, и тратить деньги общества зря — неподобающее дело.

Помогите скульптору!

Входные данные

В первой строке находится целое число n (3 ≤ n ≤ 105) — количество заготовок-стержней.

Во второй строке находятся n целых чисел li (1 ≤ li ≤ 109) — длины стержней, которые уже есть у Кикассо. Гарантируется, что нельзя составить выпуклый n-угольник ненулевой площади с помощью имеющихся у Кикассо стержней, используя их в качестве сторон.

Выходные данные

Выведите единственное целое число — минимальную длину стержня, при добавлении которого из всех стержней можно будет сложить выпуклый (n + 1)-угольник ненулевой площади.

Примечание

В первом примере можно составить из набора длин {1, 1, 1, 2} треугольник со сторонами {1 + 1 = 2, 2, 1}.

Во втором примере можно составить треугольник с длинами {20, 11, 4 + 3 + 2 + 1 = 10}.

A. Выходные

жадные алгоритмы Конструктив математика Перебор *900

На планете Марс год длится ровно n дней (високосных годов на Марсе не бывает). При этом недели у марсиан такие же, как у землян — 5 рабочих дней и затем 2 выходных.

Перед вами стоит задача — определить минимально и максимально возможное количество выходных дней в году на Марсе.

Входные данные

В первой строке входных данных следует целое положительное число n (1 ≤ n ≤ 1 000 000) — количество дней в году на Марсе.

Выходные данные

Выведите два целых числа — минимально и максимально возможное количество выходных дней в году на Марсе.

Примечание

В первом тестовом примере год на Марсе состоит из 14 дней, а значит независимо от того, с какого дня начинается год, в нём в любом случае будет ровно 4 выходных.

Во втором тестовом примере дней в году на Марсе всего 2, и они оба могут быть как рабочими днями, так и выходными.

F. Восстанови число

Конструктив Перебор Строки *2300

Вася решил передать Кате очень большое число n. Для этого он сначала записал это число как строку, а затем дописал справа аналогичным образом число k, которое равно количеству цифр в числе n.

Магическим образом при передаче этой записи Кате все цифры перемешались произвольным образом. Единственное, что помнит Вася, это некоторая непустая подстрока числа n (под подстрокой числа n следует понимать последовательность подряд идущих цифр из числа n).

Вася понимает, что не всегда возможно однозначно восстановить число n, поэтому просит вас найти минимально возможное число, которое он мог передавать. Обратите внимание, что запись числа, которое Вася передал Кате, не могла начинаться с нуля, кроме случая, когда передаваемое число и было нулём (в этом случае оно записывалось как единственная цифра 0).

Входные данные

В первой строке входных данных следует непустая строка, полученная Катей. Длина этой строки не превосходит 1 000 000.

Во второй строке следует непустая строка, которую запомнил Вася. Эта строка может содержать вначале один или несколько нулей.

Гарантируется, что входные данные корректны и что ответ всегда существует.

Выходные данные

Выведите минимальное число, которое мог передавать Вася.

B. Разнообразие - это хорошо

Конструктив реализация Строки *1000

Однажды умный старец сказал Кариму, что разнообразие — это хорошо, и с тех пор Карим хочет, чтобы всё в его жизни было разнообразным.

Недавно Кариму подарили строку s, состоящую из строчных букв английского алфавита. Поскольку Карим любит разнообразие, то он хочет, чтобы все подстроки строки s были различными. Подстрокой строки s называется некоторое количество последовательных символов данной строки. Например, подстроками строки «aba» являются «» (пустая подстрока), «a», «b», «a», «ab», «ba» и «aba».

Если хотя бы две подстроки строки s совпадают, то Карим меняет символы в некоторых позициях на другие строчные буквы английского алфавита. Менять символы очень утомительно, поэтому Карим хотел бы сделать как можно меньше изменений.

По данной строке s определите минимальное количество изменений, которое потребуется внести в строку, чтобы все её подстроки стали различными, или определите, что это невозможно.

Входные данные

В первой строке входных данных записано целое число n (1 ≤ n ≤ 100 000) — длина строки s.

Во второй строке записана строка s длины n, состоящая из строчных букв английского алфавита.

Выходные данные

Если невозможно изменить строку s так, чтобы все её подстроки были различны, то выведите -1. В противном случае выведите минимальное количество изменений, которое позволит Кариму достичь цели.

Примечание

В первом примере одним из возможных решений будет заменить первый символ строки на «b».

Во втором примере можно заменить первый символ на «a», а второй на «b», получив таким образом строку «abko».

B. Восстановление картины

Конструктив математика Перебор *1400

Вася подрабатывает сторожем в галерее. К сожалению, во время его дежурства была украдена одна из самых дорогих картин. Вася не хочет быть уволен, поэтому ему нужно срочно восстановить картину, но он помнит только несколько фактов о ней.

  • Картина представляет собой квадрат 3 × 3, в каждой клетке которого стоит целое число от 1 до n, при этом в различных клетках могут находиться как различные, так и одинаковые числа.
  • Сумма чисел в любом из четырёх квадратов 2 × 2 равна сумме чисел в верхнем левом квадрате 2 × 2.
  • Четыре известных числа a, b, c и d были расставлены так, как показано на рисунке ниже.

Помогите Васе определить количество различных квадратов, не противоречащих ни одному из этих фактов. Заметим, что это количество может быть равно нулю, если Вася что-то перепутал.

Два квадрата считаются различными, если существует клетка, в которой в разных квадратах стоят различные числа.

Входные данные

В первой строке входных данных записаны пять целых чисел n, a, b, c и d (1 ≤ n ≤ 100 000, 1 ≤ a, b, c, d ≤ n) — максимально возможное значение целого числа в любой клетке квадрата и четыре числа, которые Вася помнит.

Выходные данные

Выведите одно целое число — количество возможных квадратов, не противоречащих ничему, что помнит Вася.

Примечание

Все возможные квадраты в первом тесте

Все возможные квадраты во втором тесте

C. Денежные операции

жадные алгоритмы Конструктив сортировки Структуры данных *2100

В Васином городе есть n банков, расположенных по кругу так, что соседними являются банки, номера которых различаются на 1, а также банк номер 1 и банк номер n (если n > 1). При этом, сам себе банк соседом не является.

В каждом банке у Васи есть счёт с каким-нибудь балансом. Заметим, что он может быть и отрицательным, если Вася должен банку.

Васе доступна следующая операция: взять два соседних банка и перечислить со счёта в одном банке на счёт в другом любое количество денег. При этом нет никаких ограничений на размер переводимой суммы или текущее состояние счёта в любом из банков.

Вася путается в больших числах, поэтому он просит вас определить, за какое минимальное количество операций он может обнулить сумму денег, лежащую на счёте в каждом из банков. Гарантируется, что Вася может это сделать, то есть суммарный баланс Васи по всем банкам равен нулю.

Входные данные

В первой строке входных данных записано единственное целое число n (1 ≤ n ≤ 100 000) — количество банков.

Во второй строке записаны n целых чисел ai ( - 109 ≤ ai ≤ 109), i-е из которых определяет баланс Васи в i-м банке. Гарантируется, что сумма всех ai равна 0.

Выходные данные

Выведите минимальное количество операций, за которое Вася может обнулить баланс в каждом банке.

Примечание

В первом примере можно перечислить из первого банка в третий сумму 5.

Во втором примере можно перечислить сначала из третьего банка во второй, а потом из второго в первый сумму 1.

В третьем примере одним из оптимальных ответов является следующая последовательность действий:

  1. перечислить из первого банка во второй сумму 1;
  2. перечислить из второго банка в третий сумму 3;
  3. перечислить из третьего банка в четвертый сумму 6.

A. Николай и перестановка

Конструктив реализация *800

У Николая есть массив a, состоящий из n различных целых чисел от 1 до n. Другими словами, массив Николая — это перестановка целых чисел от 1 до n.

Николай решил, что будет лучше, если минимальный элемент его массива (то есть число 1) и максимальный элемент его массива (то есть число n) будут находиться как можно дальше друг от друга. Поэтому он решил ровно один раз поменять местами два каких-нибудь элемента таким образом, чтобы расстояние между минимальным и максимальным элементами стало максимально возможным. Расстоянием между двумя элементами называется модуль разности номеров позиций данных элементов.

Входные данные

В первой строке входных данных следует целое положительное число n (2 ≤ n ≤ 100) — количество элементов в массиве Николая.

Во второй строке входных данных записаны различные целые числа a1, a2, ..., an (1 ≤ ai ≤ n), где ai равно элементу, который находится в i-й позиции в массиве Николая.

Выходные данные

Выведите единственное целое число — максимальное расстояние между минимальным и максимальным элементами в массиве Николая, которое может быть получено с помощью ровно одного обмена местами двух элементов массива.

Примечание

В первом примере оптимального ответа можно добиться поменяв местами 1 и 2.

Во втором примере минимальный и максимальный элементы будут находиться в разных концах массива, если поменять местами 7 и 2.

В третьем примере расстояние между минимальным и максимальным элементов уже максимально возможное, поэтому нужно сделать какой-нибудь ничего не значащий обмен, например 5 и 2.

A. Медвежонок и простота за 100

интерактив Конструктив математика *1400

Это интерактивная задача. В формате выходных данных вы найдёте информацию о том, как сбрасывать буфер вывода (делать операцию 'flush').

Медвежонок Лимак загадывает некоторое целое число в интервале [2, 100]. Вам необходимо определить, является ли загаданное число простым или составным.

Целое число x > 1 называется простым, если у него есть ровно два различных делителя, 1 и x. Если целое число x > 1 не является простым, оно называется составным.

Вы можете сделать до 20 запросов о делителях загаданного числа. Каждый запрос — это одно целое число в интервале [2, 100]. Проверяющая программа выведет «yes», если целое число из запроса является делителем загаданного числа, и «no» в противном случае.

Например, если загадано число 14, то проверяющая программа выведет «yes» только для запросов 2, 7 или 14.

Когда вы закончите задавать вопросы, выведите «prime» (если считаете, что загаданное число простое) или «composite» (если считаете, что загаданное число составное), сделайте операцию 'flush' и завершите работу программы.

Вы получите вердикт Wrong Answer, если сделаете больше 20 запросов о делителях или если ваша программа выведет число не из интервала [2, 100]. Разумеется, вы получите вердикт Wrong Answer, если неправильно определите тип загаданного числа.

Вы получите вердикт Idleness Limit Exceeded, если не будете ничего выводить (а тестирующая программа будет ожидать ввода) или забудете сделать операцию 'flush' после какого-нибудь вывода (смотри ниже).

Входные данные

После каждого запроса требуется считать одну строку из входных данных (стандартный ввод). Эта строка будет «yes» (без кавычек), если выведенное число является делителем загаданного, и «no» (без кавычек) в противном случае.

Выходные данные

Не более 20 раз вы можете сделать запрос — вывести целое число в диапазоне [2, 100] в одной строке. Обязательно требуется вывести перевод строки и сделать операцию 'flush'. После сброса буфера необходимо считать ответ на запрос из входных данных.

В любой момент можно перестать делать запросы и вывести «prime» (без кавычек) или «composite» (без кавычек). После этого требуется сделать 'flush' и завершить программу.

Для сброса буфера вывода (то есть для операции 'flush') сразу после вывода числа или ответа и перевода строки можно сделать:

  • fflush(stdout) в языке C++;
  • System.out.flush() в Java;
  • stdout.flush() в Python;
  • flush(output) в Pascal;
  • смотрите документацию для других языков.

Взломы. Чтобы совершить взлом, вам требуется указать загаданное число — одно целое число в интервале [2, 100]. Разумеется, у взламываемого решения не будет возможности прочитать это число из входных данных.

Примечание

Ниже приведён пример протокола общения для первого и второго примеров.

В первом примере Лимак загадал число 30.

Загаданное число делится на 2 и 5, следовательно, является составным. Обратите внимание, что не требуется точно угадывать загаданное число.

Во втором примере Лимак загадал число 59.

Число 59 является делителем загаданного числа, но в интервале [2, 100] есть только одно число с таким делителем, и оно является простым. Обратите внимание, что ответ известен уже после второго запроса, но не запрещается продолжать спрашивать (если при этом не превышается лимит на 20 запросов).

A. Медвежонок и пять карт

Конструктив реализация *800

Маленький медвежонок Лимак любит играть в игры. Сейчас у него есть пять карт. На каждой карте написано одно целое число. Лимак может сделать ровно один ход, сбросив некоторые карты. Его цель — минимизировать сумму чисел на оставшихся у него в руках картах.

За этот единственный ход Лимак может сбросить две или три карты, на которых написаны одинаковые числа. Разумеется, если у него нет двух или трёх карт с одинаковыми числами, то он не делает никакого хода.

Вам даны значения на всех пяти картах, которые есть у Лимака. Какую минимальную сумму чисел на оставшихся картах он может получить, сделав не более одного хода?

Входные данные

В первой строке входных данных даны пять целых чисел t1, t2, t3, t4 и t5 (1 ≤ ti ≤ 100) — значения, написанные на картах.

Выходные данные

Выведите минимальную возможную сумму чисел на оставшихся картах после не более чем одного хода Лимака.

Примечание

В первом примере у Лимака есть карты с числами 7, 3, 7, 3 и 20. Возможны следующие варианты:

  • Ничего не делать, тогда на руках останутся карты с суммой 7 + 3 + 7 + 3 + 20 = 40.
  • Сбросить две карты с числом 7. Оставшиеся карты дают сумму 3 + 3 + 20 = 26.
  • Сбросить две карты с числом 3. Останется 7 + 7 + 20 = 34.

Поскольку требуется минимизировать сумму на оставшихся картах, то ответ 26.

Во втором примере не существует двух или трёх карт с одинаковыми числами, поэтому Лимак не делает ничего, и ответ 7 + 9 + 1 + 3 + 8 = 28.

В третьем примере на всех картах написаны одинаковые числа. Оптимальным ответом будет сбросить три любые карты. Две оставшиеся дадут сумму 10 + 10 = 20.

B. Медвежонок и поиск преступников

Конструктив реализация *1000

В Беарляндии n городов, пронумерованных целыми числами от 1 до n. Города расположены на одной длинной прямой. Расстояние между городами i и j равняется |i - j|.

Лимак живёт в городе a и работает в полиции. Он занимается поимкой преступников, а это достаточно сложно сделать, когда не знаешь, где преступники спрятались. Достоверно известно, что в каждом городе находится не более одного преступника.

Лимак собирается применить БВД (Беарляндский Высокоточный Детектор), который для каждого расстояния d определит, сколько преступников находится на расстоянии d от города a. После этого Лимак может поймать преступников в тех городах, про которые он точно уверен, что в них прячутся преступники.

Вам известно расположение преступников, определите, скольких из них поймает Лимак, используя БВД.

Входные данные

В первой строке входных данных записаны два числа n и a (1 ≤ a ≤ n ≤ 100) — количество городов в Беарляндии и номер города, в котором живёт Лимак, соответственно.

Во второй строке находятся n целых чисел t1, t2, ..., tn (0 ≤ ti ≤ 1), i-е из которых означает, что в городе i прячутся ti преступников.

Выходные данные

Выведите количество преступников, которых поймает Лимак.

Примечание

В первом примере имеется шесть городов, и Лимак живёт в третьем из них (синяя стрелочка на рисунке). Преступники отмечены красным.

Используя БВД Лимак получит следующую информацию:

  • Один преступник находится на расстоянии 0 от третьего города — Лимак может быть уверен, что преступник находится в городе 3.
  • Один преступник находится на расстоянии 1 от третьего города — Лимак не знает, находится ли он в городе 2 или в городе 4.
  • На расстоянии 2 от третьего города находятся 2 преступника — Лимак точно знает, что один преступник находится в городе 1 и один преступник в городе 5.
  • На больших расстояниях преступников нет.

Таким образом, Лимак поймает преступников в городах 1, 3 и 5, то есть ответ 3.

Во втором примере (рисунок ниже), БВД даёт Лимаку информацию, что один преступник находится на расстоянии 2 от города Лимака. Поскольку есть только один город на расстоянии 2, то Лимак точно знает, что там находится преступник.

C. Операции с кучей

жадные алгоритмы Конструктив Структуры данных *1600

Недавно Петя начал изучать структуру данных «Двоичная куча».

Куча, с которой он работает, позволяет выполнять следующие операции:

  • добавить число в кучу;
  • узнать минимальное число в куче;
  • удалить минимальное число из кучи.

Таким образом, в любой момент куча содержит в себе набор чисел (возможно, пустой), среди которых, возможно, есть одинаковые.

Чтобы лучше запомнить материал, Петя взял пустую кучу и стал применять к ней различные операции. Он не хотел ничего упустить, поэтому все выполненные операции он аккуратно записывал в журнал в порядке их выполнения, соблюдая следующий формат:

  • insert x — в кучу было добавлено число x;
  • getMin x — был выполнен запрос минимума, результатом запроса было число x;
  • removeMin — из кучи было удалено текущее минимальное число (только одно вхождение).

Последовательность операций была корректной, то есть на момент выполнения операций getMin и removeMin в куче находился хотя бы один элемент.

Пока Петя обедал, его младший брат Вова забежал к нему в комнату и вырвал из журнала несколько случайных страниц, так как ему не из чего было строить бумажные кораблики.

В какой-то момент Вова понял, что Петина последовательность операций могла стать некорректной. Например, если выполнять оставшиеся операции в том же порядке, в каком они были записаны, то результат операций getMin может не совпадать с результатом, записанным в журнале, а какие-то из операций getMin и removeMin вообще не могут быть выполнены, так как на момент их выполнения куча пуста.

Теперь Вове нужно дописать в произвольные места в журнале какие-нибудь операции так, чтобы последовательность снова стала корректной, то есть чтобы результат всех операций getMin совпадал с результатом, записанным в журнале, и все операции могли быть корректно выполнены. Вова хочет сделать это как можно быстрее, пока Петя не вернулся с обеда, то есть дописать в журнал минимально возможное количество операций. Любую операцию разрешается дописывать в начало последовательности, между любыми двумя операциями или в конец последовательности операций.

Помогите Вове решить эту проблему.

Входные данные

В первой строке входных данных записано число n (1 ≤ n ≤ 100 000) — количество записей, оставшихся в журнале Пети.

В каждой из следующих n строк записана одна из оставшихся в журнале записей об операциях с кучей в формате, описанном выше. Все числа во входных данных целые и не превышают 109 по абсолютной величине.

Выходные данные

В первой строке выведите целое число m — минимальное количество операций в исправленной последовательности.

В следующих m строках выведите эту последовательность операций по одной операции в каждой строке в формате, описанном выше. Все числа должны быть целыми и не превышать 109 по абсолютной величине.

Обратите внимание, что исправленная последовательность должна содержать в себе последовательность операций из входных данных в качестве подпоследовательности.

Гарантируется, что существует корректная последовательность операций, длина которой не превосходит 1 000 000.

Примечание

В первом примере после добавления в кучу числа 3 минимумом будет являться единственное число 3, и для того, чтобы результатом операции getMin было число 4, нужно удалить из кучи 3 (как минимум) и затем добавить 4.

Во втором примере число 1 добавляется дважды, и удалить его нужно также дважды.

D. Подарки по списку

графы Деревья Конструктив поиск в глубину и подобное *2000

Саша живет в большой дружной семье. В Мужской День мужчины из этой семьи собираются вместе и празднуют его, следуя своей особой традиции. В семье Саши n мужчин, поэтому для простоты будем нумеровать их от 1 до n.

Каждый мужчина имеет не более одного отца, но может иметь произвольное количество сыновей.

Мужчина с номером A является предком мужчины с номером B, если выполняется хотя бы одно из утверждений:

  • A = B;
  • мужчина с номером A — отец мужчины с номером B;
  • существует такой номер C, что мужчина с номером A — предок мужчины с номером C, а мужчина с номером C — отец мужчины с номером B.

Конечно же, если мужчина с номером A является предком мужчины с номером B, причём A ≠ B, то мужчина с номером B не может являться предком мужчины с номером A.

На Мужской День в семье Саши принято дарить подарки. Просто так дарить подарки скучно, поэтому в этой семье процесс дарения каждый год выглядит следующим образом.

  1. Определяется список кандидатов, в котором перечислены некоторые из n мужчин в определённом порядке.
  2. Каждый из n мужчин решает сделать подарок.
  3. Чтобы сделать кому-нибудь подарок, мужчина выбирает из составленного списка первого члена семьи, который является его предком, и делает ему подарок. В частности, он может сделать подарок сам себе.
  4. Если в списке нет ни одного предка какого-нибудь мужчины, то он расстраивается и покидает праздник, так и не подарив никому подарок.

В этом году вы решили помочь с организацией праздника и узнали у каждого из n мужчин, кому из своих предков он хочет сделать подарок. Сможете ли вы построить список кандидатов таким образом, чтобы удовлетворить желание каждого?

Входные данные

В первой строке входных данных записаны два числа n и m (0 ≤ m < n ≤ 100 000) — число мужчин в семье и число родственных связей.

В следующих m строках описываются родственные связи: в (i + 1)-й строке содержится пара чисел pi и qi (1 ≤ pi, qi ≤ n, pi ≠ qi), означающая, что мужчина с номером pi является отцом мужчины с номером qi. Гарантируется, что никакая пара чисел не встречается более одного раза, что для любых двух различных членов семьи хотя бы один из них не является предком другого и что никакой член семьи не имеет более одного отца.

В следующей строке дана последовательность n целых чисел a1, a2, ..., an (1 ≤ ai ≤ n), i-е число в которой обозначает, что мужчина с номером i хочет сделать подарок мужчине с номером ai. Гарантируется, что для всех 1 ≤ i ≤ n мужчина с номером ai является предком мужчины с номером i.

Выходные данные

В первой строке выведите целое число k (1 ≤ k ≤ n) — количество мужчин в списке кандидатов.

Затем выведите k различных неотрицательных целых чисел — номера мужчин в списке кандидатов в порядке, определяющем необходимый выбор каждого из n мужчин, — по одному в строке.

Если подходящих списков несколько, выведите любой из них. Если подходящего списка не существует, выведите  - 1 в единственной строке выходных данных.

Примечание

Пояснение к первому примеру:

  • если в списке не будет 1, то желания первого и третьего мужчины не сбудутся (a1 = a3 = 1);
  • если в списке не будет 2, то желание второго мужчины не сбудется (a2 = 2);
  • если разместить в ответе 1 перед 2, то второму мужчине придется дарить подарок первому мужчине, а не себе (a2 = 2);
  • если же разместить мужчину с номером 2 перед мужчиной с номером 1, то третьему мужчине придется дарить подарок второму мужчине, а не первому (a3 = 1).

A. Алёна и числа

Конструктив математика теория чисел *1100

Когда пухленькая девочка Алёна доела очередную булочку, она придумала два целых числа n и m. Алёна решила выписать на доске в один столбик все числа от 1 до n, а в другой столбик — все числа от 1 до m. Девочка решила посчитать, сколько пар чисел она может выбрать, чтобы сумма чисел была кратна 5, если первое число пары — это произвольное число из первого столбика, а второе число пары — произвольное число из второго столбика.

Формально, Алёне интересно, сколько существует пар целых чисел (x, y), таких что 1 ≤ x ≤ n, 1 ≤ y ≤ m и равно 0.

Алёна затрудняется посчитать искомое количество, потому что она блондинка. Помогите ей в этом.

Входные данные

В единственной строке входных данных находятся два целых числа n и m (1 ≤ n, m ≤ 1 000 000), разделённые пробелом.

Выходные данные

В единственной строке выведите ответ на задачу — количество пар целых чисел (x, y), таких что 1 ≤ x ≤ n, 1 ≤ y ≤ m, а (x + y) делится на 5.

Примечание

В первом примере подходят следующие пары чисел:

  • для x = 1 подходят y, равные 4 или 9;
  • для x = 2 подходят y, равные 3 или 8;
  • для x = 3 подходят y, равные 2, 7 или 12;
  • для x = 4 подходят y, равные 1, 6 или 11;
  • для x = 5 подходят y, равные 5 или 10;
  • для x = 6 подходят y, равные 4 или 9.

В третьем примере подходит единственная пара чисел (1, 4).

A. Раздача мороженого

Конструктив реализация *800

После приключения с зеркалом Кай и Герда поселились снова у себя и теперь раздают летом детям мороженое.

С утра у них есть x пачек мороженого. Так как Кай и Герда раздают мороженое бесплатно, очередь к ним выстраивается ещё ночью. Каждый человек в очереди либо хочет взять несколько пачек мороженого для себя и друзей, либо дать Каю и Герде несколько пачек мороженого (грузчикам, которые привозят мороженое, приходится стоять в той же очереди).

Если к их домику подходит грузчик, несущий d пачек мороженого, Кай с Гердой забирают всё мороженое, которое он несёт. Если же к ним подходит ребёнок, который хочет взять d пачек мороженого, то Кай с Гердой дают ему d пачек, если у них хватает мороженого, в противном случае ребенок не забирает ни одной пачки и уходит грустный.

Каю хочется посчитать, сколько мороженого у них останется после того, как очередь опустеет, а Герде хочется узнать количество грустных детей после раздачи.

Входные данные

Первая строка содержит целые числа n и x, разделенные пробелом (1 ≤ n ≤ 1000, 0 ≤ x ≤ 109).

Следующие n строк содержат символ «+» или «-» и число di, разделённые пробелом (1 ≤ di ≤ 109). При этом запись «+ di» в i-й строке означает, что на i-м с начала очереди месте стоит грузчик, несущий di пачек мороженого, а запись «- di» означает, что там стоит ребёнок, который хочет взять di пачек мороженого.

Выходные данные

Выведите через пробел два числа — количество пачек мороженого, которое останется после выполнения всех операций, и количество детей, ушедших от раздачи грустными.

Примечание

Рассмотрим первый пример.

  1. Изначально у Кая и Герды есть 7 пачек мороженого.
  2. Грузчик приносит им ещё 5 пачек, их становится 12.
  3. Приходит ребёнок и просит 10 пачек мороженого. Ему дают 10 пачек и их остаётся 2.
  4. Приходит ребёнок и просит 20 пачек мороженого. Столько у Кая и Герды нет, поэтому ребёнок уходит грустным.
  5. Грузчик приносит 40 пачек мороженого, их становится 42.
  6. Приходит ребёнок, и забирает 20 пачек мороженого, их остаётся 22.

B. Зверинец маленькой разбойницы

Конструктив реализация сортировки *1100

Неугомонная маленькая разбойница любит наблюдать за испугом животных в своём зверинце. Однажды ей вздумалось выстроить их по неубыванию роста. Когда она им приказала выстроиться, они настолько перепугались, что сделали это неправильно.

Маленькая разбойница рассердилась было, но ей вдруг пришла в голову странная затея. Она решила попробовать сама расставить зверей как надо. Для этого она иногда называет числа l и r, такие что число r - l + 1 чётно. После этого все звери, стоящие на позициях с l по r включительно, меняются местами: зверь на позиции l меняется со зверем на позиции l + 1, зверь на позиции l + 2 меняется со зверем l + 3, ..., наконец, зверь на позиции r - 1 меняется со зверем r.

Помогите маленькой разбойнице расставить всех животных в порядке неубывания роста. Вам нужно назвать не более 20 000 отрезков, так как после совершения слишком большого количества операций маленькой разбойнице надоест, и она начнёт снова пугать зверей.

Входные данные

В первой строке записано одно целое число n (1 ≤ n ≤ 100) — количество зверей у маленькой разбойницы.

В второй строке через пробел записано n чисел a1, ..., an (1 ≤ ai ≤ 109), где ai — высота зверя, изначально стоящего на i-м месте.

Выходные данные

Выведите последовательность действий, которая расположит зверей в порядке неубывания роста.

В ответе должно быть записано несколько строк, i-ая из которых должна содержать два числа li и ri через пробел (1 ≤ li < ri ≤ n) — описания отрезков, которые должна называть маленькая разбойница. Отрезки должны быть записаны в порядке применения операций.

Количество операций не должно превышать 20 000.

Если звери стоят в порядке неубывания роста изначально, разрешается не выводить ничего.

Примечание

Обратите внимание, что не требуется минимизировать число совершённых операций. Достаточно, чтобы их было не больше 20 000.

B. Любимые палиндромы

Конструктив математика *1000

Один друг Пари очень любит палиндромные числа. Число является палиндромом, если оно одинаково читается в обоих направлениях. Например числа 12321, 100001 и 1 являются палиндромами, а числа 112 и 1021 нет.

Пари тоже старается полюбить палиндромы, но, видимо, только особенные и очень одарённые люди могут увидеть в них что-то особенное. Пари любит числа чётной длины (то есть состоящие из чётного количество цифр), так что теперь она пытается подбирать числа, которые одновременно имеют чётную длину и являются палиндромами (например 11 и 122221). Может быть, в них она сможет увидеть что-то особенное?

Пари просит вас написать программу, вычисляющую n-е палиндромное число чётной длины (при этом n может быть гигантским), сможете ли вы ей помочь?

Входные данные

В единственной строке входных данных записано целое число n (1 ≤ n ≤ 10100 000).

Выходные данные

Выведите n-е палиндромное число чётной длины.

Примечание

Первые 10 палиндромных чисел чётной длины это 11, 22, 33, ..., 88, 99 и 1001.

A. Майк и телефон

Конструктив Перебор реализация *1400

Купаясь на пляже, Майк случайно уронил свой телефон в воду. Сильно не беспокоясь, Майк купил дешевый телефон с кнопочной клавиатурой в качестве замены. Клавиатура состоит из десяти цифровых кнопок одинакового размера, расположенных привычным образом:

Вместе со старым телефоном Майк потерял и весь список контактов, и теперь он может вспомнить только как двигались его пальцы при наборе того или иного номера. Формально, движениями пальцев следует считать последовательность векторов, соединяющих центры кнопок, последовательно нажимаемых в процессе набора номера. К примеру, движения пальцев для номеров "586" и "253" совпадают:

Майк уже успел набрать номер по "памяти пальцев" и начать вызов, поэтому ему очень важно знать, может ли он быть уверен в том, что звонит по правильному номеру? Другими словами, существует ли какой-нибудь номер отличный от данного, с такими же движениями пальцев?

Входные данные

В первой строке входных данных содержится целое число n (1 ≤ n ≤ 9) — количество цифр в номере, который Майк уже успел набрать.

Во второй строке содержится сам номер, состоящий из n цифр от «0» до «9».

Выходные данные

Если другого номера, соответствующего движениям пальцев Майка для набранного им номера, не существует и он может быть уверен в правильности номера, выведите «YES» (без кавычек).

В противном случае, в первой строке выведите «NO» (без кавычек).

Примечание

В качестве пояснения к первому примеру входных данных используйте картинки из условия выше.

F2. Древо жизни (средняя)

Деревья Конструктив хэши *2700

Хайди устала расшифровывать древние пророчества и решила отправиться в штаб, чтобы отдохнуть и попытаться снова. Разумеется, она не может выкорчевать дерево и взять его с собой, поэтому он сделала точный рисунок дерева на бумаге. Подумав ещё, она сделала ещё несколько рисунков, которых суммарно получилось n (по числу вершин в Древе Жизни) — кто знает что может случиться?

В самом деле, по пути назад Хайди была атакована группой зомби. Хотя она и смогла с ними справиться, рисункам был причинён очень странный урон: с i-й копии пропала вершина с номером i, вместе со всеми своими рёбрами. На каждом рисунке зомби также стёрли номера вершин и перенумеровали оставшиеся n - 1 вершину произвольными числами от 1 до n (по крайней мере, номера вершин всё ещё различны). Более того, рисунки были случайным образом переупорядочены.

Теперь Хайди хочет восстановить Древо Жизни по имеющемся у неё описаниям и рисункам (спискам рёбер).

Входные данные

В первой строке входных данных записано число z ≤ 20 — количество тестовых примеров. Далее следуют описания z тестов.

Описание каждого теста начинается со строки содержащей числа n (2 ≤ n ≤ 100) и k (k является количеством рисунков, k = n в данной задаче). В следующих строках содержится описание k рисунков. Описание i-го рисунка даётся строкой содержащей mi — количество рёбер на соответствующем рисунке, а затем mi строк описывающих рёбра, каждое из которых даётся парой целых чисел — индексы соединённых вершин.

Выходные данные

Если рисунки Хайди никак не могут описывать одно и то же дерево, то выведите NO. В противном случае выведите слово YES и n - 1 строку с описанием любого дерева, которое могло послужить первоисточником для рисунков Хайди. Для каждого ребра выведите два целых числа — индексы соединённых вершин. Если подходящих решений несколько, разрешается вывести любое.

B. Исправление дерева

графы Деревья Конструктив поиск в глубину и подобное снм *1700

Дерево — это неориентированный связный граф без циклов.

Рассмотрим корневое неориентированное дерево, состоящее из n вершин, пронумерованных от 1 до n. Существует несколько способов представлять такие деревья. Одним из наиболее популярных является массив предков, состоящий из n чисел p1, p2, ..., pn, где pi означает предка вершины i (в рамках данной задачи корень дерева считается предком самого себя).

Для данного корневого дерева массив p равен [2, 3, 3, 2].

По данной последовательности p1, p2, ..., pn легко восстановить дерево:

  1. Существует ровно один индекс r, такой что pr = r. Вершина r является корнем дерева.
  2. Для всех остальных n - 1 вершины i существует ребро между вершинами i и pi.

Последовательность p1, p2, ..., pn является корректной, если описанная выше процедура определяет некоторое (произвольное) корневое дерево. Например, для n = 3 последовательности (1,2,2), (2,3,1) и (2,1,3) не являются корректными.

Вам дана последовательность a1, a2, ..., an, не обязательно являющаяся корректной. Вам требуется изменить минимальное количество элементов, чтобы последовательность стала корректной. Выведите минимальное необходимое количество изменений и пример любого ответа, который можно получить с их помощью. Если существует несколько корректных последовательностей, достижимых за минимальное количество изменений, то разрешается вывести любую.

Входные данные

В первой строке входных данных записано число n (2 ≤ n ≤ 200 000) — количество вершин в дереве (а значит, и в последовательности).

Во второй строке записаны n целых чисел a1, a2, ..., an (1 ≤ ai ≤ n).

Выходные данные

В первой строке выведите минимальное количество изменений, которое надо сделать, чтобы получить корректную последовательность.

Во второй строке выведите любую корректную последовательность, которая может быть получена из (a1, a2, ..., an) за минимальное количество изменений. Если существует несколько таких последовательностей, то выведите любую.

Примечание

В первом примере достаточно изменить один элемент. В приведённом примере вывода последовательность представляет корневое дерево с корнем в вершине 4 (потому что p4 = 4), которое можно увидеть на левом рисунке. Одним из корректных решений будет являться последовательность 2 3 3 2, определяющая дерево с корнем в вершине 3 (правый рисунок). На обоих рисунках корни выделены красным.

Во втором примере данная во входных данных последовательность уже является корректной.

A. Калевич и шахматы

Конструктив Перебор *1100

Известный в Берляндии художник Калевич любит эпатировать общественность. Его последняя идея фикс — шахматы. Вот уже более тысячи лет люди играют в эту древнюю игру на неинтересных, однообразных досках. Калевич решил разрушить эту традицию, представив новый взгляд на шахматные доски.

Как и прежде, шахматная доска это квадратное поле 8 × 8 клеток, каждая из которых покрашена в черный или белый цвет. Калевич предлагает красить шахматные доски, выбирая на поле горизонтальный или вертикальный ряд из 8-ми клеток (т.е. строку или столбец) и закрашивая его в черный цвет. Изначально вся доска белая, а такие покраски можно делать один или более раз. Многократная покраска клетки допустима, но после первой покраски цвет клетки не меняется и остается черным. Калевич красит доски очень аккуратно и по любой отдельно взятой клетке невозможно понять, была она покрашена вертикальным или горизонтальным мазком.

Калевич надеется, что такие доски станут популярны, и ему будут поступать заказы на покраску досок, обеспечив его безбедную старость. Клиенты будут предоставлять ему информацию о том, какую доску они хотят иметь, а художник будет красить белую доску, реализуя идею клиента.

Конечно, в таком бизнесе надо экономить на всем — для каждого заказа Калевич хочет знать наименьшее количество мазков, которое ему надо совершить, чтобы выполнить требование клиента. Помогите Калевичу с этой несложной задачей.

Входные данные

Входные данные состоят ровно из 8-ми строк, каждая из которых содержит по 8 символов. Заданная матрица обозначает требование клиента, символ W обозначает, что соответствующая клетка доски должна остаться белой, а B — что клетка должна быть покрашена в черный цвет.

Гарантируется, что требование клиента может быть выполнено с помощью последовательных покрасок строк или столбцов доски в черный цвет.

Выходные данные

Выведите единственное число — минимальное количество строк или столбцов, которые надо покрасить Калевичу, чтобы белая доска совпала с требованиями.

A. Циклический сдвиг букв

жадные алгоритмы Конструктив реализация Строки *1200

Вам дана непустая строка s, состоящая из строчных букв английского алфавита. Требуется ровно один раз выбрать в s непустую подстроку и сдвинуть её буквы по циклу: «z» «y» «x» «b» «a» «z», то есть заменить каждую букву подстроки на предыдущую в английском алфавите (а букву «a» на букву «z»).

Требуется определить, какую лексикографически минимальную строку можно получить после выполнения ровно одного сдвига?

Входные данные

В первой строке входных данных записана строка s (1 ≤ |s| ≤ 100 000), состоящая из строчных букв английского алфавита.

Выходные данные

Выведите лексикографически минимальную строку, которую можно получить из s, сдвинув ровно одну непустую подстроку.

Примечание

Строка s называется лексикографически меньшей, чем строка t такой же длины, если существует такое 1 ≤ i ≤ |s|, что s1 = t1, s2 = t2, ..., si - 1 = ti - 1, а si < ti.

B. Восстановление строки

жадные алгоритмы Конструктив математика реализация *1900

Любой строке s, состоящей из символов «0» и «1», можно сопоставить четвёрку чисел a00, a01, a10 и a11, где axy — количество двухсимвольных подпоследовательностей строки s, равных последовательности {x, y}.

В данной задаче вам дана четвёрка чисел a00, a01, a10 и a11, требуется найти непустую строку s, которая этой четверке чисел соответствует, либо определить, что такой строки не существует. Можно доказать, что если хотя бы один ответ существует, то найдется ответ, длина которого не превосходит 1 000 000.

Входные данные

В единственной строке входных данных записаны четыре неотрицательных целых числа a00, a01, a10 и a11, каждое из которых не превосходит 109.

Выходные данные

Если подходящая непустая строка существует, то выведите её в единственной строке выходных данных. В противном случае выведите «Impossible». Длина ответа не должна превосходить 1 000 000.

C. Магический нечётный квадрат

Конструктив математика *1500

Найдите матрицу n × n из различных чисел от 1 до n2 такую, что сумма в любой строке, столбце и обеих главных диагоналях нечётна.

Входные данные

В единственной строке находится нечётное целое число n (1 ≤ n ≤ 49).

Выходные данные

Выведите n строк по n целых чисел в каждой. Все числа должны быть различными и находиться в пределах от 1 до n2. Сумма в любой строке, столбце и обеих главных диагоналях должны быть нечётной.

B. Крис и магический квадрат

Конструктив реализация *1400

Кодер ZS и Бабуин Крис пришли ко входу в Удайлэнд. У входа они увидели магическую таблицу размера n × n, заполненную целыми числами. Крис заметил, что ровно одна из ячеек таблицы пуста, и для того, чтобы войти в Удайлэнд, друзьям нужно заполнить эту ячейку целым положительным числом.

Крис пробовал заполнять ячейку различными числами, но это не помогло. Тогда Кодер ZS понял, что им нужно вставить целое положительное число такое, что все числа в ячейках образуют магический квадрат. Это значит, что ему нужно вставить такое число, что сумма чисел в каждой строке таблицы (), в каждом столбце таблицы () и в двух больших диагоналях (главной — и побочной — ) равны между собой.

Крис не знает, каким числом нужно заполнить ячейку. Помогите Крису найти подходящее целое положительное число, или определите, что это невозможно.

Входные данные

Первая строка содержит единственное целое число n (1 ≤ n ≤ 500) — количество строк и столбцов в магической таблице.

Далее следуют n строк, каждая из которых содержит n целых чисел, причём j-ое число в i-ой из них равно ai, j (1 ≤ ai, j ≤ 109 или ai, j = 0), число в i-ой строке и в j-ом столбце магической таблице. Если соответствующая ячейка пуста, ai, j равняется 0. Иначе, ai, j положительно.

Гарантируется, что существует ровно одна пара целых чисел i, j (1 ≤ i, j ≤ n), таких, что ai, j = 0.

Выходные данные

Выведите единственное положительное целое число x (1 ≤ x ≤ 1018), которым следует заполнить пустую ячейку таблицы для того, чтобы вся таблица стала магическим квадратом. Если такого целого x не существует, выведите  - 1.

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере из условия пустую ячейку можно заполнить числом 9, чтобы сделать таблицу магическим квадратом. Действительно,

Сумма чисел в каждой строке равна:

4 + 9 + 2 = 3 + 5 + 7 = 8 + 1 + 6 = 15.

Сумма чисел в каждом столбце равна:

4 + 3 + 8 = 9 + 5 + 1 = 2 + 7 + 6 = 15.

Сумма чисел на диагоналях равна:

4 + 5 + 6 = 2 + 5 + 8 = 15.

В третьем примере из условия невозможно заполнить пустую ячейку числом так, чтобы сделать таблицу магическим квадратом.

B. Поиски прямоугольников

Бинарный поиск интерактив Конструктив *2200

На уроке математики ёжик Филя изучал новую геометрическую фигуру — прямоугольник. Ему дали задание: нарисовать на квадратном клетчатом поле, состоящем из n × n единичных квадратиков, два прямоугольника, стороны которых параллельны осям координат, при этом каждый квадратик либо полностью принадлежит прямоугольнику, либо полностью не принадлежит. Строки поля пронумерованы снизу вверх от 1 до n, столбцы пронумерованы слева направо от 1 до n. Клетка, расположенная на пересечении строки r и столбца c, обозначается (r, c). Филя нарисовал два прямоугольника так, что никакая клетка не принадлежит сразу обоим прямоугольникам.

Через некоторое время ёжику стало интересно, в каких координатах были расположены его прямоугольники, но он никак не мог найти, где он их нарисовал. Как оказалось, рисунки были у совы Сони. Так как Соня достаточно вредная, она решила сыграть с Филей в игру. Он должен спрашивать, сколько прямоугольников находятся полностью внутри некоторого прямоугольника-запроса, а Соня будет отвечать на его вопросы. Прямоугольник-запрос удовлетворяет тем же ограничениям, что и прямоугольники, нарисованные Филей. Прямоугольник полностью лежит внутри прямоугольника-запроса, если каждая его клетка является клеткой прямоугольника-запроса.

Поскольку Филя хорошо знает Соню, он уверен, что если он спросит её более 200 раз, то сове надоест, и он больше не сможет получать ответы.

Входные данные

В первой строке записано целое число n (2 ≤ n ≤ 216) — размеры квадратного поля.

Ответом на каждый запрос является число от 0 до 2 — количество прямоугольников, которые полностью находятся в прямоугольнике-запросе.

Выходные данные

Чтобы сделать запрос, вы должны вывести «? x1 y1 x2 y2» (без кавычек) (1 ≤ x1 ≤ x2 ≤ n, 1 ≤ y1 ≤ y2 ≤ n), где (x1, y1) — координаты левой нижней клетки прямоугольника-запроса, а (x2, y2) — координаты правой верхней клетки прямоугольника-запроса. Разрешается выполнить не более 200 запросов. После каждого запроса нужно вывести перевод строки и сделать операцию «flush», после чего считать ответ Сони.

В момент, когда вы считаете, что уже знаете ответ (или у вас кончились запросы), необходимо вывести «! x11 y11 x12 y12 x21 y21 x22 y22» (без кавычек), где первые четыре числа описывают левую нижнюю и правую верхнюю клетки первого прямоугольника, а следующие четыре — второго. Прямоугольники можно выводить в произвольном порядке. После ответа нужно вывести перевод строки и сделать операцию 'flush'. После вывода ответа ваша программа должна завершиться.

Протокол взаимодействия

Чтобы сделать операцию 'flush' сразу после вывода числа и перевода строки нужно сделать:

cout.flush() или fflush(stdout) в C++;

System.out.flush() в Java;

stdout.flush() в Python;

flush(output) в Pascal;

смотрите документацию для других языков.

Вы получите Wrong Answer, если сделаете более 200 запросов или если не угадаете координаты прямоугольников.

Вы получите вердикт Idleness Limit Exceeded, если не будете ничего выводить (а тестирующая программа будет ожидать ввода) или забудете сделать операцию 'flush' после какого-нибудь вывода.

Описание теста для взлома

В первой строке теста должно быть записано число n (2 ≤ n ≤ 216).

Во второй строке должно быть четыре числа x1, y1, x2, y2 (1 ≤ x1 ≤ x2 ≤ n, 1 ≤ y1 ≤ y2 ≤ n) — описание первого прямоугольника.

В третьей строке должно быть описание второго прямоугольника в аналогичном формате.

A. Плюс и квадратный корень

Конструктив математика *1600

Кодер ZS играет в игру. В игре есть число, которое отображается на экране и две кнопки, ' + ' (плюс) и '' (квадратный корень). Изначально на экране отображается число 2. В игре всего n + 1 уровень и Кодер ZS начинает на уровне 1.

Когда Кодер ZS находится на уровне k, он может:

  1. Нажать кнопку ' + '. Эта операция увеличивает число на экране ровно на k. Таким образом, если на экране отображалось число x, оно становится равным x + k.
  2. Нажать кнопку ''. Пусть на экране отображается число x. После нажатия этой кнопки число становится равным . После этого Кодер ZS переходит на следующий уровень, так что его текущий уровень становится равным k + 1. Эта кнопка может быть нажата только когда x является полным квадратом, т.е. x = m2 для некоторого целого положительного m.

В дополнение, после каждого хода, если Кодер ZS находится на уровне k и число на экране равно m, то m должно делиться на k. Заметьте, что это условие проверяется только после нажатия на кнопку, к примеру, если Кодер ZS находится на уровне 4 и текущее число равно 100, он нажимает кнопку '' и число становится равным 10. В этот момент 10 не делится на 4, однако нажатие все же корректно, так как после него Кодер ZS находится на уровне 5, а 10 делится на 5.

Кодеру ZS'у нужна ваша помощь в прохождении игры — он хочет достичь уровня n + 1. Другими словами, ему нужно нажать кнопку '' n раз. Помогите ему определить, сколько раз ему следует нажимать кнопку ' + ' перед нажатием кнопки '' на каждом уровне.

Заметьте, что Кодер ZS хочет найти любую последовательность нажатий, позволяющую достичь уровня n + 1, но не обязательно такую, в которой число нажатий минимально.

Входные данные

Первая и единственная строка входных данных содержит единственное целое число n (1 ≤ n ≤ 100 000), означающее, что Кодер ZS хочет достичь уровня n + 1.

Выходные данные

Выведите n неотрицательных целых чисел, по одному в строке. i-ое из них должно равняться количеству раз, сколько Кодеру ZS'у нужно нажать кнопку ' + ' перед нажатием кнопки '' на уровне i.

Каждое число не должно превышать 1018. Впрочем, число на экране может превышать 1018.

Гарантируется, что хотя бы одно решение существует. Если существует несколько решений, выведите любое из них.

Примечание

В первом примере из условия:

На первом уровне, Кодер ZS нажимает кнопку ' + ' 14 раз (а число на экране изначально равно 2), так что число становится равным 2 + 14·1 = 16. Затем Кодер ZS нажимает кнопку '' и число становится равным .

После этого, на втором уровне, ZS нажимает кнопку ' + ' 16 раз, так что число становится равным 4 + 16·2 = 36. Затем ZS нажимает кнопку '', переходя на следующий уровень и меняя число на .

Наконец, на третьем уровне, ZS нажимает кнопку ' + ' 46 раз, так что число становится равным 6 + 46·3 = 144. После этого он нажимает кнопку '' опять, меняя число на .

Число 12 безусловно делится на 4, так что Кодер ZS может достигнуть уровня 4.

Заметьте так же, что нажатие кнопки ' + ' 10 раз на третьем уровне перед переходом на следующий уровень не работает, так как число станет равным 6 + 10·3 = 36, и когда кнопка '' будет нажата, число станет , а Кодер ZS окажется на уровне 4. Впрочем, 6 не делится на 4, так что это неправильное решение.

Во втором примере из условия:

На первом уровне Кодер ZS нажимает кнопку ' + ' 999999999999999998 раз (а число на экране изначально равно 2), так что число становится равным 2 + 999999999999999998·1 = 1018. Затем Кодер ZS нажимает кнопку '' и число становится равным .

После этого, на втором уровне, ZS нажимает кнопку ' + ' 44500000000 раз, так что число становится равным 109 + 44500000000·2 = 9·1010. Затем ZS нажимает кнопку '', переходя на следующий уровень и меняя число на .

Число 300000 делится на 3, так что Кодер ZS может достигнуть уровня 3.

B. Дополни граф

Бинарный поиск графы Конструктив кратчайшие пути *2300

Кодер ZS нарисовал неориентированный граф из n вершин пронумерованных от 0 до n - 1 и m ребер между ними. Каждое ребро графа взвешено, а каждый вес — целое положительное число.

На следующий день Кодер ZS обнаружил, что некоторые из весов были стерты! Теперь он хочет восстановить целый положительный вес у каждого ребра, вес которого был стерт, так, что длина кратчайшего пути между вершинами s и t в получившемся графе в точности равна L. Поможете ему?

Входные данные

Первая строка содержит пять целых чисел n, m, L, s, t (2 ≤ n ≤ 1000,  1 ≤ m ≤ 10 000,  1 ≤ L ≤ 109,  0 ≤ s, t ≤ n - 1,  s ≠ t) — количество вершин, количество ребер, желаемая длина кратчайшего пути, начальная и конечная вершины соответственно.

Далее следуют m строк, описывающие ребра графа. i-ая из них содержит три целых числа ui, vi, wi (0 ≤ ui, vi ≤ n - 1,  ui ≠ vi,  0 ≤ wi ≤ 109). ui и vi означают концы ребра, а wi — его вес. Если wi равно 0, то вес соответствующего ребра был стерт.

Гарантируется, что между каждой парой вершин существует не более одного ребра.

Выходные данные

Выведите «NO» (без кавычек) в единственной строке, если восстановить веса ребрам требуемым образом невозможно.

В противном случае, выведите «YES» в первой строке. Следующие m строк должны содержать описания ребер получившегося графа, с весами, заданными ребрам, вес которых был стерт. i-ая из них должна содержать три целых числа ui, vi и wi, означающих ребро между ui и vi веса wi. Ребра нового графа должны совпадать с ребрами графа из входных данных. Веса, которые не были стерты, должны остаться неизменными, тогда как новые веса могут быть любыми целыми положительными числами, не превышающими 1018.

Порядок ребер в выходных данных не важен. Длина кратчайшего пути между s и t должна равняться L.

Если существует несколько решений, выведите любое из них.

Примечание

Вот так выглядит граф в первом примере из условия:

В первом примере из условия вес отсутствует всего у одного ребра. Если задать ему вес, равный 8, то длина кратчайшего пути между 0 и 4 будет равна 13.

Во втором примере из условия всего одно ребро. Очевидно, единственным ответом является задание ему веса 123456789.

В последнем примере из условия ни один вес задавать не нужно, но длина кратчайшего пути не совпадает с нужным значением, так что ответ — «NO».

D. Построй лабиринт

Конструктив *3100

Кодер ZS обожает лабиринты. Ваша задача — построить такой, чтобы он мог с ним играть. Лабиринт состоит из n × m комнат, которые расположены в n строк (пронумерованных сверху вниз начиная с 1) и m столбцов (пронумерованных слева направо начиная с 1). Комната в i-й строке и j-м столбце обозначается (i, j). Игрок начинает в комнате (1, 1) и хочет попасть в комнату (n, m).

Каждая комната содержит четыре двери (за исключением комнат на границе лабиринта), по одной на каждой из ее стен, так что две соседние по стене комнаты делят одну и ту же дверь. Некоторые из дверей заперты, и проходить через них запрещено. К примеру, если дверь между (i, j) и (i, j + 1) заперта, то пройти из (i, j) в (i, j + 1) нельзя. Также между комнатами можно перемещаться только вниз (из комнаты (i, j) в комнату (i + 1, j)) или вправо (из комнаты (i, j) в комнату (i, j + 1)), если соответствующая дверь не заперта.

Рисунок изображает лабиринт с запертыми дверями. Разноцветные стрелки изображают всевозможные пути, а красный крест означает запертую дверь.

Кодер ZS считает, что сложность лабиринта равна x, если существует ровно x способов пройти из комнаты (1, 1) в комнату (n, m). Два способа считаются различными если они различаются в последовательности посещенных в пути комнат.

Ваша задача — создать лабиринт, сложность которого в точности равна T. В дополнение, Кодер ZS не любит большие лабиринты, так что его размер и количество запертых дверей ограничены. Звучит достаточно просто, не правда ли?

Входные данные

Первая и единственная строка входных данных содержит единственное целое число T (1 ≤ T ≤ 1018), сложность требуемого лабиринта.

Выходные данные

Первая строка должна содержать два целых числа n и m (1 ≤ n, m ≤ 50) — количество строк и столбцов в лабиринте соответственно.

Следующая строка должна содержать целое число k (0 ≤ k ≤ 300) — количество запертых дверей в лабиринте.

Следующие k строк должны описывать запертые двери. Каждая из них должна содержать четыре целых числа x1, y1, x2, y2, означающих, что дверь между комнатами (x1, y1) и (x2, y2) заперта. Заметьте, что комната (x2, y2) должна быть соседней с комнатой (x1, y1), т.е. x2 + y2 должно равняться x1 + y1 + 1. Никакая дверь не должна присутствовать в списке дважды.

Гарантируется, что хотя бы одно решение существует. Если существует несколько решений, выведите любое из них.

Примечание

Вот так выглядят входные и выходные данные к примерам из условия. Разноцветные стрелки изображают всевозможные пути, а красный крест означает запертую дверь.

В первом примере из условия:

Во втором примере из условия:

C. Домашнее задание

Конструктив *3100

Сегодня Петя плохо вел себя на уроке математики, и учительница наказала его, дав ему дополнительное домашнее задание. Она назвала ему три числа — n, m и k и сказала, чтобы он отметил на прямоугольной клетчатой доске размером n × m одну или несколько клеток.

Отмеченные клетки должны образовывать связную фигуру. При этом должно быть ровно k способов выбрать три отмеченные клетки, так, чтобы они образовывали «уголок» — все три выбранные клетки лежали внутри квадрата 2 × 2.

Множество клеток образует связную фигуру, если из любой клетки множества можно добраться до любой другой, перемещаясь в процессе с клетки на соседнюю по стороне.

Петя знает, что задание непростое, поэтому попросил вас, как программиста и лучшего друга, помочь ему с этим заданием.

Входные данные

Входные данные содержат несколько тестовых наборов. В первой строке задано количество тестов t (1 ≤ t ≤ 100).

Каждый из следующих t тестов описывается одной строкой из трех чисел n, m и k (3 ≤ n, m, n × m ≤ 105, 0 ≤ k ≤ 109).

Гарантируется, что сумма n × m по всем тестам не превосходит 105.

Выходные данные

Для каждого теста выведите ответ на него.

Если ответ существует, выведите n строк по m символов, где '*' означает отмеченную клетку, а '.' - неотмеченную.

Если ответа не существует, в единственной строке выведите -1.

После каждого теста, кроме последнего, выведите пустую строку.

D. Максим и массив

жадные алгоритмы Конструктив математика Структуры данных *2000

Недавно Максим нашел никому не нужный массив n целых чисел. Ему сразу пришла в голову идея для изменения этого массива: он придумал целое положительное число x и решил прибавлять или вычитать его из произвольных элементов массива. Формально, за одну операцию Максим выбирает целое число i (1 ≤ i ≤ n), и меняет i-й элемент массива ai либо на ai + x, либо на ai - x. Обратите внимание, что операцию можно применять более одного раза к элементу на одной и той же позиции.

Максим — любопытный минималист, поэтому он хочет узнать, какое минимальное значение может принять произведение всех элементов массива (то есть ), если Максим применит к нему не более k операций. Помогите ему в этом.

Входные данные

В первой строке входных данных содержится три целых числа n, k и x (1 ≤ n, k ≤ 200 000, 1 ≤ x ≤ 109) — количество элементов в массиве, максимальное количество операций и число, придуманное Максимом, соответственно.

Во второй строке содержится n целых чисел a1, a2, ..., an () — элементы массива, который нашел Максим.

Выходные данные

В единственной строке выведите n целых чисел b1, b2, ..., bn  — элементы массива после применения к нему не более чем k описанных операций. В частности, должно быть верным для всех 1 ≤ i ≤ n, а произведение всех элементов массива должно быть минимально возможным.

Если ответов несколько, выведите любой.

E. Односторонняя реформа

графы жадные алгоритмы Конструктив поиск в глубину и подобное Потоки *2200

В Берляндии есть n городов и m двунаправленных дорог, которыми соединены некоторые пары городов. Известно, что между каждой парой городов существует не более одной дороги, а также никакая дорога не соединяет город сам с собой. Допустимо, что между некоторыми парами городов не существует пути по дорогам от одного до другого.

Дорожный министр решил провести в Берляндии реформу и заориентировать все дороги в стране, то есть сделать каждую дорогу односторонней. При этом министр хочет максимизировать количество таких городов, чтобы количество дорог, начинающихся в этих городах, было равно количеству дорог, которые в них заканчиваются.

Входные данные

В первой строке следует целое положительное число t (1 ≤ t ≤ 200) — количество наборов входных данных.

Каждый из наборов входных данных задаётся следующим образом. В первой строке следует два целых числа n и m (1 ≤ n ≤ 200, 0 ≤ m ≤ n·(n - 1) / 2) — количество городов и количество дорог в Берляндии.

В следующих m строках следует описание дорог в Берляндии. В каждой строке находятся по два целых числа u и v (1 ≤ u, v ≤ n) — номера городов, которые соединяет очередная дорога. Гарантируется, что никакая дорога не соединяет город с самим самой и между любой парой городов существует не более одной дороги. Допустимо, что между некоторыми парами городов не существует пути по дорогам от одного до другого.

Гарантируется, что суммарное количество городов во всех наборах входных данных не превосходит 200.

Обратите внимание, что для взломов вы можете использовать только тесты, состоящие из одного набора входных данных, то есть t должно быть равно единице.

Выходные данные

Для каждого набора входных данных выведите сначала искомое максимальное количество таких городов, что количество дорог, начинающихся в этих городах, было равно количеству дорог, которые в них заканчиваются.

В следующих m строках выведите заориентированные дороги. Сначала выводите номер города, в котором дорога начинается, а затем номер города, в котором дорога заканчивается. Если ответов несколько, выведите любой из них. Дороги в каждом наборе входных данных разрешается выводить в любом порядке. Каждая дорога должна быть выведена ровно один раз.

C. Спрятанное слово

Конструктив Перебор реализация Строки *1600

Определим игровое поле как таблицу из 2 рядов и 13 столбцов. В каждой клетке таблицы записана заглавная буква английского алфавита. Некоторые клетки могут содержать одинаковые буквы. Рассмотрим пример таблицы:


ABCDEFGHIJKLM
NOPQRSTUVWXYZ

Назовём две клетки соседними, если у них есть общая сторона или общий угол. В приведённом примере клетка «A» является соседней с клетками с буквами «B», «N» и «O». Клетка не является соседней сама себе.

Последовательность клеток называется путём, если любые две соседние клетки последовательности являются соседними клетками поля. В приведённом примере «ABC» является путём, также как и «KXWIHIJK». Последовательность клеток «MAB» путём не является, так как «M» не соседняя с «A». Одна клетка может входить в путь несколько раз (но не может занимать две соседние позиции в пути, так как клетка не является соседней сама себе).

Вам дана строка s, состоящая из 27 заглавных букв английского алфавита. Каждая заглавная буква английского алфавита встречается в s хотя бы один раз. Требуется построить какую-нибудь таблицу, содержащую какой-нибудь путь, такой что если выписать буквы в клетках вдоль этого пути, получится строка s. Если решения не существует выведите «Impossible».

Входные данные

В единственной строке входных данных записана строка s, состоящая из 27 заглавных букв английского алфавита. Каждая буква встречается в строке s хотя бы один раз.

Выходные данные

Выведите две строки, каждая из которых содержит 13 заглавных букв английского алфавита, определяющие строки таблицы. Если правильных решений несколько, выведите любое из них. Если решений не существует, выведите «Impossible».

C. Восстановление массива

интерактив Конструктив математика *1400

Это интерактивная задача. Вам нужно использовать операцию flush после вывода каждого запроса. Например, в C++ вы должны использовать функцию fflush(stdout), в Java — использовать System.out.flush(), а в Паскале — flush(output).

В этой задаче вам надо восстановить массив, который заранее вам неизвестен. Вы можете считать, что жюри загадало некоторый массив a, про который вам известна только его длина n.

Единственное допустимое действие — узнать сумму пары элементов, указав их индексы i и j (индексы должны быть различными). В результате запроса для индексов i и j вы получите сумму ai + aj.

Известно, что восстановить весь загаданный массив можно не более чем за n запросов. Напишите программу, которая восстановит загаданный жюри массив a длины n за не более чем n запросов на сумму двух элементов (в каждом запросе индексы двух элементов должны быть различны).

Протокол взаимодействия

Каждый тест в этой задаче состоит из одного массива, который ваша программа должна восстановить.

В первой строке входных данных следует целое положительное число n (3 ≤ n ≤ 5000) — длина загаданного массива. В первую очередь ваша программа должна прочитать это число.

Далее ваша программа должна выводить в стандартный вывод запросы на сумму двух элементов массива, либо сообщить о том, что загаданный жюри массив уже найден.

  • В случае, если программа осуществляет запрос на сумму, то следует вывести строку вида «? i j» (i и jразличные целые числа от 1 до n) — индексы элементов массива, сумму которых ваша программа запрашивает.
  • В случае, если программа сообщает восстановленный массив, то следует вывести строку вида «a1 a2 ... an» (гарантируется, что все ai в правильно восстановленном массиве — положительные целые числа и не превосходят 105), где ai равно числу, стоящему в массиве в позиции i.

Результатом запроса на сравнение является единственное целое число, равное ai + aj.

Для массива длины n ваша программа должна сделать не более n запросов на сумму. Обратите внимание, что вывод строки вида «a1 a2 ... an» не считается запросом и не учитывается при подсчете их количества.

Не забывайте использовать операцию flush после каждой выведенной строки.

После вывода ответа ваша программа должна завершиться.

Примечание

Вы можете взламывать, задавая тесты следующего вида:

  • в первой строке должно быть записано целое число n (3 ≤ n ≤ 5000) — длина массива,
  • во второй строке должны быть записаны целые числа a1, a2, ..., an (1 ≤ ai ≤ 105) — элементы загаданного массива.

D. Распределение футболок

жадные алгоритмы Конструктив Потоки *1800

В качестве сувениров на соревновании по программированию было решено вручить футболки. Всего в типографии были напечатаны футболки шести размеров: S, M, L, XL, XXL, XXXL (размеры перечислены в порядке возрастания). Для каждого размера от S до XXXL вам известно количество футболок такого размера.

Во время регистрации организаторы попросили каждого из n участников указать размер футболки. Если участник колебался между двумя размерами, то он мог указать два соседних — это означает, что ему подойдет футболка любого из двух размеров.

Напишите программу, которая определит, возможно ли из напечатанных в типографии футболок сделать подарок каждому участнику соревнования. Конечно, каждому участнику должна достаться футболка его размера:

  • требуемого размера, если указан один размер;
  • любого из двух размеров, если указаны два соседних размера.

В случае положительного ответа программа должна найти любой из вариантов раздачи футболок.

Входные данные

В первой строке входных данных содержится шесть целых неотрицательных чисел — количество футболок с размерами S, M, L, XL, XXL, XXXL, соответственно. Суммарное количество напечатанных футболок не превосходит 100 000.

Во второй строке содержится целое положительное число n (1 ≤ n ≤ 100 000) — количество участников соревнований.

В следующих n строках содержатся указания участников — в i-й из них содержатся размеры, указанные i-м участником. Если участник указал только один размер, строка совпадает с его названием. Если же участник указал два размера, то они заданы своими названиями через запятую без разделения пробелами. В этом случае сначала записан меньший размер, затем — больший. Гарантируется, что в таком случае эти размеры соседние.

Выходные данные

Если ответа не существует выведите «NO» (без кавычек).

В противном случае, в первой строке выведите «YES» (без кавычек). В следующих n строках выведите размеры футболок, которые получат участники. Порядок участников должен совпадать с тем порядком, который задан во входных данных.

Если решений несколько, выведите любое.

D. Морской бой

жадные алгоритмы Конструктив математика *1700

Галя играет в одномерный морской бой на поле размера 1 × n. В этой игре на клеточном поле расположены a кораблей, каждый состоит из b последовательных клеток. При этом одна клетка не может являться частью более чем одного корабля, однако, корабли могут соприкасаться.

Гале неизвестно положение кораблей. Галя может делать выстрелы по клеткам, при этом после каждого выстрела ей сообщается, является эта клетка частью какого-нибудь корабля (в таком случае считается, что Галя «попала»), или нет (тогда Галя «промахнулась»).

Галя уже сделала k выстрелов и все из них были промахами.

Перед вами стоит задача определить минимальное количество позиций, выстрелив в которые, Галя гарантированно попадет хотя бы в один из кораблей.

Гарантируется, что существует хотя бы одна расстановка кораблей, удовлетворяющая описанным условиям.

Входные данные

В первой строке находятся четыре целых положительных числа n, a, b, k (1 ≤ n ≤ 2·105, 1 ≤ a, b ≤ n, 0 ≤ k ≤ n - 1) — длина поля, количество кораблей на поле, длина каждого корабля и количество выстрелов, которые Галя уже произвела.

Во второй строке следует строка длины n, состоящая из нулей и единиц. Если i-й символ строки равен единице, то Галя уже стреляла в эту клетку, в противном случае, нет. Гарантируется, что в этой строке ровно k единиц.

Выходные данные

В первую строку выведите минимальное количество позиций, выстрелив в которые, Галя гарантированно попадёт хотя бы в один из кораблей.

Во вторую строку выведите позиции, в которые Галя должна стрелять.

Каждая позиция должна быть выведена ровно один раз. Позиции разрешается выводить в произвольном порядке. Позиции пронумерованы с 1 до n, начиная с самой левой.

Если существует несколько решений, выведите любое из них.

Примечание

В первом примере известно, что остался один корабль длины два. Он может располагаться как слева от уже сделанного выстрела (символа «1»), так и справа. Таким образом, чтобы наверняка попасть в него, надо произвести два выстрела: один в левую часть, другой в правую.

E. Подчинённые

графы жадные алгоритмы Конструктив сортировки Структуры данных *1900

В крупной компании работают n сотрудников, каждый из которых имеет уникальный номер от 1 до n. Из них ровно один сотрудник является главным, его номер равен s. Также известно, что все сотрудники, кроме главного, имеют ровно одного непосредственного начальника.

Каждому из сотрудников было поручено подать информацию о том, сколько начальников у него есть (не только непосредственных). Под начальниками сотрудника понимается его непосредственный начальник, а также непосредственный начальник непосредственного начальника данного сотрудника, и так далее. Например, если в компании три сотрудника, первый из которых главный, у второго сотрудника непосредственный начальник — первый сотрудник, а у третьего сотрудника непосредственный начальник второй сотрудник, то у третьего сотрудника всего два начальника — один непосредственный и один не непосредственный. Главный сотрудник является начальником всех сотрудников, кроме самого себя.

Некоторые из сотрудников поторопились, ошиблись в подсчете и подали неверную информацию. Перед вами стоит задача определить минимально возможное число сотрудников, которые могли допустить ошибку при подаче информации.

Входные данные

В первой строке следует два целых положительных числа n и s (1 ≤ n ≤ 2·105, 1 ≤ s ≤ n) — количество сотрудников и номер главного сотрудника.

Во второй строке следует n целых чисел a1, a2, ..., an (0 ≤ ai ≤ n - 1), где ai равно количеству начальников (не обязательно непосредственных) у сотрудника i, о котором он сообщил при подаче информации.

Выходные данные

Выведите минимально возможное число сотрудников, которые могли допустить ошибку при подаче информации.

Примечание

В первом примере мог ошибиться, например, только первый сотрудник, в том случае, если:

  • у первого сотрудника начальником является второй сотрудник,
  • у третьего сотрудника начальником является первый сотрудник,
  • второй сотрудник является главным.

B. Minimum and Maximum

интерактив Конструктив *1800

H. Delete Them

Конструктив реализация *1300

B. Купоны и скидки

жадные алгоритмы Конструктив *1100

Уже начался сезон олимпиад по программированию, а значит пора писать командные тренировки. Серёжа ведёт тренировки у своих команд не первый год и знает, что к туру надо подготовить не только набор задач и разбор. Тренировка длится несколько часов, и команды, которые в ней участвуют, успевают за это время проголодаться. Поэтому на каждую тренировку Серёжа закупает некоторое количество пицц, чтобы после окончания тура команды подкрепились и обсудили свои успехи и неудачи.

Командам предстоит написать n тренировок в течение n последовательных дней. Во время каждой тренировки на каждую команду, пришедшую в этот день, Серёжа заказывает по пицце в своей любимой пиццерии. Серёжа уже знает, что на i-ю тренировку придёт ровно ai команд.

В пиццерии проходят две акции. В рамках первой акции можно получить скидку, если купить две пиццы в один день. Вторая акция позволяет получить купон на покупку одной пиццы в день на протяжении двух последовательных дней.

Серёжины тренировки очень популярны, поэтому ему приходится часто делать заказы в этой пиццерии. Как их самый ценный клиент, он может неограниченно пользоваться указанными скидками и купонами в любых количествах в любые дни.

Серёжа хочет заказать все пиццы, пользуясь только скидками и купонами. При этом он не хочет приобретать ни в один из дней больше пицц, чем ему нужно в этот день. Помогите Серёже определить, может ли он закупить пиццу на все тренировки, пользуясь только купонами и скидками. Обратите внимание, не разрешается, чтобы после окончания n-го дня оставались активные купоны.

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 200 000) — количество тренировок.

Во второй строке находится n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 10 000), разделённых пробелами, — количества команд, которые придут на каждую из тренировок.

Выходные данные

Если Серёжа может заказать все пиццы, используя только скидки и купоны и не покупая лишние пиццы ни в один из дней, выведите «YES» (без кавычек). Иначе выведите «NO» (без кавычек).

Примечание

В первом примере Серёжа может воспользоваться одним купоном для покупки пицц в первый и второй день, одним купоном для покупки пицц во второй и третий день и одной скидкой в четвёртый день для покупки двух пицц. Это единственный возможный способ заказать все пиццы для данного теста.

Во втором примере Серёжа не может воспользоваться ни купоном, ни скидкой, не заказав при этом лишнюю пиццу. Обратите внимание, что в некоторые дни на тренировку может не прийти ни одной команды, как, например, во второй день в данном тесте.

A. Куплю лопату

Конструктив математика Перебор реализация *800

Поликарпу срочно понадобилась лопата! Он пришёл в магазин и выбрал подходящую. Лопата, которая подошла Поликарпу, продается по цене k бурлей. Считайте, что в магазине неограниченное количество таких лопат.

В кармане у Поликарпа есть неограниченное количество «дестюльников» (монет номиналом в 10 бурлей) и ровно одна монета номинала r (1 ≤ r ≤ 9).

Какое наименьшее количество лопат придётся купить Поликарпу, чтобы он смог расплатиться за покупку без сдачи? Очевидно, что за 10 лопат он сможет расплатиться без сдачи (заплатив требуемую сумму «дестюльниками», не используя монету номинала r), но, возможно, он сможет купить меньшее количество лопат и расплатиться без сдачи. Обратите внимание, что Поликарп должен купить хотя бы одну лопату.

Входные данные

В единственной строке входных данных записаны два целых числа k и r (1 ≤ k ≤ 1000, 1 ≤ r ≤ 9) — цена одной лопаты и номинал монеты в кармане Поликарпа, отличной от «дестюльника».

Помните, что ещё у него в кармане неограниченное количество монет номинала 10, то есть их хватит на покупку любого количества лопат.

Выходные данные

Выведите искомое минимальное количество лопат, которые нужно купить Поликарпу, чтобы расплатиться без сдачи.

Примечание

В первом примере Поликарп может купить 9 лопат, заплатив 9·117 = 1053 бурлей. В самом деле, эту сумму он может заплатив используя монеты номиналом 10 бурлей и одну монету номиналом 3 бурля. Купить меньшее количество лопат (и при этом расплатиться без сдачи), он не может.

Во втором примере Поликарпу достаточно купить одну лопату.

В третьем примере Поликарп должен купить 2 лопаты, заплатив 2·15 = 30 бурлей. Эту сумму он, очевидно, может заплатить без сдачи.

C. Санаторий

Бинарный поиск жадные алгоритмы Конструктив математика реализация *1200

Василий провел свой отпуск в санатории и, вернувшись, обнаружил, что совершенно забыл о подробностях отдыха!

В столовой санатория каждый день проходили завтрак, обед и ужин (конечно, именно в таком порядке). Единственное, что осталось у Василия — карточка из столовой, в которой находится запись о том, сколько раз он посещал завтрак, обед или ужин (таким образом, запись представляет собой три неотрицательных целых числа). Василий мог иногда пропустить ту или иную трапезу, например, в один и тот же день он мог посетить завтрак и ужин, но пропустить обед, а в какой-то из дней он мог не ходить в столовую вовсе.

Василий уже не помнит, в какое время суток он приехал в санаторий (перед завтраком, перед обедом, перед ужином, или после ужина), а в какое уехал (до завтрака, до обеда, до ужина или после ужина) поэтому он готов рассматривать любой из этих вариантов. После приезда в санаторий Василий не покидал его до момента отъезда. Обратите внимание, Василий мог уехать из санатория в тот же день, что и приехал.

По записи в карточке помогите Василию определить, какое наименьшее количество трапез в столовой санатория он мог пропустить. Трапезы, проходящие в день приезда Василия до его приезда и трапезы, проходящие в день отъезда Василия после его отъезда, пропущенными считать не следует.

Входные данные

В единственной строке входных данных содержатся три целых числа b, d и s (0 ≤ b, d, s ≤ 1018,  b + d + s ≥ 1) — количество завтраков, обедов и ужинов, которые посетил Василий во время отдыха в санатории, соответственно.

Выходные данные

Выведите единственное целое число — наименьшее возможное количество трапез, пропущенных Василием.

Примечание

В первом примере из условия Василий пропустил бы один ужин, если, например, приехал бы к завтраку, пробыл два дня в санатории (включая день приезда) и уехал после завтрака третьего дня.

Во втором примере из условия Василий мог приехать к завтраку, сходить на него, и сразу же покинуть санаторий, не пропустив ни одной трапезы.

В третьем примере из условия Василий мог пробыть в санатории один полный день, не пропустив ни одной трапезы.

C. Эпидемия в Монстрополисе

дп жадные алгоритмы Конструктив *1800

В Монстрополисе эпидемия, все монстры заболели унынием. Чтобы вылечиться, все монстры выстроились на приём к единственному врачу в городе в очередь.

Вскоре монстры проголодались и начали съедать друг друга. Один монстр может съесть другого, если его масса строго больше съедаемого, и они стоят в очереди рядом. Монстры съедают друг друга мгновенно. Никакие два монстра не съедаются одновременно. Когда монстр A съедает монстра B, то масса монстра A увеличивается на массу съеденного монстра B. В результате такого съедания длина очереди уменьшается на единицу, очередь «схлопывается» в позиции съеденного монстра. Один и тот же монстр может съесть последовательно несколько других монстров. Изначально в очереди стояло n монстров, i-й из которых имел массу ai.

Например, если массы монстров в порядке очереди были равны [1, 2, 2, 2, 1, 2] (считайте, что монстры пронумерованы от 1 до 6 слева направо), то некоторые из возможных вариантов:

  • первый монстр не может съесть второго, так как a1 = 1 не больше, чем a2 = 2;
  • второй монстр не может съесть третьего, так как a2 = 2 не больше, чем a3 = 2;
  • второй монстр не может съесть пятого, так как они не стоят рядом;
  • второй монстр может съесть первого, тогда очередь примет вид: [3, 2, 2, 1, 2].

Через некоторое время кто-то очень успешно пошутил, и все монстры вылечились. В итоге осталось k (k ≤ n) монстров, j-й из которых имеет массу bj. Обе последовательности (и a, и b) содержат массы монстров в порядке очереди от первого в очереди к последнему.

От вас требуется предложить один из возможных порядков поедания монстров монстрами, приведший к текущей очереди, или определить, что такого не могло случиться. За время до излечения всех монстров врач не совершил ни одного приема.

Входные данные

В первой строке входных данных содержится целое число n (1 ≤ n ≤ 500) — количество монстров в очереди изначально.

Во второй строке входных данных содержится n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 106) — массы монстров изначально.

В третьей строке входных данных содержится целое число k (1 ≤ k ≤ n) — количество монстров в очереди после излечения.

В четвёртой строке входных данных содержится k целых чисел b1, b2, ..., bk (1 ≤ bj ≤ 5·108) — массы монстров после излечения.

Монстры перечислены в порядке их стояния в очереди от начала к концу.

Выходные данные

В случае, если ни какие действия не могли привести к конечной очереди, в единственной строке выходных данных выведите «NO» (без кавычек).

Иначе, в первой строке выходных данных выведите «YES» (без кавычек). В следующих n - k строках выведите действия в хронологическом порядке. В каждой строке выводите x — порядковый номер монстра в текущей очереди, который будет есть, и через пробел символ 'L', если монстр, стоящий x-м по порядку в очереди, ест монстра, стоящего перед ним в очереди, или 'R', в случае, когда монстр, стоящий x-м по порядку в очереди, ест монстра, стоящего за ним в очереди. После очередного съедания очередь пронумеровывается заново.

Когда один монстр съедает другого, очередь схлопывается. Если решений несколько, выведите любое из них.

Примечание

В первом примере изначально в очереди находилось n = 6 монстров, их массы в порядке очереди были [1, 2, 2, 2, 1, 2]. В результате должны остаться два монстра массами [5, 5]. Такое возможно, например, при следующей последовательности действий:

  • второй монстр съедает левого от себя (то есть первого), очередь принимает вид [3, 2, 2, 1, 2];
  • первый монстр (обратите внимание, этот тот, который на предыдущем шаге был вторым) съедает правого от себя (то есть второго), очередь принимает вид [5, 2, 1, 2];
  • четвертый монстр съедает левого от себя (то есть третьего), очередь принимает вид [5, 2, 3];
  • третий монстр съедает левого от себя (то есть второго), очередь принимает финальный вид [5, 5].

Обратите внимание, что при выводе съеданий используется нумерация монстров в их текущем порядке в очереди.

E. Сон на уроке

Конструктив математика Структуры данных *2400

Учебный год только начался, а уроки и олимпиады уже занимают всё свободное время. Неудивительно, что сегодня Ольга уснула на уроке литературы. Оле приснилось, что она находится на лестнице.

Лестница состоит из n ступенек. Ступеньки пронумерованы снизу вверх (то есть 1-я — самая нижняя, а n-я — самая верхняя). Над каждой ступенькой висит стрелка, указывающая направление движения (вверх или вниз) с этой ступеньки, причем, как только Оля уходит с очередной ступеньки, направление стрелки над ней меняется на противоположное, то есть направление «вверх» меняется на направление «вниз», а направление «вниз» — на направление «вверх».

Оля всегда перемещается на следующую ступеньку в том направлении, что указано на текущей ступеньке.

Если Оля выйдет за пределы лестницы, то она упадёт и проснётся. Выходом за пределы лестницы считается движение вниз с первой ступеньки или движение вверх с последней (то есть n-й) ступеньки.

За одну секунду Оля движется на одну ступеньку вверх или вниз в соответствии с направлением стрелки, расположенной на ступеньке, на которой была Оля в начале секунды.

Для каждой ступеньки посчитайте длительность сна, если Оля оказывается на этой ступеньке в самом начале сна.

Падение Оли занимает тоже одну секунду, то есть, если она оказалась на первой ступеньке и идёт вниз, то она проснётся в следующую секунду.

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 106) — количество ступенек на лестнице.

Вторая строка содержит строку s длины n, обозначающую направление стрелок на ступеньках. Символ i строки s обозначает изначальное направление на стрелке над i-ой ступенькой и равен либо 'U' (означает, что стрелка направленна вверх), либо 'D' (означает, что стрелка направленна вниз).

Выходные данные

Выведите n чисел, i-е из которых соответствует продолжительности сна Оли в секундах, или равно  - 1 в том случае, если Оля никогда не выйдет за пределы лестницы, если в начале сна она окажется на i-й ступеньке.

F. Антон и школа

битмаски Конструктив математика реализация *2500

Антон учится в школе. Его любимый предмет — массивоведение. Этот предмет ему легко даётся, он обычно решает задачи по массивоведению очень быстро.

Однажды, когда Антон в очередной раз справился со всеми задачами по массивоведению за десять минут, учительница дала ему задачу посложнее: даны два массива b и c длины n, и надо найти массив a такой, что

где a and b обозначает операцию побитового И, а a or b обозначает операцию побитового ИЛИ.

Хотя Антон обычно решает задачи по массивоведению очень быстро, эта задача оказалась ему не по зубам. Поэтому он решил обратиться к Вам за помощью. Помогите Антону решить эту задачу!

Входные данные

В первой строке входных данных находится одно целое число n (1 ≤ n ≤ 200 000) — размер массивов b и c.

Во второй строке входных данных находится n целых чисел bi (0 ≤ bi ≤ 109) — элементы массива b.

В третьей строке входных данных находится n целых чисел ci (0 ≤ ci ≤ 109) — элементы массива c.

Выходные данные

Если решения не существует, выведите одно число  - 1.

Иначе в единственной строке выходных данных выведите через пробел n целых неотрицательных чисел ai — элементы массива a. Если решений несколько, разрешается вывести любое из них.

C. Теннисный Чемпионат

жадные алгоритмы Комбинаторика Конструктив математика *1600

Бразильский город Рио-де-Жанейро принимает крупный теннисный турнир, и Остап Бендер не намерен пропускать это событие. В турнире примут участие n теннисистов, причём с первого же матча будет идти игра на выбывание — проигравший сразу покидает турнир.

Организаторы ещё не составили сетку чемпионата, но известно, что два игрока могут играть друг с другом, если и только если количество игр, уже проведённых одним из них, отличается от количества игр, проведённых другим, не более чем на одну игру (в любую сторону). Разумеется, оба игрока должны были выиграть все свои встречи, чтобы всё ещё участвовать в турнире.

Пока турнир не начался и зрители ищут, чем занять себя в ожидании, Остап решил вычислить, в каком максимальном количестве партий может принять участие победитель турнира. Скорее всего, без вашей помощи ему не справиться.

Входные данные

В единственной строке входных данных записано целое число n (2 ≤ n ≤ 1018) — количество участников турнира.

Выходные данные

Выведите одно целое число — максимальное количество партий, в которых может принять участие победитель турнира.

Примечание

Во всех примерах будем считать, что турнир выигрывает участник с номером 1.

В первом примере будет всего одна игра, поэтому ответ очевидно 1.

Во втором примере первый игрок может последовательно обыграть игрока 2, а затем игрока 3.

В третьем примере первый игрок не может последовательно обыграть всех остальных, так как если он сыграет с игроками 2 и 3, то у него будет уже две партии, а игрока номер 4 — ноль партий. Тогда они не смогут сыграть и турнир не завершится. Таким образом, ответ 2 и он достигается на сетке турнира, в которой сначала играют пары (1, 2) и (3, 4), а затем победители этих пар играют друг с другом.

E. Чемпионат

жадные алгоритмы Конструктив математика Потоки *2900

Остап Бендер решил в очередной раз дать сеанс одновременной игры по шахматам. В этот раз он тщательно готовился, поэтому следил за ходом одного крупного турнира по шахматам. В турнире принимали участие m шахматистов, каждый сыграл с каждым ровно одну партию. В случае победы участник получал 2 очка, ничьей — 1 очко, поражения — 0 очков.

Остап не хотел держать в голове всю турнирную таблицу, поэтому для каждого участника он вычислил итоговое количество набранных им очков (то есть сумму его очков по всем партиям, в которых он принимал участие). Далее Остап упорядочил участников по невозрастанию набранных очков и запомнил результаты первых n из этого списка.

Теперь у великого комбинатора возник вопрос, а ничего ли он не напутал и действительно ли существует турнирная таблица, по которой могли быть получены данные n чисел? Другими словами, можно ли так назначить исходы всех попарных встреч для m шахматистов, что после вычисления итоговой суммы для каждого, упорядочивания и отбрасывания последних m - n останется набор чисел, в точности совпадающий с тем, что помнит Остап?

Входные данные

В первой строке входных данных записаны два числа m и n (1 ≤ n ≤ m ≤ 3000) — количество участников турнира и количество лучших результатов, которые помнит Остап.

Во второй строке записаны n целых чисел в порядке невозрастания — набранные участниками очки, как их помнит Остап. Гарантируется, что все эти числа — целые неотрицательные и не превосходят m.

Выходные данные

Если не существует турнира, по которому Остап мог получить данный набор чисел, выведите «no» в единственной строке выходных данных. В противном случае в первой строке выходных данных выведите «yes», а следующих m строках — сам турнир. Каждая строка описания турнира должна состоять из m символов «X», «W», «D» и «L». Символ «X» всегда ставится на главной диагонали (и только там), то есть в i-й позиции i-й строки, символ «W» в j-й позиции i-й строки означает, что игрок номер i обыграл игрока номер j, символы «D» и «L» на соответствующей позиции означают ничью и поражение соответственно.

Выведенная таблица должна быть непротиворечива, а набор чисел, состоящий из баллов n участников с наилучшим счётом, должен совпадать с набором, указанным во входных данных. Если подходящих ответов несколько, разрешается вывести любой из них.

F. Грязные тарелки

Конструктив математика *3300

После очередного праздника у Никиты на кухне образовалась стопка грязных тарелок. Их надо помыть и поставить в сушилку, при этом в сушилке тарелки тоже должны стоять в стопке, причем размеры тарелок должны возрастать сверху вниз. Все размеры тарелок различны.

У Никиты не очень много свободного места, а именно, есть место только для еще одной стопки тарелок. Поэтому он может выполнять лишь две операции:

  • Взять любое количество от 1 до a верхних тарелок из стопки с грязными тарелками, помыть их и положить в том же порядке на верх промежуточной стопки.
  • Взять любое количество от 1 до b верхних тарелок из промежуточной стопки и положить в том же порядке на верх стопки в сушилке.

Обратите внимание, что при выполнении любой из операций тарелки кладутся на стопку в том же порядке, в каком они были перед выполнением операции.

Вам известны размеры тарелок s1, s2, ..., sn в порядке их лежания в стопке с грязными тарелками сверху вниз, а также числа a и b. Все размеры тарелок различны. Напишите программу, которая будет определять, может ли Никита расположить все тарелки в сушилке в возрастающем сверху вниз порядке, и если может, то найдите какой-нибудь, не обязательно оптимальный, порядок действий для этого.

Входные данные

В первой строке записаны три целых числа n, a и b (1 ≤ n ≤ 2000, 1 ≤ a, b ≤ n). Вторая строка содержит последовательность целых чисел s1, s2, ..., sn (1 ≤ si ≤ n) — размеры тарелок в порядке их следования сверху вниз. Все размеры различны.

Выходные данные

В первую строку выведите «YES», если решение существует. В этом случае во вторую строку выведите k — количество операций. Далее в k строках выведите сами операции по одной в строке. Каждая из них описывается двумя числами tj, cj, где tj = 1, если операция соответствует помывке cj тарелок и помещению их в промежуточную стопку, и tj = 2, если операция описывает перемещение cj тарелок из промежуточной стопки в сушилку. Если решений несколько, то выведите любое из них. Будьте внимательны: в задаче не требуется минимизировать количество операций.

Если решения не существует, то в единственную строку выведите «NO».

Примечание

В первом примере изначально тарелки были в порядке 2, 3, 6, 4, 1, 5. Рассмотрим то, что получалось после каждой операции:

  • [1 2]: Грязная стопка: 6, 4, 1, 5. Промежуточная стопка: 2, 3. В сушилке пусто.
  • [1 1]: Грязная стопка: 4, 1, 5. Промежуточная стопка: 6, 2, 3. В сушилке пусто.
  • [2 1]: Грязная стопка: 4, 1, 5. Промежуточная стопка: 2, 3. Сушилка: 6.
  • [1 2]: Грязная стопка: 5. Промежуточная стопка: 4, 1, 2, 3. Сушилка: 6.
  • [1 1]: Грязных тарелок нет. Промежуточная стопка: 5, 4, 1, 2, 3. Сушилка: 6.
  • [2 1]: Грязных тарелок нет. Промежуточная стопка: 4, 1, 2, 3. Сушилка: 5, 6.
  • [2 1]: Грязных тарелок нет. Промежуточная стопка: 1, 2, 3. Сушилка: 4, 5, 6.
  • [2 3]: Все тарелки в сушилке: 1, 2, 3, 4, 5, 6.

Во втором примере можно помыть сразу все тарелки и затем все вместе переставить в сушилку.

В третьем примере так сделать нельзя, т. к. нельзя переставлять более одной тарелки одновременно. Можно помыть все тарелки по одной, тогда в промежуточной стопке они будут в обратном порядке, а затем переставить все тарелки по одной. В итоге порядок в сушилке будет правильный.

A. Алёна и mex

жадные алгоритмы Конструктив *1700

Мама хочет подарить маленькой девочке Алёне массив из n целых неотрицательных чисел. Но массив должен быть особенным.

Алёна девочка капризная, поэтому когда мама подарит ей массив, Алёна рассмотрит m подмассивов подаренного ей массива. Назовем подмассивом некоторую последовательность из подряд идущих чисел в массиве. i-й подмассив задается двумя числами li и ri, и он состоит из чисел a[li], a[li + 1], ..., a[ri].

Капризная Алёна посмотрит на mex каждого подмассива. Среди всех m mex-ов девочка выберет минимальный, и она хотела бы, чтобы минимальный mex был как можно больше.

Ваша задача найти массив a из n неотрицательных чисел такой, чтобы минимальный mex подмассивов, заданных Алёной, был максимален.

mex множества чисел S — это минимальное неотрицательное целое число, которое не встречается в множестве S.

Входные данные

В первой строке находятся два числа n и m (1 ≤ n, m ≤ 105).

В следующих m строках задано описание подмассивов, интересующих Алёну. В i-й из этих строк заданы два числа li и ri (1 ≤ li ≤ ri ≤ n), которым соответствует подмассив a[li], a[li + 1], ..., a[ri].

Выходные данные

В первой строке выведете одно число — максимально возможный минимальный mex.

Во второй строке выведете n чисел — массив a. Числа в массиве a должны быть от 0 до 109.

Гарантируется, что существует оптимальный ответ, в котором все числа в массиве a находятся в пределах от 0 до 109.

Если существует несколько решений, выведите любое.

Примечание

Пояснение к тесту из условия: на подмассиве (1, 3) mex равен 3, на подмассиве (2, 5) mex равен 3 и на подмассиве (4, 5) mex тоже равен 2, следовательно минимальный mex среди подмассивов, интересующих Алёну, равен 2.

E. Сдвигай!

Конструктив *2800

Имеется квадратная коробка размера 6 × 6, в которые помещены 36 фишек 1 × 1. На этих фишках записаны 36 различных символов — «0»-«9» и «A»-«Z». На каждой фишке записан ровно один символ, все фишки различны.

Разрешается делать следующие операции — выбрать одну из 6 строк или один из 6 столбцов и циклически передвинуть там фишки на одну позицию влево или вправо (для строки), или же вверх или вниз (для столбца). Эти операции разрешается проводить несколько раз.

Собрать головоломку означает вышеуказанными операциями переместить фишки так, чтобы они оказались записаны в порядке возрастания (ровно так, как на правом рисунке). Пример сборки головоломки показан на рисунке ниже.

Напишите программу, которая находит последовательность операций, которые собирают головоломку. Эта последовательность не обязательно должна быть кратчайшей, но Вы должны уложиться в 10000 операций. Гарантируется, что решение всегда существует.

Входные данные

Входные данные представляют собой 6 строк по 6 символов в каждой — начальное положение головоломки. Эти строки содержат каждый из символов строки «0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ» ровно один раз.

Выходные данные

В первой строке выведите число n — количество операций. В следующих n строках выведите последовательность операций по одной на строку. Операция записывается словом из двух символов. Первый символ — направление, куда будет сдвинуты строка или столбец. Возможные направления: «L», «R» (влево, вправо соответственно, сдвигаем строку), «U», «D» (вверх, вниз соответственно, сдвигаем столбец). Второй символ — номер строки (или столбца) — цифра от «1» до «6». Строки нумеруются сверху вниз, а столбцы — слева направо.

Количество операций не должно превышать 104. Если решений несколько — выведите любое.

B. Алёна и цветы

Конструктив *1200

У маленькой девочки Алёны сегодня день рождения. У ее мамы есть массив из n цветков. У каждого цветка есть настроение, настроение i-го цветка равно ai. Настроение может быть положительным, нулевым или отрицательным.

Назовем подмассивом произвольную последовательность из подряд идущих элементов массива. Мама предложила девочке некоторый набор подмассивов массива цветков. Алёне хочет выбрать некий набор подмассивов из набора, предложенного мамой. После того, как она это сделает, каждый цветок из массива прибавит к счастью девочки свое настроение, умноженное на количество выбранные девочкой подмассивов, в которые этот цветок попал.

Например, пусть у мамы есть 5 цветков, а их настроения равны 1,  - 2, 1, 3,  - 4. Пусть мама выбрала подмассивы (1,  - 2), (3,  - 4), (1, 3), (1,  - 2, 1, 3). Тогда если девочка выберет третий и четвертый подмассивы, то:

  • первый цветок добавит к счастью Алёны 1·1 = 1, потому что он попал в один подмассив,
  • второй цветок добавит ( - 2)·1 =  - 2, потому что он попал в один подмассив,
  • третий цветок добавит 1·2 = 2, потому что он попал в два подмассива,
  • четвертый цветок добавит 3·2 = 6, потому что он попал в два подмассива,
  • пятый цветок добавит ( - 4)·0 = 0, потому что он не попал ни в один подмассив.

Таким образом, к счастью Алёны добавится 1 + ( - 2) + 2 + 6 + 0 = 7. Алена хочет выбрать такие подмассивы из предложенных мамой, чтобы прибавка к ее счастью была максимально возможной. Помогите ей сделать это!

Алена может выбрать любое количество подмассивов, даже 0 или все, что были предложены мамой.

Входные данные

В первой строке находятся два целых числа n и m (1 ≤ n, m ≤ 100) — количество цветков и количество подмассивов предложенных мамой.

Во второй строке находятся настроения цветков — n целых чисел a1, a2, ..., an ( - 100 ≤ ai ≤ 100).

В следующих m строках заданы описания подмассивов, предложенных мамой. В i-ой из этих строк заданы два целых числа li и ri (1 ≤ li ≤ ri ≤ n), обозначающие подмассив a[li], a[li + 1], ..., a[ri].

Каждый подмассив может встречаться более одного раза.

Выходные данные

Выведите одно число — максимально возможную прибавку к счастью Алёны.

Примечание

Первый тест из условия соответствует ситуации, разобранной в условии.

Во втором тесте из условия Алёне необходимо выбрать все подмассивы.

В третьем тесте из условия ответ 0, так как можно не выбирать ни один подмассив.

C. Ночная вечеринка Arpa и бесшумное появление Mehrdad

графы Конструктив поиск в глубину и подобное *2600

Заметьте, что девушки в стране Arpa действительно привлекательные.

Arpa любит ночные вечеринки. В середине одной из них неожинанно пришел Mehrdad. Он увидел n пар друзей сидящих вокруг стола. i-я пара состояла из молодого человека, сидящего на ai-м стуле, и его девушки, сидящей на bi-м стуле. Стулья пронумерованы от 1 до 2n по часовой стрелке. На каждом стуле сидел ровно один человек.

На вечеринке было два вида еды: Kooft и Zahre-mar. Сейчас Mehrdad задумался, можно ли было подать еду для гостей таким образом, что:

  • Каждый человек получил бы ровно один вид еды,
  • Ни один молодой человек не получил бы тот же вид еды, что и его девушка,
  • Среди каждых трех гостей, сидящих на последовательных стульях, нашлись бы два, получившие разный вид еды. Заметим, что стулья 2n и 1 также считаются последовательными.

Найдите ответ на вопрос Mehrdad. Если такое было возможно, то найдите распределение видов еды, удовлетворяющее всем условиям.

Входные данные

Первая строка содержит целое число n (1  ≤  n  ≤  105) — количество пар гостей.

Далее следуют n строк. i-я из них содержит два целых числа ai и bi (1  ≤ ai, bi ≤  2n) — номер стула, на котором сидел молодой человек в i-й паре и номер стула, на котором сидела его девушка. Гарантируется, что на каждом стуле сидит ровно один человек.

Выходные данные

Если решения не существует, выведите -1.

Иначе выведите n строк, i-я из них должна содержать два целых числа, описывающие виды еды, поданной для i-й пары. Первое число в этой строке это вид еды, поданной молодому человеку, а второе — тип еды, поданной его девушке. Если человеку подали Kooft, выведите 1, иначе выведите 2.

Если существует несколько решений, выведите любое из них.

A. Владик и перелеты

жадные алгоритмы Конструктив реализация *1200

Владик — спортивный программист. В этом году он собирается победить на международной олимпиаде школьников по информатике. Но все не так просто, как кажется: перед Владиком стоит вопрос, как выгоднее всего добраться до места проведения олимпиады.

Владику известно n аэропортов. Все аэропорты расположены на одной прямой. Каждый аэропорт имеет свой уникальный порядковый номер от 1 до n, дом Владика находится возле аэропорта с номером a, а место проведения олимпиады — рядом с аэропортом, имеющим номер b. Дом Владика и место проведения олимпиады могут находиться возле одного и того же аэропорта.

Чтобы добраться до олимпиады, Владик может совершить любое количество промежуточных перелетов, однако он должен начать в аэропорте a и завершить свой полет в аэропорте b.

Каждый аэропорт принадлежит ровно одной из двух обслуживающих компаний. Стоимость перелета из аэропорта с номером i в аэропорт с номером j равняется нулю, если эти аэропорты принадлежат одной компании, и |i - j|, если они принадлежат разным компаниям.

Найдите минимальную стоимость, за которую Владик может долететь на олимпиаду.

Входные данные

В первой строке входных данных записаны три целых числа n, a, и b (1 ≤ n ≤ 105, 1 ≤ a, b ≤ n) — количество аэропортов, номер аэропорта, из которого Владик начнет свой путь, и номер аэропорта, рядом с которым проводится олимпиада.

Далее записана строка длины n, состоящая только из символов 0 и 1. Если на позиции i в данной строке стоит 0, то i-й аэропорт принадлежит первой компании, а иначе — второй компании.

Выходные данные

Выведите одно целое число — минимальную стоимость, за которую Владик может долететь на олимпиаду.

Примечание

В первом примере Владик может сперва долететь до аэропорта с номером 2, заплатив |1 - 2| = 1 единицу стоимости (поскольку аэропорты принадлежат разным компаниями), а затем бесплатно долететь из аэропорта 2 до 4 (поскольку аэропорты принадлежат одинаковым компаниям). Таким образом, стоимость такого перелета равна 1. Долететь бесплатно невозможно, поэтому ответ на пример равен 1.

Во втором примере Владик может сразу бесплатно долететь из аэропорта 5 до аэропорта 2, поскольку они принадлежат одинаковым компаниям.

B. Хлоя и последовательность

Бинарный поиск битмаски Конструктив реализация *1200

Хлоя, как и Владик, — спортивный программист. У нее не было проблем с тем, чтобы добраться до олимпиады, но на самой олимпиаде ей понадобилась ваша помощь! У нее не получается решить следующую задачу.

Рассмотрим следующий алгоритм генерации последовательностей целых чисел. Первоначально имеется последовательность из одного элемента, равного 1. Далее производится (n - 1) шаг. На каждом шаге берется последовательность, полученная на предыдущем шаге, приписывается сама к себе в конец, а в середину вставляется символ с минимальным положительным, не использованным ранее, числом. Например, после первого шага получится последовательность [1, 2, 1], а после второго — [1, 2, 1, 3, 1, 2, 1].

Необходимо вывести значение элемента, стоящего на k-й позиции (элементы пронумерованы с 1) в итоговой последовательности, т. е. после (n - 1) шага. Помогите Хлое решить задачу!

Входные данные

В единственной строке содержатся два целых числа n и k (1 ≤ n ≤ 50, 1 ≤ k ≤ 2n - 1).

Выходные данные

Выведите одно целое число — число, стоящее в итоговой последовательности на позиции k.

Примечание

В первом примере итоговая последовательность — [1, 2, 1, 3, 1, 2, 1]. Число, стоящее на второй позиции, равно 2.

Во втором примере итоговая последовательность — [1, 2, 1, 3, 1, 2, 1, 4, 1, 2, 1, 3, 1, 2, 1]. Число на восьмой позиции  — 4.

C. Владик и дроби

Конструктив математика Перебор теория чисел *1500

Владик и Хлоя решили определить, кто из них лучше разбирается в математике. Владик заявил, что сможет для любого положительного целого n представить дробь вида в виде суммы трех попарно различных положительных дробей вида .

Помогите Владику сделать это, то есть найти для заданного n три различных положительных целых числа x, y и z такие, что . Так как Хлоя не сможет проверить ответ Владика, если эти числа будут слишком большие, он просит вас вывести числа не превосходящие 109.

Если подходящего ответа не существует, выведите -1.

Входные данные

В единственной строке содержится одно целое число n (1 ≤ n ≤ 104).

Выходные данные

Если решение существует, выведите 3 различных целых числа x, y и z (1 ≤ x, y, z ≤ 109, x ≠ y, x ≠ z, y ≠ z). Иначе выведите -1.

Если существует несколько решений, выведите любое из них.

C. Трамвай

Конструктив математика реализация *1600

Трамвай в Берляндии ходит по прямой от точки 0 до точки s и обратно, преодолевая 1 метр за t1 секунд в обоих направлениях. То есть трамвай ходит равномерно прямолинейно, мгновенно разворачиваясь в точках x = 0 и x = s.

В точке x1 находится Игорь. Ему нужно попасть в точку x2. Игорь преодолевает 1 метр за t2 секунд.

Перед вами стоит задача определить минимальное время, за которое Игорь может добраться из точки x1 в точку x2, если известно, где находится трамвай и в каком направлении он едет в момент, когда Игорь пришел в точку x1.

Игорь может неограниченное количество раз заходить в трамвай в любой момент времени, когда позиции его и трамвая совпадают. Точки, в которых Игорь может заходить и выходить из трамвая, не обязательно целочисленные. Считайте, что любая высадка/посадка происходит мгновенно. Игорь может произвольным образом перемещаться по прямой (но не быстрее, чем 1 метр за t2 секунд) или даже стоять на месте.

Входные данные

В первой строке следуют три целых числа s, x1 и x2 (2 ≤ s ≤ 1000, 0 ≤ x1, x2 ≤ s, x1 ≠ x2) — максимальная координата точки, до которой доезжает трамвай, точка, в которой находится Игорь и точка, в которую ему нужно попасть.

Во второй строке следуют два целых числа t1 и t2 (1 ≤ t1, t2 ≤ 1000) — время в секундах, за которое трамвай преодолевает 1 метр, и время в секундах, за которое Игорь преодолевает 1 метр.

В третьей строке следуют два целых числа p и d (1 ≤ p ≤ s - 1, d равняется 1 или ) — позиция трамвая в момент, когда Игорь пришел в точку x1, а также направление движения трамвая в этот же момент. Если , то трамвай движется в направлении от точки s в точку 0. Если d = 1, то трамвай движется в направлении от точки 0 в точку s.

Выходные данные

Выведите минимальное время в секундах, за которое Игорь может добраться из точки x1 в точку x2.

Примечание

В первом примере Игорю выгоднее пойти пешком и не ждать трамвай. Таким образом, ему нужно пройти 2 метра и он сможет это сделать суммарно за 8 секунд, так как он преодолевает 1 метр за 4 секунды.

Во втором примере Игорь может, например, пойти в сторону точки x2 и дойти до точки 1 за 6 секунд (так как ему нужно пройти для этого 3 метра, а он преодолевает 1 метр за 2 секунды). В этот момент времени, трамвай также будет находится в точке 1, поэтому Игорь может зайти в него, и доехать оставшийся 1 метр за 1 секунду. Таким образом, Игорь доберётся до точки x2 суммарно за 7 секунд.

D. Зеленый и черный чай

жадные алгоритмы Конструктив математика *1500

Иннокентий очень любит чай и сегодня хочет выпить ровно n чашек чая. Он бы выпил и больше, но у него осталось ровно n пакетиков чая, a из которых — зеленый чай и b — черный.

Иннокентий не любит пить более, чем k раз подряд один и тот же чай (зеленый или черный). Перед вами стоит задача определить порядок заваривания пакетиков, при котором Иннокентий сможет выпить n чашек чая, при этом он не будет пить один и тот же чай более k раз подряд, либо сообщить, что это невозможно. Каждый пакетик должен быть заварен ровно один раз.

Входные данные

В первой строке следуют четыре целых числа n, k, a и b (1 ≤ k ≤ n ≤ 105, 0 ≤ a, b ≤ n) — количество чашек чая, которые хочет выпить Иннокентий, максимальное количество чашек одного и того же чая, которые Иннокентий может выпить подряд, количество пакетиков с зеленым чаем и количество пакетиков с черным чаем. Гарантируется, что a + b = n.

Выходные данные

Если выпить n чашек чая не удастся, выведите «NO» (без кавычек).

В противном случае, выведите строку длины n, состоящую из символов 'G' и 'B'. Если очередной символ равен 'G', то очередная кружка должна быть с зеленым чаем. Если очередной символ равен 'B', то очередная кружка должна быть с черным чаем. Если ответов несколько, разрешается вывести любой из них.

G. Новые дороги

графы Деревья Конструктив *2100

В Берляндии есть n городов, каждый из которых имеет свой уникальный номер — целое число от 1 до n, причём столица имеет номер 1. В Берляндии в настоящий момент совсем плохо с дорогами — их нет.

По этой причине было решено построить n - 1 дорогу так, чтобы между каждой парой городов существовал ровно один путь по дорогам.

В плане на постройку дорог было указано t чисел a1, a2, ..., at, где t равно расстоянию от столицы до самого удаленного города, если добираться до него только по новым дорогам, а ai равно количеству городов, которые должны находиться на расстоянии i от столицы. Под расстоянием понимается количество дорог, которые нужно преодолеть на пути от одного города до другого.

Также было решено, что среди всех городов, исключая столицу, должно быть ровно k городов, к которым примыкает ровно одна дорога. Такие города являются тупиковыми и не могут быть экономически привлекательными. При подсчете таких городов столица не учитывается независимо от количества примыкающих дорог к ней.

Перед вами стоит задача предложить план постройки дорог, удовлетворяющий всем описанным условиям, либо сообщить, что это невозможно.

Входные данные

В первой строке следуют три целых положительных числа n, t и k (2 ≤ n ≤ 2·105, 1 ≤ t, k < n) — расстояние до максимально удалённого города от столицы и количество городов, которые должны быть тупиковыми (столица в этом количестве не учитывается).

Во второй строке следует последовательность из t целых чисел a1, a2, ..., at (1 ≤ ai < n), где i-е число равно количеству городов, которые должны находиться на расстоянии i от столицы. Гарантируется, что сумма всех значений ai равна n - 1.

Выходные данные

Если построить дороги, удовлетворяющие всем условиям, невозможно, выведите -1.

В противном случае, выведите в первую строку одно целое число n — количество городов в Берляндии. В следующей n - 1 строке выведите по два целых числа — номера городов, которые соединяет очередная дорога. Каждая дорога должна быть выведена ровно один раз. Порядок вывода дорог и соединяемых дорогой городов неважен.

Если решений несколько, выведите любое. Помните, что столица имеет номер 1.

C. Санта-Клаус и его Робот

Конструктив математика *1400

У Санта-Клауса есть Робот, который живёт на клетчатой плоскости и умеет перемещаться по линиям сетки. Если ему дать последовательность из m точек p1, p2, ..., pm с целыми координатами, то он сделает следующее: обозначим точку, в которой он сейчас находится, через p0. Тогда Робот сначала поедет по некоторому кратчайшему пути из p0 в p1 (обратите внимание, поскольку Робот ездит только по линиям сетки, кратчайших путей может быть несколько), затем, доехав до p1, поедет к точке p2, опять же, по какому-то кратчайшему пути, затем к точке p3, и так далее, пока не пройдёт все точки в заданном порядке. Некоторые из точек в последовательности могут совпадать, тогда Санта-Клаус должен посетить их несколько раз в порядке, соответствующем последовательности.

Пока Санта-Клауса не было, кто-то дал Роботу несколько точек. Эта последовательность точек была утерян, но у вас есть протокол перемещений Робота (каждое перемещение на единицу длины). Узнайте, пожалуйста, минимальную возможную длину последовательности, заданной Роботу.

Входные данные

В первой строке задано единственное натуральное число n (1 ≤ n ≤ 2·105) — число перемещений Робота на единичный отрезок. Во второй строке дан протокол перемещений Робота в виде n символов, каждый из которых равен L, R, U или D, записанных без пробелов. k-й символ означает, что на k-м шаге Робот переместился на единицу длины в направлении, соответствующем этому символу: L означает, что он двигался влево, R — вправо, U — вверх и D — вниз. Смотрите иллюстрации к примерам для большего понимания.

Выходные данные

В единственной строке выведите минимальную возможную длину последовательности, заданной Роботу.

Примечание

Ниже приведены иллюстрации к первым трём тестам.

Последний пример показывает, что каждая точка в последовательности должна быть посчитана столько раз, сколько она в ней встречается.

D. Санта-Клаус и палиндром

жадные алгоритмы Конструктив Структуры данных *2100

Санта-Клаус очень любит палиндромы. Недавно у него был день рождения. В гости к Санта-Клаусу пришли k друзей, каждый из них подарил ему строку si одной и той же длины n, красота i-й строки равна ai. Возможно, что ai является отрицательным — это значит, что строка не является красивой по мнению Санта-Клауса.

Санта-Клаус без ума от палиндромов. Ему стало интересно: какую максимальную суммарную красоту может иметь палиндром, если склеить какие-то (возможно все) из подаренных строк? Каждый подарок можно использовать не более одного раза. Обратите внимание, что все подаренные строки имеют одинаковую длину n.

Напоминаем, что палиндром — это строка, которая не изменится, если её развернуть задом наперёд.

Так как пустая строка является палиндромом, то искомая максимальная красота — неотрицательна. Даже если все ai отрицательны, Санта-Клаус может получить пустую строку в качестве палиндрома.

Входные данные

В первой строке задано два целых числа через пробел, k и n — количество друзей Санта-Клауса и длина строки, подаренной каждым другом (1 ≤ k, n ≤ 100 000; n·k  ≤ 100 000).

Далее следуют k строк. i-я из них содержит подаренную строку si и её красоту ai ( - 10 000 ≤ ai ≤ 10 000). Строка состоит из n строчных букв латинского алфавита, а её красота — целое число. Подаренные строки могут совпадать. Одинаковые строки могут иметь разную красоту.

Выходные данные

Выведите искомую максимальную суммарную красоту.

Примечание

В первом примере из условия Санта-Клаус может склеить палиндром abbaaaxyxaaabba, используя строки 5, 2, 7, 6, 3 (склеив их именно в этом порядке).

F. Санта-Клаусы и чемпионат по футболу

графы Деревья Конструктив поиск в глубину и подобное *2300

В Древляндии n городов, соединенных между собой n - 1 дорогой так, что из каждого города можно по дорогам добраться до любого другого. В следующем году в Древляндии пройдет чемпионат по футболу среди команд, состоящих из Санта-Клаусов. Всего в чемпионате примут участие 2k команд из 2k различных городов.

На первом этапе команды разобьются на k пар, каждая пара сыграет два матча: один в городе первой команды из пары, другой — в городе второй команды из пары. Таким образом, в каждом из 2k городов участников будет проведен ровно один матч. Однако как разбить команды на пары, пока не решено.

Перед организаторами также стоит задача определить, в каких городах расселить участников на время чемпионата. Организаторы хотят поселить команды в как можно меньшее число городов, чтобы Санта-Клаусы побольше общались друг с другом и обменивались опытом.

Никакая из команд не хочет чересчур много передвигаться во время турнира, поэтому если команда будет играть в городах u и v, то жить она хочет в городе, лежащем на кратчайшем пути из u в v (в том числе, возможно, в городе u или городе v). Также команды из одной пары необходимо расселить в одном городе.

Таким образом, организаторы турнира хотят разбить 2k команд на пары и расселить участников по минимально возможному числу m городов так, чтобы команды из одной пары жили в одном городе, и чтобы для каждой команды город, в котором она будет жить во время турнира, лежал на кратчайшем пути между городами, в которых она будет играть.

Входные данные

В первой строке заданы два целых числа n и k (2 ≤ n ≤ 2·105, 2 ≤ 2k ≤ n) — количество городов в Древляндии и количество пар команд в турнире.

Следующие n - 1 строк задают описание дорог в Древляндии, каждая из них содержит два целых числа a, b (1 ≤ a, b ≤ n, a ≠ b), что значит, что города a и b соединены очередной дорогой. Гарантируется, что из любого города можно добраться в любой другой по дорогам.

Следующая строка содержит 2k различных целых чисел c1, c2, ..., c2k (1 ≤ ci ≤ n), где ci — город, из которого команда номер i. Все эти числа различны.

Выходные данные

В первой строке выведите целое число m — минимальное количество городов, по которым можно расселить участников.

Во второй строке выведите m различных чисел чисел d1, d2, ..., dm (1 ≤ di ≤ n) — номера городов, в которых будут жить участники.

Далее выведите k строк. В j-й из них выведите 3 числа uj, vj, xj, где uj и vj — города, в которых будет играть j-я пара, а xj — номер города, в котором будут жить команды этой пары. Каждое из чисел c1, c2, ..., c2k должно встретиться среди чисел uj и vj ровно один раз. Каждое из чисел xj должно принадлежать множеству {d1, d2, ..., dm}.

Если оптимальных ответов несколько, выведите любой из них.

Примечание

В первом тесте из условия можно расселить всех участников в один город с номером 2. Разбить на пары можно любым образом, при этом все условия всегда будут выполнены, т. к. город 2 лежит на кратчайшем пути между любой парой городов из множества {2, 4, 5, 6}.

B. Параллелограмм возвращается

геометрия Конструктив Перебор *1200

Давным-давно Лёша придумал задачу про параллелограмм. Входными данными в этой задаче являлись четыре целочисленные точки на плоскости, определяющие множество вершин некоторого параллелограмма ненулевой площади, не обязательно в порядке обхода.

У Лёши был очень хороший тест на эту задачу, но так получилось, что в файле с этим тестом была стёрта последняя строчка, так что вместо четырех точек осталось всего три. Но тест был настолько хороший, и он так сильно нужен Лёше, что он просит вас восстановить его.

Входные данные

Входные данные содержат три строки, в каждой из которых записаны два целых числа — координаты xi и yi ( - 1000 ≤ xi, yi ≤ 1000). Эти три точки не лежат на одной прямой, и никакие две из них не совпадают.

Выходные данные

В первой строке выведите число k — количество вариантов добавить к данным трём точкам четвёртую точку с целочисленными координатами так, чтобы получившееся множество точек определяло вершины некоторого параллелограмма ненулевой площади (точки не обязательно должны следовать в порядке обхода).

Далее выведите k строк, в каждой по два целых числа — координаты четвёртой точки.

Примечание

Если вам требуется пояснение о том, что такое параллелограмм, посмотрите соответствующую статью в Википедии:

https://ru.wikipedia.org/wiki/Параллелограмм

F. Новый год и поиск корня

Деревья интерактив Конструктив реализация *2800

Это интерактивная задача. В секции «Протокол взаимодействия» вы найдёте информацию о том, как сбрасывать буфер вывода (делать операцию 'flush').

Новогоднее дерево высоты h является полным двоичным деревом, вершины которого некоторым образом пронумерованы от 1 до 2h - 1. В данной задаче мы будем считать, что h не меньше 2. Рисунок ниже изображает пример новогоднего дерева высоты 3:

Полярные медведи очень любят украшать новогодние деревья, и Лимак конечно же не исключение. Чтобы украсить дерево, ему требуется сначала найти его корень, то есть вершину у которой ровно два соседа (предполагая, что h ≥ 2). Маленькому медвежонку будет крайне непросто это сделать, так как он не может окинуть взглядом всё дерево. Сможете ли вы ему помочь?

Входных данные содержат t тестовых примеров. В начале каждого тестового примера на ввод подаётся единственное число h. Далее вы можете сделать не более 16 запросов в формате «? x», где x — некоторое целое число от 1 до 2h - 1 включительно. В качестве ответа вам будет дан список всех соседей вершины x (подробнее смотрите секцию «Протокол взаимодействия»). Например если про дерево с картинки выше сделать запрос «? 1», то в качестве ответа будут получены 3 его соседа: 4, 5 и 7. Ваша задача — найти индекс корневой вершины y и сообщить его в формате запроса «! y». Вы сможете считать значение h для следующего тестового примера только после вывода ответа для предыдущего примера и выполнения операции 'flush'.

В каждом тестовом примере дерево фиксировано с самого начала и не изменяется в зависимости от запросов.

Входные данные

В первой строке ввода содержится единственное целое число t (1 ≤ t ≤ 500) — количество тестовых примеров.

В начале обработки каждого тестового примера следует считать из ввода целое число h (2 ≤ h ≤ 7) — высоту дерева. Вы не сможете считать значение h для следующего примера, пока не дадите ответ на текущий.

Протокол взаимодействия

Чтобы запросить список соседей вершины x выведите «? x» (без кавычек) в отдельной строке. Не забудьте вывести символ конца строки и выполнить операцию 'flush' чтобы получить ответ.

Ответ на запрос состоит из двух строк. В первой из них записано целое число k (1 ≤ k ≤ 3) — количество соседей вершины x. Во второй строке записаны k различных целых чисел t1, ..., tk (1 ≤ t1 < ... < tk ≤ 2h - 1) — индексы вершин смежных вершине x, перечисленные в порядке возрастания.

Сделав не более 16 запросов для одного тестового примера вы должны сообщить y — индекс корня дерева. Выведите «! y» (без кавычек) и символ конца строки, после чего выполните операцию 'flush'.

В каждом тестовом примере дерево фиксировано с самого начала и не изменяется в зависимости от запросов.

Если вы ничего не выведите или забудете сделать операцию 'flush', то можете получить вердикт Idleness Limit Exceeded.

Для сброса буфера вывода (то есть для операции 'flush') сразу после вывода числа или ответа и перевода строки можно сделать:

  • fflush(stdout) в языке C++;
  • System.out.flush() в Java;
  • stdout.flush() в Python;
  • flush(output) в Pascal;
  • смотрите документацию для других языков.

Если в любой момент ваша программа считает h = 0 или k = 0 она должна немедленно завершиться с нулевым кодом возврата (например, вызовом exit(0)). Это означает, что проверяющая программа обнаружила некорректный запрос или вывод и вывела 0, так как не может дальше обрабатывать запросы. В этом случае вы получите вердикт «Wrong Answer», но если ваша программа не завершится после считывания h = 0 или k = 0 то это может привести к получению вердиктов «Runtime Error», «Time/Memory limit exceeded» или любых других поскольку ваша программа продолжит считывать мусор из уже закрытого потока ввода.

Взломы. Для взломов не разрешается использовать мультитест. Чтобы совершить взлом, используйте следующий формат входных данных:

В первой строке следует записать одно целое число t равное 1.

Во второй строке должно быть записано одно целое число h. В каждой из последующих 2h - 2 строк должна быть записана пара целых чисел ai и bi (1 ≤ ai, bi ≤ 2h - 1), означающая что две вершины с данными индексами соединены ребром. Выведенный набор рёбер должен задавать полное двоичное дерево высоты h.

Разумеется, это описание дерева не будет доступно взламываемому участнику.

Примечание

В первом примере дерево соответствует изображённому на рисунке в условии.

Второй пример состоит из двух наборов входных данных. Дерево в первом из них имеет высоту 2 и содержит 3 вершины. Дерево во втором примере имеет высоту 4 и содержит 15 вершин. Оба дерева изображены на рисунке ниже.

B. Интерактивные быки и коровы (простая версия)

Конструктив Перебор реализация *1600

Эта задача слегка необычна, она интерактивная. В ней вы должны реализовать взаимодействие с тестирующей системой. Это означает, что ваша программа может осуществлять запросы и получать ответы в режиме онлайн. Пожалуйста, используйте операции отчистки буфера вывода после вывода каждого вашего запроса. Например, в C++ можно использовать fflush(stdout), в Java вызов System.out.flush(), а в Pascal — flush(output).

«Быки и коровы» — это логическая игра для двух игроков, вариация коммерческой настольной игры Mastermind.

Первый игрок загадывает секретную строку, которая состоит из 4 различных цифр. Строка может начинаться с 0.

Затем второй игрок отгадывает загаданную секретную строку, делая попытки. Каждая попытка — это строка из четырех цифр. Если совпадение произошло и в позиции и по значению, то говорят, что встретился «бык», а если совпадение произошло по значению, но не по позиции, то встретилась «корова». Попытка может содержать одинаковые цифры.

Формально, допустим секретная строка это s, а попытка — это строка x. Тогда количество быков равно количеству таких позиций i (1 ≤ i ≤ 4), что s[i] = x[i]. Количество коров — это количество таких цифр c, что s содержит c в позиции i (то есть s[i] = c), x содержит c, но x[i] ≠ c.

Например, если секретная строка это «0427», а попытка второго игрока это «0724», то результат это 2 быка и 2 коровы (быки это "0" и "2", а коровы это "4" и "7"). Если секретная строка это «0123», а попытка второго игрока равна «0330», тогда результат это 1 бык и 1 корова.

В этой задаче вам надо отгадать секретную строку s, которая была загадана тестирующей системой. Загаданная строка состоит из 4 цифр, все цифры в ней различны.

Вы можете делать попытки, посылая строки из 4 цифр (не обязательно различных). Результатом на запрос является количество быков и коров. Если ответ системы равен "4 0", то значит вы отгадали секретную строку и ваша программа должна завершить своё исполнение обычным образом. Кроме того, в вашу программу будет отправлено "4 0", если вы слелали некорректный ход. В этом случае программу также надо завершить обычным образом, а вердикт на этот тест будет «неправильный ответ».

Ваша программа должна совершить не более 50 запросов.

Вы можете взламывать решения других участников, задавая 4-цифренную секретную строку (все цифры должны быть различны).

Входные данные

Для того, чтобы читать ответы на запросы ваша программа должна использовать стандартный ввод.

Программа будет получать пары неотрицательных целых чисел, по одной паре в строке. Первое число в паре — количество быков, второе — коров. Если пришла пара "4 0", то ваша программа должна завершить исполнение.

Тестирующая система даст прочитать очередную пару только после записи в стандартный вывод соответствующего запроса (не забудьте после вывода запроса сделать flush).

Выходные данные

Программа должна использовать стандартный вывод, чтобы осуществлять запросы.

Каждый запрос — это строка из 4 цифр. После вывода строки осуществите операцию flush. После вывода запроса программа должна прочитать результат из стандартного ввода.

Программа может сделать не более 50 запросов.

Примечание

Секретная строка s в примере это «0123».

C. Интерактивные быки и коровы (усложненная версия)

интерактив Конструктив Перебор *2500

Единственное отличие этой задачи от предыдущей — это ограничение на количество запросов. В этой задаче оно равно 7.

Эта задача слегка необычна, она интерактивная. В ней вы должны реализовать взаимодействие с тестирующей системой. Это означает, что ваша программа может осуществлять запросы и получать ответы в режиме онлайн. Пожалуйста, используйте операции отчистки буфера вывода после вывода каждого вашего запроса. Например, в C++ можно использовать fflush(stdout), в Java вызов System.out.flush(), а в Pascal — flush(output).

«Быки и коровы» — это логическая игра для двух игроков, вариация коммерческой настольной игры Mastermind.

Первый игрок загадывает секретную строку, которая состоит из 4 различных цифр. Строка может начинаться с 0.

Затем второй игрок отгадывает загаданную секретную строку, делая попытки. Каждая попытка — это строка из четырех цифр. Если совпадение произошло и в позиции и по значению, то говорят, что встретился «бык», а если совпадение произошло по значению, но не по позиции, то встретилась «корова». Попытка может содержать одинаковые цифры.

Формально, допустим секретная строка это s, а попытка — это строка x. Тогда количество быков равно количеству таких позиций i (1 ≤ i ≤ 4), что s[i] = x[i]. Количество коров — это количество таких цифр c, что s содержит c в позиции i (то есть s[i] = c), x содержит c, но x[i] ≠ c.

Например, если секретная строка это «0427», а попытка второго игрока это «0724», то результат это 2 быка и 2 коровы (быки это "0" и "2", а коровы это "4" и "7"). Если секретная строка это «0123», а попытка второго игрока равна «0330», тогда результат это 1 бык и 1 корова.

В этой задаче вам надо отгадать секретную строку s, которая была загадана тестирующей системой. Загаданная строка состоит из 4 цифр, все цифры в ней различны.

Вы можете делать попытки, посылая строки из 4 цифр (не обязательно различных). Результатом на запрос является количество быков и коров. Если ответ системы равен "4 0", то значит вы отгадали секретную строку и ваша программа должна завершить своё исполнение обычным образом. Кроме того, в вашу программу будет отправлено "4 0", если вы слелали некорректный ход. В этом случае программу также надо завершить обычным образом, а вердикт на этот тест будет «неправильный ответ».

Ваша программа должна совершить не более 7 запросов.

Вы можете взламывать решения других участников, задавая 4-цифренную секретную строку (все цифры должны быть различны).

Входные данные

Для того, чтобы читать ответы на запросы ваша программа должна использовать стандартный ввод.

Программа будет получать пары неотрицательных целых чисел, по одной паре в строке. Первое число в паре — количество быков, второе — коров. Если пришла пара "4 0", то ваша программа должна завершить исполнение.

Тестирующая система даст прочитать очередную пару только после записи в стандартный вывод соответствующего запроса (не забудьте после вывода запроса сделать flush).

Выходные данные

Программа должна использовать стандартный вывод, чтобы осуществлять запросы.

Каждый запрос — это строка из 4 цифр. После вывода строки осуществите операцию flush. После вывода запроса программа должна прочитать результат из стандартного ввода.

Программа может сделать не более 7 запросов.

Примечание

Секретная строка s в примере это «0123».

A. Леша и разбиение массива

жадные алгоритмы Конструктив реализация *1200

Одним весенним днем, идя в университет, Леша нашел массив A. Леша очень любит разбивать массив на несколько частей. В этот раз он решил, что неплохо было бы найти разбиение массива A на несколько, а возможно и на один, новых массивов, причем чтобы сумма элементов в каждом новом массиве не была равна нулю. Ещё одним необходимым условием является то, что при склейке новых массивов должен получиться старый массив A.

Леша очень устал после университета, и поэтому разбиение массива было поручено вам. Помогите Леше!

Входные данные

В первой строке входных данных находится одно целое число n (1 ≤ n ≤ 100) — количество элементов в массиве A.

В следующей строке входных данных находятся n целых чисел a1, a2, ..., an ( - 103 ≤ ai ≤ 103) — элементы массива A.

Выходные данные

Если необходимого разбиения массива A не существует, то в единственной строке выходных данных выведите «NO» (без кавычек).

Иначе в первой строке строке выходных данных выведите «YES» (без кавычек). В следующей строке выходных данных следует вывести целое число k — количество массивов в разбиении. В каждой из следующих k строк следует вывести пару целых чисел li, ri, означающих, что подотрезок A[li... ri] исходного массива A является i-м массивом в разбиении. Числа li, ri должны удовлетворять следующим условиям:

  • l1 = 1
  • rk = n
  • ri + 1 = li + 1, для всех 1 ≤ i < k.

Если ответов несколько, то выведите любой.

C. Владик и чат

дп Конструктив Перебор реализация Строки *2200

Недавно Владик нашел себе новое увлечение — написание ботов для социальных сетей. Ботов он хочет писать не простых, а с использованием машинного обучения. Поэтому он собрался обучать ботов на данных.

Первым делом он решил выкачать t чатов. Владик написал скрипт, который должен был выкачать все чаты. По каким-то неизвестным причинам переписки выкачались неполными, а точнее у некоторых сообщений оказался неизвестен отправитель. Зато известно, что если пользователь отсылал несколько сообщений подряд, то они объединялись в одно. То есть нет двух подряд сообщений в одном чате с одним и тем же автором. Ещё известно, что отправитель сообщения не упоминал себя в сообщении.

Владик хочет восстановить отправителя для каждого сообщения с неизвестным отправителем, так чтобы у любых двух последовательных сообщений одного чата были разные отправители, и никакой отправитель не упоминал бы себя в своих сообщениях.

Он не придумал как это делать, поэтому просит вас помочь ему. Помогите Владику восстановить отправителей сообщений для каждого чата!

Входные данные

В первой строке входных данных находится единственное целое число t (1 ≤ t ≤ 10) — количество выкачанных чатов. Далее задано t чатов. Каждый чат задан в следующем формате.

В первой строке каждого описания записано целое число n (1 ≤ n ≤ 100) — количество пользователей в чате.

В следующей строке находятся n различных имен пользователей разделенных пробелом. Каждое имя пользователя состоит из прописных и строчных латинских букв и цифр, причем имя не может начинаться на цифру. Два имени пользователя различаются даже тогда, когда они различаются только регистром букв. Длина имени положительна и не превышает 10 символов.

В следующей строке дано целое число m (1 ≤ m ≤ 100) — количество сообщений в чате. В следующих m строках находятся сообщения в одном из следующих форматов, по одному на строке:

  • <имя отправителя>:<текст сообщения> — формат сообщения, для которого известен отправитель. Имя отправителя должно присутствовать в списке имен пользователей чата.
  • <?>:<текст сообщения> — формат сообщения, для которого неизвестен отправитель.

Текст сообщения может состоять из маленьких и больших латинских букв, цифр, '.' (точка), ',' (запятая), '!' (восклицательный знак), '?' (вопросительный знак) или ' ' (пробел). Текст сообщения не содержит пробелов в конце. Длина текста сообщения положительна и не превышает 100 символов.

Определим, что значит упоминание пользователя в сообщении. Пользователь упоминается в сообщении, если он содержится в сообщении в качестве слова. Иными словами так, что соседний слева и соседний справа от имени символы либо отсутствуют либо не равны латинской букве и цифре. Например, сообщение «Vasya, masha13 and Kate!» может содержать упоминания пользователей «Vasya», «masha13», «and» и «Kate», но не «masha».

Гарантируется, что в каждом чате, заданном во входных данных, для всех известных пользователей выполняется, что пользователь не упоминает сам себя в сообщении и нет двух подряд идущих сообщений с одним и тем же известным отправителем.

Выходные данные

Во входные данные следует вывести информацию о t чатах в следующем формате:

Если нет ни одного способа восстановить неизвестных отправителей в чате, то для такого чата следует вывести «Impossible». Иначе следует вывести m сообщений в формате:

<имя отправителя>:<текст сообщения>

Если возможных ответов несколько, следует вывести любой.

E. Польшар и Бело-красный граф

графы Конструктив кратчайшие пути *2400

У Польшара есть неориентированный простой граф из n вершин. К сожалению, в графе нет ребер, и граф очень расстроен этим. Польшар хочет сделать его счастливее, добавив несколько красных ребер. Затем он добавит белые ребра на каждое оставшееся место. В итоге граф будет полным графом из красных и белых ребер.

Красочностью графа называют величину min(dr, dw), где dr — диаметр красного подграфа, а dw — диаметр белого подграфа. Диаметр графа — это максимальное натуральное число d такое, что длина кратчайшего пути между некоторой парой вершин равна d. Если граф несвязен, мы будем считать его диаметр равным -1.

Польшар хочет, чтобы его граф был как можно более изящен. А именно, он хочет, чтобы красочность графа была равна k. Можете помочь ему и найти любой граф, удовлетворяющий запросам Польшара?

Входные данные

В единственной строке находятся два числа n и k (2 ≤ n ≤ 1000, 1 ≤ k ≤ 1000) — размер графа и искомая красочность.

Выходные данные

Если подходящих графов не существует, выведите -1.

Иначе, выведите любой граф, удовлетворяющий требованиям Польшара. Сначала выведите m — число красных ребер в графе. Затем, выведите m строк, каждая из которых содержит два числа ai и bi, (1 ≤ ai, bi ≤ n, ai ≠ bi) которые означают, что в графе есть красное ребро между вершинами ai и bi. Каждое красное ребро должно быть выведено один раз, порядок вывода ребер и вершин в ребре не важен.

Помните, что граф Польшара должен остаться простым, а значит, петли и кратные ребра запрещены.

Примечание

В первом примере не существует подходящего графа.

Во втором примере, красный подграф представляет собой путь между вершинами 1 и 5. Его диаметр равен 4. Однако, диаметр белого подграфа равен 2, т. к. он содержит ребра 1-3, 1-4, 1-5, 2-4, 2-5, 3-5.

A. Паша и шашлыки

Конструктив поиск в глубину и подобное *1700

Паша жарит шашлыки. Всего есть n шампуров, они лежат на мангале в ряд, каждый на одной из n позиций. Паша хочет, чтобы все прожарилось равномерно, а для этого надо, чтобы каждый шампур полежал на каждой из n позиций в двух положениях: так, как он лежал изначально, и развернутым задом наперед.

Для этого у Паши есть план, а именно перестановка p и последовательность b1, b2, ..., bn, состоящая из нулей и единиц. Каждую секунду Паша перекладывает шампур на месте i на место pi, и, если bi равно 1, то разворачивает его. Таким образом он надеется, что все шампуры побывают на всех позициях, каждый в двух положениях.

К сожалению, не всякая перестановка p и последовательность b подходят для плана Паши. Какое минимальное суммарное количество элементов в перестановке p и элементов в последовательности b ему надо изменить, чтобы каждый шампур побывал во всех 2n положениях? При этом перестановка должна остаться перестановкой.

Пашу не беспокоит, если шампур примет одно и тоже положение несколько раз прежде, чем он закончит жарить шашлыки. Иными словами, перестановка p и последовательность b ему подходят, если существует такое число k (k ≥ 2n), что после k секунд каждый шампур побывает в каждом из 2n положений.

Можно показать, что некоторая подходящая перестановка p и последовательность b существуют для любого n.

Входные данные

В первой строке следует целое положительное число n (1 ≤ n ≤ 2·105) — количество шампуров.

Во второй строке следует последовательность различных целых чисел p1, p2, ..., pn (1 ≤ pi ≤ n) — перестановка, в соответствии с которой Паша будет перемещать шашлык на шампурах.

В третьей строке следует последовательность b1, b2, ..., bn, состоящая из нулей и единиц, в соответствии с которой Паша будет переворачивать шампуры.

Выходные данные

Выведите целое число — минимальное суммарное количисло элементов в перестановке p и элементов в последовательности b нужно изменить Паше, чтобы каждый шампур побывал во всех 2n положениях.

Примечание

В первом примере можно изменить перестановку на 4, 3, 1, 2.

Во втором примере можно любой из элементов последовательности b изменить на 1.

C. Несправедливый опрос

Бинарный поиск Конструктив математика реализация *1700

На уроке литературы Серёжа заметил чудовищную несправедливость, ему кажется, что некоторых учеников спрашивают чаще чем других.

Рассадка в классе представляет собой прямоугольник, в котором n рядов по m учащихся в каждом.

Учительница опрашивает учеников в следующем порядке: сначала она спрашивает всех учеников с первого ряда в порядке их рассадки на ряду, после опроса всех учеников на очередном ряду она переходит к следующему, по порядку следования опроса, ряду. Если учительница опросила последний ряд, то направление опроса сменяется, то есть опрашивается предыдущий ряд. Порядок опроса рядов выглядит следующим образом: 1-й ряд, 2-й ряд, ..., n - 1-й ряд, n-й ряд, n - 1-й ряд, ..., 2-й ряд, 1-й ряд, 2-й ряд, ...

Порядок опроса учеников на одном ряду всегда один и тот же: 1-й ученик, 2-й ученик, ..., m-й ученик.

За урок учительница успела опросить ровно k вопросов у учеников в порядке описанном выше. Серёжа сидит в x-м ряду, на y-м по порядку месте. Сергей решил доказать учителю, что ученики опрашиваются неравномерно, помогите ему вычислить три величины:

  1. максимальное количество вопросов, заданных одному из учеников,
  2. минимальное количество вопросов, заданных одному из учеников,
  3. сколько раз учительница спросила Серёжу.

Если в классе только один ряд, то учительница всегда опрашивает детей с него.

Входные данные

Первая и единственная строка содержит пять целых чисел n, m, k, x и y (1 ≤ n, m ≤ 100, 1 ≤ k ≤ 1018, 1 ≤ x ≤ n, 1 ≤ y ≤ m).

Выходные данные

Выведите три числа:

  1. максимальное количество вопросов, заданных одному из учеников,
  2. минимальное количество вопросов, заданных одному из учеников,
  3. сколько раз учительница спросила Серёжу.
Примечание

Порядок опроса учеников в первом тесте:

  1. ученик с первого ряда сидящий за первой партой, то есть Серёжа;
  2. ученик с первого ряда сидящий за второй партой;
  3. ученик с первого ряда сидящий за третьей партой;
  4. ученик с первого ряда сидящий за первой партой, то есть Серёжа;
  5. ученик с первого ряда сидящий за второй партой;
  6. ученик с первого ряда сидящий за третьей партой;
  7. ученик с первого ряда сидящий за первой партой, то есть Серёжа;
  8. ученик с первого ряда сидящий за второй партой;

Порядок опроса учеников во втором тесте:

  1. ученик с первого ряда сидящий за первой партой;
  2. ученик с первого ряда сидящий за второй партой;
  3. ученик со второго ряда сидящий за первой партой;
  4. ученик со второго ряда сидящий за второй партой;
  5. ученик с третьего ряда сидящий за первой партой;
  6. ученик с третьего ряда сидящий за второй партой;
  7. ученик с четвёртого ряда сидящий за первой партой;
  8. ученик с четвёртого ряда сидящий за второй партой, то есть Серёжа;
  9. ученик с третьего ряда сидящий за первой партой;

D. Умение переводить

дп жадные алгоритмы Конструктив математика Строки *2000

Александр учится переводить числа из десятичной системы счисления в любую другую, однако он не знает латинских букв, поэтому любую цифру он записывает только десятичным числом, то есть вместо буквы A он запишет число 10. Таким образом, переводя число 475 из десятичной системы в шестнадцатеричную, он получил 11311 (475 = 1·162 + 13·161 + 11·160). Александр жил спокойно, пока не попробовал перевести число обратно в десятичную систему счисления.

Саша помнит, что работал с небольшими числами, поэтому просит найти минимальное десятичное число, при переводе которого в систему счисления с основанием n он получил бы число k.

Входные данные

Первая строка входных данных содержит целое число n (2 ≤ n ≤ 109). Вторая строка входных данных содержит целое число k (0 ≤ k < 1060), гарантируется, что число k содержит не больше 60 символов. Все цифры во второй строке строго меньше n.

Александр гарантирует, что ответ существует и не превосходит 1018.

Число k не содержит лидирующих нулей.

Выходные данные

Выведите число x (0 ≤ x ≤ 1018) — ответ на задачу.

Примечание

В первом тесте 12 могло получится при переводе двух чисел в 13-ричную систему счисления 12 = 12·130 или 15 = 1·131 + 2·130.

A. Даша и лестница

Конструктив математика Перебор реализация *1000

По пути на занятия по программированию тигра Дашу ждало первое испытание — огромная лестница!

Ступеньки лестницы были пронумерованы, начиная с единицы до бесконечности. Как известно, тигры очень любят все чередующееся, не исключено, что это как-то связано с их окраской. Поэтому на некотором отрезке своего пути она посчитала два числа — количество ступенек с чётными и нечётными номерами.

Вам необходимо проверить, существует ли такой промежуток ступенек c l-й по r(1 ≤ l ≤ r), для которого числа, посчитанные Дашей, верны.

Входные данные

В единственной строке вам заданы два целых числа a, b (0 ≤ a, b ≤ 100) — количество чётных и нечётных ступенек соответственно.

Выходные данные

В единственной строке выходных данных выведите «YES», если отрезок ступенек, описанный входными данными существует, и «NO» в противном случае.

Примечание

В первом примере один из подходящих промежутков от 1 до 5. В этом интервале две четные ступеньки — 2 и 4, и три нечетных: 1, 3 и 5.

D. Даша и очень сложная задача

Бинарный поиск жадные алгоритмы Конструктив Перебор сортировки *1700

Войдя в систему, Даша принялась решать задачи. Одна из них звучала следующим образом:

По данным двум последовательностям a и b длины n необходимо построить последовательность c длины n, i-й элемент которой вычисляется следующим образом: ci = bi - ai.

Об a и b также известно, что их элементы лежат в интервале от l до r. Более формально, выполняются равенства l ≤ ai ≤ r и l ≤ bi ≤ r. Про последовательность c известно, что все ее элементы различны.

Решение задачи Даша написала быстро, но вот проверить ее работу на стандартном тесте оказалось не так просто. Из-за ошибки в системе тестирования из теста была известна только последовательность a и сжатая последовательность последовательности c.

Дадим определение сжатой последовательности. Сжатой последовательностью последовательности c длины n будем считать такую последовательность p длины n, что pi равно количеству чисел, меньше либо равных чем ci, в последовательности c. К примеру, для последовательности c = [250, 200, 300, 100, 50] сжатой последовательностью является p = [4, 3, 5, 2, 1]. Обратите внимание, что в c все числа различны. Следовательно, сжатая последовательность содержит все числа от 1 до n включительно.

Помогите Даше найти любую последовательность b, для которой посчитанная сжатая последовательность последовательности c верна.

Входные данные

В первой строке находятся три целых числа n, l, r (1 ≤ n ≤ 105, 1 ≤ l ≤ r ≤ 109) — длина последовательностей и границы отрезка, в котором лежат элементы a и b.

В следующей строке входных данных находятся n целых чисел a1,  a2,  ...,  an (l ≤ ai ≤ r) — элементы последовательности a.

В следующей строке входных данных находятся n различных целых чисел p1,  p2,  ...,  pn (1 ≤ pi ≤ n)сжатая последовательность последовательности c.

Выходные данные

Если подходящей последовательности b не существует, то в единственной строке выходных данных выведите «-1».

Иначе в единственной строке выходных данных должно содержаться n целых чисел — элементы любой подходящей последовательности b.

Примечание

Найденная во втором примере последовательность b является подходящей, потому что построенная последовательность c = [2 - 3, 2 - 4, 2 - 8, 9 - 9] = [ - 1,  - 2,  - 6, 0] (напомним, что ci = bi - ai) имеет сжатую последовательность равную p = [3, 2, 1, 4].

E. Даша и головоломка

графы Деревья жадные алгоритмы Конструктив поиск в глубину и подобное *2000

После решения задачи, Даша решила отдохнуть. Она уже была готова приступить к своему любимому занятию — оригами, но вспомнила о головоломке которую не смогла решить.

Дерево — это неориентированный связный граф без циклов. В частности, в дереве из n вершин всегда n - 1 ребро.

Головоломка заключалась в расположении вершин в точках декартовой плоскости с целочисленными координатами, так чтобы проведенные отрезки между вершинами соединенными ребрами были параллельны осям координат. Также пересечение отрезков допускается только на их концах. Различным вершинам должны соответствовать различные точки.

Помогите Даше найти любой из искомых способов расположения вершин дерева на плоскости.

Гарантируется, что если можно расположить вершины дерева на плоскости не нарушив условия выше, то это можно сделать воспользовавшись точками с целочисленными координатами по модулю не превышающими 1018.

Входные данные

Первая строка входных данных содержит одно целое число n (1 ≤ n ≤ 30) — количество вершин в дереве.

Следующие n - 1 строк содержат по два целых числа ui, vi (1 ≤ ui, vi ≤ n), которые означают, что i-е ребро дерева соединяет вершины ui и vi.

Гарантируется что описанный граф является деревом.

Выходные данные

Если головоломка не имеет решения, то в единственной строке выходных данных выведите «NO».

Иначе, первая строка выходных данных должна содержать «YES». В следующих n строках должна содержаться пара чисел xi, yi (|xi|, |yi| ≤ 1018) — координаты точки соответствующей i-ой вершине дерева.

Если решений несколько, выведите любое.

Примечание

В первом примере одним из возможных размещений дерева будет следующее:

B. Тимофей и прямоугольники

геометрия Конструктив *2100

Одним из подарков Тимофею на день рождения была раскраска. Она была устроена следующим образом: плоскость, на которой отмечены n прямоугольников со сторонами, параллельными осям координат. Все прямоугольники имеют стороны нечетной длины. Никакие два прямоугольника не пересекаются, но могут касаться.

Помогите Тимофею раскрасить все прямоугольники в 4 цвета так, чтобы никакие два касающихся сторонами не были одного цвета, или скажите, что это невозможно.

Два прямоугольника пересекаются, если их пересечение имеет ненулевую площадь. Два прямоугольника касаются сторонами, если пересечение некоторой пары их сторон имеет ненулевую длину.

Рисунок соответствует первому тесту из условия
Входные данные

Первая строка содержит одно натуральное число n (1 ≤ n ≤ 5·105) — количество прямоугольников.

Далее следуют n строк. В i-й из этих строк содержатся четыре целых числа x1, y1, x2 и y2 ( - 109 ≤ x1 < x2 ≤ 109,  - 109 ≤ y1 < y2 ≤ 109), означающие, что противоположные угла i-го прямоугольника находятся в точках с координатами (x1, y1) и (x2, y2).

Гарантируется, что все длины всех сторон прямоугольников нечетны, и никакие два прямоугольника не пересекаются.

Выходные данные

В первой строке выведите «NO», если невозможно покрасить прямоугольники в 4 цвета так, чтобы никакие два касающихся не были одного цвета.

В противном случае выведите в первой строке «YES». Далее выведите n строк, в i-й из них выведите одно натуральное число ci (1 ≤ ci ≤ 4) — цвет i-ого прямоугольника.

B. Тимофей и кубики

Конструктив реализация *900

У маленького Тимофея день рождения! В этот прекрасный день родители подарили ему набор из n кубиков. На каждом кубике было написано некоторое число ai. Тимофей выложил все кубики в ряд и ушел распаковывать остальные подарки.

В это время старший брат Тимофея Дима взял и переложил кубики по следующему правилу. Предположим, кубики пронумерованы от 1 до n по порядку. Тогда на i-м шаге Дима развернул отрезок кубиков с i-го по (n - i + 1)-й, и так пока i ≤ n - i + 1.

После этого Дима с чистой совестью ушел гулять. Когда маленький Тимофей вернулся, он заметил, что кубики лежат не так, как раньше, и очень расстроился. Помогите Тимофею как можно скорее и спасите праздник — восстановите исходный ряд кубиков по ряду, оставленному Димой.

Входные данные

Первая строка содержит одно целое число n (1 ≤ n ≤ 2·105) — число кубиков.

Во второй строке находятся n целых чисел a1, a2, ..., an ( - 109 ≤ ai ≤ 109), где ai — число, написанное на i-м кубике после перестановок, сделанных Димой.

Выходные данные

Выведите через пробел n чисел — числа, написанные на кубиках в исходном порядке.

Можно показать, что существует ровно один ответ.

Примечание

Рассмотрим первый пример.

  1. Сначала у нас был ряд [2, 3, 9, 6, 7, 1, 4].
  2. После первой операции ряд стал [4, 1, 7, 6, 9, 3, 2].
  3. После второй операции ряд стал [4, 3, 9, 6, 7, 1, 2].
  4. После третьей операции ряд стал [4, 3, 7, 6, 9, 1, 2].
  5. Во время четвертой операции повернулся только центральный элемент, поэтому ряд остался таким же, а именно [4, 3, 7, 6, 9, 1, 2]. Значит, ряд [2, 3, 9, 6, 7, 1, 4] является ответом.

D. Артем и Сандерс

Конструктив математика снм *1700

У Артема есть друг Сандерс из университета Чикаго. Сандерс предложил Артему следующую задачу.

Обозначим за [n] множество {1, ..., n}. Также мы будем использовать обозначение f: [x] → [y], чтобы показать, что функция f имеет значения в точках 1, ..., x, и все эти значения — целые числа от 1 до y.

Итак, вам дана функция f: [n] → [n]. Ваша задача в том, чтобы найти целое положительное число m и две функции g: [n] → [m], h: [m] → [n], такие что g(h(x)) = x для всех и h(g(x)) = f(x) для всех , либо определите, что найти их невозможно.

Входные данные

В первой строке входного файла содержится целое число n (1 ≤ n ≤ 105).

Во второй строке содержатся n целых чисел, разделённых пробелами — значения f(1), ..., f(n) (1 ≤ f(i) ≤ n).

Выходные данные

Если найти требуемые функции невозможно, выведите -1.

Иначе, на первой строке выведите число m (1 ≤ m ≤ 106). На второй строке выведите n чисел g(1), ..., g(n). На третьей строке выведите m чисел h(1), ..., h(m).

Если существует несколько верных ответов, вы можете вывести любой из них. Гарантируется, что если ответ существует, то также существует ответ, подходящий под указанные ограничения.

A. Махмуд и наибольшая не общая подпоследовательность

Конструктив Строки *1000

Когда Махмуд и Ехаб готовились к Международной олимпиаде по информатике, они встретились с задачей о наибольшей общей подпоследовательности. Они ее решили, а после этого Ехаб задал Махмуду другую задачу.

Дано две строки a и b, найдите длину их наибольшей не общей подпоследовательности, то есть такой строки, которая является подпоследовательностью одной строки и не является подпоследовательностью другой.

Подпоследовательность некоторой строки это последовательность букв, которая встречается в том же порядке в строке, не обязательно подряд. Например, строки «ac», «bc», «abc» и «a» являются подпоследовательностями строки «abc», а строки «abbc» и «acb» — нет. Пустая строка является подпоследовательностью любой строки, любая строка является подпоследовательностью ее самой.

Входные данные

Первая строка содержит строку a, а вторая строка — строку b. Обе строки не пусты и состоят из строчных букв латинского алфавита. Длина каждой строки не превышает 105.

Выходные данные

Если наибольшей не общей подпоследовательности не существует, выведите «-1».

Иначе выведите длину наибольшей не общей подпоследовательности строк a и b.

Примечание

В первом примере можно выбрать «defgh» из строки b как наибольшую подпоследовательность b, которая не встречается в строке a.

B. Махмуд и треугольник

геометрия жадные алгоритмы Конструктив математика сортировки теория чисел *1000

У Махмуда есть n отрезков, i-й из них имеет длину ai. Ехаб поспорил с ним, сможет ли он использовать ровно 3 отрезка для того, чтобы составить из них невырожеднный треугольник. Махмуд никогда не спорит, если не уверен, что может выиграть, поэтому он спросил вас, должен ли он принять этот вызов или нет. Вам даны длины отрезков, проверьте, можно ли выбрать ровно 3 из них, чтобы составить невырожденный треугольник.

Махмуд должен использовать ровно 3 отрезка, он не может составить отрезок из двух или изменять какие-либо длины. Невырожденным считается треугольник с положительной площадью.

Входные данные

Первая строка содержит целое число n (3 ≤ n ≤ 105) — число отрезков.

Вторая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109) — длины отрезков.

Выходные данные

В единственной строке выведите «YES», если можно выбрать ровно три отрезка и составить из них невырожденный треугольник, и «NO» иначе.

Примечание

В первом примере Махмуд может выбрать отрезки с длинами 2, 4 и 5 и составить из них невырожденный треугольник.

E. Махмуд и xor-поездка

битмаски Деревья дп Конструктив математика поиск в глубину и подобное Структуры данных *2100

Махмуд и Ехаб живут в стране, в которой n городов, пронумерованных от 1 до n, соединенных n - 1 двунаправленными дорогами. Гарантируется, что из любого города можно добраться в любой другой используя только эти дороги. Про каждый город известна некоторая величина ai.

Определим расстояние от города x до города y как xor чисел, известных про города на пути от x до y (включая как x, так и y). Другими словами, если мы выпишем все величины городов на пути от x до y в массив p длины l, то расстояние между ними будет равно , где  — операция побитовый xor.

Махмуд и Ехаб хотят выбрать два города и проехать от одного до другого. Номер города, в котором они стартуют, всегда не больше номера города, в котором они финишируют (они могут стартовать и закончить в одном и том же городе, тогда расстояние будет равно величине, известной про этот город). Они никак не могут выбрать эти два города, поэтому они попробуют каждый город как старт и каждый город с не меньшим индексом как финиш. Определите суммарное расстояние между всеми этими парами городов.

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 105) — число городов в стране Махмуда и Ехаба.

Вторая строка содержит n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 106), которые описывают величины, известные про города. Величина ai известна про город i.

Каждая из следующих n  -  1 строк содержит два числа u и v (1  ≤  u,  v  ≤  n, u  ≠  v), означающие, что между городами u и v существует двунаправленная дорога. Гарантируется, что можно доехать от любого города до любого другого по данным дорогам.

Выходные данные

Выведите одно число — суммарное расстояние между всеми возможными парами городов.

Примечание

Операция побитовый xor принимает два целых битовых числа одинаковой длины и выполняет логическую операцию xor на каждой паре соответсвующих бит. Результат в позиции равен 1, если и только если только первый бит 1 или только второй бит 1, и результат равен 0 если оба бита 0 или оба бита 1. Больше информации о побитовом xor можно найти здесь: https://ru.wikipedia.org/wiki/Битовые_операции#.D0.98.D1.81.D0.BA.D0.BB.D1.8E.D1.87.D0.B0.D1.8E.D1.89.D0.B5.D0.B5_.D0.98.D0.9B.D0.98_.28XOR.29.

В первом тесте из примера возможные пути следующие:

  • из города 1 в него самого, расстояние 1,
  • из города 2 в него самого, расстояние 2,
  • из города 3 в него самого, расстояние 3,
  • из города 1 в город 2, расстояние ,
  • из города 1 в город 3, расстояние ,
  • из города 2 в город 3, расстояние .
Суммарное расстояние равно 1 + 2 + 3 + 3 + 0 + 1 = 10.

A. Клятва Ночного дозора

Конструктив сортировки *900

«Слушайте мою клятву и будьте свидетелями моего обета! Ночь собирается, и начинается мой дозор. Он не окончится до самой моей смерти. Я не возьму себе ни жены, ни земель, не буду отцом детям. Я не надену корону и не буду добиваться славы. Я буду жить и умру на своем посту. Я — меч во тьме. Я — дозорный на Стене. Я — щит, который охраняет царство людей. Я отдаю свою жизнь и честь Ночному Дозору в эту ночь и во все грядущие!» — Клятва Ночного дозора

С этого начинается дозор Джона Сноу. Ему возложена задача поддержки стюардов.

Сейчас у него имеется n стюардов, которым необходимо предоставить поддержку. Каждый стюард имеет собственную силу. Джон Сноу предпочитает поддерживать стюарда, если существует хотя бы один стюард с силой строго меньшей, чем его, и хотя бы один стюард с силой строго большей, чем у него.

Можете ли вы ответить, сколько стюардов будет поддерживать Джон Сноу?

Входные данные

Первая строка содержит единственное целое число n (1 ≤ n ≤ 105) — количество стюардов Джона Сноу.

Вторая строка содержит n целых чисел, разделенных пробелом, a1, a2, ..., an (0 ≤ ai ≤ 109), представляющих значения, назначенные стюардам.

Выходные данные

Выведите единственное целое число — количесто стюардов, которым поможет Джон Сноу.

Примечание

В первом тестовом примере Джон Сноу не может поддержать стюарда с силой 1, потому что нет стюарда с силой меньше, чем 1. Также он не может поддержать стюарда с силой 5, потому что нет стюарда с силой больше, чем 5.

Во втором тестовом примере Джон Сноу может поддержать стюарда с силой 2, потому что есть стюард с силой меньше, чем 2, и есть стюард с силой больше, чем 2.

B. Код для 1

Конструктив поиск в глубину и подобное разделяй и властвуй *1600

Джон отважно боролся за спасение одичалых, атакованных белыми ходоками в Суровом Доме. По прибытию Сэм говорит, что хочет направиться в Старомест, чтобы тренироваться в Цитадели и стать мейстером. Так он сможет вернуться и занять место покойного Эймона, как мейстер Черного Замка. Джон согласился с предложением Сэма, и Сэм отправляется в свое путешествие в Цитадель. Однако становление учащимся Цитадели не так легко, и поэтому мейстеры в Цитадели предложили Сэму задачу, чтобы протестировать его соответствие требованиям.

Изначально у Сэма есть список с единственным числом n. Далее он выполняет некоторые операции над этим списком. На каждой операции Сэм должен удалить любой такой элемент x, что x > 1, из списка, и вставить вместо него три новых элемента , , последовательно. Он должен делать эти операции до тех пор, пока все элементы в списке не равны 0 или 1.

Теперь мейстеры хотят знать общее число единиц на позициях с l-й по r-ю в списке. Сэм хочет стать великим мейстером, но, к сожалению, он не может решить эту задачу. Можете ли вы помочь Сэму пройти тест на соответствие?

Входные данные

Первая строка содержит три целых числа n, l, r (0 ≤ n < 250, 0 ≤ r - l ≤ 105, r ≥ 1, l ≥ 1) — изначальный элемент и диапазон позиций с l-й по r-ю.

Гарантируется, что r не превосходит длины получившегося списка.

Выходные данные

Выведите общее число единиц на позициях с l-й по r-ю в получившемся списке.

Примечание

Рассмотрим первый тестовый пример:

Список чисел со 2-й по 5-ю позиции содержит числа [1, 1, 1, 1]. Количество единиц равно 4.

Второй тестовый пример:

Список чисел с 3-й по 10-ю позиции содержит числа [1, 1, 1, 0, 1, 0, 1, 0]. Количество единиц равно 5.

B. Мишка и различные имена

жадные алгоритмы Конструктив *1500

В армии непросто сформировать отряд, который был бы эффективным на поле боя. Важную роль играет коммуникация, поэтому никакие два солдата не должны иметь одного имени (что делать, если пришел приказ отправить Боба в разведку, а в отряде два Боба?).

Отряд солдат эффективен если и только если имена всех солдат в отряде различны. Например, отряд (Джон, Боб, Лимак) эффективен, а отряды (Гэри, Боб, Гэри) и (Алиса, Алиса) — нет.

Вы — шпион во вражеском лагере. Вы заметили n стоящих в ряд солдат, пронумерованных от 1 до n. Генерал хочет сформировать отряд из k стоящих друг за другом солдат. Для каждого отрезка из k солдат генерал выписал, эффективен ли отряд из них, или нет.

Вы смогли украсть листок генерала, на нем написаны n - k + 1 слов s1, s2, ..., sn - k + 1, каждое из которых либо «YES», либо «NO»:

  • Слово s1 описывает отряд из солдат с номерами от 1 до kYES», если отряд эффективен, и «NO» иначе).
  • Слово s2 описывает отряд из солдат с номерами от 2 до k + 1.
  • И так далее до слова sn - k + 1, которое описывает отряд из солдат с номерами от n - k + 1 до n.

Ваша задача состоит в том, чтобы найти возможные имена n солдат, соответствующие записям генерала. Каждое имя должно состоять из латинских букв и иметь длину от 1 до 10 включительно, первая буква должна быть заглавной, остальные должны быть строчными. Имена не обязаны существовать на самом деле — можно вывести «Xyzzzdj» или, например, «T».

Найдите и выведите любое решение. Можно показать, что всегда существует хотя бы одно решение.

Входные данные

Первая строка содержит два целых числа n и k (2 ≤ k ≤ n ≤ 50) — число солдат и размер отрядов соответственно.

Вторая строка содержит n - k + 1 слов s1, s2, ..., sn - k + 1. Слово si равно «YES» если отряд солдат с i-го по i + k - 1-ый эффективен, иначе оно равно «NO».

Выходные данные

Найдите любое решение, удовлетворяющее условиям. В единственной строке выведите n слов через пробел, означающий имена солдат по порядку. Первая буква каждого имени должна быть заглавной, остальные — строчными. Все имена должны содержать только латинские буквы и иметь длину от 1 до 10.

Если корректных решений несколько, выведите любое из них.

Примечание

В первом примере 8 солдат. Для каждых последовательных 3 солдат мы знаем, эффективен ли отряд их этих солдат или нет. Проанализируем предложенный правильный ответ:

  • Первые три солдата (т. е. Adam, Bob, Bob) не создадут эффективный отряд, потому что среди них есть два солдата с именем Bob. Действительно, первое слово s1 — это «NO».
  • Солдаты со 2-го по 4-й (Bob, Bob, Cpqepqwer) тоже образуют неэффективный отряд, и второе слово s2 тоже «NO».
  • Солдаты с 3-го по 5-й (Bob, Cpqepqwer, Limak) образуют эффективный отряд, и слово s3 — это «YES».
  • ...,
  • Солдаты с 6-го по 8-й (Adam, Bob, Adam) образуют неэффективный отряд, и слово s6 — это «NO».

C. Возмутительный Контраст

графы дп Конструктив математика теория чисел *2300

Вам дано целое число m, а также список из n различных целых чисел от 0 до m - 1.

Вы хотите построить последовательность, удовлетворяющую следующим требованиям:

  • Каждый элемент последовательности — целое число от 0 до m - 1, включительно.
  • Все префиксные произведения (то есть, произведения положительного числа первых элементов последовательности) различны по модулю m.
  • Никакое префиксное произведение по модулю m не является элементом заданного списка.
  • Длина последовательности максимально возможна.

Постройте любую последовательность, удовлетворяющую описанным свойствам.

Входные данные

Первая строка содержит два целых числа n и m (0 ≤ n < m ≤ 200 000) — число элементов в заданном списке и модуль, соответственно.

Если n ненулевое, то следующая строка содержит n различных целых чисел от 0 до m - 1 — запрещенные префиксные произведения. Если n равно нулю, то второй строки нет.

Выходные данные

В первой строке выведите число k — длину построенной последовательности.

Во второй строке выведите k целых чисел — вашу последовательность.

Примечание

В первом примере префиксные произведения построенной последовательности по модулю m равны [1, 2, 3, 4, 0].

Во втором примере префиксные произведения построенной последовательности по модулю m равны [3, 7, 4, 6, 8, 0].

C. Степное разбиение

Бинарный поиск жадные алгоритмы Конструктив математика *2200

Можно показать, что любое натуральное число x единственным образом представимо в виде x = 1 + 2 + 4 + ... + 2k - 1 + r, где k и r — целые, k ≥ 0, 0 < r ≤ 2k. Такое представление будем называть степным разбиением x на слагаемые.

Например, степные разбиения чисел 12, 17, 7 и 1 выглядят так:

12 = 1 + 2 + 4 + 5,

17 = 1 + 2 + 4 + 8 + 2,

7 = 1 + 2 + 4,

1 = 1.

Алиса взяла последовательность натуральных чисел (элементы в которой могли повторяться), каждый элемент последовательности заменила на последовательность из всех слагаемых его степного разбиения, расположила все получившиеся числа в неубывающем порядке и отдала Борису. Теперь Борису интересно, сколько элементов могло быть в исходной последовательности Алисы. Найдите все возможные варианты!

Входные данные

Первая строка содержит единственное целое число n (1 ≤ n ≤ 105) — количество чисел, которые Алиса отдала Борису.

Вторая строка содержит n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 1012; a1 ≤ a2 ≤ ... ≤ an) — числа, отданные Алисой.

Выходные данные

Выведите в возрастающем порядке все возможные значения m такие, что существует последовательность натуральных чисел длины m такая, что если каждый элемент последовательности заменить слагаемыми из его степного разбиения и расположить получившиеся числа в неубывающем порядке, получится последовательность чисел, заданная во входных данных.

Если таких значений m не существует, выведите единственное число -1.

Примечание

В первом примере Алиса могла получить такую последовательность чисел из последовательности [6, 20].

Во втором примере последовательностью Алисы могла быть как [4, 5], так и [3, 3, 3].

C. Максимальное число

*особая задача жадные алгоритмы Конструктив реализация *1200

У Степана есть новейшее устройство с экраном, на котором могут отображаться цифры. Каждая из цифр изображается в семисекционных областях так, как показано на рисунке ниже.

Таким образом, например, для изображения цифры 3 нужно подсветить 5 секций на экране, а для цифры 66 секций.

Заряда новейшего устройства хватает, чтобы подсветить суммарно n секций на экране.

Степану стало интересно — какое максимальное число может быть изображено на экране его новейшего устройства. Перед вами стоит задача определить это число. Обратите внимание, что оно не должно содержать лидирующих нулей. Считайте, что семисекционных областей на экране устройства хватит для изображения любого целого числа.

Входные данные

В первой строке следует целое число n (2 ≤ n ≤ 100 000) — количество секций, которые могут быть подсвечены на экране устройства одновременно.

Выходные данные

Выведите максимальное число, которое может быть изображено на экране новейшего устройства Степана.

D. Правда или ложь

*особая задача Конструктив реализация сортировки *1500

У Васи есть последовательность кубиков, на каждом из которых написано ровно одно целое число. Вася любит порядок, поэтому выставил все свои кубики в ряд. Таким образом, последовательность чисел, записанных на кубиках в порядке слева направо равна a1, a2, ..., an.

Пока Вася отсутствовал, его маленький брат Степан поиграл с кубиками и поменял местами некоторые из них, после чего последовательность чисел на кубиках стала выглядеть как b1, b2, ..., bn.

Степан утверждает, что трогал только кубики, стоящие на позициях с l по r, не убирал и не добавлял другие кубики (иными словами, он переставил кубики на позициях с l по r произвольным образом).

Перед вами стоит задача определить, возможна ли то, что Степан говорит правду, либо он гарантированно обманывает своего брата.

Входные данные

В первой строке следует три целых числа n, l, r (1 ≤ n ≤ 105, 1 ≤ l ≤ r ≤ n) — количество кубиков, которые есть у Васи, и позиции, о которых сказал Степан.

Во второй сроке следует последовательность a1, a2, ..., an (1 ≤ ai ≤ n) — последовательность номеров на кубиках в том порядке, в котором их расставил Вася.

В третьей сроке следует последовательность b1, b2, ..., bn (1 ≤ bi ≤ n) — последовательность номеров на кубиках после того, как Степан поиграл с ними.

Гарантируется, что Степан не убирал и не добавлял никакие кубики, а только переставлял имеющиеся.

Выходные данные

Выведите «LIE» (без кавычек), если Степан гарантированно обманывает брата. В противном случае, выведите «TRUTH» (без кавычек).

Примечание

В первом примере возможна ситуация при которой Степан говорит правду. Изначально последовательность кубиков выглядит как [3, 4, 2, 3, 1]. Степан мог сначала поменять местами кубики в позициях 2 и 3 (после этого последовательность кубиков выглядела бы как [3, 2, 4, 3, 1]), а затем поменять местами кубики в позициях 3 и 4 (после этого последовательность кубиков выглядела бы как [3, 2, 3, 4, 1]).

Во втором примере невозможна ситуация, при которой Степан говорит правду, так как он сообщил, что менял местами только кубики с позиции 1 до позиции 2, но из примера видно, что он гарантированно переместил кубик, стоящий изначально в позиции 3. Поэтому Степан гарантированно обманывает своего брата.

В третьем примере при любых значениях l и r возможна ситуация, при которой Степан говорит правду.

H. Восстановление строки

*особая задача Конструктив *2200

У Степана в школе была любимая строка s, состоящая из строчных букв латинского алфавита.

После окончания университета, он решил её вспомнить, но прошло так много времени, что он не смог этого сделать. Зато Степан помнит некоторую информацию о своей строке, а именно последовательность целых чисел c1, c2, ..., cn, где n равно длине строки s, а ci равно количеству подстрок строки s длины i, которые состоят из одинаковых букв. Подстрокой строки называется некоторая последовательность подряд идущих символов строки s.

Например, если любимая строка Степана была равна «tttesst», то последовательность c имеет вид: c = [7, 3, 1, 0, 0, 0, 0].

Степан обратился к вам за помощью, он просит вас по имеющейся последовательности c1, c2, ..., cn восстановить его любимую строку s.

Входные данные

В первой строке следует целое число n (1 ≤ n ≤ 2000) — длина любимой строки Степана.

Во второй строке следует последовательность целых чисел c1, c2, ..., cn (0 ≤ ci ≤ 2000), где ci равно количеству подстрок строки s длины i, которые состоят из одинаковых букв.

Гарантируется, что входные данные таковы, что ответ всегда существует.

Выходные данные

Выведите восстановленную любимую строку Степана. Если ответов несколько, разрешается вывести любой из них. Строка должна состоять из строчных букв латинского алфавита.

Примечание

В первом примере любимой строкой Степана может быть, например, строка «kkrrrq», так как в ней 6 подстрок длины 1, состоящих из одинаковых букв (они начинаются в позициях 1, 2, 3, 4, 5 и 6), 3 подстроки длины 2, состоящие из одинаковых букв (они начинаются в позициях 1, 3 и 4), и 1 подстрока длины 3, состоящая из одинаковых букв (она начинается в позиции 3).

B. Шерлок и его девушка

Конструктив теория чисел *1200

У Шерлока новая девушка (так необычно для него!). Приближается День Святого Валентина, и он хочет подарить ей украшения.

Шерлок купил n украшений. Цена i-го украшения равняется i + 1, то есть цены украшений равны 2, 3, 4, ... n + 1.

Ватсон поставил перед Шерлоком задачу раскрасить эти украшения так, чтобы два украшения имели разный цвет, если цена одного из них является простым делителем цены другого. Кроме того, Ватсон хочет, чтобы Шерлок использовал как можно меньше различных цветов.

Помогите Шерлоку выполнить это простейшую задачу.

Входные данные

Единственная строка содержит одно целое число n (1 ≤ n ≤ 100000) — количество украшений.

Выходные данные

В первую строку выведите одно целое число k — минимальное число цветов, которое необходимо использовать.

Во вторую строку выведите n целых чисел (в диапазоне от 1 до k), которые задают цвета каждого украшения в порядке увеличения цены.

Если есть несколько способов раскрасить украшения используя k цветов, выведите любой из них.

Примечание

В первом примере мы раскрасили украшения с ценой 2, 3 и 4 в цвета 1, 1, и 2 соответственно.

Т. к. 2 является простым делителем 4, то цвета украшений с ценами 2 и 4 должны быть различными.

F. Пари Шерлока и Мориарти

геометрия графы Деревья Конструктив разделяй и властвуй реализация Структуры данных *2800

Шерлок и Мориарти встретились для финальной битвы умов. Шерлок дал Мориарти правильный выпуклый n-угольник. Кроме того, он дал ему некоторые диагонали в этом многоугольнике, которые разделяют его на регионы. Гарантируется, что диагонали не пересекаются во внутренних точках.

Шерлок посчитал для каждого региона его важность. Важность региона, образованного вершинами многоугольника с номерами a1, a2, ... , ax, равна 2a1 + 2a2 + ... + 2ax. Затем Шерлок упорядочил регионы в порядке увеличения важности. После этого он присвоил каждому региону уникальный номер от 1 до k, где k — количество регионов, а номер региона это его позиция в упорядоченном по важности списке.

Шерлок хочет, чтобы Мориарти раскрасил регионы, используя не более чем 20 цветов так, чтобы все простые пути между двумя одноцветными регионами проходили через хотя бы один регион, покрашенный в цвет с номером меньше, чем номер цвета данных регионов. Простой путь между двумя регионами f и h это последовательность регионов r1, r2, ... rt такая, что r1 = f, rt = h, для каждого 1 ≤ i < t регионы ri и ri + 1 имеют общую сторону, а также ri = rj если и только если i = j.

Мориарти не смог ответить и спросил решение у Шерлока. Помогите Шерлоку предоставить ответ Мориарти.

Входные данные

В первой строке содержатся два целых числа n и m (3 ≤ n ≤ 100000, 0 ≤ m ≤ n - 3) — количество вершин в многоугольнике и количество проведенных диагоналей.

Следующие m строк содержат по два целых числа a и b (1 ≤ a, b ≤ n), которые описывают диагональ между вершинами a и b. Гарантируется, что заданы корректные диагонали, то есть a и b не совпадают и не являются соседними вершинами. Гарантируется, что диагонали не пересекаются.

Выходные данные

Пусть число регионов равно k.

Выведите k целых чисел, каждое от 1 до 20 — цвета регионов в порядке увеличения важности.

Если существует несколько решение, выведите любое из них. Можно показать, что существует хотя бы одно решение.

Примечание

Во втором примере регионы будут в таком порядке: (1, 2, 3), (1, 3, 4), (1, 4, 5), (1, 5, 6), т. е. регион (1, 2, 3) будет первым, затем регион (1, 3, 4) и так далее.

Мы можем покрасить регионы 1 и 3 в один цвет, так как регион 2 будет на пути из 1 в 3, и его цвет равен 1, что меньше, чем цвет регионов 1 и 3, который равен 2.

A. Игра в напёрстки

Конструктив математика реализация *1000

В свободное время Бомбослав любит наблюдать из окна как ребята во дворе играют "на интерес" в известную игру в напёрстки. Для игры требуется два человека, ведущий и игрок. Ведущий берёт три одинаковых непрозрачных напёрстка и прячет под один из них шарик. Затем он несколько раз меняет некоторые пары напёрстков местами, после чего игрок должен угадать, под каким напёрстком сейчас находится шарик.

Бомбослав заметил, что ребята во дворе не очень изобретательны в своих действиях, и ведущий всегда меняет местами левый напёрсток со средним на нечётных действиях (то есть на первом, третьем, пятом и так далее) и средний с правым на чётных действиях (то есть на втором, четвёртом и так далее).

Пронумеруем напёрстки от 0 до 2 слева направо. То есть левый напёрстком имеет номер 0, средний номер 1, а правый номер 2. Бомбослав не успел увидеть начало игры, но посчитал, что ведущий совершил n действий и в итоге шарик оказался под напёрстком x. Под каким напёрстком находился шарик в самом начале?

Входные данные

В первой строке входных данных записано одно цело число n (1 ≤ n ≤ 2·109) — количество действий, совершённых ведущим.

Во второй строке записано одно целое число x (0 ≤ x ≤ 2) — номер напёрстка, под которым оказался шарик через n действий.

Выходные данные

Выведите одно целое число от 0 до 2, означающее номер напёрстка, под которым находился шарик в самом начале.

Примечание

В первом примере шарик изначально лежал под средним напёрстком и ведущий совершил четыре действия.

  1. Первым действием ведущий поменял местами левый и средний напёрстки. В результате шарик оказался под левым напёрстком.
  2. Вторым действием ведущий поменял местами средний и правый напёрстки. Шарик остался под левым напёрстком.
  3. Третьим действием ведущий снова поменял местами левый и средний напёрстки. В результате шарик снова оказался посередине.
  4. Последним четвёртым действием ведущий опять поменял местами средний и правый напёрстки и шарик оказался под правым напёрстком.

D. Перекладывание паркета

Конструктив *2700

Петя решил положить паркет в комнате размером n × m, паркет состоит из досок размером 1 × 2. Когда строители уложили паркет, выяснилось, что его рисунок выглядит совсем не так, как нравится Пете, и строителям придется его переложить.

Однако строители решили, что снимать паркет целиком и потом раскладывать его заново очень сложно, поэтому каждый час они будут делать такую операцию: вынуть какие-то две доски, образующие квадрат 2 × 2, повернуть их на 90 градусов и положить на то же место.

При этом у них нет никаких идей, как с помощью таких операций получить требуемое расположение, и возможно ли это вообще.

Помогите Пете составить план для рабочих или скажите, что это невозможно. План должен содержать не более 100 000 команд.

Входные данные

Первая строка входных данных содержит числа n и m — размер комнаты (1 ≤ n, m ≤ 50). Хотя бы одно из двух заданных чисел — четно.

Следующие n строк содержат по m символов — описание текущего положения досок паркета. Каждый символ обозначает положение половинки доски. Символы 'L', 'R', 'U' и 'D' соответствуют левой, правой, верхней и нижней половинкам соответственно.

Следующие n строк содержат по m символов содержат описание требуемой конфигурации в том же формате.

Выходные данные

В первой строке выведите k — число операций в плане для рабочих. В следующих k строках выведите описания операций. Операция задается координатами (строка и столбец) левой верхней половинки доски, над которыми проводится операция.

Если решения нет, выведите в первой строке -1.

Примечание

В первом примере первой операцией поворачиваем две правые доски, после чего все доски лежат вертикально. После этого второй операцией поворачиваем две левые доски, получаем требуемую конфигурацию.

A. Перераспределение учеников

Конструктив математика *1000

В Берляндии каждый из учеников школы характеризуется своей успеваемостью — целым числом от 1 до 5 (наилучшая успеваемость — это «пятерка»).

В школе номер 0xFF учится всего два класса: класс A и класс B. В каждом классе учится ровно n школьников. Про каждого школьника известна его успеваемость — целое число от 1 до 5.

Только что подошел к концу учебный год и директор школы хочет перераспределить учеников между классами так, чтобы в каждом из двух классов было одинаковое количество учеников, чья успеваемость равна 1, одинаковое количество учеников, чья успеваемость равна 2 и так далее. Иными словами, цель директора — изменить составы классов так, чтобы для каждой успеваемости количества учеников в первом и втором классе были равны.

Чтобы добиться этого, есть план произвести серию обменов учеников между классами. Во время обмена выбирается один ученик из класса A и один ученик класса B. После этого они одновременно меняют классы, где они учатся.

Выведите наименьшее количество обменов, чтобы добиться желаемого равенства количеств учеников для каждой успеваемости.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 100) — количество учеников в каждом из классов.

Вторая строка содержит последовательность целых чисел a1, a2, ..., an (1 ≤ ai ≤ 5), где ai — успеваемость i-го ученика класса A.

Третья строка содержит последовательность целых чисел b1, b2, ..., bn (1 ≤ bi ≤ 5), где bi — успеваемость i-го ученика класса B.

Выходные данные

Выведите искомое наименьшее количество обменов или -1, если желаемого распределения учеников по классам получить невозможно.

C. Нечестные продавцы

жадные алгоритмы Конструктив сортировки *1200

Игорь узнал о скидках в магазине и решил купить n товаров. Скидки в магазине продлятся неделю и Игорь знает про каждый товар, что сейчас он стоит ai, а после недели скидок будет стоить bi.

Не все из продавцов в магазине честные, поэтому некоторые товары сейчас стоят дороже, чем будут стоить после недели скидок.

Игорь решил, что купит не менее k товаров сейчас, а с остальными подождет неделю, чтобы максимально сэкономить. Перед вами стоит задача определить минимальную сумму, которую Игорь может потратить, чтобы купить все n товаров.

Входные данные

В первой строке следуют два целых положительных числа n и k (1 ≤ n ≤ 2·105, 0 ≤ k ≤ n) — количество товаров, которые Игорь хочет купить, и минимальное количество товаров, которые Игорь обязательно хочет купить сейчас.

Во второй строке следует последовательность a1, a2, ..., an (1 ≤ ai ≤ 104) — цены товаров в период скидок.

В третьей строке следует последовательность b1, b2, ..., bn (1 ≤ bi ≤ 104) — цены товаров после периода скидок.

Выходные данные

Выведите минимальную сумму, которую Игорь может потратить, чтобы купить все n товаров при условии, что прямо сейчас он хочет купить не менее k товаров.

Примечание

В первом примере Игорю выгоднее всего купить сразу товар номер 3, заплатив за это 6, а товары номер 1 и 2 подождать, тогда он сможет купить их за 3 и 1, соответственно. Суммарно Игорь заплатит 6 + 3 + 1 = 10.

Во втором примере Игорю выгоднее всего купить сразу товары с номерами 1, 2, 4 и 5, заплатив за них 3, 4, 10 и 3, соответственно. Товар номер 3 Игорю выгоднее купить после скидок, он заплатит за это 5. Суммарно Игорь заплатит 3 + 4 + 10 + 3 + 5 = 25.

B. Пасхальные яйца

Конструктив реализация *1200

Пасхальный кролик разложил n яиц по кругу и теперь хочет их покрасить.

Каждое яйцо должно быть покрашено в один из 7 цветов: красный, оранжевый, желтый, зеленый, голубой, синий или фиолетовый. При этом должны выполняться следующие условия:

  • В каждый из 7 цветов покрашено хотя бы одно яйцо.
  • Любые четыре расположенных подряд яйца покрашены в различные цвета.

Помогите пасхальному кролику раскрасить яйца требуемым образом. Известно, что это всегда можно сделать.

Входные данные

В единственной строке находится целое число n (7 ≤ n ≤ 100).

Выходные данные

Выведите строку длиной n, где i-ый символ этой строки должен описывать цвет i-го яйца по порядку обхода круга. Цвета обозначаются следующими символами: «R» — красный, «O» — оранжевый, «Y» — желтый, «G» — зеленый, «B» — голубой, «I» — синий, «V» — фиолетовый.

Если возможных ответов несколько — выведите любой из них.

Примечание

Как яйца будут раскрашены в первом примере можно видеть на картинке:

E. Подземная лаборатория

графы Конструктив поиск в глубину и подобное *2100

В огромной подземной лаборатории злая корпорация Зонтик создает клонов для своих страшных экспериментов. Однажды компания клонировала мальчика по имени Андрюша, который был умнее своих сверстников. Андрюша понял, что вокруг творится что-то неладное. Он поднял клонов на борьбу против корпорации, и те начали искать выход из лаборатории. Компании ничего не оставалось, кроме как запустить процесс самоуничтожения подземного комплекса.

Лаборатория представляет собой связный граф из n вершин и m ребер. В некоторых вершинах этого графа k клонов Андрюши начинают поиск выхода из лаборатории. В процессе поиска каждую секунду они переходят по ребру в соседнюю вершину, причем в каждой вершине может одновременно находиться сколько угодно клонов. Каждый клон может в некоторый момент времени остановиться и прекратить поиски, но он обязательно должен их начать, то есть посетить хотя бы одну вершину. Более того, выход может находиться в произвольном месте лаборатории, поэтому клоны должны обойти граф целиком, то есть каждая вершина графа должна быть посещена хотя бы одним клоном хотя бы один раз.

Время клонов ограничено, и каждый из них сможет обойти не более комнат до того, как лаборатория взорвется.

Ваша задача заключается в том, чтобы расставить клонов по вершинам графа и для каждого клона вывести путь, по которому он должен обходить граф. При этом количество вершин в каждом пути должно быть не больше .

Входные данные

В первой строке находятся три целых числа n, m и k (1 ≤ n ≤ 2·105, n - 1 ≤ m ≤ 2·105, 1 ≤ k ≤ n) — число вершин в графе, число ребер в графе и количество клонов.

В каждой из следующих m строк находятся два целых числа xi и yi (1 ≤ xi, yi ≤ n) — номера двух вершин, соединенных очередным ребром. В графе могут быть петли и кратные ребра.

Гарантируется, что граф связный.

Выходные данные

Выведите k строк. В начале i-й строки выведите целое число ci () — количество вершин, которые посетит i-й клон, а затем выведите ci целых чисел — номера вершин, которые он посетит, в порядке их посещения. Выводите вершину каждый раз, когда клон ее посещает, даже если он посещал ее до этого.

Гарантируется, что ответ существует.

Примечание

В первом тесте есть всего 1 клон, он посещает вершины в порядке (2, 1, 3), что укладывается в ограничение 6 посещенных вершин.

Во втором тесте есть 2 клона, они посещают вершины в порядке (2, 1, 3) и (4, 1, 5), что укладывается в ограничение 5 посещенных вершин.

B. Странное путешествие

графы Комбинаторика Конструктив поиск в глубину и подобное снм *2100

Маленький мальчик Игорь решил стать путешественником. Сначала он решил обойти все города в своей родной стране Ужляндии.

Как известно, в Ужляндии n городов, соединенных m двусторонними дорогами. Также известно, что между любыми двумя городами существует не больше одной дороги, но могут существовать дороги которые начинаются и заканчиваются в одном городе. Игорь решил спланировать свое путешествие заранее. Он называет хорошим путь, который посещает m - 2 дороги дважды, а остальные 2 дороги — по одному разу. Хороший путь начинается и заканчивается в любом городе. Не обязательно заканчивать путь в том же городе, в котором он начался.

Теперь Игорю стало интересно, сколько же путей его устраивают? Он считает два хороших пути различными, если различаются множества дорог, по которым он пройдет один раз. Помогите Игорю — посчитайте количество различных хороших путей.

Входные данные

В первой строке входных данных записано два целых числа n, m (1 ≤ n, m ≤ 106) — количество городов и дорог в Ужляндии соответственно. В каждой из следующих m строк находятся два целых числа u и v (1 ≤ u, v ≤ n), которые означают, что между городами u и v существует двусторонняя дорога.

Гарантируется, что между любыми двумя городами существует не больше одной дороги, в том числе, для каждого города существует не более одной дороги, которая ведет из него в него же самого.

Выходные данные

Выведите одно целое число — количество различных хороших путей.

Примечание

В первом тестовом примере хорошими являются пути:

  • 2 → 1 → 3 → 1 → 4 → 1 → 5,
  • 2 → 1 → 3 → 1 → 5 → 1 → 4,
  • 2 → 1 → 4 → 1 → 5 → 1 → 3,
  • 3 → 1 → 2 → 1 → 4 → 1 → 5,
  • 3 → 1 → 2 → 1 → 5 → 1 → 4,
  • 4 → 1 → 2 → 1 → 3 → 1 → 5.

Кроме того, существуют хорошие пути, которые совпадают с каким-то из перечисленных выше, потому что совпадают множества дорог, по которым Игорь пройдет один раз:

  • 2 → 1 → 4 → 1 → 3 → 1 → 5,
  • 2 → 1 → 5 → 1 → 3 → 1 → 4,
  • 2 → 1 → 5 → 1 → 4 → 1 → 3,
  • 3 → 1 → 4 → 1 → 2 → 1 → 5,
  • 3 → 1 → 5 → 1 → 2 → 1 → 4,
  • 4 → 1 → 3 → 1 → 2 → 1 → 5,
  • и все эти пути в обратную сторону.

Таким образом, ответ равен 6.

Во втором примере Игорь не может пройти по всем дорогам.

В третьем примере он пройдет по одному разу по каждой из дорог.

D. Поиск прямых

интерактив Конструктив разделяй и властвуй *3000

После очередного соревнования по спортивному программированию Рома решил попробовать себя в туризме. Его родная страна Ужляндия представляет собой декартову плоскость. Он планирует пройти по всем Главным Прямым Ужляндии. Как известно, все они имеют вид бесконечных прямых, параллельных осям координат (то есть выражаются уравнениями x = a или y = a, где a — целое число, называемое координатой прямой).

Поскольку Рома потерял свою карту, ему сначала нужно узнать координаты всех прямых. Дядя Антон согласился ему помочь на таких условиях:

  • Изначально Рома не знает количество вертикальных и горизонтальных прямых, а также их координаты;
  • Рома может называть целочисленные координаты точки на Ужляндии, а в ответ Антон будет говорить ему одно целое число — минимальное из расстояний от этой точки до каждой из Главных Прямых Ужляндии. Но, поскольку известно, что любая из этих прямых отдалена от точки пересечения координатных осей не более чем на 108, то и координаты точки, которые может назвать Рома, не должны превышать по абсолютному значению 108.

Так как дяде Антону нужно бежать на УОИ (Ужляндскую Олимпиаду по Информатике), он согласился ответить не более чем на 3·105 вопросов Ромы.

Но вот беда! Рома не знает как выведать у дяди Антона нужные координаты. Помогите ему! Узнайте координаты всех Главных Прямых Ужляндии.

Входные данные

Изначально входных данных нет. Ваша программа должна делать запросы, чтобы получить информацию.

Гарантируется, что количество прямых каждого вида не превосходит 104, и не меньше 1.

Протокол взаимодействия

Чтобы сделать запрос, вам нужно вывести «0 x y» (-108 ≤ x, y ≤ 108), где x и y — координаты точки. После каждого запроса нужно вывести перевод строки и сделать операцию «flush», после чего считать ответ — минимальное среди расстояний от точки запроса до Главных Прямых Ужляндии.

Вы можете сделать не более 3·105 запросов.

Когда вы будете готовы вывести ответ, выведите три строки:

  1. В первой строке выведите «1 n m», где n — количество вертикальных прямых (то есть параллельных оси OY), а m — горизонтальных (то есть параллельных оси OX).
  2. Во второй строке выведите n чисел x1, x2, ..., xn — координаты вертикальных прямых.
  3. В третьей строке в таком же формате выведите m чисел y1, y2, ..., ym — координаты горизонтальных прямых.

Координаты прямых можно выводить в любом порядке.

Чтобы сделать операцию «flush», сразу после вывода запроса и перевода строки нужно сделать:

  • fflush(stdout) в C++;
  • System.out.flush() в Java;
  • stdout.flush() в Python;
  • flush(output) в Pascal;
  • смотрите документацию для других языков.

Вы получите вердикт Wrong Answer, если сделаете больше запросов, чем можно, или если сделаете некорректный запрос.

Вы получите вердикт Idleness Limit Exceeded, если не будете ничего выводить (а тестирующая программа будет ожидать ввода) или забудете сделать операцию «flush» после какого-нибудь вывода.

Если ваша программа считает -1, она должна немедленно завершиться с нулевым кодом возврата (например, вызовом exit(0)). Это значит, что вы сделали слишком много запросов, или сделали некорректный запрос, и получите вердикт Wrong Answer. Если вы проигнорируете это, то можете получить другие вердикты, потому что ваша программа продолжит считывание из закрытого потока.

Описание теста для взлома

В первой строке теста должны быть записаны числа n и m (1 ≤ n, m ≤ 104).

Во второй строке должно быть n различных чисел xi (-108 ≤ xi ≤ 108) — координаты вертикальных прямых.

В третьей строке должно быть m различных чисел yi (-108 ≤ yi ≤ 108) — координаты горизонтальных прямых.

Координаты можно задавать в любом порядке.

Пример теста смотрите в замечании.

Примечание

В примере был тест


1 2
2
0 -3

Минимальные расстояния:

  • от (1, 2) к x = 2;
  • от ( - 2,  - 2) к y =  - 3;
  • от (5, 6) к x = 2;
  • от ( - 2, 2) к y = 0.

E. Проблемы отделений

Деревья дп Конструктив поиск в глубину и подобное *2900

Раньше, когда не было интернета, у каждого банка было множество отделений по всему городу Банкополису, что вызывало множество проблем. А именно, в каждом отделении нужно было каждый день проводить инкассацию.

Однажды Олег услышал разговор двух инкассаторов одного банка. Они каждый день объезжали все отделения и офисы этого банка, причем двигались они по строго определенной схеме. Инкассаторы выезжали из центрального офиса, и каждый раз перемещались по специальной дороге либо между двумя офисами, либо между каким-то офисом и каким-то отделением, в итоге возвращаясь обратно в центральный офис. Известно, что всего отделений и офисов было было n, а специальных дорог — на одну меньше, то есть n - 1. Иными словами, система специальных дорог образовывала корневое дерево, корнем которого являлся центральный офис, все листья дерева были отделениями, а все внутренние вершины — офисами. Инкассаторы всегда объезжали офисы и отделения по одному и тому же маршруту, число дорог в котором было минимально возможным, то есть 2n - 2.

Один из инкассаторов утверждал, что между посещениями отделения a и отделения b (в таком порядке) они посещают столько же отделений, что и между посещениями отделений b и затем a. Другой инкассатор утверждал, что между посещениями отделения c и отделения d они посещают столько же отделений, что и между посещениями отделений d и затем c. Интересной особенностью разговора было то, что кратчайший путь по специальным дорогам между любой парой отделений из a, b, c и d проходил через центральный офис.

Зная схему дорог и номера отделений a, b, c и d, определите, могла ли происходить ситуация, описанная инкассаторами, или нет.

Входные данные

В первой строке находится одно целое число n (5 ≤ n ≤ 5000) — общее число отделений и офисов. Отделения и офисы пронумерованы от 1 до n, центральный офис имеет номер 1.

На следующей строке находятся четыре различных целых числа a, b, c или d (2 ≤ a, b, c, d ≤ n) — номера отделений, упомянутые в разговоре инкассаторов. Гарантируется, что все эти номера являются отделениями (то есть листьями дерева), а не офисами. Гарантируется, что кратчайший путь между любой парой из этих отделений проходит через центральный офис.

Далее следуют n - 1 чисел p2, p3, ..., pn (1 ≤ pi < i), где pi обозначает, что существует специальная дорога между i-м офисом и pi-м офисом или отделением.

Заметьте, что у отделений и офисов общая нумерация.

Гарантируется, что заданный граф является деревом. Отделениями являются листья этого дерева, а офисами — внутренние вершины.

Выходные данные

Если ситуация, описанная инкассаторами, возможна, выведите «YES». Иначе выведите «NO».

Примечание

В первом примере возможен следующий маршрут инкассаторов . Можно заметить, что между посещениями отделений a и b инкассаторы посещают столько же отделений, сколько между посещениями отделениями b и a; аналогичная ситуация с отделениями c и d (маршрут инкассаторов является бесконечным и периодичным, но порядок посещения офисов и отделений не меняется изо дня в день и всегда строго фиксирован).

Во втором примере не существует такого порядка посещения офисов и отделений, что между посещениями c и d инкассаторы заедут в столько же отделений, что между посещениями d и c, а значит, ответа не существует.

В третьем примере маршрут, удовлетворяющий условию задачи, такой: .

C. Взлом банков

Деревья дп Конструктив Структуры данных *1900

Несмотря на то, что Инзейн нашел свою кость, его хозяин Зейн еще не вернулся. Чтобы найти Зейна, Инзейну потребуется много денег, которых у него сейчас совсем нет. Чтобы стправиться с этим, он решил взломать банки.

Всего есть n банков, пронумерованных от 1 до n. Банки соединены n - 1 проводами. все банки изначально находятся в состоянии онлайн. У каждого банка есть изначальная защита: защита банка i изначально равна ai.

Определим некоторые понятия перед тем, как продолжить. Банки i и j называются соседними, если и только если между ними существует провод напрямую. Банки i и j называются полу-соседними, если и только если существует такой онлайн банк k, что банки i и k являются соседними, и банки k и j являются соседними.

Когда некоторый банк взломан, он переходит в состояние оффлайн (и никогда не возвращается в онлайн), а другие банки, которые являются соседними или полу-соседними к взломанному, увеличивают свою защиту на 1.

Вначале Инзейн выберет банк, который он взломает первым. Конечно, защита этого банка не должна превышать мощности его компьютера. После этого, он будет выбирать для взлома некоторый банк до тех пор, пока не будут взломаны все банки, но он может выбрать для взлома банк номер x если и только если все следующие условия выполнены:

  1. Банк x находится в состоянии онлайн. То есть, банк x еще не взломан.
  2. Банк x является соседним к какому-то оффлайн банку.
  3. Защита банка x не превосходит мощности компьютера Инзейна.

Определите минимальную необходимую мощность компьютера, с помощью которого Инзейн сможет взломать все банки.

Входные данные

Первая строка содержит одно целое число n (1 ≤ n ≤ 3·105) — число банков.

Вторая строка содержит n целых чисел a1, a2, ..., an ( - 109 ≤ ai ≤ 109) — защиты банков.

Каждая из следующих n - 1 строк содержит два целых числа ui и vi (1 ≤ ui, vi ≤ n, ui ≠ vi), что означает, что есть прямой провод между банками ui и vi.

Гарантируется, что провода соединяют банки так, что Инзейн может взломать все банки, используя компьютер некоторой мощности.

Выходные данные

Выведите одно число — минимальная мощность компьютера, с которым Инзейн сможет взломать все банки.

Примечание

В первом примере Инзейн может взломать все банки, используя компьютер мощности 5:

  • Изначально защиты банков равны [1, 2, 3, 4, 5].
  • Он взламывает банк 5, силы банков становятся равными [1, 2, 4, 5,  - ].
  • Он взламывает банк 4, силы банков становятся равными [1, 3, 5,  - ,  - ].
  • Он взламывает банк 3, силы банков становятся равными [2, 4,  - ,  - ,  - ].
  • Он взламывает банк 2, силы банков становятся равными [3,  - ,  - ,  - ,  - ].
  • Он взламывает банк 1 и достигает своей цели.

Во втором примере Инзейн может взламывать банки в порядке 4, 2, 3, 1, 5, 7 и 6. Таким образом, ему достаточно компьютера мощностью 93.

D. Посты полиции

графы Деревья дп Конструктив кратчайшие пути поиск в глубину и подобное *2100

Инзейн наконец-то нашел Зейна, и у них еще много денег! Поэтому они решили создать собственную страну.

Правление страной — непростая задача. Бандиты и террористы постоянно пытаются разрушить покой. Чтобы бороться с этим, Зейн и Инзейн разработали следующее правило: от каждого города должно быть возможно достичь пост полиции, проехав не более d километров по дорогам.

В стране n городов, пронумерованных от 1 до n, соединенных n - 1 дорогами. Все дороги имею длину 1 километр. Возможно добраться от любого города до любого другого, используя эти дороги. Кроме того, есть k постов полиции, расположенных в некоторых городах. Расположение постов полиции удовлетворяет закону, описанному выше. Заметьте, что некоторые посты могут быть расположены в одном и том же городе.

Однако, Зейн считает, что n - 1 дорога это слишком много. Страна испытывает финансовый кризис, поэтому необходимо закрыть как можно больше дорог.

Помогите Зейну определить максимальное число дорог, которое можно закрыть, не нарушая закон. Кроме того, найдите эти дороги.

Входные данные

Первая строка содержит три целых числа n, k и d (2 ≤ n ≤ 3·105, 1 ≤ k ≤ 3·105, 0 ≤ d ≤ n - 1) — число городов, число постов полиции, ограничение на расстояние в законе, соответственно.

Вторая строка содержит k целых чисел p1, p2, ..., pk (1 ≤ pi ≤ n) — города, в которых расположены посты полиции.

i-я из следующих n - 1 строк содержит два целых числа ui и vi (1 ≤ ui, vi ≤ n, ui ≠ vi) — города, непосредственно соединенные дорогой i.

Гарантируется, что возможно добраться от любого города до любого другого, используя эти дороги. Кроме того, от любого города можно добраться до поста полиции, проехав не более d километров.

Выходные данные

В первой строке выведите одно целое число s, означающее максимальное число дорог, которое можно закрыть.

Во второй строке выведите s различных чисел — номера дорог, для которых это верно.

Если ответов несколько, выведите любой из них.

Примечание

Во втором примере, если закрыть дорогу номер 5, то от всех городов по-прежнему можно будет достичь пост полиции, проехав не более k = 4 километров.

Во втором примере, несмотря на то, что множество дорог, которые можно закрыть, единственно, вы можете вывести 4 5 или 5 4 во второй строке.

A. Майк и палиндром

Конструктив Перебор Строки *1000

У Майка имеется строка s состоящая только из маленьких букв латинского алфавита. Он хочет изменить ровно один символ из строки так, чтобы результирующая строка стала палиндромом.

Палиндром это строка, которая читается в две стороны одинаково. Например строки «z», «aaa», «aba», «abccba» палиндромы, а строки «codeforces», «reality», «ab» нет.

Входные данные

Первая и единственная строка входных данных содержит строку s (1 ≤ |s| ≤ 15).

Выходные данные

Выведите «YES» (без кавычек), если Майк может изменить ровно один символ так, что результирующая строка станет палиндромом, или выведите «NO» (без кавычек) иначе.

D. Майк и распределение

Конструктив сортировки *2400

Майк всегда думал о жестокости социального неравенства. Он настолько одержим этим, что иногда это влияет на него, когда он решает задачи. На данный момент у Майка есть две последовательности положительных целых чисел A = [a1, a2, ..., an] и B = [b1, b2, ..., bn] длины n каждая, которые он использует, чтобы спрашивать у людей странные вопросы.

Чтобы протестировать вас на то, как хорошо вы обнаруживаете неравенство в жизни, он хочет чтобы вы нашли «нечестное» подмножество оригинальной последовательности. Более формально, он хочет чтобы вы выбрали k чисел P = [p1, p2, ..., pk] таких, что 1 ≤ pi ≤ n для всех 1 ≤ i ≤ k, и элементы в P различны. Последовательность P представляет индексы элементов, которые вы выбрали из обеих последовательностей. Он называет подмножество P «нечестным», если и только если следующие условия выполняются: 2·(ap1 + ... + apk) больше, чем сумма элементов последовательности A, и 2·(bp1 + ... + bpk) больше, чем сумма элементов последовательности B. Также k должно быть меньше либо равно чем , потому что очень легко будет найти последовательность P, если разрешить брать много элементов!

Майк гарантирует, что решение существует для условий описанных выше. Поэтому помогите ему удовлетворить его любопытство!

Входные данные

Первая строка входных данных содержит целое число n (1 ≤ n ≤ 105) — длина последовательностей.

На второй строке записано n чисел, разделенных пробелами, a1, ..., an (1 ≤ ai ≤ 109) — элементы последовательности A.

На третьей строке записано n чисел, разделенных пробелами, b1, ..., bn (1 ≤ bi ≤ 109) — элементы последовательности B.

Выходные данные

На первой строке выведите целое число k, которое обозначает размер найденного подмножества. k должно быть меньше либо равно чем .

На следующей строке выведите k целых чисел p1, p2, ..., pk (1 ≤ pi ≤ n) — элементы последовательности P. Вы можете вывести числа в любом порядке. Числа в P должны быть различны.

E. Майк и код перестановки

графы Конструктив сортировки Структуры данных *3000

Майк открыл новый способ кодирования перестановок. Если у него есть перестановка P = [p1, p2, ..., pn], он закодирует ее следующим образом:

Пусть A = [a1, a2, ..., an] — последовательность длины n, которая будет представлять код перестановки. Для каждого i от 1 до n последовательно он будет выбирать наименьшее непомеченное j (1 ≤ j ≤ n) такое, что pi < pj и присвоит в ai число j (другими словами выполнит ai = j) и пометит j. Если такого j не существует, то он присвоит в ai число  - 1 (он выполнит ai =  - 1).

Майк забыл свою изначальную перестановку, но он помнит ее код. Ваша задача проста: найдите любую перестановку такую, что ее код такой же, как и код изначальной перестановки Майка.

Вы можете предположить, что всегда существует хотя бы одна перестановка.

Входные данные

Первая строка содержит единственное целое число n (1 ≤ n ≤ 500 000) — длина перестановки.

Вторая строка содержит n целых чисел, разделенных пробелами, a1, a2, ..., an (1 ≤ ai ≤ n или ai =  - 1) — код перестановки Майка.

Вы можете предположить, что все положительные числа из A различны.

Выходные данные

В первой и единственной строке выведите n чисел p1, p2, ..., pn (1 ≤ pi ≤ n) — перестановка P, которая имеет такой же код, что и данный. Заметьте, что числа в перестановке различны.

Примечание

Для перестановки из первого примера:

i = 1, наименьшее j равно 2, потому что p2 = 6 > p1 = 2.

i = 2, нет такого j, потому что p2 = 6 наибольший элемент в перестановке.

i = 3, наименьшее j равно 1 потому что p1 = 2 > p3 = 1.

i = 4, наименьшее j равно 5 (2 уже помечено), потому что p5 = 5 > p4 = 4.

i = 5, нет такого j, потому что 2 уже помечено.

i = 6, наименьшее j равно 4, потому что p4 = 4 > p6 = 3.

B. Роботомания

графы Конструктив реализация *1400

Весь мир охватила роботомания и, чтобы не отставать от прогресса, великий берляндский программист Дравдэ решил создать собственного робота. Дравдэ долго и упорно трудился над роботом. Он научил его ходить кратчайшим путем из одной точки в другую, научил записывать все свои передвижения, но, как и во многих программах Дравдэ, нашелся баг — робот не всегда ходил кратчайшими путями. Благо, что собственные передвижения робот записывал правильно. Теперь Дравдэ хочет узнать, когда его робот неправильно работает. Эх, если бы Дравдэ помнил карту местности, на которой происходило тестирование робота, он бы легко сказал правильно прошел робот или нет. Но карта местности безвозвратно потерялась, и поэтому он поручает вам проверить: существует ли хотя бы одна такая карта, на которой путь записанный роботом является кратчайшим.

Карта представляет собой бесконечное клетчатое поле, где каждая клетка либо пустая, либо содержит препятствие. Также известно, что робот никогда не пытается врезаться в препятствие. По записи робота о его передвижении определите, существует ли хотя бы одна такая карта, что на ней можно выбрать стартовую клетку для робота (стартовая клетка должна быть пустой), при движении из которой запись корректна (робот ни во что не врезается, двигаясь только по пустым клеткам), и путь из стартовой точки в конечную является кратчайшим.

За один ход робот может передвинуться на любую соседнюю по стороне клетку, если она не является препятствием.

Входные данные

В первой строке входного файла содержится запись ходов робота. Запись ходов — это непустая строка, состоящая из прописных латинских букв L, R, U и D, обозначающих соответственно передвижение влево, вправо, вверх и вниз. Длина строки не превосходит 100.

Выходные данные

Выходной файл должен содержать в первой строке единственное слово OK (если существует описанная карта) или BUG (если не существует такой карты).

B. Весомые Клавиши

жадные алгоритмы Конструктив Строки *900

Вы нашли странную функцию f. Функция принимает две строки s1 и s2. Эти строки могут состоять только из строчных букв латинского алфавита, а их длины должны совпадать.

Результатом функции f будет другая строка той же длины. Символ i результата равен минимальному из i-го символа s1 и i-го символа s2.

Например, f(«ab», «ba») = «aa», а f(«nzwzl», «zizez») = «niwel».

Вы нашли две строки x и y совпадающей длины, состоящие только из строчных букв латинского алфавита. Найдите любую строку z такую, что f(x, z) = y, или выведите -1, если такой строки z не существует.

Входные данные

Первая строка содержит строку x.

Вторая строка содержит строку y.

Обе строки x и y состоят только из строчных букв латинского алфавита, x и y имеют одинаковую длину от 1 до 100.

Выходные данные

Если не существует строки z такой, что f(x, z) = y, выведите -1.

Иначе выведите строку z такую, что f(x, z) = y. Если существует несколько возможных ответов, выведите любой из них. Строка z должна быть той же длины, что и строки x и y и состоять только из строчных букв латинского алфавита.

Примечание

Первый пример разобран в условии.

Другое возможное решение во втором примере — «zizez»

В третьем примере нет решений. Другими словами, не существует строки z такой, что f(«ab», z) =  «ba».

H. Ложные Новости (средняя)

Конструктив Строки *2200

Спасибо за помощь, Хайди уверена, что никто ее не одурачит. Она решила отправить несколько ложных новостей на страницу HC2 в Facebook. Однако она хочет иметь возможность сообщить комитету HC2 о том, что заметка ложная, используя скрытую секретную фразу в заметке. Чтобы сделать этот метод безошибочным, она хочет, чтобы фраза появлялась в записи n раз. Она просит вас разработать запись (строку) s и скрытую фразу p, так что p появляется в s как подпоследовательность ровно n раз.

Входные данные

В первой строке следует целое число n (1 ≤ n ≤ 1 000 000).

Выходные данные

Выведите две непустые строки s и p, разделенных пробелом. Каждая строка должна состоять из букв (a-z и A-Z: допускаются как строчные, так и прописные буквы) и иметь длину не более 200. Число вхождений p в s в качестве подпоследовательности должно быть точно n. Если существует несколько возможных решений, выведите любое из них. Гарантируется, что существует хотя бы одно решение.

Примечание

Вхождение p в качестве последовательности s следует рассматривать как набор позиций s таких, что буквы в этих позициях в порядке p. Количество вхождений является числом таких множеств. Например, ab появляется 6 раз как последовательность в aaabb, для следующих наборов позиций: {1, 4}, {1, 5}, {2, 4}, {2, 5}, {3, 4}, {3, 5} (то есть мы должны выбрать одну из букв a и одну из букв b).

A. Максимальная бинарная матрица

Конструктив *1400

Задана матрица из n строк и n столбцов, полностью заполненная нулями. Ваша задача — расставить в ней ровно k единиц таким образом, чтобы полученная матрица была симметрична относительно главной диагонали (диагональ из верхнего левого угла в нижний правый) и лексикографически максимальна.

Одна матрица лексикографически больше другой, если в первой сверху строке, в которой они различаются, в первом из различающихся символов в первой матрице записано большее число, чем соответствующее число во второй.

Если такой матрицы не существует, то выведите -1.

Входные данные

В единственной строке записаны два числа n и k (1 ≤ n ≤ 100, 0 ≤ k ≤ 106).

Выходные данные

Если ответ существует, то выведите полученную матрицу. Иначе выведите -1.

B. Расстояния до нуля

Конструктив *1200

Задан массив a0, a1, ..., an - 1. Для каждого элемента найдите расстояние от него до ближайшего нуля. Гарантируется, что в массиве встречается ноль хотя бы один раз.

Входные данные

В первой строке входных данных содержится целое число n (1 ≤ n ≤ 2·105) — длина массива a. Вторая строка содержит элементы массива, записанные через пробел ( - 109 ≤ ai ≤ 109).

Выходные данные

Выведите последовательность d0, d1, ..., dn - 1. Значение di должно быть равно расстоянию от элемента в позиции i до ближайшей такой позиции j, что aj = 0. Допустимо, что i = j.

C. Максимальный НОД

жадные алгоритмы Конструктив математика *1900

Задано целое положительное число n. Ваша задача — составить такую строго возрастающую последовательность из k положительных чисел a1, a2, ..., ak, что их сумма равна n, а наибольший общий делитель максимален.

Наибольшим общим делителем последовательности называется такое наибольшее число, что каждый элемент последовательности делится на него нацело.

Если такую последовательность составить невозможно, то выведите -1.

Входные данные

В единственной строке записано два числа n и k (1 ≤ n, k ≤ 1010).

Выходные данные

Если ответ существует, то выведите k чисел — полученную последовательность. Иначе выведите -1. Если таких последовательностей несколько, выведите любую из них.

A. Найти Амира

жадные алгоритмы Конструктив математика *1000

Несколько лет назад Саджад перешел из одной школы в другую. Теперь он хочет найти Амира — своего одноклассника и хорошего друга, но не знает, в какой школе он.

Всего есть n школ, они пронумерованы от 1 до n. Саджад может путешествовать между любой парой из них, чтобы это сделать, он должен купить билет. Билет между школами i и j стоит и может быть использован сколько угодно раз. Помогите Саджаду найти минимальную стоимость, которую он должен заплатить, чтобы посетить все школы. Он может начать в любой школе и закончить в любой школе.

Входные данные

Единственная строка содержит одно целое число n (1 ≤ n ≤ 105) — количество школ.

Выходные данные

Выведите одно целое число: минимальную стоимость билетов, необходимую для того, чтобы посетить все школы.

Примечание

В первом примере билет между двумя школами стоит .

C. Раскраска мороженого

жадные алгоритмы Конструктив поиск в глубину и подобное *2200

Исарт и Модсарт пытались решить интересную задачу в момент, когда пришел Касра. Задыхаясь, он спросил: «Можете ли вы решить задачу, надо которой я думаю весь день?»

Дано дерево T из n вершин и m типов мороженого, типы пронумерованы от 1 до m. В каждая вершине дерева i есть набор из si типов мороженого. Вершины, в которых есть i-й (1 ≤ i ≤ m) тип мороженого, образуют связный подграф. Построим новый граф G из m вершин. Проведем ребро между вершинами v и u (1 ≤ u, v ≤ m, u ≠ v) в графе G, если и только если существует вершина в T такая, в ней есть и u-й, и v-й типы мороженого. Задача состоит в том, чтобы раскрасить вершины графа G в минимальное количество цветов так, чтобы никакие две соседние вершины не имели одинаковый цвет.

В этой задаче мы считаем, что пустое множество вершин образует связный подграф.

Модсарт не хочет прерывать размышления над предыдущей задачей, поэтому Исарт попросил вас решить эту новую задачу.

Входные данные

Первая строка содержит два целых числа n и m (1 ≤ n, m ≤ 3·105) — количество вершин в T и количество типов мороженого.

Далее следуют n строк, i-я из этих строк содержит сначала целое число si (0 ≤ si ≤ 3·105), а затем si различных целых чисел, каждое в пределах от 1 до m — типа мороженого в i-й вершине. Сумма величин si не превосходит 5·105.

Далее следуют n - 1 строк. Каждая из этих строк описывает очередное ребро дерева двумя целыми числами u и v (1 ≤ u, v ≤ n) — индексами вершин, соединенных этим ребром.

Выходные данные

В первой строке выведите одно целое число c — минимально возможное число цветов для раскраски графа G.

Во второй строке выведите m целых чисел, i-е из них должно быть номером цвета вершины номер i. Цвета должны быть в пределах от 1 до c.

Примечание

В первом примере первый тип мороженого присутствует только в первой вершине дерева, поэтому мы можем покрасить его в любой цвет. Второй и третий типы присутствуют оба во второй вершине, поэтому мы должны покрасить их в разные цвета.

Во втором примере цвета второго, четвертого и пятого типов мороженого обязательно должны быть различны.

E. Та же перестановка

Конструктив *3100

Саид и Моджак — друзья Саджада. Саджаду нравится одна перестановка. Саид хочет изменить перестановку, чтобы она переставила нравится Саджаду. Саид думает, что чем больше пар элементов он поменяет местами, тем больше вероятность того, что Саджаду она не понравится. Поэтому он попросил Моджака поменять местами элементы на каждой паре позиций (i, j), где i < j, ровно по одному разу. Моджак не хочет расстраивать Саджада.

Определите, возможно ли переставить местами элементы на каждой паре позиций по одному разу так, чтобы перестановка не изменилась. Если это возможно, выведите порядок, в котором это можно сделать.

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 1000) — размер перестановки.

Так как сама перестановка не важна, можете считать. что ai = i, где a1, a2, ..., an — это перестановка.

Выходные данные

Если невозможно поменять элементы на каждой паре позиций местами так, чтобы перестановка не изменилась, выведите «NO»,

Иначе выведите «YES», а затем выведите строк: i-я из этих строк должна содержать два целых числа a и b (a < b) — позиции, элементы на которых нужно поменять местами i-ми по очереди.

B. 3-палиндром

Конструктив *1000

В начале нового года Кейван решил перевернуть свое имя. Он не любит палиндромы, поэтому он даже изменил Навйек на Навик.

Кроме того, он хочет по заданному целому числу n получить строку из n символов, каждый из которых — «a», «b» или «c», такую, чтобы в ней не было подстрок-палиндромов длины 3. Например, строки «abc» и «abca» подойдут ему, а строка «aba» — нет. Кроме того, он хочет, чтобы в строке было как можно меньше букв «c».

Входные данные

Единственная строка содержит одно целое число n (1 ≤ n ≤ 2·105) — длину строки.

Выходные данные

Выведите подходящую строку.

Если ответов несколько, выведите любой из них.

Примечание

Палиндром — подпоследовательность символов, которая читается одинаково слева направо и справа налево.

C. Чаепитие

жадные алгоритмы Конструктив сортировки *1400

Поликарп собрал всех своих друзей на чаепитие, чтобы отметить важное событие. У него есть n чашек, по одной для каждого из n друзей, объемами a1, a2, ..., an. Его чайник вмещает в себя w миллилитров чая (w ≤ a1 + a2 + ... + an). Поликарп хочет разлить чай по чашкам таким образом, чтобы:

  • Каждая чашка была заполнена не меньше, чем на половину своего объема
  • В каждой чашке было налито целое число миллилитров чая
  • Весь чай из чайника был разлит по чашкам
  • Ни один из друзей не расстроился

Известно, что обладатель чашки i расстроится, если существует такая чашка j, что в i налили меньше чая, чем в j, но ai > aj.

Для каждой чашки выведите, сколько миллилитров чая должно быть в нее налито. Если невозможно разлить весь чай таким образом, чтобы удовлетворить все условия, то выведите -1.

Входные данные

В первой строке записано два целых числа n и w (1 ≤ n ≤ 100, ).

Во второй строке записано n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 100).

Выходные данные

Выведите для каждой чашки, сколько миллилитров чая должно быть в нее налито. Если ответов несколько, выведите любой из них.

Если невозможно разлить весь чай таким образом, чтобы удовлетворить все условия, то выведите -1.

Примечание

В третьем примере необходимо налить в первую чашку не меньше 5 миллилитров, во вторую — не меньше 4, в третью — не меньше 5. В сумме получается 14 миллилитров, что превосходит количество чая в чайнике.

D. Фотогалерея Поликарпа

жадные алгоритмы Конструктив *2100

Поликарп любит не только фотографировать, но и показывать свои фотографии друзьям. На своем личном сайте недавно он установил виджет, который может отображать n фотографий с возможностью их прокрутки. В каждый момент времени виджет показывает ровно одну фотографию с возможностью перехода к предыдущей/следующей. С первой фотографии можно перейти на вторую или n-ую, со второй — на третью или первую и т.д. Таким образом навигация осуществляется по циклу.

Коллекция Поликарпа состоит из m фотоальбомов, i-ый фотоальбом содержит ai фотографий. Поликарп хочет, выбрать n фотографий и поместить их на новый виджет. Для того, чтобы посетителям сайта было интересно просматривать фото, он собирается разместить фотографии так, что никакие две фото с одного альбома не будут соседствовать (у каждой фотографии будет ровно два соседа, у первой — вторая и n-ая).

Помогите Поликарпу составить фотогалерею. Выберите n фотографий из его коллекции и разместите их в таком порядке, что никакие два фото из одного альбома не идут подряд.

Входные данные

В первой строке записаны два целых числа n и m (3 ≤ n ≤ 1000, 1 ≤ m ≤ 40), где n — количество фотографий на виджете, а m — количество альбомов. Вторая строка содержит m целых чисел a1, a2, ..., am (1 ≤ ai ≤ 1000), где ai — количество фотографий в i-ом альбоме.

Выходные данные

Выведите единственное число -1, если решения не существует. В противном случае выведите n чисел t1, t2, ..., tn, где ti обозначает номер альбома i-ой фотографии на виджете. Альбомы нумеруются от 1 в порядке их задания во входных данных. Если решений несколько, то выведите любое.

D. Владик и любимая игра

графы интерактив Конструктив поиск в глубину и подобное *2100

Это интерактивная задача.

У Владика есть любимая игра, в которую он играет практически все свободное время.

Игровое поле представляет из себя матрицу n × m, клетки которого бывают трех типов:

  • «.» — обычная, игрок может свободно в ней находиться.
  • «F» — конечная, клетка до которой должен добраться игрок. Такая клетка будет ровно одна.
  • «*» — смертельная, оказавшись в ней игрок проиграет.

Изначально игрок находится в левой верхней клетке с координатами (1, 1).

Игроку доступны 4 кнопки «U», «D», «L», «R», каждая из которых перемещает его в направлениях вверх, вниз, влево, вправо соответственно.

Но не все так просто! Друзья иногда играют в игру и меняют управление, поменять между собой можно кнопки «L» и «R», а также «U» и «D». То есть кнопка «L» может выполнять операцию кнопки «R», в таком случае кнопка «R» будет выполнять операцию кнопки «L». Операции, за которые отвечают «U» и «D», обмениваются таким же образом. Обратите внимание, что направления могут поменяться только в начале игры.

Помогите Владику пройти игру!

Входные данные

На первой строке через пробел задано два числа n и m (1 ≤ n, m ≤ 100) — количество строк и столбцов поля соответственно.

В каждой из последующих n строк содержится m символов, описывающих соответствующую строку поля. Возможные варианты символов описаны в условии задачи.

Гарантируется, что клетка с координатами (1, 1) будет обычной, а также существует путь из начальной клетки до конечной не содержащий смертельных клеток.

Протокол взаимодействия

Вы можете сделать не более n·m нажатий на кнопку.

Для нажатия на кнопку вы должны в отдельной строке вывести «U», «D», «L», «R». Обязательно требуется вывести перевод строки и сделать операцию flush. После сброса буфера необходимо считать ответ на запрос из входных данных. Ответом будет являться пара целых чисел x, y, записанных через пробел, — новая позиция игрока. В случае, когда не существует клетки по направлению, за которое отвечает нажатая кнопка, позиция игрока не поменяется. Если после очередного хода игрок проиграет, то есть перейдет в смертельную клетку, x и y будут равны  - 1.

Если в результате очередного хода игрок окажется в конечной клетке либо проиграет, вы должны будете завершить работу программы.

Для сброса буфера вывода (то есть для операции flush) сразу после вывода направления и перевода строки можно сделать:

  • fflush(stdout) в языке C++
  • System.out.flush() в Java
  • stdout.flush() в Python
  • flush(output) в Pascal
  • смотрите документацию для других языков

Взломы

Чтобы совершить взлом, вам потребуется использовать следующий формат:


n m swapLR swapUD
a_1
a_2
...
a_n

Где n, m – количество строк и столбцов у игрового поля. swapLR равно 1, в случае, когда направления «L» и «R» поменялись местами и 0 в обратном случае. swapUD равно 1, в случае, когда направления «U» и «D» поменялись местами и 0 в обратном случае. a1, a2, ..., an — описание соответствующих строк игрового поля.

Примечание

В первом тестовом примере все четыре направления обменялись местами со своими обратными. Протокол взаимодействия в более удобном формате:

Этот тест можно было бы представить во время взлома следующим образом:


4 3 1 1
...
**.
F*.
...

A. Утраченное настроение прошлого

жадные алгоритмы Конструктив реализация сортировки *900

Несколько лет назад Хитаги встретила гигантского краба, которых украл весь ее вес. С тех пор она избегает контакта с кем-либо, так как боится, что ее секрет будет замечен.

Чтобы снова получить свой вес, необходима особая последовательность целых чисел. Эта последовательность была давно разрушена, однако, с помощью Каики, возможно, получится восстановить ее.

Необходимая последовательность a имеет длину n. Утерянные элементы в ней сейчас заменены нулями. У Каики есть еще одна последовательность b, длина которой k равна числу утерянных элементов в a (т.е. числу нулей). Хитаги должна заменить каждый ноль в a одним элементом из b так, что каждый элемент из b будет использован ровно один раз. Хитаги, однако, знает, что, кроме 0, ни одно число не встречается суммарно в a и b более одного раза.

Если получившаяся последовательность не является возрастающей, то она позволит вернуть Хитаги вес. Вам предстоит определить, возможно ли такое. Другими словами, вы должны определить, возможно ли заменить каждый ноль в последовательности a числом из последовательности b так, чтобы каждое число из b было использовано ровно единожды, и получившаяся последовательность не являлась возрастающей.

Входные данные

Первая строка содержит два положительных целых числа n (2 ≤ n ≤ 100) и k (1 ≤ k ≤ n) — длины последовательностей a и b, соответственно.

Вторая строка содержит n целых чисел a1, a2, ..., an (0 ≤ ai ≤ 200) — последовательность, имеющаяся у Хитаги и содержащая ровно k нулей.

Третья строка содержит k целых чисел b1, b2, ..., bk (1 ≤ bi ≤ 200) — элементы, которыми нужно заменить нули в последовательности Хитаги.

Гарантируется, что, кроме 0, ни одно целое число не встречается в a и b суммарно более чем один раз.

Выходные данные

Выведите «Yes», если возможно заменить нули в a элементами из b и сделать последовательность не возрастающей, и «No» иначе.

Примечание

В первом примере:

  • Последовательность a имеет вид 11, 0, 0, 14.
  • Два элемента последовательности утеряны, возможными кандидатами в b являются 5 и 4.
  • Возможно получить две последовательности: 11, 5, 4, 14 и 11, 4, 5, 14, они обе подходят. Поэтому ответ «Yes».

Во втором примере единственная возможная последовательность — 2, 3, 5, 8, 9, 10, которая является возрастающей, следовательно, не подходит.

B. Экспресс до мечты

Конструктив *1300

Сенгоку до сих пор помнит о мистических «цветных метеорах», которые она наблюдала вместе с Лала-чаном, когда они были маленькими. В частности, одна из ночей произвела глубокое впечатление на нее, дав ощущение, что все ее мечты сбудутся.

В ту ночь Сенгоку построила перестановку p1, p2, ..., pn чисел от 1 до n включительно, где каждое число обозначало цвет, таким образом загадав последовательность цветов в следующей вспышке метеоров. Две восхитительные вспышки произошли после этого, каждая — из n метеоров, цвета которых образовали последовательности a1, a2, ..., an и b1, b2, ..., bn, соответственно. Цвета метеоров были также от 1 до n включительно, и две последовательности были различные, то есть, существовал хотя бы один индекс i (1 ≤ i ≤ n) такой, что ai ≠ bi.

Сенгоку почти получила то, что хотела: каждая из последовательностей a и b совпадала ровно в n - 1 позиции с загаданной перестановкой. Другими словами, существовал ровно один индекс i (1 ≤ i ≤ n) такой, что ai ≠ pi, и ровно один индекс j (1 ≤ j ≤ n) такой, что bj ≠ pj.

Сейчас Сенгоку может восстановить последовательности a и b по данным астрономических наблюдений, но ее желания уже давно забыты. Вы должны восстановить любую возможную перестановку, которую Сенгоку могла загадать в ту ночь.

Входные данные

В первой строке находится одно целое число n (2 ≤ n ≤ 1 000) — длина последовательности, загаданной Сенгоку, что также является длиной обеих вспышек метеоров.

Во второй строке находятся n целых чисел a1, a2, ..., an (1 ≤ ai ≤ n) — последовательность цветов в первой вспышке метеоров.

В третьей строке находятся n целых чисел b1, b2, ..., bn (1 ≤ bi ≤ n) — последовательность цветов во второй вспышке метеоров. Существует как минимум один индекс i (1 ≤ i ≤ n) такой, что ai ≠ bi.

Выходные данные

Выведите n целых чисел p1, p2, ..., pn — возможную перестановку, которую загадала Сенгоку. Если существует несколько ответов, выведите любой.

Гарантируется, что хотя бы один ответ существует.

Примечание

В первом примере перестановки 1, 2, 5, 4, 3 и 1, 2, 3, 4, 5 являются допустимыми.

Во втором примере единственной подходящей перестановкой является 5, 4, 2, 3, 1.

B. Карен и тест

Комбинаторика Конструктив математика Перебор *2200

Карен только что пришла в школу, у нее сегодня тест по математике!

Тест проверяет умения складывать и вычитать числа. К сожалению, учителя были заняты подготовкой задач к раунду Codeforces, поэтому у них не было времени сделать тест. Поэтому они дали лишь одну задачу, которая стоит все баллы.

В ряд записаны n целых чисел. Карен должна по очереди складывать и вычитать каждую пару соседних чисел, и записывать получающиеся суммы или разности в следующий ряд. Затем она должна повторить процесс со следующим рядом, и так далее, пока не останется ровно одно число. Первой операцией должно быть сложение.

Заметьте, что, если она закончила предыдущий ряд, вычислив сумму чисел, то она должна начать новый ряд вычитанием, и наоборот.

Учителя просто посмотрят на последнее число: если оно окажется верным, то Карен получит полный балл, иначе — ноль.

Карен хорошо подготовилась к тесту, но боится сделать ошибку где-нибудь, что приведет ее к неправильному финальному ответу. Можете вычислить, какое число она должна получить в конце?

Так как это число может быть большим, выведите неотрицательный остаток от его деления на 109 + 7.

Входные данные

Первая строка содержит одно целое число n (1 ≤ n ≤ 200000) — количество чисел, записанных в первом ряду.

Вторая строка содержит n целых чисел. А именно, i-е из этих чисел равно ai (1 ≤ ai ≤ 109) — i-му числу в первом ряду.

Выходные данные

Выведите одно целое число: число в последнем ряду после выполнения всех операций.

Так как оно может быть большим, выведите его неотрицательный остаток от деления на 109 + 7.

Примечание

В первом примере числа в первом ряду равны 3, 6, 9, 12 и 15.

Карен выполняет операции как показано на рисунке:

Неотрицательный остаток от деления итогового числа на 109 + 7 равен 36.

Во втором примере числа в первом ряду равны 3, 7, 5 и 2.

Карен выполняет следующие операции:

Неотрицательных остаток от деления итогового числа на 109 + 7 равен 109 + 6.

E. Карен и район

Бинарный поиск Конструктив реализация *2900

Прошло много лет после событий предыдущих задач, и Карен уже закончила учиться и собирается переехать в новый район.

Район состоит из n домов, расположенных на прямой, пронумерованных от 1 до n слева направо, с равными расстояниями между ними.

Каждый в этом районе любит тишину и покой. Поэтому когда новый житель переезжает сюда, он выбирает такой дом, что минимальное расстояние до любого из занятых домов является максимально возможным. Если домов с максимально возможным минимальным расстоянием несколько, житель выбирает самый левый из них.

Обратите внимание, что первый житель всегда выбирает дом номер 1.

Карен будет k-м по счету жителем этого района. Если все, включая ее, следуют вышеописанному правилу, в какой дом переедет она?

Входные данные

Единственная строка сожержит два целых числа n и k (1 ≤ k ≤ n ≤ 1018), описывающие число домов в районе и то, что Карен является k-м по счету жителем, переезжающим в район, сооветственно.

Выходные данные

Выведите одно число: номер дома, который выберет Карен.

Примечание

В первом примере в районе 6 домов, и Карен — четвертый по счету житель.

  1. Первый житель выберет дом 1.
  2. Второй житель выберет дом 6.
  3. Третий житель выберет дом 3.
  4. Четвертый житель выберет дом 2.

Во втором примере в районе 39 домов, Карен — третий по счету житель.

  1. Первый житель выберет дом 1.
  2. Второй житель выберет дом 39.
  3. Третий житель выберет дом 20.

E. Мистер Б и полет на Луну

графы Конструктив *2800

Мистеру Б, чтобы долететь до Луны, достаточно решить следующую задачу.

Есть полный неориентированный граф из n вершин, нужно покрыть его несколькими простыми циклами длины 3 и 4 так, чтобы каждое ребро встречалось ровно в 2 циклах.

А вы сможете отправиться на Луну?

Входные данные

Единственное число n (3 ≤ n ≤ 300).

Выходные данные

Если решения не существует, выведите -1.

Иначе в первой строке выведите одно число k (1 ≤ k ≤ n2) — количество циклов в вашем решении.

В каждой из следующих k строк выведите описание одного цикла в следующем формате: сначала выведите число m (3 ≤ m ≤ 4) — длину цикла, а затем m целых чисел v1, v2, ..., vm (1 ≤ vi ≤ n) — вершины в цикле в порядке обхода. Каждое ребро должно входить ровно в два цикла.

B. Множества

Конструктив реализация хэши *1700

Маленький Вася очень любит играть со множествами из натуральных чисел. Для того, чтобы играть было еще интереснее, Вася выбрал n таких непустых множеств, что никакие два из них не имеют общих элементов.

Однажды он захотел показать своим друзьям, что играть с числами очень интересно. Для этого он выписал на n·(n - 1) / 2 листочках бумаги всевозможные объединения двух различных множеств и перемешал сами листочки. Числа в объединениях он выписывал в произвольном порядке.

Например, если n = 4, а сами множества имеют вид {1, 3}, {5}, {2, 4}, {7}, то количество пар множеств окажется равным шести. На шести листочках могут быть указаны следующие числа:

  • 2, 7, 4.
  • 1, 7, 3;
  • 5, 4, 2;
  • 1, 3, 5;
  • 3, 1, 2, 4;
  • 5, 7.

Затем Вася показал эти листочки друзьям, но n множеств сохранил от них в секрете. Друзья смогли быстро вычислить, какие множества загадал Вася. А сможете ли вы восстановить множества по заданным листочкам?

Входные данные

В первой строке входного файла находится число n (2 ≤ n ≤ 200), n — количество имещихся у Васи множеств. Далее в n·(n - 1) / 2 строках записаны наборы чисел на листочках. Каждый набор начинается с числа ki (2 ≤ ki ≤ 200) — количества записанных чисел на i-ом листочке, а далее записаны ki чисел aij (1 ≤ aij ≤ 200). Все числа в строках разделены ровно одним пробелом. Гарантируется, что входные данные построены по описанным выше правилам из n непересекающихся множеств.

Выходные данные

Выведите в n строках описание множеств Васи. Первое число в строке — это количество чисел в текущем множестве, а далее должны быть записано множество перечислением своих элементов. Числа разделяйте пробелами. Каждое число и каждое множество нужно выводить ровно один раз. Множества и числа в них выводите в любом порядке. Если ответов несколько, выведите любой.

Гарантируется, что решение существует.

B. Мистер Б и угол в многоугольнике

геометрия Конструктив математика *1300

Однажды, разбираясь в своих каждодневных заботах, Мистеру Б понадобилось получить угол a и начертить его на своем поле. Так случилось, что инопланетяне оставили уже множество различных фигур на его поле, среди которых был правильный n-угольник (правильный многоугольник с n сторонами).

Именно этой фигурой Мистер Б и решил воспользоваться. Теперь Мистеру Б необходимо найти три попарно различные вершины многоугольника v1, v2, v3 такие, что угол (т.е. угол, в котором v2 — вершина, а v1 и v3 лежат на сторонах) будет как можно ближе к a. Иными словами, необходимо, чтобы величина — была минимально возможной.

При этом Мистера Б устроит любое из возможных решений.

Входные данные

В первой и единственной строке через пробел заданы два целых числа: n и a (3 ≤ n ≤ 105, 1 ≤ a ≤ 180) — количество вершин в многоугольнике и необходимый угол в градусах.

Выходные данные

Выведите через пробел три различные вершины многоугольника v1, v2, v3, образующие угол . Если существует несколько решений, выведите любое. Вершины многоугольника нумеруются от 1 до n в порядке обхода по часовой стрелке.

Примечание

В первом примере вершины равностороннего треугольника могут давать только угол в 60 градусов, поэтому ответом является любой возможный угол.

В квадрате же можно получить только углы в 45 и 90 градусов. Поэтому во втором примере выбирается угол в 45 градусов, так как |45 - 67| < |90 - 67|. Корректными также являются ответы: "3 1 2", "3 2 4", "4 2 3", "4 3 1", "1 3 4", "1 4 2", "2 4 1", "4 1 3", "3 1 4", "3 4 2", "2 4 3", "2 3 1", "1 3 2", "1 2 4", "4 2 1".

В третьем примере, напротив, выбирается угол в 90 градусов, так как |90 - 68| < |45 - 68|. Корректными также являются ответы: "2 1 4", "3 2 1", "1 2 3", "4 3 2", "2 3 4", "1 4 3", "3 4 1".

F. Безумие

Деревья Конструктив поиск в глубину и подобное *2500

В университете Павлополиса начинается второй семестр. После отдыха в Вичкополисе Нура вынуждена вернуться в Павлополис и продолжить обучение.

Иногда (или достаточно часто) встречаются преподаватели, которым вы не нравитесь. Вот и у Нуры есть такой. Зовут его Юрий Дмитриевич и он преподает теорию графов. Нура совсем не нравится Юрию Дмитриевичу, поэтому он всегда даёт девушке самые сложные задания. Так случилось и на этот раз.

Преподаватель даёт Нуре дерево из n вершин. Вершины пронумерованы целыми числами от 1 до n. Длины всех ребер этого дерева равны 1. Нура выбирает некоторое множество простых путей, которые попарно не пересекаются по ребрам. При этом каждая вершина должна принадлежать хотя бы одному из выбранных путей.

Для каждого из выбранных путей выполняется следующее:

  1. Выбирается ровно одно ребро (u, v), которое принадлежит пути.
  2. На выбранном ребре (u, v) отмечается точка на некотором выбранном расстоянии x от вершины u и расстоянии 1 - x от вершины v. При этом расстояние x выбирается Нурой произвольно, то есть может быть различным для разных ребер.
  3. Выбирается одна из вершин u или v — именно к выбранной вершине точка начнет свое движение.

Поясним, как происходит движение точки на примере. Пусть путь состоит из двух ребер (v1, v2) и (v2, v3), точка изначально стоит на ребре (v1, v2) и начнет свое движение к вершине v1. Достигнет v1, затем «развернётся», так как был достигнут конец пути, начнет движение к v2, оттуда к v3, там снова «развернётся», переместится к v2 и так далее. При этом скорость движения точек равна 1 ребро в секунду. Например, за 0.5 секунды точка перемещается на длину половины ребра.

В каждую вершину дерева помещается секундомер. Время, которое показывают секундомеры в начальный момент времени, равно 0 секунд. Затем в начальный момент времени все точки одновременно начинают движения с выбранных позиций в выбранные направления по выбранным путям, а секундомеры одновременно запускаются. Когда какая-то из точек достигает вершины v, секундомер в вершине v автоматически обнуляется, то есть начинает считать время с нуля.

Обозначим за resv — максимальное время, которое покажет секундомер в вершине v, если процесс движения точек будет продолжаться бесконечно. Нуру просят выбрать пути и точки на них так, чтобы res1 было минимально возможным. Если вариантов сделать это несколько, необходимо минимизировать res2, затем res3, res4, ..., resn.

Помогите Нуре выполнить задание преподавателя.

Для лучшего понимания условия задачи смотрите пояснение к примерам.

Входные данные

В первой строке строке задано одно целое число n (2 ≤ n ≤ 100) — количество вершин в заданном преподавателем дереве.

В последующих n - 1 строках заданы по два целых числа u и v (1 ≤ u, v ≤ n, u ≠ v) — вершины, связанные очередным ребром дерева.

Гарантируется, что входные данные задают корректное дерево.

Выходные данные

В первой строке выведите одно целое число paths — количество путей, которые вы хотите выбрать.

В последующих paths строках выведите описания путей:

  1. Одно целое число len — количество ребер в текущем пути.
  2. len целых чисел — номера ребер, входящих в текущий путь. Ребра нумеруются от 1 до n - 1 в том порядке, в котором они следуют во входном файле.
  3. Два целых числа u и v — это будет означать, что вы поставили точку на ребро между вершинами u и v (очевидно, что оно должно принадлежать пути) и точка начнет движение по направлению к вершине v. Обратите внимание, что важен порядок, в котором вы выведите эти два числа. Например, если вы выведите «1 2» (без кавычек), то точка начнет движение по направлению к вершине с номером 2; если же вывести «2 1» (без кавычек), то точка начнет движение по направлению к вершине с номером 1.
  4. Одно вещественное число x (0 ≤ x ≤ 1) — расстояние между точкой и вершиной u (той самой, номер которой вы вывели первым в пункте 3).
Система оценки

Система проверки сгенерирует массив res по выходным данным, предоставленным участником. Кроме того, система проверки сгенерирует массив resOptimal по ответу жюри. Ваше решение будет считаться корректным, если для каждого целого i (1 ≤ i ≤ n) .

Примечание

Рассмотрим пример.

В начальный момент времени точки расположены следующим образом:

Красным выделен первый путь, синим — второй, зеленые круги обозначают выбранные точки, а коричневые числа внутри вершин — текущее значение секундомера. Фиолетовые стрелочки показывают направление, куда будет двигаться точка.

Через 0.(3) секунд точки будут расположены следующим образом (до обнуления секундомеров):

После обнуления секундомеров:

Через 1.0 секунду после начала движения:

Через 1.(3) секунд после начала движения (после обнуления секундомеров):

Наконец, через 2 секунды после начала движения точки вернутся на исходные позиции:

Такой процесс движения будет продолжаться бесконечно.

C. Оценки жюри

Конструктив Перебор *1700

Поликарп смотрел шоу, где k членов жюри последовательно оценивали участника, начисляя ему некоторое количество баллов (возможно отрицательное, то есть баллы снимали). Изначально у участника было некоторое количество баллов, и каждая оценка последовательно добавлялась к его количеству баллов. Известно, что i-й член жюри поставил оценку ai.

Поликарп не помнит, сколько баллов было у участника до этих k оценок, но помнит, что среди результатов участника, которые озвучивались после того, как каждый из k жюри поставил оценку, точно были n (n ≤ k) значений b1, b2, ..., bn (гарантируется, что все bj различны). Возможно такое, что Поликарп помнит не все озвученные результаты, то есть n < k. Обратите внимание, начальный результат участника не озвучивался.

Перед вами стоит задача определить количество вариантов того, сколько баллов мог иметь участник до оценок жюри.

Входные данные

В первой строке следуют два целых числа k и n (1 ≤ n ≤ k ≤ 2 000) — количество членов жюри и количество значений, о которых помнит Поликарп.

Во второй строке следуют k целых чисел a1, a2, ..., ak ( - 2 000 ≤ ai ≤ 2 000) — оценки жюри в порядке их выставления.

В третьей строке следуют n различных целых чисел b1, b2, ..., bn ( - 4 000 000 ≤ bj ≤ 4 000 000) — значения баллов, про которые помнит Поликарп. Заметьте, что эти величины не обязательно даны в хронологическом порядке.

Выходные данные

Выведите количество вариантов того, сколько баллов мог иметь участник до оценок жюри. Если Поликарп что-то напутал и не существует ни одного подходящего варианта, выведите «0» (без кавычек).

Примечание

В первом примере ответ 3, так как изначально участник мог иметь  - 10, 10 или 15 баллов.

Во втором примере только одно подходящее изначальное количество баллов, которое равно 4 002 000.

E. Игра пингвина

Бинарный поиск интерактив Конструктив *2400

Обратите внимание: эта задача интерактивная.

Пингвин Ксорий недавно придумал новую игру. У него есть n сосулек, занумерованных целыми числами от 1 до n. Каждая сосулька имеет температуру — целое число от 1 до 109. Ровно две из этих сосулек особые: их температура равна y, в то время как температура всех остальных сосулек равна x ≠ y. Вам нужно найти две особые сосульки. Вы можете не более 19 раз выбрать некоторое непустое подмножество сосулек и спросить у пингвина, чему равно побитовое исключающее ИЛИ (XOR) температур сосулек из этого подмножества.

Вам необходимо найти особые сосульки.

Входные данные

Первая строка содержит три целых числа n, x, y (2 ≤ n ≤ 1000, 1 ≤ x, y ≤ 109, x ≠ y) — количество сосулек, температура обычных сосулек и температура особых сосулек.

Выходные данные

Чтобы сообщить пингвину свой ответ, выведите символ «!» (без кавычек), затем два целых числа p1, p2 (p1 < p2) — номера особых сосулек в порядке возрастания. Обратите внимание, что «!» и p1 должны быть разделены пробелом; номера также должны быть разделены пробелом. После того, как вы сообщили ответ, ваша программа должна немедленно завершиться.

Протокол взаимодействия

Чтобы задать вопрос, выведите символ «?» (без кавычек), число c (1 ≤ c ≤ n), а затем c различных чисел p1, p2, ..., pc (1 ≤ pi ≤ n) — номера сосулек, про которые вы хотите узнать информацию. Обратите внимание, что «?» и c должны быть разделены пробелом; номера также должны быть разделены пробелами.

После того, как вы задали вопрос, необходимо считать одно число — ответ на вопрос.

Обратите внимание, что вы можете задать не более 19 вопросов. В случае, если вы зададите больше 19 вопросов или зададите хотя бы один некорректный вопрос, ваше решение получит вердикт «Неправильный ответ».

Если в какой-то момент ваша программа считывает  - 1 как ответ, она должна немедленно завершиться (например, вызовом exit(0)). Вы получите вердикт «Неправильный ответ», и это будет означать, что вы задали больше 19 вопросов или задали некорректный вопрос. Если вы проигнорируете это, то можете получить любой вердикт, так как ваша программа продолжит читать из закрытого потока ввода.

Выше решение получит вердикт «Решение зависло», если вы не будете ничего выводить или забудете сделать операцию flush после вывода вопроса или ответа.

Чтобы выполнить операцию flush, можете использовать (сразу после вывода чисел и перевода строки):

  • fflush(stdout) в C++;
  • System.out.flush() в Java;
  • stdout.flush() в Python;
  • flush(output) в Pascal;
  • Для других языков смотрите документацию.

Взломы

Используйте следующий формат для взломов:

n x y p1 p2

Здесь 1 ≤ p1 < p2 ≤ n — номера особых сосулек.

Взламываемая программа не будет иметь доступа к этим данным.

Примечание

Для первого вопроса ответ равен .

Для второго и третьего вопросов ответ равен 1, следовательно, особые сосульки имеют номера 1 и 3.

Вы можете узнать больше про побитовый XOR здесь: https://ru.wikipedia.org/wiki/Битовые_операции.

B. Леха и другая игра про графы

графы дп Конструктив поиск в глубину и подобное Структуры данных *2100

Лехе надоело играть с полным графом, который ему подарили в прошлый раз. Теперь он проходит компьютерную игру, где на каждом уровне ему сначала выдается связный неориентированный граф из n вершин и m ребер. Граф может содержать кратные ребра, но не содержит петель. Далее для каждой вершины задается число di, которое может равняться 0, 1 или  - 1. Чтобы пройти уровень, нужно найти любое «хорошее» подмножество ребер графа или сообщить, что его не существует. Подмножество называется «хорошим», если оставив в исходном графе только ребра из него, то для каждой вершины i будет верно, что di =  - 1 или ее степень по модулю 2 равна di. Леха хотел бы поскорее пройти игру до конца и похвастаться своим друзьям, поэтому он просит Вашей помощи.

Входные данные

Первая строка содержит два целых числа n, m (1 ≤ n ≤ 3·105, n - 1 ≤ m ≤ 3·105) — число вершин и ребер соответственно.

Вторая строка содержит n целых чисел d1, d2, ..., dn ( - 1 ≤ di ≤ 1) — значения на вершинах.

Каждая из следующих m строк содержит два целых числа u и v (1 ≤ u, v ≤ n) — описание ребер. Гарантируется, что граф во входных данных является связным.

Выходные данные

Выведите  - 1 в единственной строке, если решения не существует. Иначе в первой строке выведите целое число k — количество рёбер в ответе. В следующих k строках номера ребер в подмножестве. Ребра нумеруются в порядке ввода, начиная с 1.

Примечание

В первом примере у нас есть одна вершина без рёбер. Её степень 0 и получить 1 не получится.

C. Переподвешивание дерева

графы Деревья Конструктив математика поиск в глубину и подобное *2600

Вам дано дерево размера n и разрешается выполнить не более 2n операций над ним. Операция заключается в выборе трех вершин x, y, y', удалении ребра (x, y) и добавлении ребра (x, y'). Операцию x, y, y' можно выполнить в случае, если выполнены все условия:

  1. Ребро (x, y) присутствует в дереве.
  2. После операции граф останется деревом.
  3. При удалении ребра (x, y) дерево распадается на две компоненты связности. Обозначим множество вершин в одной компоненте с вершиной x множеством Vx, а в одной компоненте с вершиной y — множеством Vy. Тогда должно выполняться условие |Vx| > |Vy|, т.е. размер компоненты с x должен быть строго больше размера компоненты с y.

Вам требуется минимизировать сумму квадратов расстояний между всеми парами вершин в итоговом дереве, полученном после не более чем 2n операций, а также предоставить последовательность операций, с помощью которых можно получить итоговое дерево из исходного.

Обратите внимание, что минимизировать количество операций не нужно. Нужно минимизировать исключительно сумму квадратов расстояний.

Входные данные

Первая строка входных данных содержит целое число n (1 ≤ n ≤ 2·105) — количество вершин в дереве.

Следующие n - 1 строки входных данных содержат пары целых чисел a и b (1 ≤ a, b ≤ n, a ≠ b) — описания рёбер. Гарантируется, что данные ребра образуют дерево.

Выходные данные

В первой строке выведите число k (0 ≤ k ≤ 2n) — количество операций, которые нужно провести, чтобы минимизировать сумму квадратов расстояний между различными парами вершин.

В следующих k строках выведите по три целых числа x, y, y' — номера вершин, участвующих в очередной операции.

Операции, в которых y = y', разрешены (хоть ничего и не меняют), если выполнены условия операции.

Если возможных ответов несколько, выведите любой из них.

Примечание

Иллюстрация изменений графа во втором примере из условия. Темным обозначены ребра после операции, пунктиром — до.

C. Суммарная вложенность

Конструктив *1800

Напомним, что скобочная последовательность называется правильной, если в неё возможно вставить символы '+' и '1' так, что получится правильное арифметическое выражение. Например, последовательность «(()())» является правильной, так как из неё возможно получить правильное арифметическое выражение, вставив символы '+' и '1': «((1+1)+(1+1))». Аналогично, следующие последовательности — правильные: «()()()», «(())» и «()». Следующие последовательности не являются правильными скобочными последовательностями: «)(», «(()» и «())(()».

В этой задаче заданы два целых числа n и k. Постройте такую правильную скобочную последовательность из круглых скобок длины n, суммарная вложенность всех открывающих скобок в которой в точности равна k. Вложенность одной открывающей скобки равна количеству пар соответствующих скобок, в которые она вложена.

Например, в последовательности «()(())» вложенность первой открывающей скобки равна 0, вложенность второй открывающей скобки равна 0, а вложенность третьей открывающей скобки равна 1. Таким образом, суммарная вложенность всех открывающих скобок равна 1.

Входные данные

В первой строке содержатся целые числа n и k (1 ≤ n ≤ 3·105, 0 ≤ k ≤ 1018) — количество открывающих скобок и необходимая суммарная вложенность.

Выходные данные

Выведите построенную правильную скобочную последовательность из круглых скобок.

Если такую последовательность невозможно построить, выведите «Impossible» (без кавычек).

Примечание

Первый пример разобран в условии.

Во втором примере ответ «(((())))». Действительно, вложенность первой открывающей скобки равна 0, вложенность второй открывающей скобки равна 1, вложенность третьей открывающей скобки равна 2, вложенность четвёртой открывающей скобки равна 3. Суммарная вложенность равна 0 + 1 + 2 + 3 = 6.

В третьем примере невозможно построить подходящую правильную скобочную последовательность, так как максимальная возможная суммарная вложенность открывающих скобок для последовательности из двух пар скобок равна 1. Такая суммарная вложенность получается для последовательности «(())».

D. Дог-шоу

жадные алгоритмы Конструктив Структуры данных *2200

Очень скоро на ТВ выйдет новое шоу с участием собак и их хозяев — Дог-Шоу. На шоу от собак требуется продемонстрировать бездонный желудок, стратегическое мышление и инстинкт самосохранения. Вы и ваша собака приглашены на шоу, и, конечно же, вы хотите выиграть!

Чтобы победить на шоу, собака должна съесть как можно больше мисок с едой (в чём поможет бездонный желудок). Собаки соревнуются отдельно друг от друга по следующим правилам:

В начале шоу на прямой находится собака в точке x = 0, а в точках x = 1, x = 2, ..., x = n находятся n мисок с едой. Миски пронумерованы от 1 до n слева направо. Как только начинается шоу, собака начинает бежать направо к ближайшей миске.

Еда в мисках в начале шоу слишком горячая и собака не может её съесть, пока она не остынет (инстинкт самосохранения мешает этому). Про i-ю из мисок известно, что еда в ней остынет через ti секунд после начала шоу, и в этот момент собака сможет её съесть.

Собака съедает миску еды мгновенно. Собака перемещается от точки x до точки x + 1 за одну секунду. При этом собаке запрещено двигаться влево, она перемещается исключительно вправо и всегда со скоростью 1 единица расстояния в секунду. Когда собака достигает миски с едой, возможны следующие варианты:

  • еда уже остыла, тогда собака мгновенно съедает еду и без какой-либо остановки продолжает двигаться вправо;
  • еда ещё не остыла, тогда собака либо останавливается и ожидает, пока еда остынет, затем съедает её и тут же начинает двигаться вправо, либо без какой-либо остановки продолжает двигаться вправо, пропустив миску с едой.

Шоу останавливается через T секунд после начала. Если собака достигает миски с едой в момент ровно T, то она уже не успевает её съесть. Если до истечения T секунд собака убежала за самую правую из мисок, шоу останавливают досрочно.

Вы должны помочь вашей собаке составить стратегию, которая позволит ей съесть максимальное количество мисок с едой за T секунд.

Входные данные

В первой строке даны два целых числа n и T (1 ≤ n ≤ 200 000, 1 ≤ T ≤ 2·109) — количество мисок с едой и время, по истечении которого собака будет остановлена.

Во второй строке дана последовательность t1, t2, ..., tn (1 ≤ ti ≤ 109), где ti равно моменту времени, когда еда в i-й миске остынет, и собака сможет её съесть.

Выходные данные

Выведите одно целое число — максимальное количество мисок с едой, которые собака сможет съесть за T секунд.

Примечание

В первом примере собака должна пропустить вторую миску, чтобы успеть поесть из двух — из первой и из третьей.

L. Компьютерная сеть Берляндского ГУ

графы Деревья Конструктив поиск в глубину и подобное хэши *2400

В компьютерной сети Берляндского государственного университета имеется n маршрутизаторов, пронумерованных от 1 до n. Некоторые пары маршрутизаторов соединены коммутационными шнурами (патч-кордами). Информация по патч-корду может передаваться в любом из двух направлений. Сеть устроена таким образом, что между любыми двумя маршрутизаторами возможна передача информации (непосредственно или через другие маршрутизаторы). В сети отсутствуют циклы, поэтому между каждой парой маршрутизаторов существует единственный путь по патч-кордам.

К сожалению, точная топология сети была утеряна администраторами. С целью её восстановления была собрана следующая вспомогательная информация.

Для каждого патч-корда p, непосредственно присоединённого к маршрутизатору i, известны все маршрутизаторы, находящиеся за патч-кордом p относительно i. Иными словами, известны все маршрутизаторы, путь от которых до маршрутизатора i включает в себя патч-корд p. Таким образом, для каждого маршрутизатора i составлены ki списков, где ki — количество патч-кордов, подключенных к i.

Например, пусть сеть состоит из трех маршрутизаторов, соединённых в цепочку 1 - 2 - 3. Тогда:

  • маршрутизатор 1: для единственного патч-корда, присоединённого к первому маршрутизатору, составлен единственный список, который содержит два маршрутизатора: 2 и 3;
  • маршрутизатор 2: для каждого из патч-кордов, присоединённых ко второму маршрутизатору, составлено по списку: один из них содержит маршрутизатор 1, а другой — маршрутизатор 3;
  • маршрутизатор 3: для единственного патч-корда, присоединённого к третьему маршрутизатору, составлен один список, который содержит два маршрутизатора: 1 и 2.

Помогите администраторам компьютерной сети БГУ восстановить топологию сети, то есть определить все пары маршрутизаторов, непосредственно соединенные патч-кордами.

Входные данные

В первой строке содержится целое число n (2 ≤ n ≤ 1000) — количество маршрутизаторов в сети БГУ.

В каждой из следующих n строк содержатся описания списков для очередного маршрутизатора. Так, i-я строка содержит списки для i-го маршрутизатора.

Описание каждого списка начинается с количества маршрутизаторов в нём. Затем следует символ ':', а после него через запятую перечисляются номера всех маршрутизаторов из списка. Описания списков для каждого патч-корда разделяются символом '-'.

Гарантируется, что для каждого маршрутизатора суммарное количество маршрутизаторов во всех списках равно n - 1, причём все числа в списках каждого маршрутизатора различны. Списки каждого маршрутизатора не содержат номер этого маршрутизатора.

Выходные данные

Если решения не существует, выведите -1.

В противном случае в первую строку выведите число n - 1 — количество патч-кордов в сети. В каждой из следующих n - 1 строк выведите по два целых числа — описания патч-кордов в виде номеров соединяемых ими маршрутизаторов. Информация о каждом патч-корде должна быть выведена ровно один раз.

Примечание

Первый пример разобран в условии.

Ответ для второго примера изображён на рисунке.

На нём мы можем видеть, что у первого маршрутизатора один список, в котором встречаются все остальные маршрутизаторы. У второго маршрутизатора три списка: в первом — маршрутизатор 4, во втором — маршрутизатор 1, а в третьем — маршрутизаторы 3 и 5. У третьего маршрутизатора один список, в котором встречаются все остальные маршрутизаторы. У четвёртого маршрутизатора тоже один список, в котором встречаются все остальные маршрутизаторы. У пятого маршрутизатора два списка: в первом — маршрутизатор 3, а во втором — маршрутизаторы 1, 2 и 4.

A. From Y to Y

Конструктив *1600

От начала времён до конца света, послание ждало своего носителя.

Пусть задан неупорядоченный набор из n строчных латинских букв, каждая буква может встречаться несколько раз. Будем считать, что все буквы — это строки длины 1, и повторим следующую операции n - 1 раз:

  • Уберем две строки s и t из набора и добавим их конкатенацию s + t в набор.

Стоимость такой операции равна , где f(s, c) означает число вхождений символа c в строку s.

По данному неотрицательному числу k постройте любой корректный непустой набор из не более чем 100 000 букв такой, что минимальная суммарная стоимость процесса для него равна в точности k. Можно показать, что такой набор всегда существует.

Входные данные

Единственная строка содержит одно целое число k (0 ≤ k ≤ 100 000) — необходимая минимальная стоимость.

Выходные данные

Выведите непустую строку из не более чем 100 000 строчных латинских букв — любой набор, удовлетворяющий ограничениям, без пробелов.

Примечание

Для набора {'a', 'b', 'a', 'b', 'a', 'b', 'a', 'b'} один из способов выполнить процесс это следующий:

  • {"ab", "a", "b", "a", "b", "a", "b"}, стоимость операции 0;
  • {"aba", "b", "a", "b", "a", "b"}, стоимость операции 1;
  • {"abab", "a", "b", "a", "b"}, стоимость операции 1;
  • {"abab", "ab", "a", "b"}, стоимость операции 0;
  • {"abab", "aba", "b"}, стоимость операции 1;
  • {"abab", "abab"}, стоимость операции 1;
  • {"abababab"}, стоимость операции 8.

Суммарная стоимость равна 12, можно доказать, что это минимальная стоимость.

Обратите внимание, что выведенная строка не обязательно быть равна финальной строке, достаточно лишь, чтобы она отвечала подходящему набору букв.

B. Rooter's Song

геометрия Конструктив реализация сортировки Структуры данных *1900

Куда бы мы не шли, кого бы не нашли, на нашем месте, исполним эту песню вместе!

На плоскости расположена прямоугольная сцена размера w × h с вершинами в точках (0, 0), (w, 0), (w, h) и (0, h).

По краям сцены находятся n танцоров. i-й из них относится к одной из следующих групп:

  • Вертикальные: стоит в (xi, 0), двигается в положительном направлении y (вверх);
  • Горизонтальные: стоит в (0, yi), двигается в положительном направлении x (вправо).

В соответствии с планом танца, i-й танцор должен стоять на месте первые ti миллисекунд, а затем начать двигаться в заданном направлении со скоростью 1 единица в миллисекунду, пока не достигнет другого края сцены. Никакие два танцора не имеют одновременно совпадающую группу, позицию и время ожидания.

Когда два танцора сталкиваются (т.е. находятся в одной точке, и оба из них двигаются), они мгновенно обмениваются направлениями движения и продолжают двигаться.

Танцоры останавливаются, как только они достигнут границы. Найдите точку остановки для каждого танцора.

Входные данные

Первая строка содержит три целых числа n, w и h (1 ≤ n ≤ 100 000, 2 ≤ w, h ≤ 100 000) — число танцоров, ширина и высота сцены, соответственно.

Каждая из следующих n строк описывает танцора: i-я из них содержит три целых числа gi, pi и ti (1 ≤ gi ≤ 2, 1 ≤ pi ≤ 99 999, 0 ≤ ti ≤ 100 000), описывающие группу танцора gi (gi = 1 — вертикальные, gi = 2 — горизонтальные), позицию, и время ожидания. Если gi = 1, то pi = xi; иначе pi = yi. Гарантируется, что 1 ≤ xi ≤ w - 1 и 1 ≤ yi ≤ h - 1. Гарантируется, что никакие два танцора не имеют одинаковую группу, позицию и время одновременно.

Выходные данные

Выведите n строк, i-я из которых содержит два целых числа (xi, yi) — позицию остановки i-го танцора.

Примечание

Первый пример соответствует начальной расстановке, показанной в условии, траектории танцоров показаны различными цветами на следующем рисунке.

Во втором примере никакие танцоры не сталкиваются.

A. Домино

Конструктив реализация *1300

Широко известна задача о количестве замощений доминошками размера 1 × 2 поля размера 2 × n. Возможно, вы помните, что она сводится к числам Фибоначчи. Ниже речь пойдет о другой задаче, в которой вам тоже предстоит иметь дело с замощениями доминошками прямоугольного поля.

Задано прямоугольное поле размера 4 × n, то есть такое, которое содержит четыре строки и n столбцов. Требуется найти любое такое его замощение доминошками 1 × 2, что каждый из n - 1 возможных вертикальных разрезов по линиям сетки пересекает хотя бы одну доминошку, разделяя ее пополам. Никакие две доминошки в искомом замощении не должны накладываться, каждая клетка поля должна быть покрыта ровно одной доминошкой. Доминошки разрешается поворачивать, то есть можно использовать как доминошки 2 × 1, так и 1 × 2.

Напишите программу, которая находит произвольное искомое замощение.

Входные данные

В первой строке дано одно натуральное число n (1 ≤ n ≤ 100) — количество столбцов поля.

Выходные данные

Если решения не существует, выведите «-1» (без кавычек). Иначе выведите четыре строки по n символов в каждой — описание замощения, в котором каждый вертикальный разрез пересекает хотя бы одну доминошку. Замощение следует выводить, раскрасив поле в не более чем 26 цветов. Каждую доминошку нужно покрасить в один цвет. Разные доминошки могут быть покрашены в один и тот же цвет, но доминошки одного цвета не должны касаться по стороне. Для обозначения цветов нужно использовать строчные буквы латинского алфавита. Выведите любой из допустимых способов замощения.

D. Построение турнира

графы дп жадные алгоритмы Конструктив математика *2800

Иван читает книгу про турниры. Ваня уже знает, что турнир это ориентированный граф с ровно одним ребром между каждой парой вершин. Так же он знает, что очки вершины это число ребер, исходящих из нее.

Кроме определений, Иван узнал про критерий Ландау: существует турнир с последовательностью очков d1 ≤ d2 ≤ ... ≤ dn тогда и только тогда, когда для всех 1 ≤ k < n и .

Теперь Ваня хочет решить следующую задачу: пусть есть множество чисел S = {a1, a2, ..., am}, существует ли турнир с данным множеством очков? Иными словами, существует ли турнир с последовательностью очков d1, d2, ..., dn, такой, что если убрать повторяющиеся числа, то получим множество {a1, a2, ..., am}?

Если ответ существует, найдите турним с минимальным числом вершин.

Входные данные

Первая строка содержит число m (1 ≤ m ≤ 31).

Следующая строка содержит m различных чисел a1, a2, ..., am (0 ≤ ai ≤ 30) — элементы множества S. Гарантируется, что элементы множества различны.

Выходные данные

Если ответа не существует, выведите одну строку «=(» (без кавычек).

Иначе, выведите число n — число вершин в ответе.

После этого выведите n строк из n символов каждая — матрицу смежности турнира. j-й элемент i-й строки должен быть равен 1, если в турнире ребро между вершинами i и j направлено в сторону вершины j, и 0 иначе. Главная диагональ должна содержать только нули.

A. Дробь

Конструктив математика Перебор *800

Петя увлекается математикой, и больше всего в математике ему нравятся дроби. Недавно он узнал, что дробь называется правильной, если её числитель меньше знаменателя (a < b), и, что дробь называется несократимой, если её числитель и знаменатель взаимно просты (у них нет положительных общих делителей кроме 1).

На досуге Петя придумывает правильные несократимые дроби и переводит их в десятичные с помощью калькулятора. Один раз Петя перепутал знак деления (÷) и знак сложения ( + ) и вместо желаемой десятичной записи дроби получил сумму числителя и знаменателя, которая оказалась равна n.

Петя захотел восстановить исходную дробь, но понял, что это не всегда возможно сделать однозначно. Поэтому он решил найти наибольшую правильную несократимую дробь , сумма числителя и знаменателя которой равна n. Помогите Пете справиться с этой задачей.

Входные данные

В единственной строке ввода находится целое число n (3 ≤ n ≤ 1000) — сумма числителя и знаменателя искомой дроби.

Выходные данные

Выведите через пробел два целых положительных числа a и b — числитель и знаменатель максимальной подходящей правильной несократимой дроби.

B. Максим покупает квартиру

Конструктив математика *1200

Максим хочет купить квартиру в модном многоквартирном доме на Линейном проспекте города Мегаполиса. В этом доме n квартир, пронумерованных от 1 до n и расположенных в один ряд. Две квартиры являются соседними, если их номера различаются ровно на 1. Некоторые квартиры могут быть уже заселёнными, остальные свободны и их можно купить.

Максим часто ходит в гости к соседям, поэтому квартира является для него подходящей, если она свободна и есть хотя бы одна заселённая квартира, соседняя с ней. Максим знает, что в доме заселено k квартир, но какие именно, он пока не знает.

Определите, каким может быть минимальное и максимальное число квартир, подходящих для Максима.

Входные данные

В единственной строке входных данных содержатся два целых числа n и k (1 ≤ n ≤ 109, 0 ≤ k ≤ n).

Выходные данные

Выведите минимально возможное и максимально возможное количество подходящих для Максима квартир.

Примечание

В примере из условия минимальное количество подходящих для Максима квартир достигается, если, например, заселены квартиры с номерами 1, 2 и 3, тогда подходит только квартира номер 4. Максимальное же количество достигается если, например, заселены квартиры с номерами 1, 3, 5, тогда подходят квартиры с номерами 2, 4 и 6.

A. Теория множеств

Конструктив Перебор *1600

Маша и Гриша очень любят изучать свойства множеств натуральных чисел.

В некоторый момент Гриша выписал на доске множество A, состоящее из n различных положительных целых чисел ai, и предложил Маше подумать над следующей задачкой: придумать множество B, состящее из n положительных целых чисел bj, такое, что все n2 чисел, которые получаются сложением ai и bj для всех возможных пар i и j — различны. При этом и Гриша и Маша не любят больших чисел, поэтому все числа в множестве A не превышают 106, то же свойство должно выполняться и для чисел из множества B.

Помогите Маше построить искомое множество B.

Входные данные

Входные данные содержат несколько тестовых наборов. В первой строке задано количество тестов t (1 ≤ t ≤ 100).

Каждый из тестов описывается следующим образом: в первой строке описания теста содержатся одно число n — размер множества A (1 ≤ n ≤ 100).

В следующей строке содержатся n чисел ai — числа, принадлежащие множеству A (1 ≤ ai ≤ 106).

Выходные данные

Для каждого теста в отдельной строке сначала выведите ответ на него:

  • NO, если не существует ни одного способа построить множество B, чтобы выполнить условие задачи.
  • YES, если способ решить задачу есть. В этом случае в следующей строке выведите n различных целых положительных чисел bj — элементы множества B (1 ≤ bj ≤ 106). Если подходящих ответов несколько, выведите любой из них.

F. Турне волшебника

графы Конструктив поиск в глубину и подобное *2300

Все жители Берляндии ждут беспрецедентного турне волшебника в голубом вертолете по городам Берляндии!

Известно, что в Берляндии n городов, некоторые пары которых соединены двусторонними дорогами. Каждая пара городов соединена не более чем одной дорогой. Не гарантируется, что дорожная сеть связна, то есть возможно, что из какого-то города невозможно добраться до других, двигаясь по дорогам.

Турне волшебника будет состоять из туров. Во время каждого тура:

  • волшебник высадится в некотором городе x с вертолета;
  • даст представление и бесплатно покажет кино в городе x;
  • проедет по дороге в соседний город y;
  • даст представление и бесплатно покажет кино в городе y;
  • проедет по дороге в соседний с y город z;
  • даст представление и бесплатно покажет кино в городе z;
  • улетит на вертолете из города z.

Известно, что волшебник не любит путешествовать по дорогам: по каждой дороге он может проехать лишь единожды (независимо от направления). Иными словами для дороги между a и b он может либо проехать один раз из a в b, либо проехать один раз из b в a, либо вообще не проезжать по этой дороге.

Волшебник хочет организовать максимальное количество туров, не нарушив правила изложенные выше. Помогите волшебнику!

Обратите внимание, что волшебник может посещать один город многократно, ограничение на посещения касается исключительно дорог.

Входные данные

В первой строке записаны два целых числа n, m (1 ≤ n ≤ 2·105, 0 ≤ m ≤ 2·105) — количество городов и количество дорог в Берляндии соответственно.

Далее следуют описания дорог, по одному описанию в строке. Каждое описание — это пара целых чисел ai, bi (1 ≤ ai, bi ≤ n, ai ≠ bi), где ai и bi — номера городов, которые соединены i-й дорогой. Гарантируется, что нет двух дорог, соединяющих одну и ту же пару городов. Все дороги — двусторонние. Города пронумерованы от 1 до n.

Возможно, что сеть дорог в Берляндии не является связной.

Выходные данные

В первую строку выведите w — максимальное количество туров волшебника. В следующих w строках выведите сами туры в формате x, y, z — три числа через пробел, номера посещенных за тур городов в порядке посещения.

B. И снова тетрис

жадные алгоритмы Конструктив математика Паросочетания *2200

В редких перерывах между поисками теории всего физик Воль играет в расслабляющую игру — модифицированный им тетрис.

Компьютер выдает Волю прямоугольное игровое поле n × m, на котором некоторые клетки пустые, остальные же заполнены. Игровая панель рядом с полем содержит изображения всевозможных связных фигурок, содержащих от двух до пяти клеток. Здесь мы рассматриваем только связные по стороне фигурки. Фигурки можно копировать с игровой панели на поле, заполняя ими пустые клетки. Разумеется, каждую фигурку можно использовать сколько угодно раз.

Задача Воля — заполнить все поле так, чтобы на нем не осталось пустых клеток.

Каждая изначально свободная клетка должна оказаться покрыта ровно одной клеткой некоторой фигурки. Каждая фигурка должна полностью находиться на игровом поле.

На рисунке черные клетки — изначально заполненные клетки поля, а одноцветные связные области — фигурки.

Входные данные

Первая строка содержит целые числа n и m (1 ≤ n, m ≤ 1000), n и m — высота и ширина поля соответственно. Следующие n строк содержат по m символов каждая. Они естественным образом описывают поле: j-ый символ i-ой строки равен «#», если соответствующая клетка поля занята, и «.», если соответствующая клетка поля свободна и должна быть покрыта некоторой фигуркой.

Выходные данные

Если поле заполнить невозможно, выведите единственной число «-1» (без кавычек). Иначе выведите любое заполнение поля фигурками в формате, совпадающем с входным, где все «.» (пустые клетки) заменены описанием фигурок следующим образом (см. примеры): каждая фигурка должна быть выведена конкретной цифрой, при этом касающимся по стороне фигуркам должны соответствовать разные цифры.

Примечание

В третьем примере невозможно заполнить пустую клетку, у которой нет пустых соседей.

В четвертом примере ничего заполнять не нужно, поэтому надо вывести исходное поле.

C. Махмуд, Ехаб и xor

Конструктив *1900

Махмуд и Ехаб проходят третье испытание Доктора Зло. Как вы уже знаете, Доктор любит множества. На этот раз он не покажет Махмуду и Ехабу ни одного множества из его обширной коллекции, но попросит их сделать новое множество, чтобы её пополнить.

У Доктора Зло есть любимое злое число x. Он просит Махмуда и Ехаба найти множество из n различных неотрицательных целых чисел такое, что побитовый xor чисел в нём равен x. Доктор Зло не любит большие числа, поэтому он хочет, чтобы все числа в множестве были не больше, чем 106.

Входные данные

В единственной строке содержатся два целых числа n и x (1 ≤ n ≤ 105, 0 ≤ x ≤ 105) — число элементов в множестве и требуемый xor, соответственно.

Выходные данные

Если таких множеств не существует, выведите "NO" (без кавычек).

Иначе выведите на первой строке "YES" (без кавычек) а на второй строке n целых неотрицательных различных чисел — элементы множества в любом порядке.

Если решений несколько, выведите любое.

Примечание

Вы можете узнать больше об операции побитовый xor здесь: https://ru.wikipedia.org/wiki/Сложение_по_модулю_2

В первом тестовом примере . Во втором тестовом примере .

A. Спасите задачу!

Конструктив *1400

Внимание: мы потеряли все тесты к этой задаче, поэтому вместо того, чтобы решать задачу, вы нужны нам для того, чтобы сделать тесты. Мы дадим вам ответ, а вам нужно будет сделать тест с таким ответом. Исходная задача описана в следующем параграфе.

Сейчас люди не используют наличные деньги так часто, как раньше. Владение пластиковой картой решает некоторые проблемы наличности, такие как необходимость получать сдачу, когда вы не можете набрать точную сумму, необходимую для покупки. Зачастую кассир использует в сдаче как можно меньше монет, но он не обязан это делать. Например, если ваша сдача равна 30 центам, кассир может сдать вам монету в 5 центов и монету в 25 центов, или сдать вам три монеты в 10 центов, или десять монет в 1 цент, две монеты в 5 центов и одну монету в 10 центов. Всего существует 18 различных способов сдать 30 центов с использованием только монет в 1 цент, 5 центов, 10 центов и 25 центов. Два способа считаются различными, если они содержат различное число монет хотя бы одного типа. По информации о доступных монетах и сумме сдачи, каково количество различных способов сдать сдачу?

Как мы уже отметили выше, мы потеряли все тесты к этой задаче, поэтому мы дадим вам количество способов, а вы должны будете сделать тест, для которого число способов равно заданному числу. Таких тестов может быть много (мы гарантируем, что есть хотя бы один), поэтому вы можете вывести любой, удовлетворяющий формату выходных данных.

Входные данные

Единственная строка содержит одно целое число A (1 ≤ A ≤ 105) — искомое число способов.

Выходные данные

В первой строке выведите целые числа N и M (1 ≤ N ≤ 106, 1 ≤ M ≤ 10) — сумму сдачи и количество номиналов монет, соответственно.

Затем выведите M целых чисел D1, D2, ..., DM (1 ≤ Di ≤ 106) — номиналы монет. Все номиналы должны быть различны: для каждых i ≠ j должно выполняться Di ≠ Dj.

Если существует несколько различных тестов, выведите любой. Вы можете выводить номиналы монет в любом порядке.

D. Купи дешево, продай дорого

жадные алгоритмы Конструктив Структуры данных *2400

Вы можете идеально предсказать цену определенной акции на следующие N дней. Вы хотите заработать на этом знании, но хотите продавать или покупать не больше одной акции в день. Другими словами, каждый день вы будете либо покупать одну акцию, либо продавать одну акцию, либо ничего не делать. Изначально у вас нет акций, и вы не можете продать акцию, когда у вас их нет. В конце N дней вы хотите опять остаться без акций, но хотите заработать как можно больше.

Входные данные

В первой строке находится целое число N (2 ≤ N ≤ 3·105) — число дней.

Во второй строке находятся N целых чисел, p1, p2, ..., pN (1 ≤ pi ≤ 106). Цена одной акции в i-й день равна pi.

Выходные данные

Выведите максимальную сумму, которую вы можете заработать к концу N дней.

Примечание

В первом примере купите акцию за 5, еще одну за 4, продайте за 9 и другую за 12. Затем купите за 2 и продайте за 10. В итоге получите  - 5 - 4 + 9 + 12 - 2 + 10 = 20.

C. Кволы

битмаски дп Конструктив Перебор *1500

Снарк и Филипп готовят задачи на предстоящие кволы. У них есть банк из n задач, они хотят выбрать из него любое непустое подмножество задач.

На кволах будет участвовать k опытных команд. Для каждой задачи известно, для каких из этих команд эта задача баян, то есть, про каждую задачу и каждую команду известно, знает ли эта команда эту задачу, или нет.

Определите, можно ли выбрать подмножество задач так, чтобы каждая из команд не знала хотя бы половину задач.

Входные данные

Первая строка содержит два целых числа n и k (1 ≤ n ≤ 105, 1 ≤ k ≤ 4) — число задач и число опытных команд на кволах. Следующие n строк содержат по k чисел, каждое из которых либо 0, либо 1. j-е число в i-й строке равно 1, если j-я команда знает i-ю задачу, и 0 иначе.

Выходные данные

Выведите «YES» (без кавычек), если можно выбрать непустой набор задач, удовлетворяющий ограничениям, и «NO» в противном случае.

Вы можете выводить каждую букву как заглавной, так и строчной («YeS» и «yes» можно вывести вместо «YES»).

Примечание

В первом примере нельзя выбрать набор задач, так как первая команда знает все задачи.

Во втором примере можно взять первую и третью задачи.

D. Сортировка слиянием

Конструктив разделяй и властвуй *1800

Сортировка слиянием — один из самых известных алгоритмов сортировки. Основная функция этого алгоритма, сортирующая промежуток массива a с индексами из [l, r), может быть реализована следующим образом:

  1. Если промежуток [l, r) уже отсортирован в неубывающем порядке (то есть, для каждого i, такого, что l ≤ i < r - 1, a[i] ≤ a[i + 1]), завершить вызов функции;
  2. Присвоить ;
  3. Вызвать mergesort(a, l, mid);
  4. Вызвать mergesort(a, mid, r);
  5. Слить промежутки [l, mid) и [mid, r) воедино, после чего промежуток [l, r) будет отсортирован в неубывающем порядке. Функция слияния не вызывает никаких других функций.

В этой задаче массив 0-индексирован, и для сортировки всего массива нужно вызвать mergesort(a, 0, n).

Количество вызовов функции mergesort очень важно, поэтому Иван решил вычислять его во время сортировки. К примеру, если a = {1, 2, 3, 4}, то будет сделан 1 вызов mergesortmergesort(0, 4), который проверит, что массив отсортирован, и завершится. Если a = {2, 1, 3}, то количество вызовов равно 3: сначала вызывается mergesort(0, 3), в котором присваивается mid = 1 и вызывается calls mergesort(0, 1) и mergesort(1, 3), не проводящие никаких рекурсивных вызовов, так как подотрезки (0, 1) и (1, 3) уже отсортированы.

Иван написал программу, которая считает число вызовов функции mergesort, но сейчас ему нужно протестировать её. Для этого необходимо найти массив a, такой, что a — перестановка первых n чисел (то есть размер a равен n, и каждое целое число из [1, n] встречается в массиве ровно один раз), и число вызовов mergesort при сортировке этого массива равно k.

Помогите Ивану найти нужный массив!

Входные данные

В единственной строке записаны два числа n и k (1 ≤ n ≤ 100000, 1 ≤ k ≤ 200000) — размер перестановки, которая нужна Ивану, и количество вызовов mergesort, необходимое для её сортировки.

Выходные данные

Если перестановка размера n, такая, что при её сортировке будет совершено ровно k вызовов mergesort, не существует, выведите  - 1. Иначе выведите n целых чисел a[0], a[1], ..., a[n - 1] — элементы перестановки. Если решений несколько, выведите любое.

C. Слава и танки

Конструктив *1600

Слава играет в свою любимую игру «Peace Lightning». Сейчас он играет на бомбардировщике на одной специфической карте.

Более формально, карта представляет из себя клетчатое поле 1 × n, клетки которого пронумерованы от 1 до n, в каждой клетке может находиться один или несколько танков. Слава не знает количество танков и их расположение, так как летит очень высоко, но при этом он может сбросить бомбу в любую клетку. Все танки, находящиеся в этой клетке, получат урон.

Если танк получает урон в первый раз, то он мгновенно перемещается в одну из соседних клеток (танк из клетки номер n может переместиться только в клетку номер n - 1, танк из клетки номер 1 может переместиться только в клетку номер 2); если же танк получил урон второй раз, он считается уничтоженным и никогда больше не движется. За время игры танки перемещаются только тогда, когда в них попали в первый раз, самостоятельно они не перемещаются.

Помогите Славе гарантированно уничтожить все танки, использовав минимальное число бомб.

Входные данные

В единственной строке содержится одно целое положительное число n (2 ≤ n ≤ 100 000) — размер карты.

Выходные данные

В первой строке выведите число m — минимальное количество бомб, которое потребуется, чтобы уничтожить все танки.

Во второй строке выведите m чисел k1, k2, ..., km. Число ki обозначает, что i-ю бомбу нужно бросить в клетку номер ki.

Если правильных ответов несколько, выведите любой.

A. Короткий код

битмаски Конструктив *1600

Петя выучил новый язык программирования CALPAS. Программа на этом языке всегда принимает на вход одно неотрицательное целое число и возвращает также неотрицательное целое число.

В языке есть только три команды: применить побитовую операцию AND, OR или XOR с данной константой к текущему числу. Программа может содержать произвольную последовательность таких операций с произвольными константами от 0 до 1023. При выполнении программы команды поочередно (в заданном порядке) применяются к аргументу, и возвращается последнее получившееся число.

Петя написал на этом языке программу, однако она получилась слишком длинной. Напишите программу на языке CALPAS, которая делает то же самое, что и Петина программа, и при этом состоит не более чем из 5 команд. Ваша программа должна возвращать тот же результат, что и Петина, для любого аргумента от 0 до 1023.

Входные данные

В первой строке находится целое число n (1 ≤ n ≤ 5·105) — количество команд.

В следующих n строках находятся команды. Команда состоит из символа, означающего операцию («&», «|» или «^» для операций AND, OR или XOR, соответственно) и константы xi (0 ≤ xi ≤ 1023), соответствующей этой операции.

Выходные данные

Выведите число k (0 ≤ k ≤ 5) — длину вашей программы.

В следующих k строках выведите команды в том же формате, что и во входных данных.

Примечание

Вы можете прочитать про битовые операции в https://ru.wikipedia.org/wiki/Битовые операции.

Второй пример:

Пусть программа приняла на вход число x. Тогда результатом Петиной программы будет ((x&1)&3)&5 = x&(1&3&5) = x&1. Таким образом, результаты программ всегда совпадают.

B. Berland Army

графы жадные алгоритмы Конструктив *2600

There are n military men in the Berland army. Some of them have given orders to other military men by now. Given m pairs (xi, yi), meaning that the military man xi gave the i-th order to another military man yi.

It is time for reform! The Berland Ministry of Defence plans to introduce ranks in the Berland army. Each military man should be assigned a rank — integer number between 1 and k, inclusive. Some of them have been already assigned a rank, but the rest of them should get a rank soon.

Help the ministry to assign ranks to the rest of the army so that:

  • for each of m orders it is true that the rank of a person giving the order (military man xi) is strictly greater than the rank of a person receiving the order (military man yi);
  • for each rank from 1 to k there is at least one military man with this rank.
Input

The first line contains three integers n, m and k (1 ≤ n ≤ 2·105, 0 ≤ m ≤ 2·105, 1 ≤ k ≤ 2·105) — number of military men in the Berland army, number of orders and number of ranks.

The second line contains n integers r1, r2, ..., rn, where ri > 0 (in this case 1 ≤ ri ≤ k) means that the i-th military man has been already assigned the rank ri; ri = 0 means the i-th military man doesn't have a rank yet.

The following m lines contain orders one per line. Each order is described with a line containing two integers xi, yi (1 ≤ xi, yi ≤ n, xi ≠ yi). This line means that the i-th order was given by the military man xi to the military man yi. For each pair (x, y) of military men there could be several orders from x to y.

Output

Print n integers, where the i-th number is the rank of the i-th military man. If there are many solutions, print any of them.

If there is no solution, print the only number -1.

J. Renovation

жадные алгоритмы Конструктив сортировки *2400

The mayor of the Berland city S sees the beauty differently than other city-dwellers. In particular, he does not understand at all, how antique houses can be nice-looking. So the mayor wants to demolish all ancient buildings in the city.

The city S is going to host the football championship very soon. In order to make the city beautiful, every month the Berland government provides mayor a money tranche. The money has to be spent on ancient buildings renovation.

There are n months before the championship and the i-th month tranche equals to ai burles. The city S has m antique buildings and the renovation cost of the j-th building is bj burles.

The mayor has his own plans for spending the money. As he doesn't like antique buildings he wants to demolish as much of them as possible. For the j-th building he calculated its demolishing cost pj.

The mayor decided to act according to the following plan.

Each month he chooses several (possibly zero) of m buildings to demolish in such a way that renovation cost of each of them separately is not greater than the money tranche ai of this month (bj ≤ ai) — it will allow to deceive city-dwellers that exactly this building will be renovated.

Then the mayor has to demolish all selected buildings during the current month as otherwise the dwellers will realize the deception and the plan will fail. Definitely the total demolishing cost can not exceed amount of money the mayor currently has. The mayor is not obliged to spend all the money on demolishing. If some money is left, the mayor puts it to the bank account and can use it in any subsequent month. Moreover, at any month he may choose not to demolish any buildings at all (in this case all the tranche will remain untouched and will be saved in the bank).

Your task is to calculate the maximal number of buildings the mayor can demolish.

Input

The first line of the input contains two integers n and m (1 ≤ n, m ≤ 100 000) — the number of months before the championship and the number of ancient buildings in the city S.

The second line contains n integers a1, a2, ..., an (1 ≤ ai ≤ 109), where ai is the tranche of the i-th month.

The third line contains m integers b1, b2, ..., bm (1 ≤ bj ≤ 109), where bj is renovation cost of the j-th building.

The fourth line contains m integers p1, p2, ..., pm (1 ≤ pj ≤ 109), where pj is the demolishing cost of the j-th building.

Output

Output single integer — the maximal number of buildings the mayor can demolish.

Note

In the third example the mayor acts as follows.

In the first month he obtains 6 burles tranche and demolishes buildings #2 (renovation cost 6, demolishing cost 4) and #4 (renovation cost 5, demolishing cost 2). He spends all the money on it.

After getting the second month tranche of 3 burles, the mayor selects only building #1 (renovation cost 3, demolishing cost 1) for demolishing. As a result, he saves 2 burles for the next months.

In the third month he gets 2 burle tranche, but decides not to demolish any buildings at all. As a result, he has 2 + 2 = 4 burles in the bank.

This reserve will be spent on the fourth month together with the 4-th tranche for demolishing of houses #3 and #5 (renovation cost is 4 for each, demolishing costs are 3 and 5 correspondingly). After this month his budget is empty.

Finally, after getting the last tranche of 3 burles, the mayor demolishes building #6 (renovation cost 2, demolishing cost 3).

As it can be seen, he demolished all 6 buildings.

K. Road Widening

жадные алгоритмы Конструктив реализация *1800

Mayor of city S just hates trees and lawns. They take so much space and there could be a road on the place they occupy!

The Mayor thinks that one of the main city streets could be considerably widened on account of lawn nobody needs anyway. Moreover, that might help reduce the car jams which happen from time to time on the street.

The street is split into n equal length parts from left to right, the i-th part is characterized by two integers: width of road si and width of lawn gi.

For each of n parts the Mayor should decide the size of lawn to demolish. For the i-th part he can reduce lawn width by integer xi (0 ≤ xi ≤ gi). After it new road width of the i-th part will be equal to s'i = si + xi and new lawn width will be equal to g'i = gi - xi.

On the one hand, the Mayor wants to demolish as much lawn as possible (and replace it with road). On the other hand, he does not want to create a rapid widening or narrowing of the road, which would lead to car accidents. To avoid that, the Mayor decided that width of the road for consecutive parts should differ by at most 1, i.e. for each i (1 ≤ i < n) the inequation |s'i + 1 - s'i| ≤ 1 should hold. Initially this condition might not be true.

You need to find the the total width of lawns the Mayor will destroy according to his plan.

Input

The first line contains integer n (1 ≤ n ≤ 2·105) — number of parts of the street.

Each of the following n lines contains two integers si, gi (1 ≤ si ≤ 106, 0 ≤ gi ≤ 106) — current width of road and width of the lawn on the i-th part of the street.

Output

In the first line print the total width of lawns which will be removed.

In the second line print n integers s'1, s'2, ..., s'n (si ≤ s'i ≤ si + gi) — new widths of the road starting from the first part and to the last.

If there is no solution, print the only integer -1 in the first line.

D. Восстановление строки

графы Конструктив реализация *2000

Назовем подстроку некоторой строки самой частой, если количество ее вхождений не меньше количества вхождений любой другой подстроки.

Дано множество строк. Назовем какую-то строку хорошей, если все элементы множества являются ее самыми частыми подстроками. Восстановите непустую минимальную по длине хорошую строку, а из таких — лексикографически минимальную. Если же таких строк не существует, то выведите «NO» (без кавычек).

Подстрокой называется непрерывная подпоследовательность букв строки. Например, «ab», «c», «abc» являются подстроками строки «abc», а «ac» — нет.

Количество вхождений подстроки в строку равно количеству таких позиций в данной строке, в которых встречается данная подстрока. Вхождения подстроки могут перекрываться.

Строка a лексикографически меньше строки b, если a является префиксом b, или в a стоит меньшая буква на первой позиции, где a и b отличаются.

Входные данные

В первой строке дано целое число n (1 ≤ n ≤ 105) — количество строк в данном множестве.

Далее следуют n строк, каждая из которых содержит непустую строку из строчных латинских букв. Гарантируется, что все строки различны.

Суммарная длина всех данных строк не превышает 105.

Выходные данные

Выведите непустую минимальную по длине хорошую строку, а из таких минимальную лексикографически, либо «NO» (без кавычек), если таких строк не существует.

Примечание

Можно показать, что в первом тесте есть два варианта хорошей строки минимальной длины: «cfmailru» и «mailrucf». Первый вариант является минимальным лексикографически.

G. Xor-MST

битмаски Конструктив Структуры данных *2300

Дан полный неориентированный граф из n вершин. Каждой вершине присвоено некоторое число ai. Вес ребра, соединяющего вершины i и j, равен aixoraj.

Найдите вес минимального остовного дерева в этом графе.

Входные данные

В первой строке задано число n (1 ≤ n ≤ 200000) — количество вершин в графе.

Во второй строке заданы n чисел a1, a2, ..., an (0 ≤ ai < 230) — числа, присвоенные вершинам графа.

Выходные данные

Выведите одно число — вес минимального остовного дерева в заданном графе.

B. Чревоугодие

жадные алгоритмы Конструктив *2000

Вам дан массив a, содержащий n различных целых чисел. Постройте массив b, который будет являться перестановкой a, такой, что для любого не пустого подмножества индексов S = {x1, x2, ..., xk} (1 ≤ xi ≤ n, 0 < k < n) сумма элементов на этих позициях в массивах a и b будет различна, т. е.

Входные данные

Первая строка содержит одно целое число n (1 ≤ n ≤ 22) — размер массива.

Вторая строка содержит n различных целых чисел a1, a2, ..., an (0 ≤ ai ≤ 109) — элементы массива.

Выходные данные

Если подходящего массива b не существует, выведите -1.

В противном случае выведите n целых чисел b1, b2, ..., bn. Обратите внимание, что b должен быть перестановкой a.

Если существуют несколько ответов, выведите любой.

Примечание

Массив x является перестановкой массива y, если в массиве y можно переставить элементы так, чтобы он совпал с x.

Обратите внимание, что пустое подмножество индексов и подмножество, содержащее все индексы, не учитываются.

B. Ральф и его магическое поле

Комбинаторика Конструктив математика теория чисел *1800

У Ральфа есть магическое поле, которое разделено на n × m блоков. А именно, на поле есть n строк и m столбцов. Ральф хочет в каждый блок поставить целое число. Однако, магическое поле не всегда работает правильно. Оно работает, только если произведение чисел в каждой строке и в каждом столбце равно k, где k может быть равно 1 или -1.

Ральф хочет узнать количество способов поставить некоторые целые числа во все блоки так, чтобы магическое поле работало правильно. Два способа считаются различными, если и только если существует хотя бы один блок такой, что числа в нем в первом и втором способе различны. Вам необходимо вывести остаток от деления ответа на 1000000007 = 109 + 7.

Обратите внимание, нет ограничения на целые числа, которые можно ставить в блоки, однако, можно показать, что ответ конечный.

Входные данные

Единственная строка содержит три целых числа n, m и k (1 ≤ n, m ≤ 1018, k равно 1 или -1).

Выходные данные

Выведите единственное число — остаток от деления ответа на 1000000007.

Примечание

В первом примере единственный способ — поставить -1 в единственный блок.

Во втором примере единственный способ — поставить 1 в каждый блок.

C. Марко и НОД-последовательность

Конструктив математика *1900

Во сне Марко встретил пожилого мужчину в темных очках. Мужчина сообщил ему ключ к бессмертию и затем исчез.

Когда он проснулся, Марко помнил только то, что ключ был последовательностью целых чисел некоторой длиной n, но забыл саму последовательность. Пусть элементы последовательности были a1, a2, ..., an. Марко помнит, что он сосчитал gcd(ai, ai + 1, ..., aj) для всех 1 ≤ i ≤ j ≤ n и сложил эти числа в множество S. Здесь gcd обозначает наибольший общий делитель.

Обратите внимание, если число добавляется во множество S больше одного раза, оно все равно будет там встречаться только один раз.

Марко дал вам множество S и попросил найти исходную последовательность. Если есть несколько подходящих последовательностей, выведите любую. Возможно, что последовательностей, которые дают такое же множество S, не существует, в таком случае выведите -1.

Входные данные

Первая строка содержит одно целое число m (1 ≤ m ≤ 1000) — размер множества S.

Вторая строка содержит m различных целых чисел s1, s2, ..., sm (1 ≤ si ≤ 106) — элементы множества S. Гарантируется, что элементы множества даны в строго возрастающем порядке, то есть s1 < s2 < ... < sm.

Выходные данные

Если решения не существует, выведите -1.

Иначе в первой строке выведите одно число n — длину последовательности, n не должно превышать 4000.

Во второй строке выведите n целых чисел a1, a2, ..., an (1 ≤ ai ≤ 106) — саму последовательность.

Можно показать, что если решение существует, то также существует решение с n, не превосходящим 4000, и ai, не превосходящими 106.

Если решений несколько, выведите любое.

Примечание

В первом примере 2 = gcd(4, 6), а остальные элементы из множества встречаются в последовательности. Кроме того, можно показать, что нет чисел, отличных от 2, 4, 6 и 12 среди всех gcd(ai, ai + 1, ..., aj) для всех 1 ≤ i ≤ j ≤ n.

B. Айсея играет с Ктолли

Бинарный поиск жадные алгоритмы игры интерактив Конструктив *2000

Это интерактивная задача. Обратитесь к секции «Протокол взаимодействия» для лучшего понимания.

Айсея и Ктолли хотят сыграть в игру, чтобы определить, кто сможет воспользоваться кухней сегодня вечером.

Изначально Айсея выкладывает n листов бумаги в ряд. Они пронумерованы от 1 до n слева направо.

Во время игры будет проведено m раундов. В каждом раунде Айсея даст Ктолли целое число от 1 до c и Ктолли будет должена записать это число на одном из листов бумаги (если на этом листе уже было записано число, Ктолли сотрёт его и запишет на его месте новое).

Ктолли победит, если в какой-то момент на каждом листке будет записано число, и эти n чисел будут идти в неубывающем порядке, если смотреть на листы слева направо, начиная с листа 1 и заканчивая листом n, и проиграет, если за все m раундов игры такая ситуация не возникнет.

Ктолли очень хочет победить, потому что хочет приготовить еду для Уильяма, но не знает, как выиграть в эту игру. Поэтому Ктолли просит вас написать программу, которая будет получать числа, которые называет Айсея, и будет решать на какой лист записывать это число.

Гарантируется, что ходы Айсея выбраны заранее и что они не зависят от ходов вашей программы.

Входные данные

В первой строке содержатся три целых числа n, m и c (, означает число , округленное вверх) — количество листов бумаги, количество раундов и максимальное число, которое Айсея может сказать Ктолли, соответственно. Остальная часть ввода описана в разделе «Протокол взаимодействия».

Протокол взаимодействия

Во время каждого раунда ваша программа должна считать одно целое число pi (1 ≤ pi ≤ c), которое обозначает число, названное Айсеей.

Ваша программа должна вывести в новой строке одно целое число от 1 до n, обозначающее номер листа, на который необходимо записать число.

После вывода каждой строки не забудьте сбросить буфер вывода. Например:

  • fflush(stdout) в C/C++;
  • System.out.flush() в Java;
  • sys.stdout.flush() в Python;
  • flush(output) в Pascal;
  • Обратитесь к документации для других языков программирования.

Если Ктолли выигрывает после некоторого раунда, вашей программе больше не будет ничего подаваться на ввод и она должна завершиться. Можно доказать, что при заданных ограничениях Ктолли всегда может победить.

Примечание

В первом тестовом примере Айсея выкладывает 2 листа бумаги. После этого происходит 4 раунда игры, во время каждого из которых Айсея может назвать число от 1 до 4.

Затем Айсея называет число 2 и Ктолли записывает его на лист с номером 1. После этого Айсея называет число 1 и записывает на лист с номером 2. Наконец, Айсея называет число 3, после чего Ктолли заменяет число 1 на число 3 на листе с номером 2 и выигрывает, так как на каждом листе записано какое-то число и они упорядочены по неубыванию слева направо.

Обратите внимание, что Ваша программа должна немедленно завершиться после победы Чтолли и не должна читать числа из входного потока для последующих раундов. В противном случае вердикт программы не определён. В частности, учитывайте этот факт при взломах чужих решений. В тестовом примере Ктолли выиграла после раунда 3, поэтому требуется, чтобы Ваша программа не считывала число для раунда 4.

Формат ввода для взломов:

  • В первой строке записаны 3 целых числа n, m и c;
  • В последующих m строках записаны целые числа от 1 до c, обозначающие число, произнесённое Ктолли во время каждого раунда.

E. Квадраты и не квадраты

жадные алгоритмы Конструктив *1600

У Ани и Бори есть n кучек с конфетами, причём n чётное число: i-я кучка содержит ai конфет.

Аня любит числа, которые являются квадратами целых чисел, а Боря любит числа, которые не являются квадратами целых чисел. За один ход ребята совместно договариваются выбрать какую-то кучку с конфетами и положить в неё одну новую конфету (которая до этого не лежала ни в одной кучке), либо взять из этой кучки конфету (если эта кучка не пуста), и съесть её.

Определите минимальное количество ходов, необходимых для того, чтобы ровно n / 2 кучек содержали количества конфет, являющиеся квадратами целых чисел, а оставшиеся n / 2 кучек содержали количества конфет, не являющиеся квадратами целых чисел.

Входные данные

В первой строке следует целое чётное число n (2 ≤ n ≤ 200 000) — количество кучек с конфетами.

Во второй строке следует последовательность a1, a2, ..., an (0 ≤ ai ≤ 109) — размеры кучек с конфетами.

Выходные данные

Выведите минимальное количество ходов, необходимых для того, чтобы ровно n / 2 кучек содержали количества конфет, являющиеся квадратами целых чисел, а другие n / 2 кучек содержали количества конфет, не являющиеся квадратами целых чисел. Если для выполнения этих условий не нужно делать ни одного хода, выведите 0.

Примечание

В первом примере достаточно двух ходов. На каждом ходу нужно класть новую конфету во вторую кучку. После этого её размер станет равным 16, поэтому у Ани и Бори станет две кучки, чьи размеры являются квадратами целых чисел (вторая и четвертая кучки), и две кучки, чьи размеры не являются квадратами целых чисел (первая и третья кучки).

Во втором примере необходимо добавить по две конфеты в любые три кучки.

A. Разбиение на команды

жадные алгоритмы Конструктив математика *800

На тренировку по программированию пришли n групп студентов. В каждой группе либо один человек, которому не важно, с кем писать контест, либо два человека, которые обязательно хотят писать контест в одной команде.

Тренер решил, что для тренировки соберёт команды ровно из трёх человек. Определите максимальное количество команд из трёх человек, которые смогут написать тренировку. Возможна ситуация, когда не все группы получится распределить в команды. Группы нужно брать целиком, т. е. в группе из двух человек либо оба пишут тренировку, либо оба не пишут. Если тренер берёт на тренировку группу из двух человек, то он обязательно должен определить их в одну команду.

Входные данные

В первой строке следует целое положительно число n (2 ≤ n ≤ 2·105) — количество групп студентов.

Во второй строке следует последовательность целых чисел a1, a2, ..., an (1 ≤ ai ≤ 2), где ai равно количеству человек в i-й группе.

Выходные данные

Выведите максимальное количество команд из трёх человек, которые смогут написать контест.

Примечание

В первом примере тренер сможет набрать одну команду. Для этого он может, например, взять три группы из одного человека: группы с номерами один, два и четыре.

Во втором примере тренеру не удастся набрать ни одной команды.

В третьем примере тренер сможет собрать три команды. Например, он может сделать это так:

  • группа номер один (из двух человек) и группа номер семь (из одного человека)
  • группа номер два (из двух человек) и группа номер шесть (из одного человека)
  • группа номер три (из двух человек) и группа номер четыре (из одного человека)

C. Разбиение чисел

графы Конструктив математика *1300

У Пети есть n целых чисел: 1, 2, 3, ..., n. Он хочет разбить все свои числа на две непустые группы таким образом, чтобы модуль разности сумм чисел в каждой группе был минимально возможным.

Помогите Пети осуществить разбиение чисел. Каждое из n чисел должно быть ровно в одной группе.

Входные данные

В первой строке следует целое число n (2 ≤ n ≤ 60 000) — количество чисел Пети.

Выходные данные

Выведите в первую строку минимальный модуль разности сумм чисел в каждой группе после разбиения.

Во вторую строку выведите размер первой части разбиения, а затем числа, которые должны быть в первой группе. Числа можно выводить в произвольном порядке. Если ответов несколько разрешается вывести любой из них.

Примечание

В первом примере нужно взять в первую группу числа 1 и 4, а во вторую 2 и 3. Тогда сумма в каждой группе будет равна 5, а абсолютная разность равна 0.

Во втором примере всего два числа, а так как обе группы должны быть непустыми, то одно из чисел нужно взять в первую группу, а другое — во вторую. Тогда модуль разности между суммами чисел в каждой группе будет равен 1.

D. Продажа лопат

Конструктив математика *1800

В магазине Поликарпа есть n лопат. Причём i-я лопата стоит i бурлей, то есть первая лопата стоит 1 бурль, вторая лопата стоит 2 бурля, третья лопата стоит 3 бурля, и так далее. Поликарп решил продавать лопаты парами.

Покупатели охотнее покупают пару лопат, если их суммарная цена заканчивается на несколько цифр 9. По этой причине Поликарп решил выбрать пару лопат так, чтобы их суммарная цена оканчивалась на наибольшее возможное количество девяток. Например, если он выберет лопаты с ценами 12345 и 37454, то их суммарная цена будет равна 49799. Это число заканчивается на две девятки.

Определите количество пар лопат, суммарная стоимость которых оканчивается на максимальное количество девяток. Две пары лопат считаются различными, если в одной паре есть лопата, которой нет в другой паре.

Входные данные

В первой строке следует целое число n (2 ≤ n ≤ 109) — количество лопат в магазине Поликарпа.

Выходные данные

Выведите количество пар лопат, суммарная стоимость которых оканчивается на максимальное количество девяток.

Обратите внимание, что возможно, что наибольшее число девяток на конце равно 0, тогда все равно нужно посчитать все такие варианты.

Гарантируется, что для любого n ≤ 109 ответ не превосходит 2·109.

Примечание

В первом примере максимальное количество девяток в конце суммы двух лопат равно единице. Для этого нужно продавать следующие пары лопат:

  • 2 и 7;
  • 3 и 6;
  • 4 и 5.

Во втором примере максимальное количество девяток в конце суммы двух лопат равно единице. Для этого нужно продавать следующие пары лопат:

  • 1 и 8;
  • 2 и 7;
  • 3 и 6;
  • 4 и 5;
  • 5 и 14;
  • 6 и 13;
  • 7 и 12;
  • 8 и 11;
  • 9 и 10.

В третьем примере нужно обязательно продавать лопаты 49 и 50, так как их сумма равна 99, то есть количество девяток равно двум, что является максимальным числом для n = 50.

A. Хешируем деревья

Деревья Конструктив *1500

Саша участвует в соревновании по программированию. В очередной задаче ей нужно уметь проверять корневые деревья на изоморфизм. Она никогда не сталкивалась с этой задачей раньше, но, будучи опытной участницей, быстро догадалась, что для этого стоит сопоставить каждому дереву некоторую последовательность и сравнивать уже эти последовательности, а не деревья. Саша хочет поставить в соответствие дереву такую последовательность a0, a1, ..., ah, где h — высота дерева, что ai равно числу вершин, находящихся на расстоянии i рёбер от корня.

К сожалению, в этот раз интуиция подвела Сашу, и оказалось, что такая последовательность может не однозначно задавать дерево. Чтобы это показать, вы должны написать программу, которая по заданной последовательности ai предоставит два неизоморфных корневых дерева, которым соответствует такая последовательность, или скажет, что такое дерево единственно.

Два корневых дерева считаются изоморфными, если можно так перенумеровать вершины одного из них, чтобы оно стало равно второму, при этом корень первого дерева должен получить номер корня второго дерева.

Высотой дерева будем называть наибольшее число рёбер в пути от корня до какой либо другой вершины.

Входные данные

Первая строка ввода содержит единственное целое число h (2 ≤ h ≤ 105) — высоту дерева.

Вторая строка содержит h + 1 целое число — последовательность a0, a1, ..., ah (1 ≤ ai ≤ 2·105). Сумма всех чисел ai не превосходит 2·105. Гарантируется, что последовательности соответствует хотя бы одно дерево.

Выходные данные

Если последовательность однозначно задаёт дерево, выведите «perfect».

Иначе в первую строку выведите «ambiguous». Во вторую и третью строчки выведите описания двух деревьев в следующем формате: в одну строку выведите чисел, k-е из них должно задавать предка вершины k или быть равным нулю, если k-я вершина является корнем дерева.

Эти два дерева должны быть неизоморфны и должны соответствовать заданной последовательности.

Примечание

Единственное дерево к первому примеру и два выведенных дерева ко второму:

B. НОД многочленов

Конструктив математика *2200

Допустим, у вас есть два многочлена и . Тогда многочлен можно единственным образом представить в виде

Это может быть сделано делением в столбик. В этой записи обозначает степень многочлена P(x). при этом будем называть остатком от деления многочлена на многочлен и обозначать .

Раз есть способ разделить один многочлен на другой с остатком, то можно определить и алгоритм Евклида для нахождения наибольшего общего делителя двух многочленов. Алгоритм определён таким образом, что он принимает пару многочленов , а затем если многочлен нулевой, то алгоритм возвращает многочлен , а иначе возвращает результат выполнения алгоритма для пары . На каждом шаге степень второго аргумента уменьшается, поэтому алгоритм отработает за конечное число шагов. Но насколько большим оно может быть? Это вам и предстоит выяснить.

Вам дано число n. Вам нужно вывести два многочлена степени не выше n таких, что их коэффициенты — целые числа, не превышающие 1 по абсолютной величине, при этом старший коэффициент (при максимальной степени x) должен быть равен единице, и вычисление их наибольшего общего делителя потребует ровно n шагов алгоритма Евклида. Кроме того, степень первого многочлена должна быть больше степени второго. Шагом алгоритма Евклида мы называем переход от к .

Входные данные

На вход дано единственное целое число n (1 ≤ n ≤ 150)  — число шагов алгоритма Евклида, которого требуется достичь.

Выходные данные

Выведите два многочлена в следующем формате.

В первой строке выведите число m (0 ≤ m ≤ n) — степень многочлена.

Во второй строке выведите m + 1 целых чисел от  - 1 до 1  — коэффициенты многочлена, от младшего к старшему.

Степень первого многочлена должна быть больше степени второго, а старшие коэффициенты обоих многочленов должны быть равны 1. Алгоритм Евклида, вызванный от этих многочленов должен занимать ровно n шагов.

Если для данного числа n ответа не существует, выведите -1.

Если есть несколько возможных вариантов ответа, выведите любой из них.

Примечание

Во втором тестовом примере можно вывести многочлены x2 - 1 и x. Тогда цепочка вызовов будет

(x2 - 1, x) → (x,  - 1) → ( - 1, 0).

Она состоит из ровно двух шагов.

D. Взвешивание графа

графы Конструктив поиск в глубину и подобное *2700

Задан cвязный неориентированный граф, состоящий из n вершин и m ребер. Будем считать, что вершины графа пронумерованы целыми числами от 1 до n.

Вам даны n целых чисел c1, c2, ..., cn, каждое из них находится в пределах от  - n до n, включительно. Также гарантируется, что четность cv совпадает с четностью степени вершины v. Степенью вершины называется число входящих в нее ребер.

В задаче вам требуется поставить каждому ребру вес — целое число от  - 2·n2 до n2 (включительно) так, чтобы для каждой вершины v сумма весов входящих в нее ребер была равна cv, или сообщить, что это невозможно.

Входные данные

В первой строке находится два целых числа n, m (2 ≤ n ≤ 105, n - 1 ≤ m ≤ 105) — число вершин и ребер графа.

В следующей строке следуют n целых чисел c1, c2, ..., cn ( - n ≤ ci ≤ n), где ci обозначает желаемую сумму весов ребер, инцидентных вершине i. Гарантируется, что четность ci совпадает с четностью степени вершины i.

Следующие m строк содержат информацию о ребрах графа. В i-й из этих строк содержится два целых числа ai, bi, (1 ≤ ai, bi ≤ n; ai ≠ bi), обозначающие, что i-е ребро соединяет вершины ai и bi.

Гарантируется, что граф связен и не содержит петель и кратных ребер.

Выходные данные

Если решения нет, то выведите «NO».

Иначе, выведите «YES» и m строк, в i-й из этих строк должно содержаться одно целое число wi ( - 2·n2 ≤ wi ≤ 2·n2) – вес i-го ребра.

B. Отрезки

Конструктив математика *1300

Дано целое положительное число N. Рассмотрим все возможные отрезки на координатной прямой с концами в точках с целочисленными координатами от 0 до N, включительно. Таких отрезков будет штук.

Вы хотите нарисовать эти отрезки в несколько слоев так, чтобы отрезки в каждом слое не пересекались (два отрезка могут иметь концы в одной точке). Сдвигать отрезки вдоль координатной прямой нельзя.

Найдите минимальное количество слоев, которые необходимо использовать, чтобы нарисовать отрезки для заданного N.

Входные данные

Входные данные состоят из одной строки, содержащей целое число N (1 ≤ N ≤ 100).

Выходные данные

Выведите одно число - минимальное количество слоев, которые необходимо использовать, чтобы нарисовать отрезки для заданного N.

Примечание

Отрезки и их оптимальное расположение для N = 4 выглядят следующим образом:

F. И-перестановки

Конструктив *2500

Дано число N. Найдите две перестановки:

  1. Перестановку p чисел от 1 до N, для которой pi ≠ i и pi & i = 0 для всех i = 1, 2, ..., N.
  2. Перестановку q чисел от 1 до N, для которой qi ≠ i и qi & i ≠ 0 для всех i = 1, 2, ..., N.

& — побитовая операция И.

Входные данные

Входные данные состоят из одной строки, содержащей одно целое число N (1 ≤ N ≤ 105).

Выходные данные

Для каждой подзадачи, если требуемая перестановка не существует, выведите одну строку «NO»; иначе выведите «YES» в первой строке и N элементов перестановки, разделенных пробелами, во второй строке. Если для подзадачи существует несколько перестановок, выведите любую из них.

D. Задача бакалейщика

графы жадные алгоритмы Конструктив *2600

Вчера в бакалее супермаркета была ярмарка. На ярмарке было выставлено в ряд n баночек с приправами, баночки были пронумерованы числами от 1 до n слева направо. После мероприятия баночки перемешались и бакалейщику требуется упорядочить их в порядке возрастания номеров.

Бакалейщик имеет в распоряжении аппарат, который может взять 5 (или меньше) баночек, и переставить их между собой так, как захочет бакалейщик. При этом баночки не обязательно должны стоять подряд. Например из порядка баночек 2, 6, 5, 4, 3, 1 можно получить порядок 1, 2, 3, 4, 5, 6, если выбрать баночки на позициях 1, 2, 3, 5 и 6.

Какое наименьшее количество таких операций потребуется, чтобы упорядочить все баночки в порядке возрастания номеров?

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 105). Во второй строке через пробел записано n целых чисел ai (1 ≤ ai ≤ n) — i-ое число задает номер баночки, стоящей на i-ой позиции. Гарантируется, что все номера различны.

Выходные данные

В первой строке выведите наименьшее количество операций для того, чтобы упорядочить все баночки в порядке возрастания номеров. Далее выведите описание всех действий в следующем формате.

В первой строке описания одного действия укажите сколько баночек нужно взять (k), во второй строке — баночки на каких позициях выбрать (b1, b2, ..., bk), в третьей — новый порядок баночек (c1, c2, ..., ck). После выполнения операции баночка с позиции bi будет стоять на позиции ci. Набор (c1, c2, ..., ck) должен являться перестановкой набора (b1, b2, ..., bk).

Если решений несколько, выведите любое.

Примечание

Рассмотрим первый пример. Баночки можно упорядочить за две операции.

Во время перво операции мы возьмем баночки на позициях 1, 3, 6 и 4 и поставим их таким образом, что баночка, которая была на позиции 1 будет после завершения операции находиться на позиции 3, баночка с позиции 3 окажется на позиции 6, баночка с позиции 6 будет находиться на позиции 4, а баночка с позиции 4 переместится на позицию 1.

После первой операции порядок будет выглядеть так: 1, 5, 3, 4, 2, 6.

Во время второй операции баночки на позициях 2 и 5 поменяются местами.

C. Минимальная сумма

жадные алгоритмы Конструктив математика *1700

У Пети есть n целых положительных чисел a1, a2, ..., an.

Его друг Вася решил пошутить и решил заменить все цифры в числах на буквы. Причём использовал он строчные буквы латинского алфавита от 'a' до 'j' и заменил все цифры 0 на одну букву, все все цифры 1 на другую букву, все цифры 2 на третью букву и так далее. Для любых двух разных цифр Вася использовал разные буквы от 'a' до 'j'.

Перед вами стоит задача восстановить числа Пети. Восстановленные числа должны быть целыми положительными без лидирующих нулей. Так как ответов может быть много, определите минимальную сумму всех чисел Пети после восстановления. Гарантируется, что все числа Пети изначально не имели лидирующих нулей.

Входные данные

В первой строке следует целое число n (1 ≤ n ≤ 1 000) — количество чисел Пети.

В каждой из следующих строк следует непустая строка si, состоящая из строчных латинских букв от 'a' до 'j' — числа Пети после замены цифр на буквы. Длина каждой строки не превосходит шести символов.

Выходные данные

Определите минимальную сумму всех чисел Пети после восстановления. Числа после восстановления должны быть целыми положительными и не должны иметь лидирующих нулей. Гарантируется, что тесты таковы, что корректное восстановление без лидирующих нулей всегда найдётся.

Примечание

В первом примере нужно заменить букву 'a' на цифру 1, букву 'b' на цифру 0, букву 'd' на цифру 2, букву 'e' на цифру 3, а букву 'j' на цифру 4. Тогда получатся числа [10, 23, 14]. Сумма этих чисел равна 47, что является минимально возможной суммой чисел после корректного восстановления.

Во втором примере числа после восстановления могут выглядеть, например, следующим образом: [120468, 3579, 2468, 10024, 3].

В третьем примере числа после восстановления могут выглядеть, например, следующим образом: [11, 22, 11].

C. Три гирлянды

Конструктив Перебор *1400

Мишка только начал украшать ёлку к Новому году. У него есть три гирлянды, и все он хочет использовать для украшения. После этого Мишка их все зажжёт.

Когда гирлянда включена, она периодически меняет своё состояние — иногда горит, иногда нет. Формально, если i-я гирлянда включена в течение некоторой секунды x, то она горит только в течение секунд x, x + ki, x + 2ki, x + 3ki и так далее.

Мишка хочет включить гирлянды таким образом, чтобы в каждую секунду после включения гирлянд горела хотя бы одна. Формально, Мишка выбирает три целых числа x1, x2 и x3 (не обязательно различных) так, чтобы если включить первую гирлянду в течение x1-й секунды, вторую — в течение x2-й, а третью — в течение x3-й, то в течение любой секунды, начиная с max(x1, x2, x3), будет гореть хотя бы одна гирлянда.

Помогите Мишке узнать, можно ли осуществить его идею!

Входные данные

В первой строке записаны три целых числа k1, k2 и k3 (1 ≤ ki ≤ 1500) — временные промежутки каждой из гирлянд.

Выходные данные

Если Мишка может выбрать такие моменты времени, чтобы включить гирлянды так, что в каждую секунду после включения всех гирлянд горела хотя бы одна, то выведите YES.

В противном случае выведите NO.

Примечание

В первом примере Мишка может выбрать x1 = 1, x2 = 2, x3 = 1. Первая гирлянда будет гореть в течение секунд 1, 3, 5, 7, ..., вторая — 2, 4, 6, 8, ..., чего уже достаточно, чтобы покрыть все секунды после 2-й. Не влияет даже значение x3. Наш выбор приведет, однако, к тому, что третья горит в течение секунд 1, 4, 7, 10, ....

Во втором примере никак нельзя выбрать такие моменты времени, всегда будет существовать секунда, в которую не горит ни одна гирлянда.

E. Сортировка стеком

жадные алгоритмы Конструктив реализация Структуры данных *2000

Предположим, дан массив a, стек s (изначально пустой) и массив b (также пустой).

Можно производить следующие операции, пока a или s непусты:

  • Взять первый элемент a, положить его на верхушку s и удалить из a (если a не пустой);
  • Взять элемент с верхушки s, добавить его в конец массива b и удалить из s (если s не пустой).

Операции можно осуществлять в произвольном порядке.

Если существует способ проделать операции в таком порядке, что массив b отсортирован в неубывающем порядке в конце процесса, то назовем массив a стек-сортируемым.

Например, [3, 1, 2]стек-сортируемый, потому что b будет отсортированным после следующих операций:

  1. Удалить 3 из a и положить на верхушку s;
  2. Удалить 1 из a и положить на верхушку s;
  3. Удалить 1 из s и добавить в конец b;
  4. Удалить 2 из a и положить на верхушку s;
  5. Удалить 2 из s и добавить в конец b;
  6. Удалить 3 из s и добавить в конец b.

После всех операций b = [1, 2, 3], поэтому [3, 1, 2]стек-сортируемый. [2, 3, 1] — не стек-сортируемый.

Заданы первые k элементов некоторой перестановки p размера n (напоминаем, что перестановка размера n — это такой массив размера n, где каждое число от 1 до n встречается ровно один раз). Необходимо восстановить оставшиеся n - k элементов этой перестановки, так чтобы она стала стек-сортируемой. Если существует несколько ответов, то выберите такой, что p лексикографически максимальна (массив q лексикографически больше массива p тогда и только тогда, когда существует такое целое число k, что для всех i < k qi = pi, and qk > pk). Запрещено как-то переставлять или менять первые k элементов.

Выведите лексикографически максимальную перестановку p, которую можно получить.

Если ответа не существует, то выведите -1.

Входные данные

В первой строке записаны два целых числа n и k (2 ≤ n ≤ 200000, 1 ≤ k < n) — размер желаемой перестановки и количество элементов, которые уже заданы.

Во второй строке записаны k чисел p1, p2, ..., pk (1 ≤ pi ≤ n) — первые k элементов перестановки p. Эти числа попарно различны.

Выходные данные

Если возможно восстановить стек-сортируемую перестановку p размера n такую, что первые k элементов перестановки p совпадают с заданными, выведите максимальную лексикографически из таковых.

В противном случае выведите -1.

F. Разрушение дерева

графы Деревья жадные алгоритмы Конструктив поиск в глубину и подобное *2400

Задано невзвешенное дерево с n вершинами. С ним производят n - 1 операцию. Каждая из операций состоит в следующем:

  1. выбирается два листа в дереве;
  2. к ответу добавляется длина простого пути между этими листами;
  3. выбирается один из этих двух листов и удаляется из дерева.

До проведения операций ответ равен 0. Очевидно, что после n - 1 проведённой операции в дереве останется одна вершина.

Вам необходимо посчитать, какого максимального ответа можно добиться, если действовать оптимально, и вывести, каким образом необходимо действовать.

Входные данные

В первой строке задано одно целое число n (2 ≤ n ≤ 2·105) — количество вершин в дереве.

В следующих n - 1 строках заданы рёбра дерева в формате ai, bi (1 ≤ ai, bi ≤ n, ai ≠ bi). Гарантируется, что заданный граф является деревом.

Выходные данные

В первой строке выведите одно целое число — максимальный ответ, которого можно достигнуть.

В следующих n - 1 строках выведите действия в порядке их совершения в формате ai, bi, ci, где ai, bi — пара листов, выбранных на текущем шаге (1 ≤ ai, bi ≤ n), ci (1 ≤ ci ≤ n, ci = ai или ci = bi) — выбранный лист, который удаляется на текущем шаге.

Посмотрите в примеры для лучшего понимания.

B. Новогодняя ночь

битмаски Конструктив теория чисел *1300

Поскольку Гриша весь год вел себя хорошо, в новогоднюю ночь его посетил Дед Мороз с мешком подарков! В мешке Деда Мороза содержатся n сладких конфет из той самой кондитерской, по одной конфете каждой возможной вкусности от 1 до n.

Счастье Гриши напрямую зависит от того, какие именно конфеты он возьмет. Несмотря на то, что разумно предположить, что брать нужно наиболее вкусные конфеты, новогодняя магия переворачивает все с ног на голову: оказывается, важна не просто сумма вкусностей конфет, а их XOR-сумма!

XOR-сумма последовательности целых чисел a1, a2, ..., am считается как побитовый XOR всех элементов последовательности: , здесь обозначает операцию побитового XOR; подробнее про побитовый XOR (операцию, также известную как побитовое исключающее ИЛИ) можно прочитать здесь.

Дед Мороз заранее предупредил Гришу, что ему требуется посетить еще несколько мест, а потому Гриша волен выбрать не более k конфет из мешка Деда Мороза. Помогите Грише узнать, чему равна максимальная XOR-сумма, а вместе с ней и максимальное счастье, которое он может обрести при оптимальном выборе конфет.

Входные данные

В единственной строке заданы два числа n и k (1 ≤ k ≤ n ≤ 1018).

Выходные данные

Выведите одно число — максимальную возможную XOR-сумму.

Примечание

В первом примере можно взять конфеты со вкусностями 1, 2 и 4. Их XOR-сумма равняется 7.

Во втором примере можно взять все шесть конфет и получить XOR-сумму 7.

C. Джейми и интересный граф

графы Конструктив кратчайшие пути *1600

Джейми называет неориентированный взвешенный граф интересным если он обладает следующими свойствами:

  • Граф связен и содержит ровно n вершин и m рёбер.
  • Все веса рёбер — целые числа и принадлежат отрезку [1, 109].
  • Вес кратчайшего пути из вершины 1 в n является простым числом.
  • Сумма весов рёбер в минимальном остовном дереве графа является простым числом.
  • Граф не содержит петель и кратных рёбер.

В разделе «Примечание» содержатся описания терминов выше.

Помогите Джейми найти какой-нибудь интересный граф.

Входные данные

В первой строке содержатся два целых числа n и m  — требуемое количество вершин и рёбер.

Выходные данные

В первой строке выведите два целых числа sp, mstw (1 ≤ sp, mstw ≤ 1014) — вес кратчайшего пути и сумма весов рёбер в минимальном остовном дереве найденного графа.

В следующих m строках выведите рёбра графа. В каждой строке выведите три целых числа u, v, w (1 ≤ u, v ≤ n, 1 ≤ w ≤ 109) обозначающие ребро между вершинами u и v и имеющее вес w.

Примечание

Граф из первого тестового примера: Последовательность вершин в кратчайшем пути: {1, 2, 3, 4}. Рёбра минимального остовного дерева обозначены звёздочкой (*).

Определения терминов из условия:

Кратчайший путь в неориентированном графе — это последовательность вершин (v1, v2, ... , vk) такая, что существует ребро между vi и vi + 1 1 ≤ i < k и сумма весов минимальна, где w(i, j) — это вес ребра между вершинами i и j. (https://ru.wikipedia.org/wiki/Задача_о_кратчайшем_пути)

Простое число — это целое число, большее 1, такое, что у него нет положительных делителей отличных от 1 и этого числа. (https://ru.wikipedia.org/wiki/Простое_число)

Минимальное остовное дерево графа — это подмножество рёбер связного, неориентированного, взвешенного графа, соединяющее все вершины, не имеющее циклов и имеющее минимальную возможную сумму весов рёбер, в него входящих. (https://ru.wikipedia.org/wiki/Минимальное_остовное_дерево)

(https://ru.wikipedia.org/wiki/Кратные_рёбра)

F. Делимость

дп жадные алгоритмы Конструктив теория чисел *2400

Имп очень благодарен вам за оказанную помощь. Впрочем, если вы решите последнюю задачу, его радость возрастет многократно.

Определим для некоторого множества как число таких пар a, b во множестве , что:
  • a строго меньше b;
  • a делит b без остатка.

Необходимо найти такое множество , которое является подмножеством множества {1, 2, ..., n} (т. е. множества всех положительных целых чисел, не превосходящих n), что .

Входные данные

В единственной строчке заданы два числа n и k .

Выходные данные

Если ответ не существует, выведите одно слово «No».

В противном случае в первой строке выведите «Yes», во второй — число m, размер множества , а в третьей строке — m чисел, составляющих множество . Если возможных ответов несколько, выведите любой.

Для лучшего понимания формата вывода смотрите примеры.

Примечание

Во втором примере подходящими парами являются (1, 2), (1, 4), (1, 5), (1, 6), (2, 4), (2, 6). Таким образом, .

В третьем примере подходящими парами являются (2, 4), (4, 8), (2, 8). Таким образом, .

D. Выбор строк

Конструктив реализация Строки *2500

У Алисы есть строка, состоящая из букв «A», «B» и «C». Боб может использовать следующие замены для любых подстрок данной строки в любом порядке любое число раз:

  • A BC
  • B AC
  • C AB
  • AAA пустая строка

Обратите внимание, что подстрокой называется одна или более соседняя буква. Для данных запросов определите, можно ли получить конечную строку из начальной.

Входные данные

Первая строка содержит строку S (1 ≤ |S| ≤ 105). Вторая строка содержит строку T (1 ≤ |T| ≤ 105), каждая из этих строк содержит только заглавные латинские буквы «A», «B» и «C».

Третья строка содержит число запросов Q (1 ≤ Q ≤ 105).

Следующие Q строк описывают запросы. i-я из этих строк содержит четыре целых числа ai, bi, ci, di. Они описывают i-й запрос: возможно ли получить строку T[ci..di] из строки S[ai..bi] применением вышеописанных операций конечное число раз?

Здесь U[x..y] обозначает подстроку U, которая начинается в позиции x (нумерация с 1) и заканчивается в позиции y. В частности, U[1..|U|] — строка U целиком.

Гарантируется, что 1 ≤ a ≤ b ≤ |S| и 1 ≤ c ≤ d ≤ |T|.

Выходные данные

Выведите строку из Q символов, где i-й символ равен «1», если ответ на i-й запрос «Да», и «0» иначе.

Примечание

В первом запросе мы можем получить нужную строку, например, используя следующие шаги: .

В третьем запросе просят получить из строки AAB строку A, но в этом случае невозможно избавиться от буквы «B».

F. Общественный транспорт

графы Деревья Конструктив *3200

В стране Боба N городов, соединенных дорогами. Между некоторыми парами городов можно проехать на общественном транспорте. Есть две конкурирующие компании: Бобавто возит пассажиров на автобусах, а Бобжд управляет пассажирскими поездами. Чтобы проехать из города A в город B, пассажир сначала должен выбрать вид транспорта, который он будет использовать (автобус или поезд), и затем отправиться в путь. Для каждой пары городов существует ровно два способа добраться из одного города в другой, не посещая ни один город дважды: один способ использует автобусы, другой — поезда. Кроме того, никакая пара городов не соединена одновременно автобусной линией и железной дорогой напрямую.

У вас есть схемы обеих сетей. К сожалению, каждая компания использует различные названия для одних и тех же городов. А именно, автобусная компания нумерует города от 1 до N, а железнодорожная — от N + 1 до 2N. Найдите какое-либо возможное соответствие между этими нумерациями такое, что никакая пара городов не соединена одновременно автобусным и железнодорожным маршрутом напрямую. Обратите внимание на то, что различным городам на одной схеме должны соответствовать различные города другой схемы.

Входные данные

Первая строка содержит одно целое число N (2 ≤ N ≤ 10000) — количество городов.

Следующие N - 1 строк описывают маршрутную сеть Бобавто. Каждая строка содержит два целых числа u и v (1 ≤ u, v ≤ N), означающие, что есть прямой автобусный маршрут между городами u и v.

Следующие N - 1 строк описывают железнодорожную сеть Бобжд. Каждая строка содержит два целых числа u и v (N + 1 ≤ u, v ≤ 2N), означающие, что есть прямой железнодорожный маршрут между городами u и v.

Выходные данные

Если решения нет, выведите единственную строку, содержащую слово «No».

Если решение существует, выведите две строки. В первой строке выведите слово «Yes». Во второй строке выведите N целых чисел P1, P2, ..., PN (N + 1 ≤ Pi ≤ 2N) — соответствие между двумя схемами. А именно, для i ≠ j должно выполняться Pi ≠ Pj, и для всех автобусных маршрутов (i, j) не должно быть прямого железнодорожного маршрута (Pi, Pj).

Если существует несколько решений, выведите любое.

Примечание

Первый пример показан на рисунке (автобусные линии красные, железнодорожные — синие):

C. Большой секрет

Конструктив математика *2200

Витя выяснил, что ответ на Главный вопрос жизни, Вселенной и всего такого заключается не в числе 54 42, а в возрастающей последовательности положительных целых чисел \(a_1, \ldots, a_n\). Чтобы не раскрывать сенсацию раньше времени, Витя зашифровал ответ, получив последовательность \(b_1, \ldots, b_n\) по следующему правилу:

Легко видеть, что исходную последовательность можно вычислить по правилу \(a_i = b_1 \oplus \ldots \oplus b_i\).

Однако, когда Витя решил представить миру свою сенсацию, он обнаружил, что числа \(b_i\) в его шифре перемешались, и после расшифровки по правилу, описанному выше, может получиться последовательность, не являющаяся возрастающей. Чтобы не ударить лицом в грязь перед научным сообществом, Витя решил найти какую-нибудь перестановку чисел \(b_i\), чтобы последовательность \(a_i = b_1 \oplus \ldots \oplus b_i\) была строго возрастающей. Помогите ему найти любую такую перестановку, либо определите, что это невозможно (и значит, в шифр вкралась какая-то дополнительная ошибка).

Входные данные

В первой строке записано одно целое число \(n\) (\(1 \leq n \leq 10^5\)).

Во второй строке через пробел записано \(n\) целых чисел \(b_1, \ldots, b_n\) (\(1 \leq b_i < 2^{60}\)).

Выходные данные

Если искомой перестановки чисел не существует, выведите слово «No» в единственной строке.

В противном случае, в первой строке выведите слово «Yes», после чего во второй строке выведите числа \(b'_1, \ldots, b'_n\) — подходящую перестановку чисел \(b_i\). Неупорядоченные наборы \(\{b_1, \ldots, b_n\}\) и \(\{b'_1, \ldots, b'_n\}\) должны совпадать, то есть для каждого числа \(x\) количество вхождений \(x\) в первый набор должно быть равно количеству вхождений \(x\) во второй набор. Кроме этого, последовательность \(a_i = b'_1 \oplus \ldots \oplus b'_i\) должна быть строго возрастающей.

Примечание

В первом примере ни одна из перестановок чисел не подходит.

Во втором примере данный ответ приводит к последовательности \(a_1 = 4\), \(a_2 = 8\), \(a_3 = 15\), \(a_4 = 16\), \(a_5 = 23\), \(a_6 = 42\).

D. Ацтекские катакомбы

Конструктив *2600

Индиана Джонс нашел древние ацтекские катакомбы, в которых спрятан золотой идол. Катакомбы состоят из \(n\) пещер. Каждая пара пещер соединена двусторонним коридором, который может быть открыт или закрыт. Вход в катакомбы находится в пещере \(1\), а идол и выход из катакомб — в пещере \(n\).

Когда Индиана переходит из пещеры \(x\) в пещеру \(y\) по открытому коридору, все коридоры, связанные с пещерой \(x\), меняют свое состояние: все ранее открытые коридоры закрываются, а все закрытые — открываются. Цель Индианы — попасть из пещеры \(1\) в пещеру \(n\) за наименьшее число переходов. Помогите ему найти оптимальный маршрут, или определите, что выйти из катакомб невозможно.

Входные данные

В первой строке находится два целых числа \(n\) и \(m\) — количество пещер и количество коридоров, которые открыты в момент входа в катакомбы (\(2 \leq n \leq 3\cdot 10^5\), \(0 \leq m \leq 3 \cdot 10^5\)).

Следующие \(m\) строк описывают открытые коридоры. \(i\)-я из этих строк содержит два целых числа \(u_i\) и \(v_i\) — номера пещер, соединенных \(i\)-м открытым коридором (\(1 \leq u_i, v_i \leq n\), \(u_i \neq v_i\)). Гарантируется, что каждая неупорядоченная пара пещер упоминается во входе не более одного раза.

Выходные данные

Если искомый маршрут существует, в первой строке выведите одно целое число \(k\) — минимальное число переходов (\(1 \leq k \leq 10^6\)). Во второй строке выведите \(k+1\) число \(x_0, \ldots, x_k\) — номера пещер в порядке посещения Индианой. Последовательность \(x_0, \ldots, x_k\) должна удовлетворять следующим свойствам:

  • \(x_0 = 1\), \(x_k = n\);
  • для любого \(i\) от \(1\) до \(k\) коридор из \(x_{i - 1}\) в \(x_i\) должен быть открыт в тот момент, когда Индиана собирается по нему перейти.

Если маршрута не существует, выведите одно число \(-1\).

Гарантируется, что если маршрут существует, то существует и маршрут, состоящий из не более, чем \(10^6\) переходов.

E. Слияние равных элементов

Конструктив Структуры данных *1900

Задана последовательность целых положительных чисел a1, a2, ..., an.

Пока возможно, с ней производят следующую операцию: ищут пару соседних одинаковых элементов. Если таких несколько, то выбирают самую левую такую пару (с наименьшими индексами элементов). Если эти числа были равны x, то оба этих числа удаляют и на их место вставляют одно число x + 1. Таким образом, количество элементов в последовательности после каждой операции уменьшается на 1.

Процесс применения операций следует прервать, когда в последовательности нет соседних одинаковых элементов.

Например, если последовательность изначально имела вид [5, 2, 1, 1, 2, 2], то после первой операции она будет иметь вид [5, 2, 2, 2, 2], после второй — [5, 3, 2, 2], после третьей — [5, 3, 3], а после четвертой — [5, 4]. После этого в последовательности не останется соседних одинаковых элементов, поэтому процесс применения операций остановится.

Определите, как будет выглядеть последовательность после окончания процесса применения операций.

Входные данные

В первой строке следует целое число n (2 ≤ n ≤ 2·105) — количество элементов в последовательности.

Во второй строке следует начальная последовательность целых чисел a1, a2, ..., an (1 ≤ ai ≤ 109).

Выходные данные

В первой строке выведите целое число k — количество элементов в последовательности после окончания процесса применения операций.

Во второй строке выведите k целых чисел — последовательность после окончания применения операций.

Примечание

Первый пример разобран в условии.

Во втором примере последовательность имеет вид [1000000000, 1000000000, 1000000000, 1000000000]. После выполнения первой операции она станет равна [1000000001, 1000000000, 1000000000]. После выполнения второй операции последовательность примет вид [1000000001, 1000000001]. Затем произойдет третья операция, которая будет последней, а последовательность будет выглядеть как [1000000002].

В третьем примере нет соседних одинаковых элементов, поэтому последовательность не изменится.

B. Чемпионат мира

Конструктив реализация *1200

Заключительная часть чемпионата мира по футболу проводится по олимпийской системе, также называемой плей-офф.

Всего в этой части турнира принимает участие n команд, пронумерованных от 1 до n. Проводится несколько раундов, в каждом раунде оставшиеся команды располагаются в порядке увеличения номеров, затем первая играет со второй, третья — с четвёртой, пятая — с шестой и так далее. Гарантируется, что в каждом раунде участвует четное число команд. Команда-победитель в каждой игре проходит в следующий раунд, проигравшая команда выбывает из турнира, ничьих не бывает. В последнем раунде принимают участие две команды, этот раунд называется финалом, а команда-победитель объявляется чемпионом мира, на этом турнир заканчивается.

Аркадий хочет, чтобы в финале сыграли две определенные команды. К сожалению, номера команд уже определены, и может получиться так, что эти команды не могут выйти в финал одновременно, так как в лучшем случае встретятся на каком-то раунде до финала. Определите, в каком раунде возможна встреча команд с номерами a и b.

Входные данные

Единственная строка содержит три целых числа n, a и b (2 ≤ n ≤ 256, 1 ≤ a, b ≤ n) — общее число команд и номера команд, которыми интересуется Аркадий.

Гарантируется, что n таково, что в каждый раунд проходит четное число команд, а a и b — различные числа.

Выходные данные

Выведите в единственной строке «Final!» (без кавычек), если команды a и b могут встретиться в финале.

Иначе выведите одно целое число — номер раунда, в котором могут встретиться команды a и b. Раунды нумеруются с 1.

Примечание

В первом примере команды с номерами 1 и 2 встретятся между собой в первом же раунде.

Во втором примере команды 2 и 6 могут встретиться между собой только в третьем раунде (который будет финальным), в том случае, если они победят своих оппонентов в первом и втором раундах.

В третьем примере команды с номерами 7 и 5 могут встретиться во втором раунде, если обыграют своих оппонентов в первом раунде.

A. Суперпалиндром

Конструктив *800

Дана строка A. Найдите строку B такую, что B является палиндромом, и A входит в B как подпоследовательность.

Подпоследовательность строки — это строка, полученная удалением некоторых символов (не обязательно подряд идущих) этой строки без изменения порядка остальных символов. Например, «cotst» это подпоследовательность строки «contest».

Строка называется палиндромом, если она одинаково читается слева направо и справа налево.

Длина строки B должна быть не более 104. Гарантируется, что найдётся хотя бы одна подходящая строка.

Вам не требуется найти кратчайший ответ, единственное ограничение — длина B не должна превышать 104.

Входные данные

В первой строке содержится строка A (1 ≤ |A| ≤ 103), состоящая из строчных букв английского алфавита, где |A| — это длина строки A.

Выходные данные

Выведите строку B, состоящую только из строчных букв английского алфавита. Вам не требуется найти кратчайший ответ, единственное ограничение — длина B не должна превышать 104. Если ответов несколько, выведите любую подходящую строку B.

Примечание

В первом тестовом примере «aba» является подпоследовательностью строки «aba», которая является палиндромом.

Во втором тестовом примере «ab» является подпоследовательностью строки «aabaa», которая является палиндромом.

C. Цикл перестановки

Конструктив Перебор *1600

Для перестановки P[1... N] чисел от 1 до N определим следующую функцию f:

Обозначим, за g(i) минимальное натуральное j такое, что f(i, j) = i. Можно показать, что такое j всегда существует.

Для заданных N, A, B найдите перестановку P чисел от 1 до N такую, что для любого 1 ≤ i ≤ N, g(i) равно или A, или B.

Входные данные

В единственной строке содержатся три целых числа N, A, B (1 ≤ N ≤ 106, 1 ≤ A, B ≤ N).

Выходные данные

Если требуемой перестановки не существует, выведите -1.

Иначе выведите перестановку целых чисел от 1 до N.

Примечание

В первом тестовом примере g(1) = g(6) = g(7) = g(9) = 2 и g(2) = g(3) = g(4) = g(5) = g(8) = 5.

Во втором тестовом примере g(1) = g(2) = g(3) = 1.

E. Важнейшее объединение

дп Конструктив *3200

В гостях хорошо, а дома лучше. Именно поэтому встреча Китайского Нового года всей семьей — такая важная и обязательная традиция.

После праздничного ужина Маленький Томми предложил семье сложную логическую игру. Вот ее краткие правила:

  1. Изначально перед вами последовательность из n неотрицательных целых чисел p1, p2, ..., pn. По правилам все числа в этой последовательности должны оставаться неотрицательными на протяжении всей игры.
  2. Вы можете выбрать два соседних положительных целых числа в этой последовательности pi и pi + 1 (1 ≤ i < n) и затем уменьшить их на минимум среди них (т. е. min(pi, pi + 1)), стоимость операции равна величине уменьшения, т. е. min(pi, pi + 1). Назовем такую операцию понижением.
  3. Игра оканчивается, как только не останется ни одной пары соседних положительных чисел. Ваша задача — довести игру до конца за минимальную суммарную стоимость операций.

Легко видеть, что игра закончится не более чем за n - 1 понижений. Выведите свое решение этой головоломки с минимальной стоимостью.

Входные данные

Первая строка содержит одно целое число n (1 ≤ n ≤ 3·105).

Вторая строка содержит n целых чисел p1, p2, ..., pn (0 ≤ pi ≤ 109, i = 1, 2, ..., n).

Выходные данные

В первой строке выведите одно целое число — число понижений в вашем решении m (0 ≤ m ≤ n - 1).

В следующие m строк выведите понижения по порядку. В каждой из этих m строк выведите одно целое число i (1 ≤ i < n), показывающее, что вы будете производить понижение чисел pi и pi + 1.

Если существует несколько решений, минимизирующих стоимость, выведите любое из них.

Примечание

В первом примере одно из оптимальных решений следующее: , итоговая стоимость 1 + 1 = 2.

Во втором примере одно из оптимальных решений следующее: , итоговая стоимость 1 + 1 + 1 = 3.

B. Большая ставка

Конструктив реализация *1200

Кроме Ниана существует также демон, чье имя Суи, его настолько боятся дети, что даже болеют от этого. Родители кладут под подушки детей деньги в красных конвертах, и когда Суи приближается, феи отталкивают его.

Большой Банбан не уверен, сколько денег отдать детям. Он считает, что петли в числах приносят удачу, так как символизируют единство и гармонию.

Он хочет найти положительное целое число n, не превосходящее 1018 такое, что в десятичной записи числа n ровно k петель, или определить, что такого n не существует.

Петлей называется плоский участок бумаги, окруженный линиями в десятичной записи числа, записанного арабскими цифрами. Например, в цифре 4 ровно одна петля, в цифре 8 ровно две петли, а в цифре 5 — ни одной. Вы можете использовать рисунок ниже для определения точного вида цифр.

Входные данные

Единственная строка содержит одно целое число k (1 ≤ k ≤ 106) — необходимое число петель.

Выходные данные

Выведите одно целое число: если подходящего n не существует, выведите -1, иначе выведите любое подходящее n. В последнем случае вам нужно вывести положительное целое число в десятичной записи, не превосходящее 1018.

E. Интересный замок

Конструктив Строки *2300

Добро пожаловать в очередную задачу про взлом кодового замка! Исследователи Уитфилд и Мартин наткнулись на необычный сейф, внутри которого, по слухам, находятся несметные богатства, среди которых можно найти решение задачи дискретного логарифма!

На сейфе, разумеется, установлен кодовый замок, на экране которого в каждый момент времени показывается строка, состоящая из n маленьких букв английского алфавита. Изначально на экране показывается строка s. Уитфилд и Мартин выяснили, что сейф откроется, когда на экране окажется строка t.

Строку на экране можно изменять с помощью операции «shift x». Для того, чтобы применить эту операцию, исследователи выбирают число x от 0 до n включительно. После этого текущая строка p = αβ изменяется на строку βRα, где длина β равна x, а длина α равна n - x. Иными словами, суффикс строки p длины x разворачивается и переставляется в начало строки. Например, применение операции «shift 4» заменит строку «abcacb» на строку «bcacab», поскольку α = ab, β = cacb, βR = bcac.

Исследователи боятся, что если применить слишком много операций «shift», то замок заблокируется навсегда. Они просят вас найти способ получить на экране строку t, используя не более чем 6100 операций.

Входные данные

Первая строка содержит число n — длина строк s и t (1 ≤ n ≤ 2 000).

После этого идут две строки s и t, состоящие из n маленьких букв английского алфавита.

Выходные данные

Если нельзя получить t из s, используя не более 6100 операций «shift», выведите единственное число  - 1.

Иначе в первой строке выведите количество операций k (0 ≤ k ≤ 6100). В следующей строке выведите k чисел xi, соответствующих операциям «shift xi» (0 ≤ xi ≤ n), в том порядке, в котором их нужно применить.

C. Подбираем тесты

Бинарный поиск Конструктив Перебор *1700

Определим m-свободную матрицу, как бинарную (то есть содержащую только символы 1 и 0) матрицу такую, что любая квадратная подматрица m × m этой матрицы содержит хотя бы один ноль.

Рассмотрим следующую задачу:

Даны два целых числа n и m. Постройте m-свободную квадратную матрицу размера n × n такую, что количество символов 1 в ней максимально. Выведите максимальное количество символов 1 в такой матрице.

Эту задачу вам решать совсем не обязательно. Вместо этого вы поможете составить к ней тесты.

Задано t чисел x1, x2, ..., xt. Для каждого найдите два целых числа ni и mi (ni ≥ mi) такие, что ответ для вышеприведенной задачи равен в точности xi, если установить n = ni и m = mi.

Входные данные

В первой строке задано одно целое число t (1 ≤ t ≤ 100) — количество тестов, которые вам нужно составить.

Затем следуют t строк, в i-й записано одно целое число xi (0 ≤ xi ≤ 109).

Обратите внимание, во взломах можно использовать только t = 1.

Выходные данные

На каждый тест, который вам нужно составить, выведите два целых числа ni и mi (1 ≤ mi ≤ ni ≤ 109) такие, что максимальное количество символов 1 в mi-свободной матрице размера ni × ni в точности равно xi. Если решений несколько, выведите любое; если невозможно построить такой тест, то выведите единственной число  - 1.

C. Телефонные номера

Конструктив реализация Строки *1500

И где здесь телефонные номера?

Дана строка s из строчных букв английского алфавита и число k. Найдите лексикографически минимальную строку t, имеющую длину k, множество букв которой является подмножеством множества букв s и s лексикографически меньше t.

Гарантируется, что ответ существует.

Обратите внимание, что под множеством букв строки подразумевается множество, а не мультимножество. В частности, множество букв строки abadaba это {a, b, d}.

Строка p считается лексикографически меньше строки q, если p — префикс q, не равный q или существует i такое, что pi < qi и для всех j < i выполнено pj = qj. Например, abc лексикографически меньше abcd , abd лексикографически меньше abec, afa лексикографически не меньше ab и a лексикографически не меньше a.

Входные данные

В первой строке через пробел заданы два целых числа n и k (1 ≤ n, k ≤ 100 000) — длина строки s и необходимая длина строки t.

Во второй строке задана строка s, состоящая из n строчных букв английского алфавита.

Выходные данные

Выведите строку t, удовлетворяющую условиям, описанным выше.

Гарантируется, что ответ существует.

Примечание

В первом примере список строк t длины 3, подходящих под условие, что множество букв t — подмножество множества букв s, таков: aaa, aab, aac, aba, abb, abc, aca, acb, .... Из них лексикографически больше abc: aca, acb, .... Лексикографически минимальная из них — aca.

B. Чехарда в массиве

Конструктив математика *1700

Дима — начинающий программист. В ходе работы ему регулярно приходится проделывать одну и ту же операцию: удалить из массива каждый второй элемент. В один прекрасный день ему надоели простые решения этой задачи, и он придумал следующий экстравагантный алгоритм.

Будем считать, что изначально в массиве находятся n чисел от 1 до n, причём число i располагается в ячейке c индексом 2i - 1 (нумерация элементов в массиве начинается с единицы), а остальные ячейки массива пустые. Далее, на каждом шаге Дима выбирает непустую ячейку массива с максимальным индексом, и перемещает записанное в ней число в ближайшую пустую ячейку слева от выбранной. Процесс продолжается до тех пор, пока все n чисел не окажутся в первых n ячейках массива. Например, если n = 4, содержимое массива изменяется следующим образом:

Вам предстоит написать программу, которая позволит определять, какое число окажется в ячейке под номером x (1 ≤ x ≤ n) после окончания работы алгоритма Димы.

Входные данные

В первой строке вводятся целые числа n и q (1 ≤ n ≤ 1018, 1 ≤ q ≤ 200 000) — число элементов в массиве и количество запросов, на которые необходимо дать ответ. В каждой из последующих q строк вводится целое число xi (1 ≤ xi ≤ n) — номер ячейки, для которой необходимо определить содержимое после окончания работы алгоритма.

Выходные данные

Для каждого из q запросов выведите одно целое число — значение, которое будет содержать указанная ячейка массива после окончания работы алгоритма Димы.

Примечание

Первый пример показан на рисунке.

Во втором примере окончательный массив выглядит так: [1, 12, 2, 8, 3, 11, 4, 9, 5, 13, 6, 10, 7].

G. Язык-паззл

*особая задача *особая задача *особая задача Конструктив *2200

В этой задаче вам нужно написать несложный генератор кода для двухмерного языка программирования, производного от Brainfuck.

Код на этом языке представляет собой прямоугольник, состоящий из символов '.' и 'X'. Код преобразуется в программу на Brainfuck следующим образом: символы читаются в книжном порядке (сверху вниз, слева направо), и каждому символу 'X' ставится в соответствие команда Brainfuck. Команда определяется левым, верхним и правым соседями символа 'X' в соответствии со следующей таблицей:

Вам дана строка. Выведите программу на этом языке, которая при выполнении напечатает эту строку.

Вы можете скачать исходный код используемого интерпретатора по ссылке https://cfassets.m27.workers.dev/rounds/952/puzzling-interpreter.cpp (используйте C++11 чтобы скомпилировать код). Обратите внимание на несколько аспектов реализации:

  • Первый шаг интерпретации кода - преобразование в программу на Brainfuck, которая затем выполняется.
  • Код должен быть прямоугольным, т.е. все строки должны быть одинаковой длины. В коде может быть не более 10,000 строк и 10,000 столбцов, и не более 500,000 символов 'X'.
  • Код имеет топологию тора, т.е. для символов в первой строке соседи сверху - символы на последней строке.
  • Память интерпретатора Brainfuck состоит из 30000 ячеек памяти, хранящих целые числа от 0 до 255 с арифметикой по модулю 256.
  • Ввод с консоли (команда ,) разрешен в программе на Brainfuck, но игнорируется при выполнении.
Входные данные

Входные данные состоят из одной строки символов с аски-кодами от 33 ('!') до 122 ('z'), включительно. Длина строки - от 1 до 10 символов, включительно.

Выходные данные

Выведите программу на описанном языке, которая при выполнении выведет на печать заданное сообщение.

Примечание

Пример соответствует следующей программе на Brainfuck:

       -
>+<
>+++<
>+++++<
>+++++++<
>+++++++++<
>+++++++++++<

< >
.
.
.

Треугольный блок вычитает единицу из первой ячейки памяти и устанавливает значение второй ячейки равным 36 - аски-коду символа '$'. Следующая после треугольного блока строка передвигает указатель памяти на вторую ячейку, а три последние строки выводят символ '$' три раза.

C. Махмуд, Эхаб и неправильный алгоритм

Деревья Конструктив *1500

Махмуд пытался решить задачу вершинного покрытия на дереве. Эта задача формулируется так.

По данному неориентированному дереву, состоящему из n вершин, найдите минимальное число вершин, которые покрывают все рёбра. Формально, нам необходимо найти такой набор вершин, что для каждого ребра (u, v), принадлежащего дереву, или u, или v принадлежит этому набору, или они оба принадлежат ему. Махмуд нашёл следующий алгоритм для решения задачи:

  • Возьмём за корень дерева вершину 1.
  • Посчитаем количество вершин на чётной глубине и назовём её evenCnt.
  • Посчитаем количество вершин на нечётной глубине и назовём её oddCnt.
  • Ответом будет являться минимальное из чисел evenCnt и oddCnt.

Глубиной вершины называется число рёбер в кратчайшем пути между этой вершиной и корнем. Глубина корня равна 0.

Эхаб сказал Махмуду, что данный алгоритм неверен, но Махмуд не поверил ему, поскольку он тестировал этот алгоритм на множестве разных деревьев и он всегда выводил правильный ответ. Поэтому Эхаб просит вас помочь найти два таких дерева, состоящих из n вершин, что алгоритм Махмуда выведет неправильный ответ для первого дерева и правильный — для второго.

Входные данные

В единственной строке ввода содержится одно целое число n (2 ≤ n ≤ 105) — число вершин в деревьях, которые необходимо вывести.

Выходные данные

Вывод должен состоять из 2 независимых частей, каждая из которых содержит дерево. Алгоритм Махмуда должен получать неправильный ответ для дерева в первой части и правильный — для дерева во второй части. Если по какой-либо причине корректного дерева для какой-то части не существует, выведите -1 только для данной части.

Если ответ для какой-то части существует, он должен содержать n - 1 строку, в каждой из которых должно содержаться 2 целых числа u и v (1 ≤ u, v ≤ n), разделённых пробелами, что будет означать, что между вершинами u и v есть неориентированное ребро. Если выданный вашей программой граф не будет являться деревом или не будет следовать формату выходных данных, ваше решение получит вердикт «Неправильный ответ».

Если существует несколько правильных ответов, выведите любой из них.

Примечание

В первом примере существует всего одно дерево с двумя вершинами (вершина 1, соединённая с вершиной 2). Алгоритм всегда получит на нём правильный ответ, поэтому мы вывели  - 1 в первой секции, но заметьте, что мы вывели это дерево во второй секции.

Во втором примере:

В первом дереве алгоритм выведет ответ с 4 вершинами, но существует следующий ответ с 3 вершинами: Во втором дереве алгоритм найдёт ответ с 3 вершинами, который верен:

D. Махмуд, Эхаб и еще одна игра про построение массива

жадные алгоритмы Конструктив математика теория чисел *1900

У Махмуда есть массив a, состоящий из n целых чисел. Он попросил Эхаба найти такой массив b такой же длины, что:

  • b лексикографически больше или равен a.
  • bi ≥ 2.
  • Все числа в b попарно взаимно просты: для любых 1 ≤ i < j ≤ n, bi и bj взаимнопросты, то есть GCD(bi, bj) = 1, где GCD(w, z) — наибольший общий делитель чисел w и z.

Эхаб хочет выбрать особый массив, поэтому среди всех возможных вариантов он хочет выбрать лексикографически минимальный массив. Можете ли вы его найти?

Массив x лексикографически больше, чем массив y, если существует индекс i такой, что xi > yi и xj = yj для всех 1 ≤ j < i. Массив x равен массиву y, если xi = yi для всех 1 ≤ i ≤ n.

Входные данные

Первая строка содержит одно целое число n (1 ≤ n ≤ 105) — число элементов в массивах a и b.

Вторая строка содержит n целых чисел a1, a2, ..., an (2 ≤ ai ≤ 105) — элементы a.

Выходные данные

Выведите n целых чисел, разделённых пробелами, i-е из которых равно bi.

Примечание

Заметьте, что во втором примере все числа в массиве уже попарно взаимнопросты, поэтому мы и выводим его.

C. Подсчет подпоследовательностей

битмаски жадные алгоритмы Конструктив реализация *1700

У Пикачу есть массив. Он выписал все непустые подпоследовательности своего массива на бумажный лист. Обратите внимание, что у массива длины n есть 2n - 1 непустых подпоследовательностей.

Пикачу всегда был озорным, поэтому он удалил все подпоследовательности, в которых Максимальный_элемент_подпоследовательности  -  Минимальный_элемент_подпоследовательности  ≥ d

В итоге, у Пикачу осталось X подпоследовательностей.

Но Пикачу случайно потерял свой массив и сейчас у Пикачу из-за этого серьезные проблемы. Он до сих пор помнит числа X и d и хочет построить любой массив, который удовлетворяет описанным условиям. Все числа в его новом массиве должны быть целыми, положительными и должны быть меньше, чем 1018.

Обратите внимание, что количество элементов в выведенном массиве не должно превышать 104. Если невозможно построить ни одного такого массива, выведите  - 1.

Входные данные

В единственной строке следуют два целых числа X и d (1 ≤ X, d ≤ 109).

Выходные данные

Выведите две строки.

В первой строке должно содержаться целое число n (1 ≤ n ≤ 10 000)— количество элементов в новом массиве Пикачу.

Во второй строке должно содержаться n целых чисел через пробел — a1, a2, ... , an (1 ≤ ai < 1018).

Если ответа не существует, выведите одно число -1. Если существуют несколько ответов, выведите любой.

Примечание

В первом тестовом примере, подпоследовательности, оставшиеся при удалении всех подпоследовательностей, в которых Максимальный_элемент_подпоследовательности  -  Минимальный_элемент_подпоследовательности  ≥ 5 это [5], [5, 7], [5, 6], [5, 7, 6], [50], [7], [7, 6], [15], [6], [100]. Этих подпоследовательностей ровно 10. Таким образом, массив [5, 50, 7, 15, 6, 100] подходит.

Похожим образом, во втором тестовом примере, подпоследовательности, оставшиеся при удалении всех подпоследовательностей, в которых Максимальный_элемент_подпоследовательности  -  Минимальный_элемент_подпоследовательности  ≥ 2 это [10], [100], [1000], [10000]. Этих подпоследовательностей ровно 4. Таким образом, массив [10, 100, 1000, 10000] подходит.

B. Студенты в вагоне

жадные алгоритмы Конструктив реализация *1300

В вагоне есть \(n\) последовательных мест. Каждое место либо пустое, либо занято пассажиром.

Университетская команда на олимпиаду состоит из \(a\) студентов-программистов и \(b\) студентов-спортсменов. Определите наибольшее количество студентов из всех \(a+b\), которых можно посадить в вагон так, чтобы никакой студент-программист не сидел рядом со студентом-программистом и никакой студент-спортсмен не сидел рядом со студентом-спортсменом. Иными словами, не должно быть двух подряд идущих мест, на которых сидят два студента-спортсмена или два студента-программиста.

Считайте, что изначально занятые пассажирами места заняты членами жюри (которые, очевидно, вообще не являются студентами).

Входные данные

В первой строке следует три целых числа \(n\), \(a\) и \(b\) (\(1 \le n \le 2\cdot10^{5}\), \(0 \le a, b \le 2\cdot10^{5}\), \(a + b > 0\)) — общее количество мест в вагоне, количество студентов-программистов и количество студентов-спортсменов.

Во второй строке следует строка длины \(n\), состоящая из символов «.» и «*». Точка означает, что соответствующее место свободно. Звездочка означает, что соответствующее место занято членом жюри.

Выходные данные

Выведите наибольшее количество студентов, которых можно посадить в вагон так, чтобы никакой студент-программист не сидел рядом со студентом-программистом и никакой студент-спортсмен не сидел рядом со студентом-спортсменом.

Примечание

В первом примере можно посадить всех студентов, например, следующим образом: *.AB*

Во втором примере можно посадить четырех студентов, например, следующим образом: *BAB*B

В третьем примере можно посадить семерых студентов, например, следующим образом: B*ABAB**A*B

Буквой A обозначены студенты-программисты, а буквой B — студенты-спортсмены.

E. Байтландия, Берляндия и спорные города

жадные алгоритмы Конструктив *2200

Страны Байтландия и Берляндия расположены на прямой \(Ox\). Кроме этого на этой прямой расположены и спорные города, которые принадлежат каждой из стран по их мнению. Таким образом, на прямой \(Ox\) расположены города трёх типов:

  • города Байтландии,
  • города Берляндии,
  • спорные города.

Недавно был запущен проект BNET — компьютерная сеть нового поколения. Теперь задача обоих государств соединить города так, чтобы сеть этой страны была связной.

Страны договорились соединить пары городов кабелями BNET таким образом, чтобы:

  • если рассмотреть только города Байтландии и спорные города, то в получившимся наборе городов любой город был достижим из любого другого по одному или нескольким кабелям,
  • если рассмотреть только города Берляндии и спорные города, то в получившимся наборе городов любой город был достижим из любого другого по одному или нескольким кабелям.

Таким образом, надо выбрать набор пар городов так, чтобы, соединив их, выполнялись оба условия одновременно. Кабели осуществляют двунаправленную передачу данных. Каждый кабель соединяет ровно два различных города.

Стоимость прокладки кабеля из одного города в другой равна расстоянию между городами. Найдите минимальную суммарную стоимость прокладки набора кабелей, чтобы два подмножества городов (Байтландии и спорных городов, Берляндии и спорных городов) были связны.

Каждый город является точкой на прямой \(Ox\). Технически возможно соединить города \(a\) и \(b\) кабелем так, что город \(c\) (\(a < c < b\)) не подключен к этому кабелю, где \(a\), \(b\) и \(c\) — одновременно координаты городов \(a\), \(b\) и \(c\).

Входные данные

В первой строке записано целое число \(n\) (\(2 \le n \le 2 \cdot 10^{5}\)) — количество городов.

Далее следует \(n\) строк, в каждой из которых задано целое число \(x_i\) и буква \(c_i\) (\(-10^{9} \le x_i \le 10^{9}\)) — координаты очередного города и его тип. Если город принадлежит Байтландии, то \(c_i\) равно «B». Если город принадлежит Берляндии, то \(c_i\) равно «R». Если город является спорным между странами, то \(c_i\) равно «P».

Все города имеют различные координаты. Гарантируется, что города заданы в порядке увеличения их координат.

Выходные данные

Выведите минимальную суммарную длину такого набора кабелей, что если удалить все города Берляндии (\(c_i\)R»), можно будет найти путь от любого оставшегося города до любого другого оставшегося города, двигаясь только по кабелям. Аналогично, если удалить все города Байтландии (\(c_i\)B»), можно будет найти путь от любого оставшегося города до любого другого оставшегося города, двигаясь только по кабелям.

Примечание

В первом примере нужно соединить первый город со вторым, второй с третьим, а третий с четвертым. Суммарная длина кабелей будет равна \(5 + 3 + 4 = 12\).

Во втором примере нет спорных городов, поэтому нужно соединить все соседние города Байтландии и все соседние города Берляндии. Города Берляндии имеют координаты \(10, 21, 32\), поэтому для их соединения нужно два кабеля длины \(11\) и \(11\). Города Байтландии имеют координаты \(14\) и \(16\), поэтому для их соединения нужен один кабель длины \(2\). Таким образом, суммарная длина всех кабелей равна \(11 + 11 + 2 = 24\).

B. Уничтожение дерева

Деревья дп жадные алгоритмы Конструктив поиск в глубину и подобное *2000

Дано дерево (граф состоящий из n вершин, соединенных n - 1 ребрами, в котором от каждой вершины можно добраться до каждой, двигаясь только по ребрам).

Вершину можно уничтожить если из нее выходит четное число ребер, при этом уничтожаются все ребра, выходящие из нее.

Требуется уничтожить все вершины в дереве, либо сказать, что это невозможно.

Входные данные

В первой строке задано целое число n (1 ≤ n ≤ 2·105) — количество вершин в дереве.

Во второй строке заданы n целых чисел p1, p2, ..., pn (0 ≤ pi ≤ n). Если pi ≠ 0, то существует ребро между вершинами с номерами i и pi. Гарантируется, что задано дерево.

Выходные данные

Если уничтожить все вершины возможно, выведите «YES» (без кавычек), иначе выведите «NO» (без кавычек).

Если возможно уничтожить все вершины, в следующих n строках выведите номера вершин в порядке, в котором их надо уничтожать. Если существует несколько способов удалить все вершины, выведите любой.

Примечание

В первом примере сначала нужно уничтожить вершину с номером 1 (при ее уничтожении удалятся ребра (1, 2) и (1, 4)), затем 2-ю (удаляются ребра (2, 3) и (2, 5)). После этого в дереве не остается ребер, поэтому оставшиеся вершины можно уничтожать в любом порядке.

B. Надмножество

Конструктив разделяй и властвуй *2300

Множество точек на плоскости называется хорошим, если для любых двух точек выполняется хотя бы одно из трех условий:

  • эти две точки лежат на одной горизонтали;
  • эти две точки лежат на одной вертикали;
  • внутри или на границе прямоугольника с углами в этих двух точках есть другие точки множества, помимо этих двух. Здесь имеется в виду прямоугольник со сторонами, параллельными осям координат, так называемый bounding box двух точек.

На плоскости задано множество из n точек. Найдите любое хорошее надмножество этого множества размером не более 2·105 точек.

Входные данные

В первой строке записано целое число n (1 ≤ n ≤ 104) — количество точек в исходном множестве. Следующие n строк описывают точки множества. Каждая строка содержит два целых числа xi и yi ( - 109 ≤ xi, yi ≤ 109) — координаты очередной точки. Гарантируется, что все точки различны.

Выходные данные

В первой строке выведите количество точек m (n ≤ m ≤ 2·105) в хорошем надмножестве, в следующих m строках выведите сами точки. Координаты точек не должны превосходить 109 по абсолютной величине. Обратите внимание, что минимизировать m не требуется, достаточно найти любое хорошее надмножество заданного множества, размер которого не превосходит 2·105.

Все точки в надмножестве должны иметь целые координаты.

D. Множество степеней

графы Конструктив реализация *2500

Задана последовательность из n целых чисел d1, d2, ..., dn (d1 < d2 < ... < dn). Требуется построить такой неориентированный граф, что:

  • в нем ровно dn + 1 вершин;
  • в нем нет петель;
  • в нем нет кратных ребер;
  • в нем не более 106 ребер;
  • его множество степеней равно d.

Вершины должны быть пронумерованы от 1 до (dn + 1).

Последовательностью степеней называется массив a длины, равной количеству вершин графа, такой, что ai — это количество вершин, смежных с i-й.

Множеством степеней называется отсортированная по возрастанию последовательность из всех различных значений из последовательности степеней.

Гарантируется, что существует такой граф, что все условия выполняются, и он содержит не более 106 ребер.

Выведите полученный граф.

Входные данные

В первой строке записано одно целое число n (1 ≤ n ≤ 300) — размер множества степеней.

Во второй строке записаны n целых чисел d1, d2, ..., dn (1 ≤ di ≤ 1000, d1 < d2 < ... < dn) — множество степеней.

Выходные данные

В первой строке выведите одно целое число m (1 ≤ m ≤ 106) — количество ребер в полученном графе. Гарантируется, что существует такой граф, что все условия выполняются, и он содержит не более 106 ребер.

В каждой из следующих m строк должны быть записаны два целых числа vi и ui (1 ≤ vi, ui ≤ dn + 1) — описание i-го ребра.

D. Помогите монахам

Конструктив *2500

Во дворе известного на все Тридевятое царство монастыря Лио Шань давным-давно боги воздвигли три алмазных стержня, возложив на один из них n золотых дисков разного диаметра (в порядке уменьшения диаметра снизу вверх), и повелели перенести все диски с первого стержня на третий по следующим правилам:

  • за один ход разрешается переносить только один диск;
  • нельзя класть больший диск на меньший.
По поводу того, что же произойдет после того, как воля богов будет исполнена, мнения расходились: одни обещали мир во всем мире и вечное счастье всем людям, другие же предрекали скорое пришествие коммуни... (тьфу, о чем это я?) конца света. Однако поскольку все знали, что задачу богов короче, чем за 2n - 1 ходов не решить, а ленивые монахи монастыря Лио Шань к ее решению даже не приступали, все жили мирно и счастливо без всякой задачи, и конца света никто особо не опасался.

Однако дела у монастыря в последнее время шли не очень хорошо, и его мудрому настоятелю Ку Син Сану пришлось обтесать некоторые диски с боков, чтобы использовать золото на благо. В самом деле, нельзя же сидеть настоятелю без кондиционера, да и проводить круглый год в монастыре скучновато — нужно куда-нибудь иногда выбираться, покататься на лыжах, например... Лишь позже Ку Син Сан осознал свою ошибку: после обтесывания диаметры некоторых дисков стали одинаковыми, а значит, некоторые ходы, которые раньше было запрещено осуществлять правилами, теперь стали возможны (в самом деле, класть диск на диск того же диаметра боги не запрещали). Таким образом, возможный конец света мог наступить раньше, чем было задумано богами изначально, и возможно — намного раньше. Настолько раньше, что Ку Син Сан даже не успеет накататься на лыжах и понежиться под кондиционером.

Последнего мудрый настоятель допустить никак не мог и поэтому обратился за помощью к очень старой и очень мудрой колдунье ПикиВедии — может быть, она поможет определить, за какое минимальное количество ходов решается задача богов. Однако, погадав на картах, колдунья не смогла дать настоятелю ответ на его вопрос. Тогда он и обратился за помощью к вам.

Сможете ли вы по заданному количеству дисков и их диаметрам найти кратчайшее решение задачи, при условии, что диски одинакового диаметра разрешено класть один на другой, однако порядок дисков на третьем колышке после всех перемещений должен совпадать с первоначальным порядком дисков на первом колышке?

Входные данные

В первой строке записано целое число n — количество дисков (1 ≤ n ≤ 20). Во второй строке записаны n целых чисел di — диаметры дисков после обтесывания их Ку Син Саном, снизу вверх (1 ≤ di ≤ 20, кроме того, di ≥ di + 1 для любого 1 ≤ i < n).

Выходные данные

В первой строке выведите число m — минимальное количество ходов для решения задачи богов. В следующие m строк выведите описания ходов: два натуральных числа si и ti через пробел, задающие, соответственно, номер колышка, с которого переносится диск, и номер колышка, на который переносится диск (1 ≤ si, ti ≤ 3, si ≠ ti).

Примечание

Обратите внимание на третий тест, демонстрирующий, что в конце порядок дисков должен остаться прежним, даже несмотря на одинаковый радиус дисков. Без выполнения этого условия задачу богов можно было бы решить за меньшее количество ходов — три (просто переместив три диска с первого колышка на третий).

B. Марлин

Конструктив *1600

Город Рыбополис можно представить как таблицу из \(4\) строк и нечётного числа столбцов. В нём есть две основные деревни, первая из которых расположена в левой верхней клетке \((1,1)\). Жители этой деревни любят ловить тунца в пруду, расположенном в правой нижней клетке \((4, n)\). Вторая деревня расположена в левом нижнем углу \((4, 1)\) и его жители любят ловить лосося в пруду, расположенном в правом верхнем углу \((1, n)\).

Мэр Рыбополиса хочет разместить \(k\) отелей в городе, каждый из которых будет занимать одну клетку. Чтобы люди могли въезжать в город отовсюду, отели не должны располагаться в клетках на краях города.

Человек может переместиться из одной клетки в другую, если обе эти клетки не заняты отелями и имеют общую сторону. Можете ли вы помочь мэру расположить отели так, что число кратчайших путей от каждой из деревень до предпочитаемого жителями этой деревни пруда было равно для обоих деревень?

Входные данные

Первая строка ввода содержит два целых числа \(n\) и \(k\) (\(3 \leq n \leq 99\), \(0 \leq k \leq 2\times(n-2)\)), \(n\) нечётно — ширину города и количество отелей, которые хочет расположить мэр соответственно.

Выходные данные

Выведите «YES», если возможно расположить отели таким образом, который удовлетворяет условию задачи, иначе выведите «NO».

Если такое расположение существует, то выведите \(4\) строки, описывающие город. В каждой строке должно быть \(n\) символов, каждый из которых либо «#», если в соответствующей клетке есть отель, либо «.», если в этой клетке нет отеля.

A. Ряд

Конструктив Перебор *1200

Есть ряд из \(n\) кресел. Назовем рассадку людей в ряду «максимальной», если выполняются следующие два правила:

  1. Ни у кого из сидящих в ряду нет соседей.
  2. Невозможно посадить еще одного человека так, чтобы не нарушалось первое правило.

Вам дана строка, состоящая из нулей и единиц и описывающая рассадку людей в ряду (\(0\) — кресло пустое, \(1\) — кресло занято). Вам необходимо по данной строке определить, является ли рассадка максимальной.

Обратите внимание, первое и последнее кресла не являются соседними (если \(n \ne 2\)).

Входные данные

В первой строке входных данных дано целое положительное число \(n\) (\(1 \leq n \leq 1000\)) — количество кресел в ряду.

Вторая строка содержит строку длины \(n\), состоящая из нулей и единиц — описание рассадки.

Выходные данные

Выведите «Yes» (без кавычек), если рассадка максимальная, иначе выведите «No».

Вы можете выводить каждую букву в любом регистре (строчную или заглавную).

Примечание

В первом тестовом примере представлена максимальная рассадка.

Во втором тестовом примере у сидящего на третьем слева кресле есть сосед, сидящий на четвертом.

В третьем тестовом примере можно посадить еще одного человека на третье кресло, не нарушая первого правила.

D. Замок из песка

Бинарный поиск Конструктив математика *2100

Вы направляетесь на пляж с идеей построить самый величественный песчаный замок! Пляж не выглядит настолько трехмерным, насколько вы могли себе представить. Он может быть описан, как ряд мест, на которых можно возводить песчаные колонны. Места пронумерованы от 1 до бесконечности слева направо.

Очевидно, на пляже недостаточно песка для такой затеи, поэтому вы принесли с собой n упаковок с песком. Назовем высотой hi некоторой песчаной колонны на месте i количество упаковок песка, которые вы туда высыпали. Нельзя разделить упаковку песка на несколько мест, весь песок из нее должен уйти ровно на одно место. Слева от первого места есть забор с высотой, равной высоте колонны из H упаковок песка, и вы должны не допустить попадание песка за него.

В итоге вы пришли к следующим условиям для постройки замка:

  • h1 ≤ H: песок с самой левой колонны не должен просыпаться за забор;
  • Для любого |hi - hi + 1| ≤ 1: большая разница в высоте двух соседних колонн приведет к тому, что песок просыпется с более высокой на менее высокую, и вам действительно не хочется этого допустить;
  • : вы хотите потратить весь песок, который принесли с собой.

Так как у вас есть бесконечность мест для постройки замка, всегда возможно придумать корректную структуру. Однако вы хотите сделать замок как можно более компактным.

Требуется найти минимальное количество мест, которое потребуется занять для того, чтобы построить замок по всем правилам.

Входные данные

В единственной строке записаны два целых числа n и H (1 ≤ n, H ≤ 1018) — количество ваших упаковок песка и высота забора, соответственно.

Выходные данные

Выведите минимальное количество мест, которое потребуется занять для того, чтобы построить замок по всем правилам.

Примечание

Вот некоторые примеры корректных замков:

  • n = 5, H = 2, [2, 2, 1, 0, ...], [2, 1, 1, 1, 0, ...], [1, 0, 1, 2, 1, 0, ...]
  • n = 6, H = 8, [3, 2, 1, 0, ...], [2, 2, 1, 1, 0, ...], [0, 1, 0, 1, 2, 1, 1, 0...] (в этом случае заняты 5 мест)

Первый список обоих случаев является лучшим ответом, по 3 места заняты в каждом.

И некоторые примере некорректных:

  • n = 5, H = 2, [3, 2, 0, ...], [2, 3, 0, ...], [1, 0, 2, 2, ...]
  • n = 6, H = 8, [2, 2, 2, 0, ...], [6, 0, ...], [1, 4, 1, 0...], [2, 2, 1, 0, ...]

B. Речной прилив

Конструктив Строки *1200

Прогуливаясь вдоль реки, Мино молча что-то записывает.

— Время, — вслух думает Мино.

— Что?

— Время не ждет. Приливы тоже, — объясняет Мино. — Мое имя всегда напоминает мне об этом.

— Что же ты записываешь?

— Приливы, ты же видишь. У всего есть свой период, и мне кажется, этот я нашел, — уверенно заявил Мино.

Канно не уверен в записях Мино.

Заметки о приливе можно выразить как строку \(s\) из символов «0», «1» и «.», где «0» означает отсутствие прилива, «1» означает наличие прилива, а «.» означает, что записей в этот день нет (возможно, прилив был, возможно, не было).

Вы должны помочь Мино определить, возможно ли, что после замены каждого символа «.» независимо на «0» или «1» данное число \(p\) не является периодом получившейся строки. Если ответ утвердительный, то найдите одну из таких возможных замен.

В данной задаче положительное целое число \(p\) является периодом строки \(s\), если для всех \(1 \leq i \leq \lvert s \rvert - p\) символы \(i\) и \((i + p)\) строки \(s\) совпадают. Здесь \(\lvert s \rvert\) обозначает длину строки \(s\).

Входные данные

Первая строка содержит два целых числа \(n\) и \(p\) (\(1 \leq p \leq n \leq 2000\)) — длину данной строки и период, который вам нужно проверить, соответственно.

Вторая строка содержит строку \(s\) из \(n\) символов — записи Мино. \(s\) содержит только символы «0», «1» и «.» и содержит как минимум один символ «.».

Выходные данные

Выведите одну строку: если возможно, что \(p\) не является периодом строки после замены, выведите получившуюся строку после одной из таких замен; иначе выведите «No» (без кавычек, буквы можете выводить в любом регистре (строчные или заглавные)).

Примечание

В первом примере \(7\) не является периодом получившейся строки, так как \(1\)-й и \(8\)-й символы отличаются.

Во втором примере \(6\) не является периодом получившейся строки, так как \(4\)-й и \(10\)-й символы отличаются.

В третьем примере \(9\) всегда является периодом, потому что единственное условие для этого — совпадение первого и последнего символа — уже удовлетворено.

Обратите внимание, в первом и втором примере существует несколько правильных ответов, вы можете вывести любой.

C. Флуоресцентный туман

графы Конструктив *1800

Лодка плывет по течению, и открывается вид на лес, полный цветов.

— Я был здесь однажды, — восхищенно заявил Мино, — там прекрасно.

— Опиши?

— Смотри, Канно. Возьми кисть, а я расскажу. Попробуем?

В лесу есть четыре вида цветов: амаранты, бубенчики, цикорий и дельфиниум.

Лес может быть представлен как таблица из \(n\) строк и \(m\) столбцов. В каждой клетке прямоугольника растет ровно один вид цветов.

По словам Мино, количество связных компонент каждого вида цветов ровно \(a\), \(b\), \(c\) и \(d\), соответственно. Две клетки находятся в одной связной компоненте, если и только если существует путь между этими клетками, проходящий только через клетки с этим типом цветов, и переходящий только из клетки в клетку, имеющую общую сторону с текущей.

Помогите Канно нарисовать такую таблицу из цветов, при этом \(n\) и \(m\) могут быть выбраны произвольным образом, учитывая ограничения ниже. Можно показать, что всегда существует хотя бы одно решение.

Обратите внимание, что вы можете выбрать произвольные \(n\) и \(m\), удовлетворяющие ограничениям ниже, эти числа не даны во входных данных.

Входные данные

Единственная строка содержит четыре целых числа \(a\), \(b\), \(c\) и \(d\) (\(1 \leq a, b, c, d \leq 100\)) — необходимое число связных компонент амарантов, бубенчиков, цикория и дельфиниума, соответственно.

Выходные данные

В первой строке выведите два целых числа \(n\) и \(m\) (\(1 \leq n, m \leq 50\)) — количество строк и столбцов в таблице, соответственно.

Затем выведите \(n\) строк, каждая из которых состоит из \(m\) латинских букв без пробелов, и описывает одну строку поля. Каждая буква должна быть одна из «A», «B», «C» и «D», эти буквы соответствуют амарантам, бубенчикам, цикорию и дельфиниуму, соответственно.

В случае, если есть несколько решений, выведите любое. Вы можете выводить каждую из букв в любом регистре (строчную или заглавную).

Примечание

В первом примере каждая клетка амарантов, бубенчиков и цикория образует отдельную связную компоненту, а дельфиниумы образуют только одну компоненту.

D. Граф и его дополнение

графы Конструктив реализация *1700

Заданы три числа \(n, a, b\). Вам нужно найти матрицу смежности такого неориентированного графа, что количество компонент связанности в нем равно \(a\), а количество компонент связанности в его дополнении равно \(b\). Найденная матрица обязательно должна быть симметричной, а также на главной диагонали обязательно должны быть нули.

В неориентированном графе недопустимы петли (ребра из вершины в себя же), между каждой парой вершин может быть не более одного ребра.

Матрица смежности неориентированного графа — это квадратная матрица размера \(n\), состоящая только из «0» и «1», где \(n\) — количество вершин графа, а \(i\)-я строка и \(i\)-й столбец соответствуют \(i\)-й вершине графа. Ячейка \((i,j)\) матрицы смежности содержит \(1\) тогда и только тогда, когда \(i\)-я и \(j\)-я вершины в графе соединены ребром.

Компонента связанности — это такой набор вершин \(X\), что для любой пары вершин в компоненте существует хотя бы один путь, соединяющий их, и добавление любой новой вершины в \(X\) нарушает это правило.

Дополнением графа \(G\) называется граф \(H\) с теми же вершинами, такой, что две вершины графа \(H\) соединены ребром тогда и только тогда, когда эти вершины не соединены ребром в графе \(G\).

Входные данные

В единственной строке заданы три числа \(n, a, b \,(1 \le n \le 1000, 1 \le a, b \le n)\) — количество вершин графа, необходимое количество компонент связанности в нем и необходимое количество компонент связанности в его дополнении.

Выходные данные

Если не существует графа, удовлетворяющего данным ограничениям в единственную строку выведите «NO»(без кавычек).

Иначе в первой строке выведите «YES»(без кавычек). В следующих \(n\) строках выведите по \(n\) цифр в каждой — матрицу смежности данного графа, т. е. \(i\)-е цифра в \(j\)-й строке должна быть равна \(1\), если в \(G\) существует ребро между вершинами \(i\) и \(j\) (иначе эта цифра должна быть равна \(0\)).

Обратите внимание, что выведенная матрица обязательно должна быть симметричной, а также на главной диагонали обязательно должны быть нули.

Если существует несколько матриц, удовлетворяющих условиям — выведите любую из них.

A. Тесла

Конструктив реализация *2100

Аллен мечтает, что когда-нибудь у него будет большой парк электрокаров — машин будущего. Как только Аллен задумался о том, какие у него будут машины и как он будет их расставлять, он столкнулся с проблемой.

Будущая парковка Аллена может быть представлена как таблица из \(4\) строк и \(n\) (\(n \le 50\)) столбцов, каждая клетка которой может вместить в любой момент времени ровно одну машину. У Аллена будет \(k\) (\(k \le 2n\)) машин на парковке, все машины изначально расположены во второй и третьей строках. У каждой машины есть предназначенное для нее место в первом или четвертом ряду. Аллену нужно переместить каждую машину на соответствующее ей парковочное место.

Иллюстрация к первому примеру.

Сложность состоит в том, что Аллен не может никому доверить машины, поэтому одновременно может двигаться только одна машина. За один шаг он может переместить любую машину в любом из четырех направлений на соседнее пустое место. Однако, машину можно передвигать в первый и четвертый ряд, только если это — соответствующее машине парковочное место.

Аллен будет очень занятым, поэтому у него будет время только на \(20000\) передвижений машин. Помогите Аллену найти способ расставить машины на соответствующие парковочные места, или определите, что это невозможно.

Входные данные

Первая строка содержит два целых числа \(n\) и \(k\) (\(1 \le n \le 50\), \(1 \le k \le 2n\)), обозначающие число столбцов в таблице и число машин, соответственно.

Следующие четыре строки содержат по \(n\) целых чисел, каждов от \(0\) до \(k\) включительно, они описывают начальное состояние парковки. Строки пронумерованы от \(1\) до \(4\) сверху вниз, а столбцы пронумерованы от \(1\) до \(n\) слева направо.

В первой и последней строке целое число \(1 \le x \le k\) обозначает парковочное место машины \(x\) (сюда может заезжать только эта машина), а число \(0\) означает пустое место (сюда не может заехать ни одна машина).

Во второй и третьей строках целое число \(1 \le x \le k\) обозначает начальную позицию машины \(x\), а число \(0\) обозначает пустое место (на него могут заезжать все машины).

Каждое число \(x\) между \(1\) и \(k\) встречается ровно один раз во второй и третьей строках, и ровно один раз в первой и четвертой строках.

Выходные данные

Если есть последовательность передвижений машин такая, что все машины окажутся на своих местах за не более чем \(20000\) шагов, выведите \(m\), число шагов, на первой строке. В следующих \(m\) строках выведите шаги по одному в строке в формате \(i\) \(r\) \(c\), что означает, что Аллен должен подвинуть машину \(i\) на соседнее место в строке \(r\) и столбце \(c\).

Если невозможно передвинуть все машины на правильные места за \(20000\) шагов, выведите \(-1\) в единственной строке.

Примечание

В первом примере все машины уже располагаются перед соответствующими парковочными местами, кроме машины \(5\), которая находится напротив соседнего места. Пример показывает кратчайшее решение, но будет зачтено любое длины не более \(20000\).

Во втором примере есть только один столбец, и машины находятся в неправильном порядке, поэтому они не могут двигаться и расставить их правильным образом невозможно.

A. Шарики

Конструктив реализация *1000

Существует достаточно много способов повеселиться, используя надувные шарики. К примеру, их можно наполнять водой и смотреть что будет.

Гриша и Андрей придерживаются того же мнения. Поэтому однажды они пошли в магазин и купили \(n\) пакетов с надувными шариками, где \(i\)-й из них содержит \(a_i\) шариков.

Они хотят разделить шарики между собой так, чтобы были выполнены следующие условия:

  • Не разрывать пакеты (каждый должен получить несколько цельных пакетов);
  • Раздать все пакеты (нельзя выкидывать «лишние» пакеты);
  • Выдать и Грише, и Андрею хотя бы по одному пакету;
  • Для пущего веселья, суммарное количество шариков во всех пакетах Гриши не должно совпадать с суммарным количеством шариков во всех пакетах Андрея.

Помогите им разделить пакеты с шариками между собой или скажите, что так сделать нельзя.

Входные данные

В первой строке дано единственное число \(n\) (\(1 \le n \le 10\)) — количество пакетов с шариками.

Вторая строка содержит \(n\) чисел: \(a_1\), \(a_2\), \(\ldots\), \(a_n\) (\(1 \le a_i \le 1000\)) — количество шариков внутри соответствующего пакета.

Выходные данные

Если поделить пакеты с шариками, соблюдая все ограничения, не удастся, выведите \(-1\).

Иначе выведите число \(k\) — количество пакетов, которые надо отдать Грише, а затем \(k\) различных чисел от \(1\) до \(n\) — номера соответствующих пакетов.

Если существует несколько способов раздать пакеты с шариками, выведите любой.

Примечание

В первом примере Гриша получит суммарно \(3\) шарика, а Андрей \(1\).

Во втором примере единственный способ разделить пакеты так, чтобы каждый получил хотя бы один из них, приведёт к тому, что суммарное количество шариков у Гриши и Андрея совпадёт.

В третьем примере нельзя разделить пакеты так, чтобы каждый получил хотя бы один.