use proconio::{fastout, input}; #[fastout] fn main() { input! { n: u32, } println!("{}", output(solve(n))); } 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) -> u32 { ans }