Description:
Accept:
#include<bits/stdc++.h>
using namespace std;
typedef long long int LL;
const LL mod = 1000000000 + 7;
LL n;
struct Node {
LL a1, a2, a3, a4;
Node() { a1 = 0, a2 = 0, a3 = 0, a4 = 0; }
Node(LL x, LL y, LL z, LL w)
{a1 = x, a2 = y, a3 = z, a4 = w;}
};
Node g(Node a, Node b)
{
Node r;
r.a1 = (a.a1 * b.a1%mod + a.a2 * b.a3 % mod) % mod;
r.a2 = (a.a1 * b.a2 % mod + a.a2 * b.a4 % mod) % mod;
r.a3 = (a.a3 * b.a1 % mod + a.a4 * b.a3 % mod) % mod;
r.a4 = (a.a3 * b.a2 % mod + a.a4 * b.a4 % mod) % mod;
return r;
}
Node f1(Node x, LL y)
{
if (y == 1)
return x;
if (y % 2 == 0)
{
Node res = f1(x, y / 2);
res = g(res, res);
return res;
}
else
{
Node res = f1(x, y / 2);
Node r = g(res, res);
return g(r, x);
}
}
int main()
{
Node p(1, 1, 1, 0);
while (cin >> n)
{
Node tmp(1, 1, 1, 0);
Node res = f1(tmp, n);
cout << res.a2 % mod << endl;
}
return 0;
}