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

Задача . D. Найдите максимумы


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

Ayush устал запоминать пароль от своего замка и разработал новую схему для установки своего пароля. У замка есть \(k\) позиций, где каждая позиция может содержать целые числа от \(1\) до \(n\). Пароль \(P\) представляет собой последовательность из \(k\) целых чисел, каждое из которых находится в диапазоне \([1, n]\), \(i\)-й элемент которой входит в \(i\)-ю позицию замка.

Чтобы установить пароль для своего замка, Ayush придумывает массив \(A\) из \(n\) целых чисел в диапазоне \([1, n]\) (не обязательно различных). Затем он выбирает \(k\) непустых попарно непересекающихся подмножеств индексов \(S_1, S_2, ..., S_k\) \((S_i \underset{i \neq j} \cap S_j = \emptyset)\) и устанавливает свой пароль как \(P_i = \max\limits_{j \notin S_i} A[j]\). Другими словами, \(i\)-я позиция пароля равна максимуму по всем элементам \(A\), индексы которых не принадлежат \(S_i\).

Вам даны подмножества индексов, выбранных Ayush. Вам нужно угадать пароль. Чтобы сделать запрос, вы можете выбрать непустое подмножество индексов массива и узнать максимум по всем элементам массива с индексами в этом подмножестве. Вы можете задать не более 12 запросов.

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

В первой строке содержится одно целое число \(t\) \((1 \leq t \leq 10)\) — количество наборов входных данных. Далее следуют описания наборов входных данных.

Первая строка каждого набора входных данных содержит два целых числа: \(n\) и \(k\) \((2 \leq n \leq 1000, 1 \leq k \leq n)\) — размер массива и количество подмножеств соответственно. Далее следуют \(k\) строк. \(i\)-я строка содержит целое число \(c\) \((1 \leq c \lt n)\) — размер подмножества \(S_i\), за которым следуют \(c\) попарно различных целых чисел в диапазоне \([1, n]\) — индексы, принадлежащие подмножеству \(S_i\).

Гарантируется, что пересечение любых двух подмножеств пусто.

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

Чтобы задать запрос, выведите одну строку:

  • В начале выведите "? c" (без кавычек), где \(c\) \((1 \leq c \leq n)\) обозначает размер подмножества запрашиваемых индексов, после чего выведите через пробел \(c\) различных целых чисел в диапазоне \([1, n]\)  — индексы, о которых вы хотите задать запрос.

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

Когда вы угадали пароль, выведите одну строку "!" (Без кавычек), за которой через пробел следуют \(k\) целых чисел  — позиции пароля.

Угадывание пароля не учитывается при подсчете количества запросов.

После этого вы должны прочитать строку. Если вы угадаете пароль правильно, вы получите строку "Correct". В этом случае вам следует продолжить решение оставшихся наборов входных данных. Если предполагаемый пароль неверен, вы получите строку "Incorrect". В этом случае вы должны немедленно прекратить программу.

Интерактор не адаптивный. Массив \(A\) не изменяется с запросами.

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

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

Формат взломов

Чтобы взломать решение, используйте следующий формат взломов:

В первой строке должно содержаться одно целое число \(t\) \((1 \leq t \leq 10)\) — количество наборов входных данных.

Первая строка каждого набора входных данных должна содержать два целых числа: \(n\) и \(k\) \((2 \leq n \leq 1000, 1 \leq k \leq n)\) — размер массива и количество подмножеств соответственно. Следующая строка должна состоять из \(n\) целых чисел в диапазоне \([1, n]\) — массива \(A\). Далее должны следовать \(k\) строк. \(i\)-я строка должна содержать целое число \(c\) \((1 \leq c \lt n)\) — размер подмножества \(S_i\), за которым должны следовать \(c\) различных целых чисел в диапазоне \([1, n]\) — индексы, принадлежащие подмножеству \(S_i\).

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

Примечание

Массив \(A\) в примере равен \([1, 2, 3, 4]\). Длина пароля составляет \(2\). Первый элемент пароля  — это максимум из \(A[2]\), \(A[4]\) (поскольку первое подмножество содержит индексы \(1\) и \(3\), мы берем максимум по остальным индексам). Второй элемент пароля  — это максимум из \(A[1]\), \(A[3]\) (поскольку второе подмножество содержит индексы \(2\), \(4\)).

Не забудьте считать строку "Correct" / "Incorrect" после угадывания пароля.


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

1

2

3

4

Correct
? 1 1

? 1 2

? 1 3

? 1 4

! 4 3

time 2000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
Комментарий учителя