만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

정이면체군의 곱

시간 제한5초메모리 제한128 MB

요약
관계식 ba = a^{m-1}b에 따라 D_{m,n}의 두 원소를 곱하고 지수를 m과 n으로 나눈 나머지로 출력합니다.
난이도

쉬움10점 중 3점

유형
수학, 구현
정답자
아직 제출이 없습니다

문제

정이면체군은 곱셈 연산 ∗*가 정의된 집합 DD이다. DD의 원소는 모두 두 원소 aa와 bb로 만든다. 곱셈 기호는 거의 쓰지 않고 두 원소를 붙여 쓰거나 지수로 줄여 쓴다. 즉 a∗aa*a는 aaaa 또는 a2a^2으로 쓰고, a∗a∗ba*a*b는 a2b1a^2b^1 또는 a2ba^2b로 쓴다.

정이면체군 DD는 파라미터 mm과 nn을 받고, m≥2m \ge 2, n≥2n \ge 2이다. 이 군을 Dm,nD_{m,n}으로 쓴다. Dm,nD_{m,n}에서는 다음 세 관계가 성립한다.

am=a0=1,bn=b0=1,ba=am−1ba^m = a^0 = 1, \quad b^n = b^0 = 1, \quad ba = a^{m-1}b

따라서 Dm,nD_{m,n}의 원소는 모두 mnmn개다.

Dm,n={ajbk∣0≤j<m, 0≤k<n}={a0b0,a1b0,…,am−1b0,…,am−1bn−1}D_{m,n} = \{a^jb^k \mid 0 \le j < m,\ 0 \le k < n\} = \{a^0b^0, a^1b^0, \dots, a^{m-1}b^0, \dots, a^{m-1}b^{n-1}\}

m=7m = 7, n=2n = 2이면 D7,2D_{7,2}는 다음 14개 원소로 이루어진다.

{a0b0,a1b0,a2b0,a3b0,a4b0,a5b0,a6b0,a0b1,a1b1,a2b1,a3b1,a4b1,a5b1,a6b1}\{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≠abba \ne ab이다. D7,2D_{7,2}에서는 ba=a6bba = a^6b이다. 같은 문자의 거듭제곱은 ajak=a(j+k) mod ma^ja^k = a^{(j+k) \bmod m}, bjbk=b(j+k) mod nb^jb^k = b^{(j+k) \bmod n}으로 합쳐지지만, 두 문자가 섞이면 지수를 그냥 더할 수 없다.

(ajbk)(apbq)≠a(j+p) mod mb(k+q) mod n(a^jb^k)(a^pb^q) \ne a^{(j+p) \bmod m}b^{(k+q) \bmod n}

D7,2D_{7,2}의 두 원소 a3b1a^3b^1과 a2b1a^2b^1을 올바르게 곱하는 과정은 다음과 같다. 먼저 가운데의 baba를 a6ba^6b로 바꾼다.

(a3b1)(a2b1)=(a3b0)(ba)(a1b1)=(a3b0)(a6b1)(a1b1)(a^3b^1)(a^2b^1) = (a^3b^0)(ba)(a^1b^1) = (a^3b^0)(a^6b^1)(a^1b^1)

a3a6=a(3+6) mod 7=a2a^3a^6 = a^{(3+6) \bmod 7} = a^2이므로 앞의 두 원소는 a2b1a^2b^1로 합쳐진다.

(a3b0)(a6b1)(a1b1)=(a2b1)(a1b1)(a^3b^0)(a^6b^1)(a^1b^1) = (a^2b^1)(a^1b^1)

남은 곱도 같은 방법으로 정리한다.

(a2b1)(a1b1)=(a2b0)(ba)(a0b1)=(a2b0)(a6b1)(a0b1)=a8b2=a1b0(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

즉 (a3b1)(a2b1)=a1b0(a^3b^1)(a^2b^1) = a^1b^0이다.

mm과 nn, 그리고 Dm,nD_{m,n}의 두 원소 ajbka^jb^k와 apbqa^pb^q가 주어졌을 때 곱한 결과를 구하는 프로그램을 작성하시오.

입력

입력은 여러 개의 문제 세트로 이루어진다.

각 문제 세트의 첫째 줄에는 문제 ID와 mm, nn, pp가 공백으로 구분되어 주어진다. 문제 ID는 대문자와 숫자로 이루어진 공백 없는 문자열이고, mm과 nn은 22 이상 10001000 이하의 정수이며, pp는 그 세트에 들어 있는 곱셈 문제의 개수다. 다음 pp개 줄에는 곱셈 문제가 한 줄에 하나씩 주어지고, 각 줄에는 Dm,nD_{m,n}의 원소 두 개가 공백으로 구분되어 주어진다. 원소는 a3b1처럼 문자 a, 지수, 문자 b, 지수를 이어 붙인 형식이고 지수에 앞자리 0은 붙지 않는다.

한 문제 세트가 끝나면 바로 다음 문제 세트가 이어진다. 문제 ID가 ZZ인 줄은 입력의 끝을 뜻하고, 그 줄의 나머지 값은 무시한다.

출력

각 곱셈 문제마다 한 줄에 다음 형식으로 출력한다.

ProblemID id: ajbk * apbq = arbs

id는 그 문제 세트의 문제 ID, ajbk와 apbq는 입력으로 주어진 두 원소를 입력에 적힌 그대로 옮긴 것, arbs는 두 원소를 곱한 결과다. 결과의 지수는 0≤r<m0 \le r < m, 0≤s<n0 \le s < n을 만족하는 값으로 적고, 콜론 뒤와 *, = 양옆에는 공백을 하나씩 둔다.

예제1

  1. 예제 1

    입력
    C1 7 2 3
    a3b1 a2b1
    a5b1 a3b1
    a2b1 a4b1
    C2 9 3 2
    a3b1 a2b1
    a4b1 a3b1
    ZZ 0 0 0
    
    예상 출력
    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