Задача №111235. Чёрный ящик

В игре "Чёрный ящик" используется квадратный чёрный ящик, лежащий на столе. Каждая из его сторон имеет \(n\) отверстий, в каждое из \(4n\) которых можно запустить шарик, который через некоторое время вылетит обратно из одного из отверстий.

Внутренность коробки можно представить в виде сетки \(n \times n\). Отверстия ящика - это границы сетки. Каждая из ячеек сетки либо пуста, либо содержит отражатель

Отражатель - это стенка, направленная под углом 45 градусов к линиям сетки так, что при соударении шарика с отражателем он меняет направление своего полёта на 90 градусов.

Шарик, запущенный внутрь коробки, катится прямолинейно, пока либо он не вылетит из коробки, либо не встретится с отражателем. При попадании в отражатель он отскакивает от него (направление его полёта меняется на 90 градусов), а отражатель поворачивается на 90 градусов.

a) Шарик запущен в отверстие; он ударяется об отражатель и летит вниз.

b) После соударения с шариком отражатель инвертирует своё положение. Новый шарик запущен в чёрный ящик в то же отверстие, что и первый, и после соударения с отражателем он полетит вверх.

c) Отражатель меняет своё состояние после каждого соударения.

При каждом соударении шарика об отражатель чёрный ящик издаёт гудок. Количество соударений шарика перед его выходом из ящика может быть определено по количеству гудков. Можно доказать, что любой запущенный шарик всегда покинет коробку.

Коробка имеет две кнопки. Первая кнопка сбрасывает все отражатели - каждый отражатель возвращается в своё исходное положение. Вторая инвертирует все отражатели в коробке.

Вам требуется написать интерактивную программу, которая путем работы с чёрным ящиком определит его содержимое.

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

Сначала вам на вход подаётся одно целое число \(n (1 \leq n \leq 30)\). Далее процесс общения программы с чёрным ящиком устроен в форме "запрос-ответ". Возможные запросы:

\(1\) \(s\) \(h\) - после этого запроса запускается шар в отверстие, расположенное на стороне \(s\) (1 - верхняя сторона, 2 - правая сторона, 3 - нижняя сторона, 4 - левая сторона), и имеющее номер \(h (1 \leq h \leq n)\) (отверстия нумеруются сверху вниз и слева направо). Ваша программа должна считать три числа - \(c, s', h'\), разделённых пробелами, соответственно количество соударений и номер стороны и номер отверстия вылета в формате, описанном выше.

\(2\) - после этого запроса все отражатели сбрасываются.

\(3\) - после этого запроса все отражатели инвертируются

\(0\) - после этого запроса вы заканчиваете работу с чёрным ящиком и должны вывести содержимое коробки (см. пример для точного понимания формата).

Обратите внимание, что после каждого запроса вы должны вывести перевод строки и сбросить буфер вывода командой flush(output) в Паскале, fflush(stdout) (cout.flush()) на языках C/C++. В других языках достаточно вывести после команды перевод строки. Следуйте формату общения с чёрным ящиком с точностью до пробела.

Пример тестов

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

1 4 3

1 1 3


3 1 2


4 2 3


0 3 1




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

1 3 3

1 2 1

3
1 2 3

2
1 4 2

2
1 1 1

0
./\
./.
..\

Дополнительная информация

Решение жюри находит содержимое коробки на каждом тесте жюри не более чем за 1.8 секунды. Жюри не гарантируется существование решения на всех возможных тествах.

Сдать: для сдачи задач необходимо войти в систему