#include <iostream>
#include <string.h>
using namespace std;
class BigInt {
private:
static const int kMaxN = 1e5 + 1;
int Len = 0, Num[kMaxN] = {};
bool Neg = 0;
public:
BigInt() {
Len = 0, Neg = 0;
fill(Num, Num + kMaxN, 0);
}
BigInt(string WUYIXUAN_) {
if (WUYIXUAN_[0] == '-') {
WUYIXUAN_ = WUYIXUAN_.substr(1);
Neg = 1;
}
Len = WUYIXUAN_.size();
for (int i = 1, j = Len - 1; i <= Len; i++, j--) {
Num[i] = WUYIXUAN_[j] - '0';
}
}
BigInt(int WUYIXUAN_) {
string s = to_string(WUYIXUAN_);
if (s[0] == '-') {
s = s.substr(1);
Neg = 1;
}
Len = s.size();
for (int i = 1, j = Len - 1; i <= Len; i++, j--) {
Num[i] = s[j] - '0';
}
}
BigInt(long long WUYIXUAN_) {
string s = to_string(WUYIXUAN_);
if (s[0] == '-') {
s = s.substr(1);
Neg = 1;
}
Len = s.size();
for (int i = 1, j = Len - 1; i <= Len; i++, j--) {
Num[i] = s[j] - '0';
}
}
BigInt(const char* s) {
Len = strlen(s);
for (int i = 1, j = Len - 1; i <= Len; i++, j--) {
Num[i] = s[j] - '0';
}
}
int Size() {
while (!Num[Len]) {
Len--;
}
Len += !Len;
return Len;
}
BigInt SubInt(int start, int len) {
len = len == 0 ? Len - len + 1 : len;
BigInt ans;
int end = start + len;
ans.Len = end - start + 1;
for (int i = 1, j = start; i <= ans.Len; i++, j++) {
ans.Num[i] = this -> Num[j];
}
end = ans.Size();
return ans;
}
bool CanSub(BigInt WUYIXUAN_, int pos) {
BigInt o = *this;
if (o.Len < pos + WUYIXUAN_.Len) {
return 0;
}
return this -> SubInt(pos, WUYIXUAN_.Len) >= WUYIXUAN_;
}
friend BigInt operator+(BigInt WUYIXUAN_, BigInt WYX) {
if (WUYIXUAN_.Neg && !WYX.Neg) {
WUYIXUAN_.Neg = 0;
return WYX - WUYIXUAN_;
} else if (!WUYIXUAN_.Neg && WYX.Neg) {
WYX.Neg = 0;
return WUYIXUAN_ - WYX;
}
BigInt ans;
ans.Len = max(WUYIXUAN_.Len, WYX.Len);
for (int i = 1; i <= ans.Len; i++) {
ans.Num[i] = WUYIXUAN_.Num[i] + WYX.Num[i];
}
for (int i = 1; i <= ans.Len; i++) {
ans.Num[i + 1] += ans.Num[i] / 10, ans.Num[i] %= 10;
}
if (ans.Num[ans.Len + 1]) {
ans.Len++;
}
return ans;
}
BigInt operator+=(BigInt WUYIXUAN_) {
*this = *this + WUYIXUAN_;
return *this;
}
friend bool operator<(BigInt WUYIXUAN_, BigInt WYX) {
if (WUYIXUAN_.Neg ^ WYX.Neg) {
return WUYIXUAN_.Neg != 1;
}
if (WUYIXUAN_.Len != WYX.Len) {
return WUYIXUAN_.Len < WYX.Len;
}
for (int i = 1; i <= WUYIXUAN_.Len; i++) {
if (WUYIXUAN_.Num[i] != WYX.Num[i]) {
return WUYIXUAN_.Num[i] < WYX.Num[i];
}
}
return 0;
}
friend bool operator==(BigInt WUYIXUAN_, BigInt WYX) {
if (WUYIXUAN_.Len != WYX.Len) {
return 0;
}
for (int i = 1; i <= WUYIXUAN_.Len; i++) {
if (WUYIXUAN_.Num[i] != WYX.Num[i]) {
return 0;
}
}
return 1;
}
friend bool operator>(BigInt WUYIXUAN_, BigInt WYX) {
return !(WUYIXUAN_ < WYX);
}
friend bool operator<=(BigInt WUYIXUAN_, BigInt WYX) {
return WUYIXUAN_ < WYX || WUYIXUAN_ == WYX;
}
friend bool operator>=(BigInt WUYIXUAN_, BigInt WYX) {
return WUYIXUAN_ > WYX || WUYIXUAN_ == WYX;
}
friend ostream &operator<<(ostream &cout, BigInt num) {
if (num.Neg) {
cout.put('-');
}
for (int i = num.Len; i >= 1; i--) {
cout.put(num.Num[i] + '0');
}
return cout;
}
friend BigInt operator-(BigInt WUYIXUAN_, BigInt WYX) {
if (WUYIXUAN_.Neg && !WYX.Neg) {
WUYIXUAN_.Neg = 0;
BigInt ret = WUYIXUAN_ + WYX;
ret.Neg = 1;
return ret;
}
if (WYX.Neg) {
WYX.Neg = 0;
return WUYIXUAN_ + WYX;
} else if (WUYIXUAN_.Neg) {
WUYIXUAN_.Neg = 0;
return WYX - WUYIXUAN_;
}
if (WUYIXUAN_ < WYX) {
BigInt ret = WYX - WUYIXUAN_;
ret.Neg = 1;
return ret;
}
BigInt ans;
ans.Len = WUYIXUAN_.Len;
for (int i = 1; i <= ans.Len; i++) {
ans.Num[i] = WUYIXUAN_.Num[i] - WYX.Num[i];
}
for (int i = 1; i <= ans.Len; i++) {
if (ans.Num[i] < 0) {
ans.Num[i + 1]--, ans.Num[i] += 10;
}
}
while (ans.Len && !ans.Num[ans.Len]) {
ans.Len--;
}
if (!ans.Len) {
ans.Len++;
}
return ans;
}
BigInt operator-=(BigInt WUYIXUAN_) {
*this = *this - WUYIXUAN_;
return *this;
}
friend BigInt operator*(BigInt WUYIXUAN_, BigInt WYX) {
BigInt ans;
ans.Len = WUYIXUAN_.Len + WYX.Len;
for (int i = 1; i <= WUYIXUAN_.Len; i++) {
for (int j = 1; j <= WYX.Len; j++) {
ans.Num[i + j - 1] += WUYIXUAN_.Num[i] * WYX.Num[j];
}
}
for (int i = 1; i <= ans.Len; i++) {
ans.Num[i + 1] += ans.Num[i] / 10, ans.Num[i] %= 10;
}
while (!ans.Num[ans.Len]) {
ans.Len--;
}
ans.Len += !ans.Len;
ans.Neg = WUYIXUAN_.Neg ^ WYX.Neg;
return ans;
}
BigInt operator*=(BigInt WUYIXUAN_) {
*this = *this * WUYIXUAN_;
return *this;
}
BigInt operator<<(int WUYIXUAN_) {
BigInt o = *this;
for (int i = 0; i < WUYIXUAN_; i++) {
o *= 2;
}
return o;
}
BigInt operator<<=(int WUYIXUAN_) {
*this = *this << WUYIXUAN_;
return *this;
}
BigInt &operator++() {
*this += 1;
return *this;
}
BigInt operator++(int) {
BigInt temp = *this;
*this += 1;
return temp;
}
BigInt &operator--() {
*this -= 1;
return *this;
}
BigInt operator--(int) {
BigInt temp = *this;
*this -= 1;
return temp;
}
friend BigInt operator/(BigInt WUYIXUAN_, BigInt WYX) {
BigInt ans;
ans.Neg = WUYIXUAN_.Neg ^ WYX.Neg;
if (WYX == 0) {
cerr << "Segment Fault : Division 0";
exit(-1);
}
if (WUYIXUAN_ < WYX) {
return 0;
}
if (WUYIXUAN_ == WYX) {
return 1;
}
for (int i = WUYIXUAN_.Len - WYX.Len + 1; i >= 1; i--) {
while (WUYIXUAN_.CanSub(WYX, i)) {
for (int j = 1; j <= WYX.Len; j++) {
WUYIXUAN_.Num[i + j - 1] -= WYX.Num[j];
if (WUYIXUAN_.Num[i + j - 1] < 0) {
WUYIXUAN_.Num[i + j]--;
WUYIXUAN_.Num[i + j - 1] += 10;
}
}
ans.Num[i]++, ans.Len = max(ans.Len, i);
}
}
return ans;
}
BigInt operator/=(BigInt WUYIXUAN_) {
*this = *this / WUYIXUAN_;
return *this;
}
friend BigInt operator%(BigInt WUYIXUAN_, BigInt WYX) {
return WUYIXUAN_ - WYX * (WUYIXUAN_ / WYX);
}
BigInt operator%=(BigInt WUYIXUAN_) {
*this = *this % WUYIXUAN_;
return *this;
}
BigInt operator>>(int WUYIXUAN_) {
BigInt o = *this;
for (int i = 0; i < WUYIXUAN_; i++) {
o /= 2;
}
return o;
}
BigInt operator>>=(int WUYIXUAN_) {
*this = *this >> WUYIXUAN_;
return *this;
}
friend istream &operator>>(istream &cin, BigInt &num) {
char c = cin.get();
while (!isdigit(c) && c != '-') {
c = cin.get();
}
if (isdigit(c)) {
num = c - '0';
} else {
num.Neg = 1;
}
c = cin.get();
while (isdigit(c)) {
num = num * 10 + (c - '0');
c = cin.get();
}
return cin;
}
}A, B;
int main() {
cin >> A >> B;
cout << A + B << '\n' << A - B << '\n' << A * B << '\n' << A / B << '\n' << A % B << '\n';
return 0;
}
shit山代码