Це інтерактивна задача. Після виведення кожного рядка необхідно скидати буфер виведення (flush). Ви можете використовувати cout << flush у C++, System.out.flush() у Java та sys.stdout.flush() у Python. Ви повинні суворо дотримуватися інструкцій у розділі «Протокол взаємодії», інакше ви можете отримати вердикт «неправильна відповідь» (wrong answer), «перевищено ліміт часу» (time limit exceeded) або інший.
Оскільки в усіх задачах головними героями є міфічні гноми, можливо, нарешті варто подумати про щось відчутне.
Є прихована послідовність $A$ довжини $N$, що складається з цілих чисел у діапазоні $[0, 2^N - 1]$. Ваше завдання — відновити її за обмежену кількість запитів. У кожному запиті ви надаєте послідовність $B$ довжини $N$ з елементами в діапазоні $[0, 2^N - 1]$. Відповідь обчислюється таким чином:
- Створюється послідовність $C$, де $i$-й елемент $C$ дорівнює побітовому виключному АБО (bitwise xor) $i$-х елементів $A$ та $B$. Ми позначаємо xor символом $\oplus$.
- Множина $S$ будується як множина всіх значень, які можна отримати, взявши xor деякої підмножини елементів $C$. Зокрема, для порожньої підмножини xor дорівнює $0$.
- Відповіддю на запит є $|S|$.
Наприклад, якщо $A = (1, 4, 3)$ і $B = (0, 4, 7)$, то $C = (1 \oplus 0, 4 \oplus 4, 3 \oplus 7) = (1, 0, 4)$ і $S = \{0, 1, 4, 5\}$, тому відповідь дорівнює $4$.
Побітове виключне АБО двох чисел $x$ та $y$ має встановлений біт $i$ тоді й лише тоді, коли рівно в одного з чисел $x$ та $y$ встановлений біт $i$. Наприклад, $5 \oplus 3 = (101)_2 \oplus (011)_2 = (110)_2 = 6$. У C++ та Python операція xor позначається оператором ^.
Протокол взаємодії
Послідовність $A$ зафіксована на початку і не залежить від зроблених запитів.
Спочатку зчитайте рядок, що містить одне ціле число $1 \le N \le 60$. Потім ви можете ставити запити.
Щоб поставити запит, виведіть рядок, що містить символ ?, за яким ідуть $N$ цілих чисел у діапазоні $[0, 2^N - 1]$. У відповідь зчитайте одне ціле число — відповідь на запит.
Коли будете готові, виведіть !, за яким ідуть $N$ цілих чисел прихованої послідовності. Після цього ваша програма повинна завершитися без подальшого виведення.
Не забувайте скидати буфер виведення після кожного запиту та після виведення відповіді. Ставте пробіли між числами та символами ?, !.
Приклади
Вхідні дані 1
3 4 8
Вихідні дані 1
? 1 2 3 ? 0 0 0 ! 1 3 4
Примітка
Пояснення до прикладу взаємодії:
$N = 3$
Запит ? 1 2 3: $B = (1, 2, 3)$, $C = (1 \oplus 1, 3 \oplus 2, 4 \oplus 3) = (0, 1, 7)$, $S = \{0, 1, 6, 7\}$, відповідь дорівнює $4$.
Запит ? 0 0 0: $B = (0, 0, 0)$, $C = (1 \oplus 0, 3 \oplus 0, 4 \oplus 0) = (1, 3, 4)$, $S = \{0, 1, \dots, 7\}$, відповідь дорівнює $8$.
Виведення ! 1 3 4: Прихована послідовність дорівнює $A = (1, 3, 4)$.
Локальне тестування
У розділі Files ви можете знайти архів B.zip, що містить приклади тестів та грейдер grader.cpp. Щоб протестувати своє рішення, скомпілюйте його, а потім передайте ім'я тесту та ваш виконуваний файл скомпільованому ./grader:
./grader [test] [executable]
Наприклад: ./grader 0b.in ./abc
Не гарантується, що поведінка прикладу грейдера повністю збігається з офіційним. Проте жоден із них не є адаптивним.