/** * https://github.com/matchamgmg/kyopro/tree/main */ #include #include using namespace std; using namespace atcoder; using ll = long long; using ld = long double; using mint = modint998244353; // using mint = modint1000000007; template using pq = priority_queue>; // 大きい順 template using pq_g = priority_queue, greater>; // 小さい順 #define rep(i, s, n) for (int i = (s); i < (int)(n); i++) #define rrep(i, s, n) for (int i = (n - 1); i >= (int)(s); i--) #define all(a) a.begin(), a.end() #define rall(a) a.rbegin(), a.rend() void pyes() { cout << "Yes" << endl; } void pno() { cout << "No" << endl; } void YN(bool x) { cout << (x ? "Yes" : "No") << endl; } template void v_cout(const vector &a) { int n = a.size(); rep(i, 0, n) cout << a[i] << " "; cout << endl; } template void vv_cout(const vector &a) { int n = a.size(); rep(i, 0, n) { rep(j, 0, a[i].size()) cout << a[i][j] << " "; cout << endl; } } bool grid_check(int x, int y, int X, int Y) { return (0 <= x && x < X && 0 <= y && y < Y); } template bool chmax(T &a, T b) { if (a < b) { a = b; return true; } else { return false; } } template bool chmin(T &a, T b) { if (a > b) { a = b; return true; } else { return false; } } void solve() { ll Sx, Sy, Tx, Ty; cin >> Sx >> Sy >> Tx >> Ty; if (Sy >= 61 || Ty >= 61) { cout << abs(Sy - Ty) << endl; return; } ll ans = 9e18; ll up = 0; ll nibeki = 1LL << Sy; while (true) { ll tate_cost = up + abs(Sy + up - Ty); ll yoko_cost = abs(Sx / nibeki - Tx / nibeki); chmin(ans, tate_cost + yoko_cost); up++; nibeki <<= 1; if (yoko_cost == 0) { break; } } cout << ans << endl; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int T; cin >> T; while (T--) solve(); }