Множення у діедральній групі#6242

Множення у діедральній групі

5 секунд
128 мегабайтів
Легка

Діедральна група — це множина з операцією множення , визначеною на . Множина породжується двома елементами та . Операція множення явно не записується, тобто a*a буде позначатись як або a^2. Аналогічно, a*a*b записується як a^2b^1 або просто a^2b.

Діедральна група має два цілі параметри і , де m \geq 2 і n \geq 2, тому діедральну групу записують як D_{m,n}. Відношення, що визначають D_{m,n}, такі:

a^m = a^0 = 1, b^n = b^0 = 1 і ba = a^{m-1}b.

Отже, D_{m,n} має елементів, а саме

D_{m,n} = \{ a^j b^k | 0 \leq j < m, 0 \leq k < n \} = \{ a^0b^0, a^1b^0, a^2b^0, \ldots, a^{m-1}b^0, \ldots, a^{m-1}b^{n-1} \}.

Наприклад, нехай m = 7 і n = 2. Елементи D_{7,2}:

\{ 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 \}.

Множення не є комутативним, тобто ba \neq ab. Насправді ba = a^6b згідно з визначальними відношеннями D_{7,2}. Також a^ja^k = a^{(j+k) \% m}, і b^jb^k = b^{(j+k) \% n}. Отже:

(a^jb^k)(a^pb^q) \neq (a^{(j+p) \% m}b^{(k+q) \% n}).

Щоб правильно перемножити два елементи (a^3b^1) і (a^2b^1) із D_{7,2}, виконаємо такі дії:

(a^3b^1)(a^2b^1) = (a^3b^0)(ba)(a^1b^1) = (a^3b^0)(a^6b^1)(a^1b^1),

оскільки ba = a^6b.

Оскільки a^3b^0a^6 = a^3a^6 = a^{(3+6) \% 7} = a^2, помножимо перші два множники: (a^3b^0)(a^6b^1) = (a^2b^1).

Отже,

(a^3b^0)(a^6b^1)(a^1b^1) = (a^2b^1)(a^1b^1).

Тепер перезапишемо вираз так:

(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).

Отже, добуток двох елементів (a^3b^1) та (a^2b^1) дорівнює (a^3b^1)(a^2b^1) = (a^1b^0).

Ваше завдання — написати програму, яка, отримавши , та будь-які два елементи (a^j b^k) та (a^p b^q) діедричної групи D_{m,n}, коректно обчислює їхній добуток.

Вхідні дані

Вхідні дані складаються з кількох тестів. Кожен тест займає кілька рядків. Перший рядок кожного тесту містить problemID, , та , відокремлені пробілом. Значення і не перевищують . Число — кількість прикладів на множення у поточному тесті. Далі йде рядків, кожен з яких містить два елементи з D_{m,n}, які треба помножити. Кожен елемент задано у вигляді a3b1 замість a^3b^1. Дані для наступного тесту йдуть одразу за попереднім. Якщо problemID дорівнює ZZ, це означає кінець вхідних даних.

Вихідні дані

Для кожного прикладу на множення потрібно вивести один рядок у такому вигляді:

ProblemID id: ajbk * apbq = arbs

де id — це номер problemID з вхідних даних, ajbk та apbq — елементи, які треба помножити, а arbs — правильна відповідь.

Приклади

Приклад 1

Loading
Loading