Роджер — робот. У него есть рука, представляющая собой последовательность из n соединённых друг с другом отрезков. Концы i-го отрезка изначально расположены в точках с координатами (i - 1, 0) и (i, 0). У i-го отрезка конец в (i - 1, 0) окрашен в красный цвет, а конец в (i, 0) — в синий. Таким образом, синий конец i-го отрезка касается красного конца (i + 1)-го отрезка для всех соответствующих i.
Роджер может двигать рукой двумя различными способами:
На этой иллюстрации красный конец помечен А, а отрезки до А остаются на своём месте, в то время как синий конец помечен В и отрезки после B переносятся вдоль луча.
На этой иллюстрации красный конец помечен А, а отрезки до А остаются на местах, в то время как синий конец помечен как B и отрезки после В повернутся вокруг точки А.
Роджер будет двигать рукой m раз. Эти преобразования немного сложные, поэтому Роджер быстро путается и перестаёт понимать, где находится синий конец последнего отрезка. Помогите ему вычислить координаты синего конца последнего отрезка после применения каждой операции. Обратите внимание, что во время выполнения всех действий рука Роджера может произвольно пересекаться сама с собой.
В первой строке входных данных записано два целых числа n и m (1 ≤ n, m ≤ 300 000) — количество отрезков, составляющих руку, и количество движений, сделанных Роджером, соответственно.
В каждой из следующих m строк записано по три целых числа xi, yi и zi, описывающих соответствующий ход. Если xi = 1, это описывает ход 1-го типа, где yi обозначает номер отрезка, а zi обозначает увеличение длины. Если xi = 2, то это описание хода второго типа, где yi обозначает номер отрезка, а zi обозначает угол в градусах (1 ≤ xi ≤ 2, 1 ≤ yi ≤ n, 1 ≤ zi ≤ 359).
Выведите m строк. В i-ой строке должны быть записаны два вещественных числа, обозначающие координаты синего конца последнего отрезка после завершения операций 1, ..., i. Ваш ответ будет считаться правильным, если его абсолютная или относительная ошибка не будет превосходить 10 - 4.
А именно: пусть ваш ответ равен a, а ответ жюри — b. Проверяющая программа будет считать ваш ответ правильным, если .
5 4
1 1 3
2 3 90
2 5 48
1 4 1
8.0000000000 0.0000000000
5.0000000000 -3.0000000000
4.2568551745 -2.6691306064
4.2568551745 -3.6691306064
Следующие картинки иллюстрируют пример и показывают состояние руки после каждой операции. Координаты точки F выведены после применения каждой операции. Для простоты мы показываем только синие концы отрезка (за исключением красного конца первого). Например, точка, помеченная В, является синим концом отрезка 1, а также красным концом отрезка 2.
Начальное состояние:
Название |
---|