#include <iostream>
#include <string>
using namespace std;

struct complex_number {  //создадим структуру комплексных чисел
	int real;
	int imagine;
};

complex_number convert(string term) {
	complex_number x;
	x.real = 1;  //чтобы не вводить отдельные переменные для знака присвоим начальное значение не 0, а 1
	x.imagine = 1;
	if (term[0] == '-') {  //если нулевой символ минус, то меняем значение действительной части на -1;
		x.real *= -1;
		term.erase(term.begin(), term.begin() + 1);  //удаляем минус на нулевой позиции, если он есть, чтобы было легче найти второй знак
	}
	int index = term.find('+');  //находим индекс знака, если это плюс
	if (index == -1) {
		index = term.find('-');  //находим индекс знака, если это минус
		x.imagine = -1;  //меняем значение мнимой части на -1, если второй знак минус
	}
	x.real *= atoi(&term.substr(0, index)[0]);  //находим действительную часть
	x.imagine *= atoi(&term.substr(index + 1, term.size() - 2)[0]);  //находим мнимую часть
	return x;  //возвращаем полученное комплексное число
}

int main() {
	string term1, term2;
	char sign;
	complex_number convert_term1, convert_term2;
	while (cin >> term1 >> sign >> term2) {
		convert_term1 = convert(term1);  //переводим первую строку в первое слагаемое
		convert_term2 = convert(term2);  //переводим вторую строку во второе слагаемое
		if (sign == '+') { //выполняем действие соответствующее считанному знаку
			convert_term1.real += convert_term2.real;
			convert_term1.imagine += convert_term2.imagine;
		}
		else {
			convert_term1.real -= convert_term2.real;
			convert_term1.imagine -= convert_term2.imagine;
		}  //если мнимая часть отрицательная, то минус между мнимой и действительной частями выведется сам, а если она положительная, то мы должны вывести плюс вручную
		cout << convert_term1.real << (convert_term1.imagine >= 0 ? "+" : "") << convert_term1.imagine << "i" << endl;
	}
}