1 #include <bits/stdc++.h> 2 #define _xx ios_base::sync_with_stdio(0);cin.tie(0); 3 using namespace std; 4 typedef long long ll; 5 const ll p = 1000000009ll; 6 struct node 7 { 8 ll data[2][2]; 9 }; 10 node operator * (const node& t1, const node& t2) 11 { 12 node ans; 13 for(int i = 0; i < 2; i++) 14 { 15 for(int j = 0; j < 2; j++) 16 { 17 ans.data[i][j] = 0; 18 for(int k = 0; k < 2; k++) 19 ans.data[i][j] += t1.data[i][k]*t2.data[k][j]; 20 ans.data[i][j] %= p; 21 } 22 } 23 return ans; 24 } 25 node operator % (const node& t1, const ll& p) 26 { 27 node ans; 28 for(int i = 0; i < 2; i++) 29 for(int j = 0; j < 2; j++) 30 ans.data[i][j] = t1.data[i][j]%p; 31 return ans; 32 } 33 node fastm(node a, ll b) 34 { 35 node ans; 36 for(int i = 0; i < 2; i++) 37 for(int j = 0; j < 2; j++) 38 if(i == j) ans.data[i][j] = 1; 39 else ans.data[i][j] = 0; 40 while(b) 41 { 42 if(b%2 == 1) 43 { 44 ans = ans*a; 45 ans = ans%p; 46 } 47 a = a*a; 48 a = a%p; 49 b /= 2; 50 } 51 return ans; 52 } 53 int main() 54 {_xx 55 ll n; 56 cin >> n; 57 if(n == 0) cout << 0 << endl; 58 else if(n == 1) cout << 1 << endl; 59 else 60 { 61 node a, b; 62 for(int i = 0; i < 2; i++) 63 for(int j = 0; j < 2; j++) 64 b.data[i][j] = a.data[i][j] = 0; 65 a.data[1][0] = a.data[2][0] = 1; 66 b.data[0][1] = b.data[1][0] = b.data[1][1] = 1; 67 b = fastm(b, n - 1); 68 a = b*a; 69 cout << a.data[1][0]%p << endl; 70 } 71 return 0; 72 }