classBigInt { public: int len_; int arr_[2500]; BigInt(string s = "") { memset(arr_, 0, sizeof(arr_)); len_ = s.length(); for (int i = 1; i <= len_; ++i) arr_[i] += s[len_ - i] - '0'; } int &operator[](int x) { return arr_[x]; } voidflatten(int x) { len_ = x; for (int i = 1; i <= x; ++i) { if (arr_[i] >= 10) { arr_[i + 1] += arr_[i] / 10; arr_[i] %= 10; } } while (!arr_[len_]) --len_; } voidprint() { for (int i = max(1, len_); i >= 1; --i) cout << arr_[i]; } };
BigInt operator+(BigInt a, BigInt b) { BigInt c; int len = max(a.len_, b.len_); for (int i = 1; i <= len; ++i) { c[i] += a[i] + b[i]; } c.flatten(len + 1); return c; }
intmain() {
int n; cin >> n; BigInt a("1"), b("2"); if (n == 1) a.print(); elseif (n == 2) b.print(); else { for (int i = 3; i <= n; ++i) { BigInt c = a + b; a = b; b = c; } b.print(); } return0; }