#include <iostream>
#include <string>
#include <algorithm>
#include <vector>

using namespace std;

// 去除前导零
string removeLeadingZeros(string s) {
    size_t firstNonZero = s.find_first_not_of('0');
    if (firstNonZero == string::npos) return "0";
    return s.substr(firstNonZero);
}

// 比较两个字符串数值大小
bool isGreaterOrEqual(string a, string b) {
    if (a.size() != b.size()) return a.size() > b.size();
    for (int i = 0; i < a.size(); i++) {
        if (a[i] != b[i]) return a[i] > b[i];
    }
    return true;
}

// 高精度加法
string add(string a, string b) {
    reverse(a.begin(), a.end());
    reverse(b.begin(), b.end());
    string res;
    int carry = 0;
    for (int i = 0; i < max(a.size(), b.size()) || carry; i++) {
        int digitA = i < a.size() ? a[i] - '0' : 0;
        int digitB = i < b.size() ? b[i] - '0' : 0;
        int sum = digitA + digitB + carry;
        res.push_back(sum % 10 + '0');
        carry = sum / 10;
    }
    reverse(res.begin(), res.end());
    return removeLeadingZeros(res);
}

// 高精度减法
string subtract(string a, string b) {
    bool negative = !isGreaterOrEqual(a, b);
    if (negative) swap(a, b);
    reverse(a.begin(), a.end());
    reverse(b.begin(), b.end());
    string res;
    int carry = 0;
    for (int i = 0; i < a.size(); i++) {
        int digitA = a[i] - '0' - carry;
        carry = 0;
        int digitB = i < b.size() ? b[i] - '0' : 0;
        if (digitA < digitB) {
            digitA += 10;
            carry = 1;
        }
        res.push_back(digitA - digitB + '0');
    }
    reverse(res.begin(), res.end());
    res = removeLeadingZeros(res);
    return negative ? "-" + res : res;
}

// 高精度乘法
string multiply(string a, string b) {
    if (a == "0" || b == "0") return "0";
    reverse(a.begin(), a.end());
    reverse(b.begin(), b.end());
    vector<int> product(a.size() + b.size(), 0);
    for (int i = 0; i < a.size(); i++) {
        for (int j = 0; j < b.size(); j++) {
            product[i + j] += (a[i] - '0') * (b[j] - '0');
        }
    }
    // 处理进位
    int carry = 0;
    for (int k = 0; k < product.size(); k++) {
        int total = product[k] + carry;
        product[k] = total % 10;
        carry = total / 10;
    }
    // 转换为字符串
    string res;
    bool leadingZero = true;
    for (int k = product.size() - 1; k >= 0; k--) {
        if (product[k] == 0 && leadingZero) continue;
        leadingZero = false;
        res.push_back(product[k] + '0');
    }
    return res.empty() ? "0" : res;
}

int main() {
    // 读取输入并处理空格
    string num1, num2;
    getline(cin, num1);
    getline(cin, num2);
    num1.erase(remove(num1.begin(), num1.end(), ' '), num1.end());
    num2.erase(remove(num2.begin(), num2.end(), ' '), num2.end());

    // 处理前导零
    num1 = removeLeadingZeros(num1);
    num2 = removeLeadingZeros(num2);

    // 计算并输出结果
    cout << add(num1, num2) << endl;
    cout << subtract(num1, num2) << endl;
    cout << multiply(num1, num2) << endl;

    return 0;
}