1 #include <iostream>
2 #include <algorithm>
3 using namespace std;
4
5 typedef long long LL;
6 const int maxn = 2;
7 const LL m = 1000000009;
8
9 struct Matrix
10 {
11 LL v[maxn][maxn];
12 };
13
14 //矩阵间的乘法
15 Matrix matrix_mul(Matrix A, Matrix B){
16 Matrix ans;
17 for (int i = 0; i < maxn; i++){
18 for (int j = 0; j < maxn; j++){
19 ans.v[i][j] = 0;
20 for (int k = 0; k < maxn; k++){
21 ans.v[i][j] += (A.v[i][k] * B.v[k][j]) % m;
22 }
23 ans.v[i][j] %= m;
24 }
25 }
26 return ans;
27 }
28
29 Matrix matrix_pow(Matrix C, LL n){
30 Matrix ans = { 1, 0, 0, 1 };
31 while (n){
32 if (n & 1){
33 ans = matrix_mul(ans, C);
34 }
35 C = matrix_mul(C, C);
36 n >>= 1;
37 }
38 return ans;
39 }
40
41 int main(){
42 ios::sync_with_stdio(false);
43
44 LL n;
45 cin >> n;
46 Matrix e = { 1, 0, 1, 0 };
47 Matrix ee = { 1, 1, 1, 0 };
48 Matrix ans = matrix_pow(ee, n - 1);
49 ans = matrix_mul(e, ans);
50 cout << ans.v[0][0] << endl;
51 //system("pause");
52 return 0;
53 }