import java.util.*;
class Main
{
static int strToInt(String s, int begin, int end){ //Принимает строку и индексы первого и последнего символов, между которыми в ней (предположительно) записано число (последний не включительно).
int val = 0; //Возвращает объект типа int, значение которого равно этому числу.
boolean negative = false; //Является ли число отрицательным?
if(s.charAt(begin) == '+') begin++;//Плюс игнорируется.
else{
if(s.charAt(begin) == '-'){ //Проверка на отрицательность.
negative = true;
begin++;
}
}
for(int i = begin; i < end; ++i){ //Обработка самих цифр числа.
val *= 10;
val += s.charAt(i) - 48;
}
if(val == 0 && s.charAt(begin) != '0') val++; //Если значение получилось равным нулю, но в исходной строке не только ноль, значит, обрабатывается строка вида "+x", в которой при записи опускается единица
if(negative == true) val *= -1;
return val;
}
static String intToStr(int val){ //Возвращает строку с записанным в ней числом val.
String s = "", tmp = "";
if(val > 0) s = s + "+"; //Проверка на отрицательность.
else{
val *= -1;
s = s + "-";
}
while(val > 0){
tmp = tmp + Integer.toString(val%10); //В tmp хранится запись числа в обратном порядке.
val /= 10;
}
for(int i = tmp.length()-1; i >= 0; --i){ //Переписывание элементво из tmp в s в верном порядке.
s = s + tmp.charAt(i);
}
return s;
}
static String eraseThePlus(String s){ //Удаляет плюс, стоящий в начале строки.
if(s.charAt(0) == '+') s = s.substring(1, s.length());
return s;
}
static String eraseTheOne(String s){ //Удаляет единицу из строк вида "+1x", "-1x^y".
if((s.charAt(1) == '1') && (s.length() == 2)) s = s.charAt(0) + s.substring(2, s.length());
return s;
}
static void analyze(String s, Vector v){ //Анализирует строку и увеличивает соответствующие элементы вектора на коэфициенты при степенях х.
for(int i = 0; i < 11; ++i) v.addElement(0);
if(s.indexOf('x') == -1) v.set(0, (int)(v.elementAt(0)) + strToInt(s, 0, s.length()));
else{
if(s.indexOf('^') == -1) v.set(1, (int)(v.elementAt(1)) + strToInt(s, 0, s.indexOf("x"))); //Строка вида "ax".
else{
int power = strToInt(s, s.indexOf("^") + 1, s.length()); //Строка вида "ax^y".
v.set(power, (int)(v.elementAt(power)) + strToInt(s, 0, s.indexOf("x")));
}
}
}
static Vector decompose(String s){ //Разбивает многочлен на слогаемые и возвращает вектор, индексы элементов которого соответствуют степеням х, а сами элементы - коэффициентам при них.
Vector v = new Vector();
String cur_s = "";
int i = 0;
while(i < s.length()){
cur_s = "";
cur_s = cur_s + s.charAt(i);
i++;
while((i < s.length()) && (s.charAt(i) != '+') && (s.charAt(i) != '-')){ //cur_s - анализируемое в данный момент слогаемое.
cur_s = cur_s + s.charAt(i);
i++;
}
analyze(cur_s, v);
}
return v;
}
static Vector multiplicate (Vector a, Vector b){ //Умножение многочленов.
Vector c = new Vector(); //Возвращает вектор, индексы элементов которого соответствуют степеням х, а сами элементы - коэффициентам при них.
for(int i = 0; i < 21; ++i) c.addElement(0);
for(int i = 0; i < 11; ++i){
for(int j = 0; j < 11; ++j){
c.set(i+j, ((int)(c.elementAt(i+j)))+((int)(a.elementAt(i)))*((int)(b.elementAt(j))));
}
}
return c;
}
static String compose(Vector v){ //Из элементов вектора составляет строку, в которой записан многочлен.
String s = "";
for(int i = v.size() - 1; i >= 2; --i){
if((int)v.elementAt(i) != 0){
String coef = intToStr((int)v.elementAt(i)); //Коэффициент.
coef = eraseTheOne(coef);
s = s + coef;
s = s + "x";
s = s + "^";
String power = intToStr(i); //Степень х.
power = eraseThePlus(power);
s = s + power;
}
}
if((int)v.elementAt(1) != 0){ //Записи слогаемых с первой и нулевой степенями х отличаются.
String coef = intToStr((int)v.elementAt(1));
coef = eraseTheOne(coef);
s = s + coef;
s = s + "x";
}
if((int)v.elementAt(0) != 0){
s = s + intToStr((int)v.elementAt(0));
}
return s;
}
public static void main (String[] args) throws java.lang.Exception
{
Scanner in = new Scanner(System.in);
String a = in.nextLine();
String b = in.nextLine();
String c = new String();
Vector a_decomposed = new Vector(11);
Vector b_decomposed = new Vector(11);
a_decomposed = decompose(a);
b_decomposed = decompose(b);
Vector c_decomposed = multiplicate(a_decomposed, b_decomposed);
c = compose(c_decomposed);
if(c.length() > 0){
c = eraseThePlus(c); //Удаляется первый плюс, если он есть.
System.out.print(c);
}
else System.out.print(0); //Если в ответе получаем константу 0.
}
}