eolymp
bolt
Попробуйте наш новый интерфейс для отправки задач
Задачи

Умножение в диэдральной группе

Умножение в диэдральной группе

Диэдральная группа представляет собой множество \textbf{D }с мультипликативной операцией \textbf{*}, определенной на \textbf{D}. Множество \textbf{D} генерируется двумя элементами \textbf{a} и \textbf{b}. Операция умножения \textbf{*} явно записываться не будет, то есть \textbf{a*a} будет обозначаться как \textbf{aa} или \textbf{a^2}. Аналогично \textbf{a*a*b} будет записано как \textbf{a^2b^1} или просто \textbf{a^2b}. Диэдральная группа \textbf{D} имеет два целочисленных параметра \textbf{m} и \textbf{n}, где \textbf{m }≥ \textbf{2 }и \textbf{n }≥ \textbf{2}, таким образом диэдральную группу можно записать в виде \textbf{D_\{m,n\}}. Отношения, определяющие \textbf{D_\{m,n\}}, следующие: \textbf{a^m = a^0 = 1}, \textbf{b^n = b^0 = 1 }и \textbf{ba = a^\{(m-1)\}b}. Группа \textbf{D_\{m,n\}} содержит \textbf{(mn)} элементов, а именно \textbf{D_\{m,n\} = \{ a^jb^k | 0 ≤ j < m, 0 ≤ k < n \} = \{ a^0b^0, a^1b^0, a^2b^0, ..., a^\{(m-1)\}b^0, ..., a^\{(m-1)\}b^\{(n-1)\} \}}. Например, пусть \textbf{m = 7} и \textbf{n = 2}. Элементы \textbf{D_\{7,2\}} имеют вид \textbf{\{ a^0b^0, a^1b^0, a^2b^0, a^3b^0, a^4b^0, a^5b^0, a^6b^0, a^0b^1, a^1b^1, a^2b^1, a^3b^1, a^4b^1, a^5b^1, a^6b^1 \}}. Умножение не коммутативно, то есть \textbf{ba} ≠ \textbf{ab}. На самом деле \textbf{ba = a^6b} согласно отношениям, определяющим \textbf{D_\{7,2\}}. Также \textbf{a^ja^k = a^\{(j+k)\%m\}} и \textbf{b^jb^k = b^\{(j+k)\%n\}}. Таким образом \textbf{(a^jb^k)(a^pb^q) ≠ (a^\{(j+p)\%m\}b^\{(k+q)\%n\})}. Чтобы правильно умножить два числа \textbf{(a^3b^1)} и \textbf{(a^2b^1)} из \textbf{D_\{7,2\}}, поступим следующим образом: \textbf{(a^3b^1)(a^2b^1) = (a^3b^0)(ba)(a^1b^1) = (a^3b^0)(a^6b^1)(a^1b^1)}, так как \textbf{ba = a^6b}. Поскольку \textbf{a^3b^0a^6 = a^3a^6 = a^\{(3+6)\%7\} = a^2}, то можно найти произведение первых двух множителей, получив \textbf{(a^3b^0)(a^6b^1) = (a^2b^1)}. Таким образом \textbf{(a^3b^0)(a^6b^1)(a^1b^1) = (a^2b^1)(a^1b^1)}. Перепишем выражение в виде \textbf{(a^2b^1)(a^1b^1) = (a^2b^0)(ba)(a^0b^1) = (a^2b^0)(a^6b^1)(a^0b^1) = (a^8b^2) = (a^1b^0)}. Результатом произведения двух элементов \textbf{(a^3b^1)} и \textbf{(a^2b^1)} будет \textbf{(a^3b^1)(a^2b^1) = (a^1b^0)}. Вам следует написать программу, которая по заданным \textbf{m}, \textbf{n} и любым двум элементам \textbf{(a^jb^k)} и \textbf{(a^pb^q)} из диэдральной группы \textbf{D_\{m,n\}} корректно вычислит их произведение. \InputFile Входные данные состоят из нескольких тестов. Каждый тест располагается на нескольких строках. Первая строка каждого теста содержит \textbf{problemID}, \textbf{m}, \textbf{n} и \textbf{p}, разделенных пробелом. Значения \textbf{m} и \textbf{n }не превосходят \textbf{1000}. Число \textbf{p }указывает на количество примеров на умножение в текущем тесте. Далее следует \textbf{p} строк, каждая из которых содержит два элемента из \textbf{D_\{m,n\}}, которые следует перемножить. Каждый элемент будет задан в виде \textbf{a3b1} вместо \textbf{a^3b^1}. Данные для следующего теста идут сразу за предыдущим. Если \textbf{problemID} равно "\textbf{ZZ}", то это означает конец входных данных. \OutputFile Для каждого примера на умножение следует вывести одну строку вида \textbf{ProblemID id: ajbk * apbq = arbs} где \textbf{id }- номер заданной на входе \textbf{problemID}, \textbf{ajbk} и \textbf{apbq} - элементы, которые следует перемножить, а \textbf{arbs} - корректный ответ.
Лимит времени 5 секунд
Лимит использования памяти 128 MiB
Входные данные #1
C1 7 2 3
a3b1 a2b1
a5b1 a3b1
a2b1 a4b1
C2 9 3 2
a3b1 a2b1
a4b1 a3b1
ZZ 0 0 0
Выходные данные #1
ProblemID C1: a3b1 * a2b1 = a1b0
ProblemID C1: a5b1 * a3b1 = a2b0
ProblemID C1: a2b1 * a4b1 = a5b0
ProblemID C2: a3b1 * a2b1 = a1b2
ProblemID C2: a4b1 * a3b1 = a1b2
Источник ACM ICM Philippines Multi-Provincial Programming Contest 2013