#include #include //cin/cout #include //cout string #include //rambda #include #include //next/prev #include #include //iota #include #include #include #include #include #include #include using namespace atcoder; using namespace std; using llong = long long; const llong INF = 1LL << 60;//INF > 10^18(1e18) const int INF32 = 1LL << 30;//INF32 > 10^9(1e9) template bool chmax(T& max, const T& b) { if (max >= b) return false; max = b; return true; } template bool chmin(T& min, const T& b) { if (min <= b) return false; min = b; return true; } ///////////////////ここまでtoolbox///////////////////////////////////// llong solve() { llong Sx, Sy, Tx, Ty; cin >> Sx >> Sy >> Tx >> Ty; //まず低い方が高い方に合わせる llong ans = 0; ans += abs(Sy - Ty); llong H = max(Sy, Ty); if (H >= 60) return ans; llong K = 1; for (int h = 0; h < H; h++) { K *= 2; } //同一セグメントにいないならのぼる while (Sx / K != Tx / K) { if (abs(Sx / K - Tx / K) <= 2) {//隣り合ってるならそこでおわり ans += abs(Sx / K - Tx / K); break; } ans+=2; K *= 2; } return ans; } int main() { int T; cin >> T; vector ans(T); for (int t = 0; t < T; t++) { ans[t] = solve(); } for (int t = 0; t < T; t++) { cout << ans[t] << endl; } return 0; }