1 #define N 3
2 #define ll long long
3 #include<iostream>
4 using namespace std;
5 #include<cstdio>
6 #include<cstring>
7 struct Jz{
8 int cal,line;
9 long long jz[N][N];
10 };
11 long long q=1000000007;
12 int read()
13 {
14 char s;
15 int ans=0,ff=1;
16 s=getchar();
17 while(s<‘0‘||s>‘9‘)
18 {
19 if(s==‘-‘) ff=-1;
20 s=getchar();
21 }
22 while(‘0‘<=s&&s<=‘9‘)
23 {
24 ans=ans*10+s-‘0‘;
25 s=getchar();
26 }
27 return ans*ff;
28 }
29 long long quick_mod(ll a,ll b)/*慢乘法防止溢出*/
30 {
31 a%=q;b%=q;
32 ll ans=0;
33 while(b)
34 {
35 if(b&1)
36 {
37 ans+=a;
38 ans%=q;//
39 }
40 b>>=1;
41 a<<=1;
42 a%=q;
43 }
44 return ans;
45 }
46 Jz martax(Jz x,Jz y)
47 {
48 Jz ans;
49 ans.line=x.line;
50 ans.cal=y.cal;
51 for(int i=1;i<=ans.line;++i)
52 for(int j=1;j<=ans.cal;++j)
53 {
54 ans.jz[i][j]=0;
55 for(int k=1;k<=x.cal;++k)
56 ans.jz[i][j]=(ans.jz[i][j]+quick_mod(x.jz[i][k],y.jz[k][j]))%q;
57 }
58 return ans;
59 }
60 long long Fast_martax(long long n)
61 {
62 if(n==1||n==2) return 1;
63 n-=2;
64 Jz ans,a;
65 a.cal=a.line=2;
66 a.jz[1][1]=0;a.jz[1][2]=1;
67 a.jz[2][1]=1;a.jz[2][2]=1;
68 ans.line=2;ans.cal=1;
69 ans.jz[1][1]=1;ans.jz[2][1]=1;
70 while(n)
71 {
72 if(n&1)
73 {
74 ans=martax(a,ans);
75 }
76 n>>=1;
77 a=martax(a,a);
78 }
79 return ans.jz[2][1]%q;
80 }
81 int main()
82 {
83 long long n;
84 while(scanf("%lld",&n)==1)
85 {
86 printf("%lld\n",Fast_martax(n));
87 }
88 return 0;
89 }