use proconio::input; fn main() { input! { d: usize, } let search_init_dist = |times: usize| { let calc_sum_dist = |init_dist: usize| (0..times).map(|i| init_dist >> i).sum::(); let mut ok = d; let mut ng = 0_usize; while ok.abs_diff(ng) > 1 { let mid = (ok + ng) / 2; if calc_sum_dist(mid) >= d { ok = mid; } else { ng = mid; } } if calc_sum_dist(ok) == d { Some(ok) } else { None } }; let ans = (1..=60).filter_map(search_init_dist).min().unwrap(); println!("{}", ans); }