#include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long ll; typedef vector vec; typedef vector matrix; matrix identity(int n) { matrix A(n, vec(n)); for (int i = 0; i < n; ++i) A[i][i] = 1; return A; } matrix mul(const matrix &A, const matrix &B) { matrix C(A.size(), vec(B[0].size())); for (int i = 0; i < C.size(); ++i) for (int j = 0; j < C[i].size(); ++j) for (int k = 0; k < A[i].size(); ++k) C[i][j] += A[i][k] * B[k][j]; return C; } vec mul(const matrix &A, const vec &x) { vec y(A.size()); for (int i = 0; i < A.size(); ++i) for (int j = 0; j < A[0].size(); ++j) y[i] += A[i][j] * x[j]; return y; } matrix pow(const matrix &A, int e) { return e == 0 ? identity((int)A.size()) : e % 2 == 0 ? pow(mul(A, A), e/2) : mul(A, pow(A, e-1)); } int main(){ int N; cin >> N; matrix A(2, vec(2)); A[0][0] = 0; A[0][1] = 1; A[1][0] = 1; A[1][1] = 1; vec init(2); init[0] = init[1] = 1; vec res = mul(pow(A, N), init); cout << res[0] << endl; return 0; }