ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила

2242. Корневой калькулятор

Ограничение времени: 2.0 секунды
Ограничение памяти: 256 МБ
У Вадима есть любимое нечётное простое число P. Все вычисления он делает только по модулю P, даже когда этого делать не стоит. Так, на днях он услышал про квадратичные иррациональности. Это числа вида a + b · √c. Само собой, Вадим захотел написать калькулятор, который будет обрабатывать подобные числа. Ваша задача заключается в том, чтобы помочь ему это сделать.
Как известно, в калькулятор вначале вводится одно число, а затем над ним проводятся операции. Вам нужно реализовать 5 операций: сложение, вычитание, умножение и деление квадратичных иррациональностей, а также возведение в степень. Заметьте, что все эти вычисления должны проводиться по модулю P. Если для числа a существуют x1 и x2 такие, что x12 ≡ x22 ≡ a (mod P), то Вадим считает правильным результатом извлечения корня меньшее из них. Все последующие вычисления будут выполняться, исходя из этого результата. Также Вадим знает, что 00 = 1, поэтому калькулятор обязан считать именно так.
Вадим вас уверяет, что все результаты будут иметь вид a + b · √c, где a, b, c ∈ [0; P − 1], при этом у одного и того же числа может быть несколько представлений. Из всех таких нужно выводить то, у которого c минимально. Если таких несколько, то нужно вывести то, у которого b минимально.

Исходные данные

В первой строке даются три целых числа A, B и C — изначальная квадратичная иррациональность A + B · √C (0 ≤ A, B, C ≤ 109).
Во второй строке даются два целых числа Q и P — количество операций на калькуляторе и любимое простое число Вадима (1 ≤ Q ≤ 105, 3 ≤ P ≤ 109 + 9, P — простое).
В следующих Q строках описываются операции в одном из форматов ниже:
  • + a b c — к текущему числу надо прибавить a + b · √c (0 ≤ a, b, c ≤ 109)
  • - a b c — из текущего числа надо вычесть a + b · √c (0 ≤ a, b, c ≤ 109)
  • * a b c — текущее число надо умножить на a + b · √c (0 ≤ a, b, c ≤ 109)
  • / a b c — текущее число надо разделить на a + b · √c (0 ≤ a, b, c ≤ 109, a + b · √c  ≠ 0 (mod P))
  • ^ n — текущее число надо возвести в степень n (0 ≤ n ≤ 109)
Все числа a, b, c и n — целые.

Результат

После выполнения каждой операции выведите три целых числа a, b и c, описывающие текущее значение по модулю P. Если есть несколько ответов, выведите тот, у которого c минимально. Если таких ответов несколько, выведите тот, у которого b минимально.

Пример

исходные данныерезультат
6 1 2
6 101
+ 0 1 8
/ 3 0 3
- 0 1 2
* 2 3 2
^ 2
+ 13 100 5408
6 3 2
2 1 2
2 0 0
4 6 2
88 48 2
0 100 2
Автор задачи: Вадим Баринов
Источник задачи: Квалификационный тур Уральского регионального чемпионата ICPC 2026: отбор УрФУ