#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <algorithm>
#include <iterator>
using namespace std;

string trans(vector<int>output); //vector转string
void symbol(string a, string b);//根据负号情况将‘+’‘-’转换为绝对值运算
string addition(string a, string b);//绝对值‘+’
string subtraction(string a, string b);//绝对值‘-’
string multiplication(string a, string b);//绝对值‘*’
void print(string s);//去除多余‘0’并打印

string trans(vector<int>output)
{
    stringstream ss;
    string s;
    copy(output.rbegin(), output.rend(), ostream_iterator<int>(ss, ""));
    s = ss.str();
    return s;
}

void symbol(string a1, string b1)
{
    bool asymbol = false;//ture表示a是负数
    bool bsymbol = false;
    bool match = true; //true表示|a|>|b|
    string a = a1, b = b1;
    if (a[0] == '-')
    {
        asymbol = true;
        a = a1.substr(1, a1.length());
    }
    if (b[0] == '-')
    {
        bsymbol = true;
        b = b1.substr(1, b1.length());
    }
    if (a.length() < b.length())
    {
        match = false;
    }
    else if (a.length() == b.length())
    {
        if (a.compare(b) < 0)
        {
            match = false;
        }
    }
    reverse(a.begin(), a.end());
    reverse(b.begin(), b.end());
    if (asymbol == false && bsymbol == false)
    {
        print(addition(a, b));
        if (match == true) 
        {
            print(subtraction(a, b));
        }
        else
        {
            cout<<'-';
            print(subtraction(b, a));
        }
        print(multiplication(a, b));
    }
    else if (asymbol == false && bsymbol == true)
    {
        if (match == true)
        {
            print(subtraction(a, b));
        }
        else 
        {
            cout << '-';
            print(subtraction(b, a));
        }
        print(addition(a, b));
        cout << '-';
        print(multiplication(a, b));
    }
    else if (asymbol == true && bsymbol == false)
    {
        if (match == true)
        {
            cout << '-';
            print(subtraction(a, b));
        }
        else 
        {
            print(subtraction(b, a));
        }
        cout << '-';
        print(addition(a, b));
        cout << '-';
        print(multiplication(a, b));
    }
    else 
    {
        cout << '-';
        print(addition(a,b));
        if (match == 0)
        {
            cout << '-';
            print(subtraction(a, b));
        }
        else
        {
            print(subtraction(b, a));
        }
        print(multiplication(a, b));
    }
}
 
string addition(string a, string b)
{
    int m = 0; //进十位
    vector<int>output(max(a.length(), b.length()) + 1);
    for (int i = 0; i < b.length(); i++)
    {
        output[i] = (a[i] - '0') + (b[i] - '0');
    }
    if (a.length() > b.length())
    {
        for(int i=b.length();i<a.length();i++)
        {
            output[i]=a[i]-'0';
        }
    }
    if (b.length() > a.length())
    {
        for (int i = a.length(); i < b.length(); i++)
        {
            output[i] = b[i]-'0';
        }
    }
    for (int i = 0; i < max(a.length(), b.length()); i++)
    {
        m = output[i] / 10;
        output[i] %= 10;
        if (m != 0)
        {
            output[i + 1] += m;
        }
    }
    return trans(output);
}
string subtraction(string a,string b)
{
    int m = 0; //进十位
    vector<int>output(max(a.length(), b.length()) + 1);
    for (int i = 0; i < b.length(); i++)
    {
        output[i] = a[i] - b[i];
    }
    for (int i = b.length(); i < a.length(); ++i)
    {
        output[i] = a[i] - '0';
    }
    for (int i = 0; i < a.length()-1; i++)
    {
        if (output[i] < 0)
        {
            m = -1;
            output[i] += 10;
        }
        else
        {
            m = 0;
        }
        if (m != 0)
        {
            output[i + 1] += m;
        }
    }
    return trans(output);
}
string multiplication(string a, string b)
{
    int m = 0; //进十位
    int n = 0; //进百位
    int flag = 0;//负号计数
    if (a[a.length() - 1] == '-')
    {
        flag++;
        a[a.length() - 1] = '0';
    }
    if (b[b.length() - 1] == '-')
    {
        flag++;
        b[b.length() - 1] = '0';
    }
    vector<int>output(a.length() + b.length());
    for (int i = 0; i < a.length(); ++i)
    {
        for (int j = 0; j < b.length(); ++j)
        {
            output[i + j] += (a[i] - '0') * (b[j] - '0');
        }
    }
    for (int i = 0; i < a.length() + b.length(); i++)
    {
        if (output[i] != 0)
        {
            m = (output[i] / 10) % 10;
            n = output[i] / 100;
            output[i] %= 10;
            if (m != 0)
            {
                output[i + 1] += m;
            }
            if (n != 0)
            {
                output[i + 2] += n;
            }
        }
    }
    string s = trans(output);
    if (flag % 2 != 0)
    {
        s[1] = '-';
    }
    return s;
}
void print(string s)
{
    int i = 0;
    while (s[i] == '0')
    {
        i++;
    }
    while (i < s.length())
    {
        cout << s[i];
        i++;
    }
    cout << endl;
}

int main() {
    string a, b;
    cin >> a >> b;
    symbol(a, b);
    return 0;
}