#include<bits/stdc++.h>
//#include<iomanip>
#define int long long
#define fore(i, a, b) for( int i = (a); i <= (b); ++ i)
#define repe(i, a, b) for( int i = (a); i >= (b); -- i)
using namespace std;
const int BASE = 1e8;
struct Biger{vector<int> val; bool neg;void trim() {while(val.size() > 1 && val.back() == 0) val.pop_back();if(val.size() == 1 && val[0] == 0) neg = false;}int cmp_abs(const Biger& x) const {if(val.size() != x.val.size()) return val.size() > x.val.size() ? 1 : -1;repe(i, val.size()-1, 0) if(val[i] != x.val[i]) return val[i] > x.val[i] ? 1 : -1;return 0;}Biger add(const Biger& x) const {Biger res; res.val.clear();int carry = 0, i = 0;while(i < val.size() || i < x.val.size() || carry) {if(i < val.size()) carry += val[i];if(i < x.val.size()) carry += x.val[i];res.val.push_back(carry % BASE); carry /= BASE; i ++;} res.trim(); return res;}Biger sub(const Biger& x) const {Biger res; res.val.clear();int borrow = 0, i = 0;while(i < val.size()) {int num = val[i] - borrow;if(i < x.val.size()) num -= x.val[i];borrow = 0; if(num < 0) num += BASE, borrow = 1;res.val.push_back(num); i ++;}res.trim(); return res;}Biger mul(const Biger& x) const {Biger res;res.val.resize(val.size() + x.val.size(), 0);for(int i = 0;i < val.size(); i ++) {int carry = 0;for(int j = 0; j < x.val.size() || carry; j ++) {int t = res.val[i + j] + val[i] * (j < x.val.size() ? x.val[j] : 0) + carry;carry = t / BASE;res.val[i + j] = t % BASE;}} res.trim(); return res;}Biger div2() const {Biger res;res.val.resize(val.size());int rem = 0;for(int i = val.size() - 1; i >= 0; i --) {int x = val[i] + rem * BASE;res.val[i] = x / 2;rem = x % 2;} res.trim();res.neg = neg;return res;}Biger div(const Biger& x) const {if(x.cmp_abs(Biger{}) == 0) {return Biger{};}if(cmp_abs(x) < 0) return Biger{};Biger l{}, r{*this}, ans{};while(l.cmp_abs(r) <= 0) {Biger mid = (l.add(r)).div2();Biger t = mid.mul(x);if(t.cmp_abs(*this) <= 0) {ans = mid;l = mid.add(Biger{}.fromll(1));} else {r = mid.sub(Biger{}.fromll(1));}} return ans;}Biger mod(const Biger& x) const{Biger d = div(x);return sub(d.mul(x));}Biger& fromll(int num) {neg = num < 0; num = llabs(num); val.clear();if(num == 0) {val.push_back(0);return *this;} while(num) {val.push_back(num % BASE);num /= BASE;}return *this;}Biger& fromstr(const string& s) {neg = false; val.clear(); int st = 0;if(!s.empty() && s[0] == '-') { neg = true; st = 1; }for(int i = s.size() - 1; i >= st; i -= 8) {int num = 0, start = max(st, i - 7);for(int j = start; j <= i; j ++) num = num * 10 + (s[j] - '0');val.push_back(num);} trim(); return *this;}Biger() : neg(false) { val.push_back(0); }Biger(const Biger& x) = default;Biger operator-() const {Biger res = *this;if(res.cmp_abs(Biger{}) != 0) res.neg = !res.neg;return res;}bool operator==(const Biger& x) const { return neg == x.neg && val == x.val; }bool operator!=(const Biger& x) const { return !(*this == x); }bool operator<(const Biger& x) const {if(neg != x.neg) return neg;if(neg) return cmp_abs(x) > 0;return cmp_abs(x) < 0;}bool operator>(const Biger& x) const{ return x < *this; }bool operator<=(const Biger& x) const { return !(*this > x); }bool operator>=(const Biger& x) const { return !(*this < x); }Biger& operator+=(const Biger& x) {if(neg == x.neg) {*this = add(x);} else {int c = cmp_abs(x);if(c == 0) *this = Biger{};else if(c > 0) *this = sub(x), this->neg = neg;else *this = x.sub(*this), this->neg = x.neg;} trim(); return *this;}Biger& operator-=(const Biger& x) { return *this += (-x); }Biger& operator*=(const Biger& x) { *this = mul(x); neg ^= x.neg; trim(); return *this; } Biger& operator/=(const Biger& x) { *this = div(x); neg ^= x.neg; trim(); return *this; }Biger& operator%=(const Biger& x) { *this = mod(x); trim(); return *this; }Biger operator+(const Biger& x) const { Biger r = *this; r += x; return r; }Biger operator-(const Biger& x) const { Biger r = *this; r -= x; return r; }Biger operator*(const Biger& x) const { Biger r = *this; r *= x; return r; }Biger operator/(const Biger& x) const { Biger r = *this; r /= x; return r; }Biger operator%(const Biger& x) const { Biger r = *this; r %= x; return r; }
};ostream& operator<<(ostream& os, const Biger& x) {if (x.neg) os << '-';os << x.val.back();for (int i = (int)x.val.size()-2; i >= 0; --i) {os << setw(8) << setfill('0') << x.val[i];}os << setfill(' ');return os;
}
std::istream& operator>>(std::istream& is, Biger& x) {std::string s; is >> s; x.fromstr(s);return is;
}
signed main()
{ios::sync_with_stdio(false);
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);Biger a, b;cin >> a >> b;cout << a + b << '\n' << a - b << '\n' << '\n' << a * b << '\n' << a / b << '\n';return 0;
}