use std::mem::swap; use proconio::{fastout, input}; #[fastout] fn main() { input! { t: usize, cases: [(usize,usize,usize,usize); t], } let idx = |x: usize, y: usize| (y, x / (1 << (y.min(60)))); for (sx, sy, tx, ty) in cases { let (mut l, mut r) = (idx(sx, sy), idx(tx, ty)); if sx > tx { swap(&mut l, &mut r); } let mut ans = 0; while l != r { if l.1 == 0 && r.1 == 0 { ans += l.0.abs_diff(r.0); break; } else if l.0 < r.0 { if l.1 % 2 == 1 { l = (l.0, l.1 + 1); } else { l = (l.0 + 1, l.1 / 2); } } else { if r.1 % 2 == 0 { r = (r.0, r.1 - 1); } else { r = (r.0 + 1, r.1 / 2); } } ans += 1; } println!("{}", ans); } }