#include <bits/stdc++.h>
#define MAXN 3
const int mod = 1000000007;
using namespace std;
long long n, L = 2;
struct Matrix {
long long M[MAXN][MAXN];
void clear() {
memset(M, 0, sizeof(M));
}
Matrix friend operator *(const Matrix &A, const Matrix &B) {
Matrix Ans;
Ans.clear();
for (int i = 0; i < L; i++)
for (int j = 0; j < L; j++)
for (int k = 0; k < L; k++)
Ans.M[i][j] = (Ans.M[i][j] + A.M[i][k] * B.M[k][j]) % mod;
return Ans;
}
} A;
Matrix expow(Matrix T, long long P) {
Matrix Ans;
Ans.M[0][0] = Ans.M[1][1] = 1;
while (P) {
if (P & 1)
Ans = Ans * T;
T = T * T;
P >>= 1;
}
return Ans;
}
int main() {
cin >> n;
if (n <= 2) {
cout << 1; return 0;
}
A.M[0][0] = 1; A.M[0][1] = 1;
A.M[1][0] = 1; A.M[1][1] = 0;
A = expow(A, n - 2);
cout << (A.M[0][0] + A.M[0][1]) % mod;
return 0;
}
评测记录