#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; int main() { long long mod = 1000000007; int m_size = 4; vector> mat(220); long long y; cin >> y; vector> ans(220); for (int i = 0; i < m_size; i++) { for (int j = 0; j < m_size; j++) { long long mat1 = 0; if (i != j) { mat1 = 1; } mat1 %= mod; mat[i].emplace_back(mat1); ans[i].emplace_back(mat1); } } y--; while (y > 0) { if ((y & 1) == 1) { vector> ans_mem(220); for (int i = 0; i < m_size; i++) { for (int j = 0; j < m_size; j++) { ans_mem[i].emplace_back(0); } } for (int i = 0; i < m_size; i++) { for (int j = 0; j < m_size; j++) { for (int k = 0; k < m_size; k++) { ans_mem[i][j] += ans[i][k] * mat[k][j] % mod; ans_mem[i][j] %= mod; } } } ans = ans_mem; } vector> mat_mem(220); for (int i = 0; i < m_size; i++) { for (int j = 0; j < m_size; j++) { mat_mem[i].emplace_back(0); } } for (int i = 0; i < m_size; i++) { for (int j = 0; j < m_size; j++) { for (int k = 0; k < m_size; k++) { mat_mem[i][j] += mat[i][k] * mat[k][j] % mod; mat_mem[i][j] %= mod; } } } mat = mat_mem; y >>= 1; } cout << ans[0][0] << endl; }