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

Махмуд и Ехаб проходят четвёртое испытание Доктора Зло.

Доктор Зло загадал бинарную строку длины n. Известно, что в ней есть хотя бы один символ '0' и хотя бы один символ '1'. Теперь он хочет, чтобы Махмуд и Ехаб нашли позицию хотя бы одного сивола '0' и позицию хотя бы одного символа '1' в этой строке. Чтобы это сделать, они могут задать Доктору Зло не более 15 вопросов следующего вида. Они говорят Доктору Зло бинарную строку длины n, а Доктор Зло говорит им расстояние Хемминга между их строкой и его строкой. Расстоянием Хемминга между двумя бинарными строками равной длины называется количество позиций, в которых они различаются. Вы можете найти строгое опредение расстояния Хемминга ниже.

Помогите Махмуду и Ехабу справиться с заданием Доктора Зло.

Вы получите вердикт Wrong Answer если

  • Ваши запросы не будут соответствовать протоколу взаимодействия.
  • Вы задали строго больше, чем 15 вопросов, при этом программа завершилась после превышения числа запросов. Учтите, что вы можете 15 раз задать Доктору Зло вопрос, а потом потратить ещё запрос, чтобы вывести ответ на задачу.
  • Ответ на задачу неверен.
Вы получите вердикт Idleness Limit Exceeded, если вы ничего не выведите или забудете сбросить буфер вывода (более подробно о том, как сбросить буфер вывода, можно прочитать ниже).

Если программа превышает максимальное число запросов, необходимо завершить её с кодом возврата 0, в противном случае вердикт может быть не Wrong Answer из-за чтения из закрытого потока.

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

В первой строке ввода содержится целое число n (2 ≤ n ≤ 1000) — длина спрятанной бинарной строки.

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

Чтобы вывести ответ на задачу, выведите "! pos0 pos1" (без кавычек), где pos0 и pos1 — это позиции какого-то символа '0' и какого-то символа '1' в строке (нумерация с 1). Не забудьте сбросить буфер вывода после вывода ответа!

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

Чтобы задать вопрос, используйте формат "? s" (without quotes), где s строка, для которой вы хотите узнать расстояние Хемминга между ней и загаданной строкой. Не забудьте сбросить буфер вывода после вывода запроса!

После каждого запроса на стандартный ввод будет подано одно целое число — расстояние Хемминга между строкой из запроса и загаданной строкой.

Чтобы сбросить буфер вывода используйте:

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

Взломы.

Для взлома выведите бинарную строку длиной не более 1000, содержащую хотя бы один символ '0' и хотя бы один символ '1'.

Пример
Входные данные
3
2
1
3
2
1
0
Выходные данные
? 000
? 001
? 010
? 011
? 100
? 101
! 2 1
Примечание

Определение расстояния Хемминга: https://ru.wikipedia.org/wiki/Расстояние_Хемминга

В первом тестовом примере загаданная строка равна 101. Первый запрос равен 000, поэтому расстояние Хемминга равно 2. Во втором запросе загаданная строка всё ещё равна 101 а строка из запроса равна 001, поэтому расстояние Хемминга равно 1.

После нескольких запросов вы узнали, что символ на позиции 2 это '0', а символ на позиции 1 это '1', поэтому надо вывести "! 2 1".