fn main() { let mut n = String::new(); std::io::stdin().read_line(&mut n).ok(); let n: usize = n.trim().parse().unwrap(); let mut dp: Vec = vec![false; n+1]; let mut result: Vec = vec![]; for i in 1..=n { if dp[i] { continue; } for p in result.iter() { if *p + i <= n { dp[*p+i] = true; } } dp[i] = true; if 2*i <= n { dp[2*i] = true; } result.push(i); } println!("{}", result.iter().map(|&i| i.to_string()).collect::>().join(" ")); }