Addition of Big Integers

Given two integers $A$ and $B$, compute the sum, $A + B$.

Input

Two integers $A$ and $B$ separated by a space character are given in a line.

Output

Print the sum in a line.

Constraints

* $-1 \times 10^{100000} \leq A, B \leq 10^{100000}$



Sample Input 1


5 8


Sample Output 1


13


Sample Input 2


100 25


Sample Output 2


125


Sample Input 3


-1 1


Sample Output 3


0


Sample Input 4


12 -3


Sample Output 4


9






Example

Input

5 8


Output

13
#include <bits/stdc++.h>
using namespace std;
class bigint {
 private:
  static const long long BASE = 10000000000, LEN = 10;
  bool negative;
  vector<long long> v;

 public:
  bigint(int x = 0);
  bigint(const string s);
  void add(long long x, long long p, bool sub);
  void normalize();
  const bigint operator+(const bigint &x) const;
  friend ostream &operator<<(ostream &os, const bigint &x);
};
bigint::bigint(int x) {
  if (x < 0) {
    negative = true;
    v.push_back(-x);
  } else {
    negative = false;
    v.push_back(x);
  }
  normalize();
}
bigint::bigint(const string s) {
  string t;
  negative = false;
  for (auto i = (s.rbegin()); i != (s.rend()); i++) {
    if (*i == '-') {
      negative = true;
      continue;
    }
    t.insert(t.begin(), *i);
    if (t.length() == LEN) {
      v.push_back(stoll(t));
      t.clear();
    }
  }
  if (t.length() != 0) {
    v.push_back(stoi(t));
  }
}
void bigint::normalize() {
  for (auto i = (v.rbegin()); i != (v.rend()); i++) {
    if (*i == 0) {
      v.erase(--(i.base()));
    } else {
      break;
    }
  }
  if (v.size() == 0) {
    negative = false;
    v.push_back(0);
  }
  long long t = 0;
  for (auto i = (v.rbegin()); i != (v.rend()); i++) {
    *i += t;
    if (*i < 0) {
      t = *i / BASE - 1;
    } else {
      t = *i / BASE;
    }
    *i -= t * BASE;
  }
  if (t != 0) {
    v.push_back(t);
  }
  auto i = v.rbegin();
  if (*i < 0) {
    negative = !negative;
    *i = -(*i);
    i++;
    for (; i != v.rend(); i++) {
      *i = (BASE - *i) % BASE;
    }
  }
  for (auto i = (v.rbegin()); i != (v.rend()); i++) {
    if (*i == 0) {
      v.erase(--(i.base()));
    } else {
      break;
    }
  }
  if (v.size() == 0) {
    negative = false;
    v.push_back(0);
  }
}
void bigint::add(long long x, long long p, bool sub) {
  while (v.size() <= p) {
    v.push_back(0);
  }
  if (negative == sub) {
    v.at(p) += x;
  } else {
    v.at(p) -= x;
  }
}
const bigint bigint::operator+(const bigint &x) const {
  bigint r = x;
  for (int i = 0; i < (v.size()); i++) {
    r.add(v.at(i), i, negative);
  }
  r.normalize();
  return r;
}
ostream &operator<<(ostream &os, const bigint &x) {
  if (x.negative) {
    cout << "-";
  }
  for (auto i = (x.v.rbegin()); i != (x.v.rend()); i++) {
    if (i != x.v.rbegin()) {
      cout << setfill('0') << setw(x.LEN) << *i;
    } else {
      cout << *i;
    }
  }
  return os;
}
int main() {
  string s;
  cin >> s;
  bigint A(s);
  cin >> s;
  bigint B(s);
  cout << A + B << endl;
  return 0;
}
