Лазертаг
В игровом пространстве для лазертага установлены несколько вертикальных, прямоугольных, двусторонних зеркал, которые возвышаются над головой. Эти зеркала могут отражать ваш лазерный луч, предоставляя множество способов поразить ваших противников. Однако, они также могут отразить ваш лазерный луч так, что он случайно попадет в вас. Ваша задача — определить углы, при которых вы стреляете в себя, чтобы избежать их.
Зеркала не обладают идеальной отражающей способностью, поэтому нас интересуют только выстрелы с не более чем 7 отражениями. Ниже приведены несколько возможных конфигураций. На рисунках представлен вид сверху. Зеркала обозначены черными линиями. Все пути, которые возвращаются к точке стрельбы, показаны серым цветом. Примите точку стрельбы за центр декартовой системы координат, с положительной осью x направо и положительной осью y вверх по странице. Координаты начала и концов зеркал указаны. Для простоты предположим, что зеркала имеют незначительную толщину. Каждый путь помечен начальным углом стрельбы, измеренным в градусах против часовой стрелки от положительной оси x и округленным до ближайшего градуса, от 0 до 359.
Входные данные
Вход содержит один или несколько наборов данных. Каждый набор начинается с строки, содержащей количество зеркал, n, 1 ≤ n ≤ 7. Следующие n строк содержат координаты (x, y) концов одного зеркала, так что для каждого зеркала есть последовательность из 4 чисел, x_1 y_1 x_2 y_2. Все координаты — целые числа с величиной меньше 1000. Зеркала не пересекаются и не касаются друг друга. Ни одно зеркало не проходит через начало координат.
После последнего набора данных идет строка, содержащая только 0.
Выходные данные
Для каждого набора данных выведите одну строку. Если существует один или несколько путей обратно к началу координат с не более чем 7 отражениями, соберите начальные углы, округленные до ближайшего градуса. Все округленные углы, a, должны быть нормализованы так, чтобы 0 ≤ a ≤ 359. Удалите все дубликаты и выведите целые числа в порядке возрастания в одной строке, используя один пробел в качестве разделителя. Если такого пути обратно нет, выведите "no danger". Ни один путь не попадет точно на край зеркала. Ни одна строка вывода не будет иметь более 79 символов. Обратите внимание, что хотя вывод округляется до ближайшего угла, ваши внутренние вычисления должны основываться на вычислениях с двойной точностью с плавающей запятой.
Первые два примера наборов данных соответствуют рисункам, а третий просто опускает нижнее зеркало из второго набора данных.