SDU Open 2021 Школы
A. Alternate
ограничение по времени на тест
1 секунда
ограничение по памяти на тест
256 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

BThero живет в богатой прекрасной стране — Демиляндии. Демиляндия представляет собой сеть из $$$n$$$ городов и $$$n-1$$$ двусторонних дорог между ними. Гарантируется, что из любого города можно попасть в любой другой по этим дорогам.

BThero учится в университете на программиста. Первый курс для него закончился успешно, теперь он хочет летом подработать немного денег. Он смог подсчитать для каждого города значение $$$p_i$$$ — сколько долларов он сможет заработать в $$$i$$$-м городе. Получилось так, что массив $$$p$$$ состоит из различных целых чисел от $$$1$$$ до $$$n$$$.

BThero еще не бывал в большинстве городов своей страны. Поэтому он решил убить двух зайцев одним выстрелом — он выберет себе маршрут, который начинается в произвольном городе $$$a$$$, заканчивается в произвольном городе $$$b \gt a$$$ и не проходит через один город дважды. По пути он будет одновременно подрабатывать в городах.

Однако ситуация с программистами в стране не очень простая. В некоторых городах он может легко заработать крупную сумму денег, а в некоторых ему придется экономить на расходах. От этого напрямую зависит его настроение. Если в городе непосредственно до нынешнего он заработал $$$x$$$ денег, а в нынешнем заработает $$$y \lt x$$$, то его настроение будет плохим. Соответственно, если $$$y \gt x$$$, его настроение будет хорошим.

Назовем запоминающимся маршрут, вдоль которого у BThero настроение будет изменяться каждый раз. Примеры его доходов в запоминающихся маршрутах: $$$[2, 5, 1, 4]$$$, $$$[3, 1, 2]$$$, $$$[1, 2]$$$. Заметим, что маршруты из двух городов тоже являются запоминающимися.

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

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

В первой строке входного файла дано одно целое число $$$n$$$ — количество городов в Демиляндии ($$$1 \le n \le 200000$$$). Во второй строке следуют $$$n$$$ целых чисел $$$p_1$$$, ..., $$$p_n$$$ — его подсчитанный доход в каждом городе ($$$1 \le p_i \le n$$$, $$$p_i \neq p_j$$$ для всех $$$i \neq j$$$). Следующие $$$n-1$$$ строк содержат пары различных целых чисел $$$a$$$, $$$b$$$ — номера городов, соединенных очередной дорогой ($$$1 \le a, b \le n$$$, $$$a \neq b$$$).

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

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

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

Все запоминающиеся маршруты из примера:

  • $$$a = 1$$$, $$$b = 2$$$.
  • $$$a = 1$$$, $$$b = 4$$$.
  • $$$a = 2$$$, $$$b = 3$$$.
  • $$$a = 2$$$, $$$b = 4$$$.

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

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

За день до турнира он подготовил все нужные вещи. Однако, есть вероятность что не все шарики будут одного цвета. А учителю нельзя допускать этого, поскольку на кону стоит репутация всего турнира.

Учитель знает что в быту есть шарики всего $$$m$$$ цветов, пронумерованных от $$$1$$$ до $$$m$$$. У него есть всего $$$n$$$ шариков, цвет $$$i$$$-го из них – $$$a_i$$$. Времени до турнира остается все меньше и меньше. Поэтому учитель позвал к себе на помощь ровно $$$k$$$ ассистентов. Он даст каждому из них отдельно по одному шарику и скажет ему перекрасить этот шарик в другой цвет. Он должен попросить всех ассистентов, потому что некоторые из них могут обидеться, увидев, что другой ассистент отдыхает. А также он обязательно должен отправить ассистента для перекраски шарика, ведь иначе ассистент останется без работы.

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

На этот вопрос придется уже ответить вам.

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

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

Во второй строке входного файла даны $$$n$$$ целых чисел $$$a_1$$$, ..., $$$a_n$$$ — цвета всех шариков ($$$1 \le a_i \le m$$$).

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

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

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

В первом примере у учителя есть $$$3$$$ ассистента. Он может сделать все шарики одного цвета следующими действиями:

  1. Ассистент $$$1$$$ перекрасит третий шарик в цвет $$$2$$$, ассистент $$$2$$$ перекрасит четвертый шарик в цвет $$$1$$$, ассистент $$$3$$$ перекрасит пятый шарик в цвет $$$1$$$. После этого цвета шариков будут равны $$$a = [2, 2, 2, 1, 1, 1]$$$.
  2. Ассистент $$$1$$$ перекрасит четвертый шарик в цвет $$$2$$$, ассистент $$$2$$$ перекрасит пятый шарик в цвет $$$2$$$, ассистент $$$3$$$ перекрасит шестой шарик в цвет $$$2$$$. После этого цвета шариков будут равны $$$a = [2, 2, 2, 2, 2, 2]$$$.

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

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

В нашем университете очень часто проводятся разные мероприятия для студентов. Даже в условиях карантина университет отлично справился со своей задачей и не переставал радовать своих студентов в онлайне. Ждем всех свеженьких на SDU Welcome Party 2021!

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

  • Если партия заканчивалась вничью, оба игрока получали ровно $$$1$$$ очко.
  • Иначе, победивший получал $$$3$$$ очка, а проигравший не получал ничего.

BThero знает результаты каждого игрока. $$$i$$$-й игрок имел ровно $$$a_i$$$ очков после завершения турнира. Однако BThero не знает сколько партий было сыграно в турнире суммарно. Помогите ему узнать минимальное и максимальное количество партий, которые могли быть сыграны в турнире.

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

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

В следующей строке содержатся $$$n$$$ целых чисел $$$a_1$$$, ..., $$$a_n$$$ — количество очков в конце турнира у каждого игрока ($$$0 \le a_i \le 10^9$$$).

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

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

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

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

Студенты Suleyman Demirel University ведут очень активный образ жизни. У нас в университете активно действуют более $$$20$$$ разных клубов. Абу, наш главный герой, на сей раз решил попробовать себя в MMDANCE Club. Пока что у него это неплохо получается.

Танцпол можно представить сверху как матрицу $$$A$$$ размера $$$n \times m$$$, где каждая клетка матрицы представляет собой отдельный сектор танцпола. В каждом секторе танцпола стоит ровно один танцор, и его высота равна $$$A_{i, j}$$$. В нашем случае можно считать что росты всех студентов — различные целые числа от $$$1$$$ до $$$n \times m$$$.

Поскольку Абу параллельно является одним из главных лиц ACM CLUB, он тут же по привычке решил посчитать некоторое интересное значение крутости для каждого сектора танцпола. Эту крутость он решил определить вот так:

  • Обозначим $$$S_{i, j}$$$ как отсортированное множество ростов всех танцоров, которые стоят по направлению левее, правее, выше и ниже танцора в секторе $$$(i, j)$$$. Это множество также содержит рост этого же танцора $$$A_{i, j}$$$. Более формально, $$$S_{i,j}$$$ содержит все числа находящиеся в $$$i$$$-й строке или $$$j$$$-м столбце матрицы $$$A$$$. У всех этих множеств одинаковая длина — $$$n+m-1$$$.
  • Возьмём все эти множества $$$S_{i,j}$$$, запишем их всех в один список $$$T$$$ и отсортируем их лексикографически по возрастанию.
  • Крутостью сектора $$$(i,j)$$$ будем считать порядковый индекс множества $$$S_{i,j}$$$ в списке $$$T$$$.

Пока Вы читали условие, Абу уже рассказал своим друзьям значения крутости всех секторов. А сможете вы?

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

В первой строке даны два целых числа $$$n$$$ и $$$m$$$ — размеры танцпола ($$$2 \le n, m \le 250000$$$, $$$4 \leq n \times m \leq 500000$$$)

Каждая из следующих $$$n$$$ строк содержит $$$m$$$ чисел — росты всех танцоров ($$$1 \leq A_{i, j} \leq n \times m$$$)

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

В ровно $$$n$$$ строках выведите по $$$m$$$ целых чисел — крутости всех секторов танцпола.

Пример
Входные данные
2 3
1 6 4
5 2 3
Выходные данные
4 2 3
1 6 5
Примечание
Все числа входящие в $$$S_{2, 2}$$$

Список $$$T$$$:

  1. $$$(1, 2, 3, 5)$$$
  2. $$$(1, 2, 4, 6)$$$
  3. $$$(1, 3, 4, 6)$$$
  4. $$$(1, 4, 5, 6)$$$
  5. $$$(2, 3, 4, 5)$$$
  6. $$$(2, 3, 5, 6)$$$

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

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

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

Ербол агай решил приготовиться и сделал $$$m$$$ самостоятельных расчетов. В каждом отдельном расчете он выбирает некоторый отрезок студентов $$$(l, r)$$$ и записывает количество нервных клеток $$$c$$$, которые умерли бы у него за день, если бы в этот день он принимал защиту проекта только от студентов с номерами в очереди на отрезке $$$[l, r]$$$.

Вот незадача! Сегодня утром Ербол агай случайно удалил список его студентов, стоящих в очереди. Повезло, что хотя бы результаты его расчетов остались в целостности и сохранности. Поскольку он уже не сможет восстановить свой список однозначно, он хотел бы определить хотя бы гендер каждого студента в очереди. Если возможны несколько очередей, его устраивает любой. Помогите агаю, восстановите очередь студентов в виде строки из $$$n$$$ символов x (юноша) и y (девушка).

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

В первой строке входного файла даны два целых числа $$$n$$$ и $$$m$$$ — количество студентов и количество сделанных расчетов ($$$1 \le n, m \le 5000$$$).

Во второй строке даны два целых числа $$$x$$$ и $$$y$$$ — количество гарантированно умирающих нервных клеток отдельно для юноши и для девушки ($$$1 \le x, y \le 10^5$$$).

В следующих $$$m$$$ строках даны тройки целых чисел $$$l_i$$$, $$$r_i$$$, $$$c_i$$$ — отрезок, на котором проводился расчет и суммарное количество нервных клеток, которые умрут в этом расчете ($$$1 \le l_i \le r_i \le n$$$, $$$1 \le c_i \le 10^9$$$).

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

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

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

Пояснение к примеру и ответу xyxx:

  • Первый расчет говорит, что отрезок студентов $$$[2, 4]$$$ убьет ровно $$$7$$$ нервных клеток. Действительно, в нашей восстановленной очереди $$$y + x + x = 7$$$.
  • Второй расчет говорит, что отрезок студентов $$$[1, 2]$$$ убьет ровно $$$5$$$ нервных клеток. Действительно, в нашей восстановленной очереди $$$x + y = 5$$$.

Значит мы можем уверенно утверждать, что xyxx — одна из возможный очередей. Также существуют решения yxyx и yxxy. Вы можете вывести любой из них.

F. Finding Diamonds
ограничение по времени на тест
4 секунды
ограничение по памяти на тест
512 мегабайт
ввод
стандартный ввод
вывод
стандартный вывод

Диас недавно начал изучать машинное обучение. Особенно сильно ему понравилась сфера распознавания различных паттернов в фотографиях. Недавно ему пришлось работать с распознаванием так называемых алмазов с некоторыми свойствами. Алмазы, по своей сути, имеют форму обычной квадратной рамки, повернутой на $$$45$$$ градусов.

Диас справился со своей задачей в машинном обучении. Теперь ему стало интересно, а смогут ли решить эту задачу наши любимые ACM-щики? Поскольку в машинном обучении люди работают с настоящими фотографиями у которых могут быть разные неровности и размытости, Диас адаптировал свою задачу специально для наших ребят: они могут считать, что фотография является бинарной матрицей размера $$$n \times n$$$. Строки и столбцы матрицы пронумерованы от $$$1$$$ до $$$n$$$.

Определим понятие алмазов в данной задаче более подробно. Каждый алмаз можно описать тремя положительными целыми числами — его центром $$$(p, q)$$$ и его радиусом $$$r$$$. Все клетки $$$(x, y)$$$, образующие сам алмаз, будут соответствовать свойству $$$|x - p| + |y - q| = r$$$. На картинке ниже приведены алмазы $$$(2, 2, 1)$$$, $$$(4, 3, 1)$$$ и $$$(3, 3, 2)$$$.

Диас попросил ACM-щиков посчитать общее количество алмазов на фотографии со следующими свойствами:

  1. Алмаз находится полностью внутри матрицы. Более формально, все клетки $$$(x, y)$$$ принадлежащие алмазу соответствуют условию $$$1 \le x, y \le n$$$.
  2. Все клетки алмаза содержат только единицы.

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

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

В первой входного файла дано одно положительное целое число $$$n$$$ — размер матрицы ($$$4 \le n \le 5200$$$). Гарантируется, что $$$n$$$ нацело делится на $$$4$$$.

Далее следует описание матрицы. В каждой из $$$n$$$ следующих строк следуют по $$$\frac{n}{4}$$$ однозначных числа шестнадцатеричной системы счисления (то есть, эти числа могут задаваться либо как цифры от $$$0$$$ до $$$9$$$, либо как прописные латинские буквы от $$$A$$$ до $$$F$$$). Двоичная запись каждого из этих чисел задаёт очередные $$$4$$$ элемента матрицы в текущей строке. Например, если число равно $$$B$$$, то очередные четыре элемента матрицы равны 1011, а если число равно $$$5$$$, то очередные четыре элемента матрицы равны 0101.

Элементы в каждой строке задаются без пробелов.

Настоятельно рекомендуем использовать быстрые методы ввода/вывода данных.

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

Выведите одно единственное целое число — количество алмазов в фотографии.

Примеры
Входные данные
4
7
D
F
7
Выходные данные
2
Входные данные
8
10
28
54
AA
54
28
10
00
Выходные данные
14
Примечание

Пояснение к первому примеру:

Бинарная матрица во втором примере с двумя выделенными алмазами:

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

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

У игроков есть дерево из $$$n$$$ вершин и $$$n-1$$$ ребер. На одной из вершин дерева стоит фишка. А также есть список из $$$k$$$ запрещенных вершин. За свой ход Абу может удалить любое ребро из дерева. За свой ход Арс может передвинуть фишку в соседнюю вершину по любому не удаленному ребру или остаться на той же вершине. Первым ходит Абу. Игра заканчивается когда в дереве больше не осталось ребер. Арс выигрывает если в какой-то момент фишка оказалась на запрещенной вершине.

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

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

В первой строке заданы два целых числа $$$n$$$ и $$$k$$$ $$$(2 \le n \le 200000; 1 \le k \le n)$$$ - количество вершин в дереве и количество запрещенных вершин.

В следующих $$$n-1$$$ строках заданы два целых числа $$$u_i$$$ и $$$v_i$$$ $$$(1 \le u_i, v_i \le n; u_i \neq v_i)$$$ — вершины дерева, соединенные $$$i$$$-м ребром. Все заданные ребра различны и образуют дерево.

В последней строке заданы $$$k$$$ различных чисел через пробел — номера запрещенных вершин в графе.

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

Выведите $$$n$$$ строк, где $$$i$$$-я строка будет ответом для графа в котором фишка изначально находится на $$$i$$$ вершине. В случае победы Абу, выведите строку «Abu». Иначе выведите «Ars» (без кавычек).

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

Разберем первый пример. Если изначально фишка будет находиться на вершине $$$2$$$, дерево будет выглядеть следующим образом (красным обозначены запрещенные вершины):

На первом ходу Абу удаляет ребро, соединяющее вершины $$$1$$$ и $$$5$$$. После хода Абу, Арс двигает фишку на вершину $$$5$$$.

На третьем ходу Абу удаляет ребро, соединяющее вершины $$$3$$$ и $$$4$$$. После хода Абу, Арс двигает фишку на вершину $$$7$$$.

На пятом ходу Абу удаляет ребро, соединяющее вершины $$$7$$$ и $$$8$$$. Так как Абу уже удалил все ребра, ведущие к запрещенным вершинам, Арс уже никак не сможет победить. Побеждает Абу.

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

Вот и настал тот самый день когда Абу впервые переступил порог Самого Дружного Университета (СДУ) распахнув перед собой двери к бесценным знаниям. С первых же дней в стенах нового для себя заведения он начал всех удивлять своими знаниями и навыками в программировании. Все сокурсники завидовали ему, а учителя гордились что к ним в универ поступил такой сильный студент и видели в нём нового Илона Маска.

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

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

- Слушайте, студенты! Того, кто решит мою задачу первым, я возьму к себе в ассистенты и буду выплачивать ему большую сумму! – громко огласил профессор. Абу, с загоревшимися глазами, умчался в эту толпу, чтобы попытать своё счастье. В оригинальной формулировке задача звучала так:

У вас есть перестановка $$$p$$$ целых чисел от $$$1$$$ до $$$n$$$. А также у вас есть $$$m$$$ пар целых чисел $$$(a_i, b_i)$$$. За одну операцию вам разрешено выбрать произвольное целое число $$$i$$$ ($$$1 \le i \le m$$$) и сделать операцию swap(p[a[i]], p[b[i]]). Другими словами, вы меняете местами значения на позициях $$$a_i$$$ и $$$b_i$$$.

Есть одно важное ограничение — четность суммарного количества использований $$$i$$$-й пары во всех ваших операциях должна быть в точности равна $$$c_i$$$.

Вам нужно сделать $$$p$$$ лексикографически минимальным за не более $$$600000$$$ операций, при этом соблюдая все ограничения. Абу надеется на вашу помощь. На кону стоит его ретейк!

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

В первой строке входного файла даны два целых числа $$$n$$$ и $$$m$$$ — размер перестановки и кол-во пар ($$$2 \le n \le 1000$$$, $$$1 \le m \le 10000$$$).

Во второй строке входного файла даны $$$n$$$ целых чисел $$$p_1$$$, ..., $$$p_n$$$ разделенные пробелами ($$$1 \le p_i \le n$$$, $$$p_i \neq p_j$$$ если $$$i \neq j$$$).

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

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

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

Во второй строке выведите $$$k$$$ — кол-во использованных вами операций ($$$0 \le k \le 600000$$$).

В следующей строке выведите ровно $$$k$$$ целых чисел $$$q_1$$$, ..., $$$q_k$$$ ($$$1 \le q_i \le m$$$). $$$q_i$$$ должно обозначать номер пары, которую вы использовали для $$$i$$$-й операции. Если $$$k = 0$$$, ничего выводить не надо.

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

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

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

Корпус Suleyman Demirel University состоит из $$$n$$$ учебных кабинетов, расположенных в один ряд и пронумерованных от $$$1$$$ до $$$n$$$ слева направо. Новые перваши уже этой осенью поступят в наш чудесный универ, поэтому учитель программирования придумал классную задачку чтобы проверить их логику.

Ровно два кабинета из $$$n$$$ является кабинетами программирования. Скажем, что их номера — $$$a$$$ и $$$b$$$. Поскольку перваши в самом начале не будут знать номера этих кабинетов, учитель решил их загадать.

Все перваши подойдут к произвольному кабинету под номером $$$x$$$. Учитель, сидящий в этом кабинете, подскажет студентам сумму расстояний до кабинетов программирования. Более формально, он скажет им значение $$$|x - a| + |x - b|$$$. Затем перваши снова подойдут к произвольному кабинету $$$y$$$ и процесс будет повторяться до тех пор, пока перваши не будут уверены что нашли оба $$$a$$$ и $$$b$$$. Вполне возможно, что они в процессе уже посетят кабинет программирования, но хитрые учителя не станут это им раскрывать.

Алмас находится среди этих первашей. Он принял на себя роль мозга этой группы. Его цель — помочь своим одногруппникам найти $$$a$$$ и $$$b$$$ посетив как можно меньше кабинетов. Он уверен, что это возможно сделать за не более чем $$$50$$$ посещений. Помогите ему!

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

Взаимодействие начинается с чтения единственного целого числа $$$n$$$ — общего количества кабинетов в университете ($$$2 \le n \le 10^9$$$).

Далее программа будет отвечать на ваши запросы. Каждый запрос необходимо задавать в формате ? x ($$$1 \le x \le 10^9$$$). Перваши посетят кабинет под номером $$$x$$$. Затем нужно прочитать ответ учителя из стандартного ввода. Если учитель ответит $$$−1$$$ вместо корректного ответа, это означает, что перваши превысили $$$50$$$ посещений, или вы сделали некорректный запрос. Немедленно завершитесь после получения $$$−1$$$, чтобы получить вердикт Wrong answer. Иначе, вы можете получить произвольный вердикт, потому что ваше решение будет продолжать читать из закрытого потока.

Если вы угадали оба кабинета, выведите ответ в формате ! a b и завершите программу ($$$1 \le a \lt b \le n$$$).

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

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

2

4

6

4

2

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

? 3

? 1

? 6

? 5

? 2

? 4

! 2 4

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

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

Вам дан массив $$$a$$$ длины $$$n$$$ состоящий из положительных целых чисел. Обозначим $$$f(a)$$$ как массив $$$b$$$ длины $$$n-1$$$, где $$$b_i = gcd(a_1 + \dots + a_i, a_{i+1} + \dots + a_n)$$$. Будем применять операцию $$$a = f(a)$$$ до тех пор, пока размер массива $$$a$$$ не станет равным $$$1$$$. Выведите единственное оставшееся число в массиве.

Здесь $$$gcd(x, y)$$$ означает наибольший общий делитель (НОД) чисел $$$x$$$ и $$$y$$$.

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

В первой строке задано одно целое число $$$n$$$ – длина исходного массива ($$$2 \le n \le 10^{5}$$$).

Во второй строке набора записаны $$$n$$$ целых чисел $$$a_1$$$, $$$a_2$$$, ..., $$$a_n$$$ — элементы исходного массива $$$a$$$ ($$$1 \le a_i \le 10^9$$$).

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

Выведите одно целое число — единственное оставшееся число в массиве.

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

Пояснение для первого примера:

  • $$$a = [4, 6, 8]$$$
  • $$$f(a) = [gcd(4, 14)$$$, $$$gcd(10, 8)]$$$ = $$$[2, 2]$$$
  • $$$f(f(a)) = [gcd(2, 2)] = 2$$$