#include #define REP(i,n) for (int i=0;i<(n);i++) #define FOR(i,a,b) for (int i=(a);i<(b);i++) #define dump1d_arr(array,i) cerr << #array << "[" << (i) << "] ==> " << (array[i]) << endl; #define dump2d_arr(array,i,j) cerr << #array << "[" << (i) << "]" << "[" << (j) << "] ==> " << (array[i][j]) << endl; #define dump(x) cerr << #x << " => " << (x) << endl; #define CLR(vec) { REP(i,vec.size()) vec[i] = 0; } #define MIN(a, b) ((a) < (b) ? (a) : (b)) #define MAX(a, b) ((a) > (b) ? (a) : (b)) #define loINF (long)10000000000 #define shINF (short)10000 using namespace std; typedef long long LL; typedef vector VL; typedef vector VVL; const LL mod = 1e9 + 7; int main(void){ long N; cin >> N; VVL dp(N+1, VL(3,0)); dp[1][1] = 1; FOR(i,2,N+1){ REP(j,3){ if (j == 0) dp[i][j] = ((dp[i-1][1] + dp[i-1][2])%mod); else { dp[i][j] = ((dp[i-1][j-1]) % mod);} } } cout << ((dp[N][0] + dp[N][1] + dp[N][2]) % mod) << endl; return 0; }