Многочлены
면접 대비시간 제한2초메모리 제한1024 MB
각 다항식 문자열을 해석해 n과 m의 계수와 지수를 곱해 정리하고, 같은 항을 합친 뒤 같은 형식으로 출력한다.
문제
Снежок нашел листок из старого учебника по математике. На нем перечислены многочленов от двух переменных.
Теперь Снежок хочет их упростить. Помогите ему.
Во входном файле многочлены записаны в следующем формате:
-
Многочлен не содержит пробелов и состоит только из арабских цифр и символов <<
n>>, <<m>>, <<+>>, <<->>, <<*>>, <<^>>. -
Многочлен состоит из нескольких слагаемых.
-
Если слагаемое входит со знаком минус, то перед ним пишется <<
->>. -
Если слагаемое входит со знаком плюс и это не первое слагаемое, то перед ним пишется <<
+>>. -
Каждое слагаемое можно представить в виде , где , и --- целые неотрицательные числа (если не учитывать знак перед слагаемым), без ведущих нулей, не превышающие .
-
Слагаемое записывается в следующем формате:
- Слагаемое является произведением чисел и степеней и .
- Назовем числом последовательность подряд идущих цифр, слева и справа от которой стоят не цифры.
- Перед каждым символом <<
^>> находится переменная, то есть символ <<n>> или символ <<m>>. - После каждого символа <<
^>> находится число. - Таким образом, знак <<
^>> обозначает, что переменная, стоящая перед ним, возводится в степень числа, стоящего после него. Назовем это множителем. - Если после символов <<
n>> или <<m>> нет символа <<^>>, то считается, что эта переменная в этом месте стоит в степени . Назовем каждую такую переменную множителем. - Все числа, которые не являются степенями (то есть, те, перед которыми не стоят символы <<
^>>), назовем множителями. - По обе стороны от каждого символа <<
*>> находятся множители. - Слагаемое это произведение всех его множителей.
- Обращаем ваше внимание, что некоторые соседние множители могут не разделяться символом <<
*>>.
Для упрощенного многочлена должно выполняться следующее:
- Он записывается в таком же формате, как и исходный.
- Если многочлен тождественно равен нулю, нужно вывести <<
0>>. - Если слагаемое представимо в виде , то такое слагаемое должно быть записано как <<
an^ bm^ c>>, где на место <<a>>, <<b>> и <<c>> подставлены соответствующие числа. - Для каждой пары и существует не более одного слагаемого, представимого в виде .
- Если входит в многочлен с коэффициентом 0, такое слагаемое писать не надо.
- Если входит в многочлен с коэффициентом, по модулю равным 1, в таком слагаемом не нужно писать коэффициент.
- В слагаемом вида , переменную <<
n>> писать не надо. - В слагаемом вида , после переменной <<
n>> не нужно писать степень. - Для переменной <<
m>> тоже выполняются предыдущие два пункта. - Слагаемые в многочлене могут идти в любом порядке.
입력
В первой строке задано целое число --- количество многочленов (). В следующих строках заданы многочлены. Гарантируется, что все числа в них не превосходят .
Длины всех строк не превосходят .
출력
Для каждого многочлена выведите его в упрощенном виде.
Гарантируется, что в упрощенном многочлене все числа не превосходят .
힌트
Пояснение к примеру:
Обращаем ваше внимание, что хотя в процессе вычисления значения коэффициента в первом слагаемом последнего многочлена оно и становится больше , но в итоге это слагаемое равно , значит для него ограничение на величину коэффициента тоже выполняется.