printРабочее место участника

printЗадачи

2310. Пробки и бутылки

Ограничения: время – 5s/10s, память – 256MiB Ввод: интерактивная задача Вывод: интерактивная задача copy
Послать решение Blockly Посылки Темы Где Обсудить (0)

После пиратов на берегу острова остались `N` пустых бутылок и `N` пробок от них. У всех бутылок горлышко имеет разный диаметр, и каждая пробка подходит только к одной из бутылок.
Напишите программу, которая установит соответствие между пробками и бутылками.
Первая строка ввода содержит одно целое числа – количество пробок и бутылок `N` (`1\ ≤\ N\ ≤\ 2000`). Далее программа должна выдавать запросы вида "? `i\ j`", где `i` – номер пробки, а `j` – номер бутылки (`1\ ≤\ i,\ j\ ≤\ N`). После вывода запроса программа должна сделать принудительную запись буфера вывода (в C++ это делает endl, в C нужно использовать fflush(stdout), в Pascal - flush(output)). На запрос программа получает строку, содержащую символ '<', если диаметр пробки `i` меньше диаметра горлышка бутылки `j`, или символ '>', если пробка больше, или символ '=', если пробка точно подходит. Программа может сделать не более `75000` запросов. Когда программа полностью определит соответствие между бутылками и пробками, она должна вывести строку, содержащую символ '!', после которого следует последовательность из `N` чисел от 1 до `N`, разделенных пробелами, и завершить работу. `i`-е число в этой последовательности указывает номер пробки для `i`-й бутылки.

Пример ввода

2
<
=

Вывод программы

? 1 1
? 2 1
! 2 1
loading