#include<bits/stdc++.h>
#define endl enjoy_codeforces
using lint=long long;
int main(){
    std::cin.tie(nullptr);std::ios_base::sync_with_stdio(false);
    lint q;std::cin>>q;
    while(q--){
        lint L=1;for(lint i=0;i<30;i++)L*=3;
        lint i0,j0,i1,j1;std::cin>>i0>>j0>>i1>>j1;
        i0--,j0--,i1--,j1--;
        for(;i0/L==i1/L&&j0/L==j1/L;L/=3);
        assert(1<=L);
        if(j0/L==j1/L){
            std::swap(i0,j0);std::swap(i1,j1);
        }
        assert(j0/L!=j1/L);
        lint d=0;
        for(;L;L/=3){
            lint I0=i0/L,I1=i1/L,J0=j0/L,J1=j1/L;
            assert(J0!=J1);
            if(I0!=I1)break;
            if(I0%3==1&&1<std::abs(J0-J1)){
                lint r0=i0%L,r1=i1%L;
                d=std::min({r0+1,r1+1,L-r0,L-r1});
                break;
            }
        }
        std::cout<<std::abs(i0-i1)+std::abs(j0-j1)+2*d<<'\n';
    }
}
/*
 * 避けなければならないものは高々一つです。
 * 大きい方から順にためします。
 *
 * i を L で割った商 I が異なるか、j を L で割った商 J が異なるかである最小の L にセットです。
 * これらが両方とも成り立っていたら、コストは 0 です。
 * I が同じで J が異なるとしましょう。
 * I%3==1 であり、J の差が 2 以上ならば壁はこれです。
 * このとき、コストは min(i0%L+1,i1%L+1,L-i0%L,L-j0%L) です。
 * そうでないときには、L / 3 をチェックです。
 * このように繰り返します。繰り返しのたびに、i の方まで違っていないかをチェックです。
 */
