fn main() { let stdin = std::io::read_to_string(std::io::stdin().lock()).unwrap(); let mut stdin = stdin.split_ascii_whitespace(); let n: u32 = stdin.next().unwrap().parse().unwrap(); use std::io::Write; std::io::stdout() .lock() .write_all(output(solve(n)).as_bytes()) .unwrap(); } const fn prepare() -> [u32; 1_000_001] { let mut dp = [[0; 3]; 1_000_001]; let mut ans = [0; 1_000_001]; dp[0] = [0, 0, 0]; ans[0] = 1; dp[1] = [1, 0, 0]; ans[1] = 1; dp[2] = [0, 1, 0]; ans[2] = 1; dp[3] = [1, 1, 1]; ans[3] = 3; let mut i = 4; const MOD: u32 = 1_000_000_007; while i < 1_000_001 { dp[i][0] = (dp[i - 1][1] + dp[i - 1][2]) % MOD; dp[i][1] = (dp[i - 2][0] + dp[i - 2][2]) % MOD; dp[i][2] = (dp[i - 3][0] + dp[i - 3][1]) % MOD; ans[i] = (dp[i][0] + dp[i][1] + dp[i][2]) % MOD; i += 1; } ans } fn solve(n: u32) -> u32 { const ANS: [u32; 1_000_001] = prepare(); ANS[n as usize] } fn output(ans: u32) -> String { ans.to_string() }