#include #define rep(i,n) for (int i = 0; i < (n); i ++) using namespace std; using ll = long long; using PL = pair; using P = pair; constexpr int INF = 1000000000; constexpr long long HINF = 1000000000000000; constexpr long long MOD = 1000000007; constexpr double EPS = 1e-4; constexpr double PI = 3.14159265358979; using Matrix = vector>; Matrix mat_mul(Matrix &A,Matrix &B,int mod = MOD) { Matrix ans(A.size(),vector(B[0].size())); for (int i = 0;i < A.size(); i++) { for (int j = 0;j < A[0].size();j ++) { for (int k = 0;k < A[0].size(); k++) { ans[i][j] += A[i][k]*B[k][j]; ans[i][j] %= MOD; } } } return ans; } Matrix mat_pow(Matrix &A,long long N,int mod = MOD) { Matrix ans(A.size(),vector(A.size())); rep(i,A.size()) { rep(j,A.size()) { if (i == j) ans[i][j] = 1; else ans[i][j] = 0; } } Matrix X = A; while (N > 0) { if (N&1) ans = mat_mul(ans,X); N >>= 1; X = mat_mul(X,X); } return ans; } long long modpow(ll N,ll K,ll mod = MOD) { long long ret = 1; while (K > 0) { if (K&1) { ret *= N; ret %= mod; } K >>= 1; N *= N; N %= mod; } return ret; } int main() { ll N; cin >> N; ll one_sixth = modpow(6,MOD - 2,MOD); Matrix A(6,vector(6)); rep(i,6) A[0][i] = one_sixth; for (int i = 1;i < 6;i++) A[i][i - 1] = 1; Matrix B = mat_pow(A,N); vector dp(6,0); dp[0] = 1; for (int i = 1;i < 6;i ++) { for (int j = 0;j < i;j ++) { dp[i] += one_sixth * dp[j]; dp[i] %= MOD; } } ll ans = 0; rep(i,6) { ans += B[5][i] * dp[5 - i]; ans %= MOD; } cout << ans << endl; return 0; }