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

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

Алиса и Боб играют в следующую игру. Изначально у Алисы есть $$$n$$$ карточек с числами $$$a_1, a_2, \ldots, a_n$$$ из неотрицательных чисел, меньших $$$m$$$. Также задана фиксированная бинарная строка $$$s_0s_1 \ldots s_{m-1}$$$.

Каждый ход Алиса может совершить одно из следующих действий:

  • Выбрать две свои карточки. Пусть числа, записанные на них — $$$x$$$ и $$$y$$$. Тогда Алиса убирает обе карточки с числами $$$x$$$, $$$y$$$ и заменяет их одной карточкой с числом $$$(x + y) \bmod m$$$.
  • Выбрать одну свою карточку. Пусть число, записанное на ней — $$$x$$$. Тогда Алиса может попросить Боба заменить эту карточку на некоторое число от $$$0$$$ до $$$m-1$$$ включительно не равное $$$x$$$. Обратите внимание, что число на новой карточке выбирает Боб.
  • Закончить игру.

Если через $$$n + m+7$$$ ходов Алиса не закончила игру, или у неё на руках всё ещё больше одной карты, победителем считается Боб. Иначе у Алисы на руках одна карточка. Пусть на этой карточке число $$$x$$$. Тогда, если $$$s_x = 1$$$, в игре побеждает Алиса, а иначе побеждает Боб.

Ваша задача — выбрать, за какого игрока играть, и выиграть игру с программой жюри.

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

Каждый тест состоит из нескольких наборов входных данных. В первой строке находится одно целое число $$$t$$$ ($$$1 \le t \le 100$$$) — количество наборов входных данных. Далее следует описание наборов входных данных.

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

Взаимодействие начинается со считывания входных данных. Первая строка каждого набора входных данных содержит два целых числа $$$n, m$$$ ($$$2 \le n \le 100$$$, $$$2 \le m \le 100$$$) — длину массива $$$a$$$ и модуль.

Вторая строка каждого набора входных данных содержит $$$n$$$ целых чисел $$$a_1, a_2, \ldots, a_n$$$ ($$$0 \le a_i \lt m$$$) — элементы массива $$$a$$$.

Третья строка каждого набора входных данных содержит бинарную строку длины $$$m$$$ — $$$s_0s_1 \ldots s_{m-1}$$$.

После считывания данных вы должны вывести одну строку: Alice или Bob — имя игрока, за которого вы будете играть.

Если вы выбрали играть за Алису, далее выводите совершаемые операции в следующем формате:

  • unite $$$x$$$ $$$y$$$ — для объединения карточек с числами $$$x$$$ и $$$y$$$ в одну карточку с числом $$$(x + y) \bmod m$$$.
  • replace $$$x$$$ — для замены карточки с значением $$$x$$$. После вывода в одной строке считайте число $$$y$$$ ($$$0 \le y \lt m$$$, $$$y \neq x$$$) — значение новой карточки, выбранное Бобом.
  • done — закончить игру.

Если вы выбрали играть за Боба, далее считывайте операции Алисы в таком же формате. На каждую операцию replace $$$x$$$ — вам нужно вывести число $$$y$$$ ($$$0 \le y \lt m$$$, $$$y \neq x$$$) в отдельной строке. Также гарантируется, что программа жюри, играющая за Алису, закончит игру за не более чем $$$n + m + 7$$$ ходов, с одной картой на руках.

После вывода или считывания done вы должны перейти к следующему набору входных данных.

После вывода каждого запроса не забудьте вывести перевод строки и сбросить буфер вывода$$$^{\text{∗}}$$$. В противном случае вы получите вердикт Решение «зависло». На любом шаге взаимодействия, если вы считали -1 вместо корректных данных, ваше решение должно немедленно завершиться. Это означает, что ваше решение получит вердикт Неправильный ответ из-за некорректного запроса или любой другой ошибки. Если программа не завершится, вы можете получить любой вердикт, так как ваша программа продолжит чтение из закрытого потока.

$$$^{\text{∗}}$$$Чтобы сбросить буфер вывода, используйте:

  • fflush(stdout) или cout.flush() в C++;
  • sys.stdout.flush() в Python;
  • смотрите документацию для других языков.
Пример
Входные данные
2
5 4
0 2 0 3 3
0110


1



0



2 10
7 7
1111011111

unite 7 7
done
Выходные данные




Alice
replace 0

unite 3 3
unite 1 2
replace 3

unite 0 0
unite 0 2
done



Bob


Примечание

Не гарантируется, что в примере из условия жюри играет оптимально.