1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include "bits/stdc++.h" // Tomasz Nowak
using namespace std;     // University of Warsaw
using LL = long long;
#define FOR(i, l, r) for(int i = (l); i <= (r); ++i)
#define REP(i, n) FOR(i, 0, (n) - 1)
#define ssize(x) int(x.size())
template<class A, class B> auto& operator<<(ostream &o, pair<A, B> p) {
	return o << '(' << p.first << ", " << p.second << ')';
}
template<class T> auto operator<<(ostream &o, T x) -> decltype(x.end(), o) {
	o << '{'; int i = 0; for(auto e : x) o << (", ")+2*!i++ << e; return o << '}';
}
#ifdef DEBUG
#define debug(x...) cerr << "[" #x "]: ", [](auto... $) {((cerr << $ << "; "), ...); }(x), cerr << '\n'
#else
#define debug(...) {}
#endif

struct Num {
	static constexpr int digits_per_elem = 9, base = int(1e9);
	vector<int> x;

	Num& shorten() {
		while(ssize(x) and x.back() == 0)
			x.pop_back();
		for(int a : x)
			assert(0 <= a and a < base);
		return *this;
	}

	Num(const string& s) {
		for(int i = ssize(s); i > 0; i -= digits_per_elem)
			if(i < digits_per_elem)
				x.emplace_back(stoi(s.substr(0, i)));
			else
				x.emplace_back(stoi(s.substr(i - digits_per_elem, digits_per_elem)));
		shorten();
	}
	Num() {}
	Num(LL s) : Num(to_string(s)) {
		assert(s >= 0);
	}
};

string to_string(const Num& n) {
	stringstream s;
	s << (ssize(n.x) ? n.x.back() : 0);
	for(int i = ssize(n.x) - 2; i >= 0; --i)
		s << setfill('0') << setw(n.digits_per_elem) << n.x[i];
	return s.str();
}

ostream& operator<<(ostream &o, const Num& n) {
	return o << to_string(n).c_str();
}

Num operator+(Num a, const Num& b) {
	int carry = 0;
	for(int i = 0; i < max(ssize(a.x), ssize(b.x)) or carry; ++i) {
		if(i == ssize(a.x))
			a.x.emplace_back(0);
		a.x[i] += carry + (i < ssize(b.x) ? b.x[i] : 0);
		carry = bool(a.x[i] >= a.base);
		if(carry)
			a.x[i] -= a.base;
	}
	return a.shorten();
}

int main() {
	cin.tie(0)->sync_with_stdio(0);

	string sa, sb;
	cin >> sa >> sb;
	Num a(sa), b(sb);
	cout << a + b << '\n';
}