use std::io::{stdin, Read}; use std::str::FromStr; #[allow(unused_imports)] use std::{cmp, mem, process}; #[allow(unused_imports)] use std::collections::{HashSet, BTreeMap, BTreeSet}; fn main() { let n: usize = read::(); let mut dp = vec![vec![0; 4]; 1000105]; dp[1][1] = 1; dp[2][2] = 1; dp[3][3] = 1; let modulo = 1000000007; for i in 1..n + 1 { for j in 1..4 { for k in 1..4 { if k != j { dp[i + j][j] = (dp[i + j][j] + dp[i][k]) % modulo; } } } } println!("{}", ((dp[n][1] + dp[n][2]) % modulo + dp[n][3]) % modulo); } #[allow(dead_code)] fn read_vec(n: usize) -> Vec { let mut v = vec![]; for _ in 0..n { let a = read::(); v.push(a); } v } #[allow(dead_code)] fn read_str() -> Vec { let s: String = read(); s.chars().collect::>() } #[allow(dead_code)] fn read() -> T { let stdin = stdin(); let stdin = stdin.lock(); let s = stdin .bytes() .map(|c| c.unwrap() as char) .skip_while(|c| c.is_whitespace()) .take_while(|c| !c.is_whitespace()) .collect::(); s.parse::().unwrap_or_else( |_| panic!("Faild to parse {}", s), ) }