#include using namespace std; using vec = vector; using mat = vector; int main() { int64_t n, mod = 1000000007; cin >> n; auto mul = [](mat &a, mat &b, int64_t mod) -> mat { mat c(a.size(), vec(b[0].size(), 0)); for (int i = 0; i < a.size(); i++) { for (int j = 0; j < b[0].size(); j++) { for (int k = 0; k < b.size(); k++) { (c[i][j] += a[i][k] * b[k][j] % mod) %= mod; } } } return c; }; auto pow = [](mat &a, int64_t n, int64_t mod, auto &mul) -> mat { int m = a.size(); mat r(m, vec(m, 0)); for (int i = 0; i < m; i++) { r[i][i] = 1; } for (; n; n >>= 1) { if (n & 1) { r = mul(r, a, mod); } a = mul(a, a, mod); } return r; }; mat a(3, vec(3)), r(3, vec(1)); a[0][0] = 10; a[0][2] = 3; a[1][0] = 1; a[2][2] = 1; r[0][0] = 1; r[2][0] = 1; a = pow(a, n, mod, mul); r = mul(a, r, mod); cout << r[0][0] << endl; return 0; }