В игре "Чёрный ящик" используется квадратный чёрный ящик, лежащий на столе. Каждая из его сторон имеет \(n\) отверстий, в каждое из \(4n\) которых можно запустить шарик, который через некоторое время вылетит обратно из одного из отверстий.
Внутренность коробки можно представить в виде сетки \(n \times n\). Отверстия ящика - это границы сетки. Каждая из ячеек сетки либо пуста, либо содержит отражатель
Отражатель - это стенка, направленная под углом 45 градусов к линиям сетки так, что при соударении шарика с отражателем он меняет направление своего полёта на 90 градусов.
Шарик, запущенный внутрь коробки, катится прямолинейно, пока либо он не вылетит из коробки, либо не встретится с отражателем. При попадании в отражатель он отскакивает от него (направление его полёта меняется на 90 градусов), а отражатель поворачивается на 90 градусов.
a) Шарик запущен в отверстие; он ударяется об отражатель и летит вниз.
b) После соударения с шариком отражатель инвертирует своё положение. Новый шарик запущен в чёрный ящик в то же отверстие, что и первый, и после соударения с отражателем он полетит вверх.
c) Отражатель меняет своё состояние после каждого соударения.
При каждом соударении шарика об отражатель чёрный ящик издаёт гудок. Количество соударений шарика перед его выходом из ящика может быть определено по количеству гудков. Можно доказать, что любой запущенный шарик всегда покинет коробку.
Коробка имеет две кнопки. Первая кнопка сбрасывает все отражатели - каждый отражатель возвращается в своё исходное положение. Вторая инвертирует все отражатели в коробке.
Вам требуется написать интерактивную программу, которая путем работы с чёрным ящиком определит его содержимое.
Дополнительная информация
Решение жюри находит содержимое коробки на каждом тесте жюри не более чем за 1.8 секунды. Жюри не гарантируется существование решения на всех возможных тествах.