WA最后一个
#include <bits/stdc++.h>
using namespace std;
int v1[1000], v2[1000];
int t1[1000], t2[1000];
int h[1000], v[1000];
void tj1(string a) {
string ls = "";
a += '+';
for (int i = 0; i < a.size(); i++) {
if (a[i] == '+') {
// cout << ls << endl;
int o = ls.find('^'), s = 0, s1 = 0, v = 0;//x^y s:x s1:y
if (o > ls.size()) {
for (int j = 0; j < ls.size(); j++) {
if (a[j] == 'a') {
v = 1;
break;
}
s = s * 10 + ls[j] - '0';
}
} else {
for (int j = 0; j < o; j++) {
if (a[j] == 'a') {
v = 1;
break;
}
s = s * 10 + ls[j] - '0';
}
//-------------------------------------------------
for (int j = o + 1; j < ls.size(); j++) {
if (j > a.size()) {
break;
}
s1 = s1 * 10 + ls[j] - '0';
}
}
ls = "";
t1[s1] += s;
v1[s1] += v;
i++;
}
ls += a[i];
}
return ;
}
void tj2(string a) {
string ls = "";
a += '+';
// cout << a;
for (int i = 0; i < a.size(); i++) {
if (a[i] == '+') {
// cout << ls << endl;
int o = ls.find('^'), s = 0, s1 = 0, v = 0;//x^y s:x s1:y
if (o > ls.size()) {
for (int j = 0; j < ls.size(); j++) {
if (a[j] == 'a') {
v = 1;
break;
}
s = s * 10 + ls[j] - '0';
}
} else {
for (int j = 0; j < o; j++) {
if (a[j] == 'a') {
v = 1;
break;
}
s = s * 10 + ls[j] - '0';
}
//-------------------------------------------------
for (int j = o + 1; j < ls.size(); j++) {
if (j > a.size()) {
break;
}
s1 = s1 * 10 + ls[j] - '0';
}
}
ls = "";
t2[s1] += s;
v2[s1] += v;
i++;
}
ls += a[i];
}
return ;
}
string ci(int e) {
string k = "";
while (e != 0) {
k = char('0' + e % 10) + k;
e /= 10;
}
return k;
}
string hb() {
for (int i = 0; i <= 30; i++) {
for (int j = 0; j <= 30; j++) {
h[i + j] += t1[i] * t2[j];
v[i + j] += (v1[i] || v2[j]);
}
}
// for (int i = 0; i <= 30; i++) {
// cout << i << " " << h[i] << " " << v[i] << endl;
// }
string p = "";
//cout << 1;
for (int i = 30; i >= 0; i--) {
if (h[i] != 0) {
//cout << 1;
p += ci(h[i]);
if (v[i] != 0) {
p += 'a';
}
if (i != 0) {
p += '^';
p += ci(i);
p += '+';
}
}
}
// cout << p << endl;
return p;
}
int main() {
string s;
while (getline(cin, s)) {
memset(t1, 0, sizeof(t1));
memset(t2, 0, sizeof(t2));
memset(v1, 0, sizeof(v1));
memset(v2, 0, sizeof(v2));
memset(h, 0, sizeof(h));
memset(v, 0, sizeof(v));
//特判:有没有乘号
//cout << s.find("*") << endl;
if (s.find('*') >= s.size()) {
for (int i = 0; i < s.size(); i++) {
if (s[i] != ' ') {
cout << s[i];
}
}
}
//p1:拆成两个字符串
string s1 = "", s2 = "";
int i = 1;
for (; i < s.size(); i++) {
if (s[i] == ')') {
break;
}
if (s[i] != ' ' && s[i] != '(' && s[i] != '*') {
s1 += s[i];
}
}
i += 3;
for (; i < s.size(); i++) {
if (s[i] == ')') {
break;
}
if (s[i] != ' ' && s[i] != '(' && s[i] != '*') {
s2 += s[i];
}
}
//cout << s1 << " " << s2 << endl;
//p2
tj1(s1);
// for (int i = 0; i < 3; i++) {
// cout << i << " " << t1[i] << " " << v1[i] << endl;
// }
// cout << endl;
tj2(s2);
// for (int i = 0; i < 3; i++) {
// cout << i << " " << t2[i] << " " << v2[i] << endl;
// }
cout << hb() << endl;
}
return 0;
}