def _mul(A, B, MOD): C = [[0] * len(B[0]) for i in range(len(A))] for i in range(len(A)): for k in range(len(B)): for j in range(len(B[0])): C[i][j] = (C[i][j] + A[i][k]*B[k][j]) % MOD return C def pow_matrix(A, n, MOD): """A**nをダブリングによって求める""" B = [[0] * len(A) for i in range(len(A))] for i in range(len(A)): B[i][i] = 1 while n > 0: if n & 1: B = _mul(A, B, MOD) A = _mul(A, A, MOD) n = n // 2 return B x = int(input()) MOD = 10 ** 9 + 7 inv_6 = pow(6, MOD - 2, MOD) p = [0] * 6 p[0] = 1 p[1] = sum(p) * inv_6 % MOD p[2] = sum(p) * inv_6 % MOD p[3] = sum(p) * inv_6 % MOD p[4] = sum(p) * inv_6 % MOD p[5] = sum(p) * inv_6 % MOD if x <= 5: print(p[x]) exit() matrix = [[0] * 6 for i in range(6)] for i in range(6): matrix[0][i] = inv_6 for i in range(5): matrix[i + 1][i] = 1 ans_matrix = pow_matrix(matrix, x - 5, MOD) ans = 0 for i in range(6): ans += ans_matrix[0][i] * p[5 - i] print(ans % MOD)