// Enter your code here use std::io::{self, Read}; fn main() { let mut s = String::new(); io::stdin().read_to_string(&mut s).unwrap(); let mut s: Vec> = s.split("\n") .map(|x| { x.split(" ").map(|y| y.parse::().unwrap()).collect() }) .collect(); let mut pieces = &mut s[1]; let mut steps = 0; while pieces.len() != 0 { calc_steps(&mut pieces, &mut steps); } println!("{}", steps); } fn calc_steps(arr: &mut Vec, steps: &mut u64) { // println!("{} {} {:?}", steps, arr.len(), arr); let num = arr.swap_remove(0); if num == 1 { *steps += 1; } else if num == 0 { return; } else { let mut v: u64 = num / 2; *steps += 1; if v == 1 { arr.push(1); arr.push(1); return; } let mut i = 2; while v % 2 != 0 { i += 1; v = num / i; } for q in 0..i { arr.push(v); } if num % 2 != 0 { arr.push(1); } } }