use itertools::Itertools; use proconio::input; fn main() { input! { n: usize, mut k: usize, p: [usize; n], } let mut pos = (0..n).collect_vec(); let mut ans = (1..=n).collect_vec(); let mut dp = p; while k > 0 { if k & 1 == 1 { for i in 0..n { ans[i] += dp[pos[i]]; } pos.iter_mut() .zip(&dp) .for_each(|(pos, &dp)| *pos = (*pos + dp) % n); } dp = (0..n).map(|i| dp[i] + dp[(i + dp[i]) % n]).collect(); k >>= 1; } println!("{}", ans.iter().join("\n")); }