if you have chosen a question, start your blog career ^
# Include <stdio. h> typedef _ int64 ll;/* g (n) % mod1 = g (N % mod2) % mod1; // mod2 is the cyclic section, as shown below g (N) % mod2 = g (N % mod3) % mod2; G (N) % mod1 = g (G (N) % mod2) % mod1 = g (G (n) % mod3) % mod2) % mod1; n = g (n) % mod3; n = g (n) % mod2; N = g (n) % mod1; */const ll mod1 = 1000000007; const ll mod2 = 222222224; const ll mod3 = 183120; const ll base [2] [2] = {3, 1, 1, 0}; ll ans [2] [2], TMP [2] [2]; /* int main () // calculates the cyclic section {Ll N0 = 0, n1 = 1, TT; ll mod = mod2; // change this value for (INT I = 1; I ++) {TT = (3 * N1 + N0) % MOD; N0 = N1; n1 = tt; If (N0 = 0 & n1 = 1) {printf ("% d \ n", I); break ;}}*/inline void mult (LL pro [] [2], ll mul1 [] [2], ll mul2 [] [2], ll mod) // ans = mul1 * mul2; {ll m1 [2] [2], m2 [2] [2]; for (INT I = 0; I <2; I ++) for (Int J = 0; j <2; j ++) m1 [I] [J] = mul1 [I] [J], m2 [I] [J] = mul2 [I] [J]; for (INT I = 0; I <2; I ++) for (Int J = 0; j <2; j ++) {pro [I] [J] = 0; For (int K = 0; k <2; k ++) Pro [I] [J] + = m1 [I] [k] * m2 [k] [J]; pro [I] [J] % = MOD;} inline void fastpow (LL N, ll mod) // base ^ N of the matrix {ans [0] [0] = 1, ANS [0] [1] = 0; ans [1] [0] = 0, ans [1] [1] = 1; // unit matrix for (INT I = 0; I <2; I ++) for (Int J = 0; j <2; j ++) TMP [I] [J] = base [I] [J]; while (n) {If (N & 1) {mult (ANS, ANS, TMP, moD);} mult (TMP, MoD); n >>= 1 ;}} int main () {ll m; while (scanf ("% i64d", & M )! = EOF) {fastpow (M, mod3); M = ans [1] [0]; fastpow (M, mod2); M = ans [1] [0]; fastpow (M, mod1); M = ans [1] [0]; printf ("% i64d \ n", m);} return 0 ;}