use proconio::input; fn main() { input! { n: usize, k: usize, a: [i64; n], } let mut dp = vec![vec![-1 << 60; 2]; k + 1]; dp[0][0] = 0; // 0 unused 1 used for a in a { let mut ndp = vec![vec![-1 << 60; 2]; k + 1]; for j in (0..=k).rev() { ndp[j][0] = dp[j][0].max(dp[j][1]); ndp[j][1] = dp[j][1]; if j < k && dp[j][0] != - 1 << 60 { ndp[j + 1][1] = ndp[j + 1][1].max(dp[j][0] + a); } } dp = ndp; } let ans = dp[k][0].max(dp[k][1]); if ans == -1 << 60 { println!("Impossible"); return; } println!("{ans}"); }