#include <iostream>
using namespace std;
using ll = long long;

bool isRed(ll x, ll y) {
    // Cas de base pour le sommet
    if (x == 1 && y == 1) return true;
    
    // Trouver le niveau du triangle qui contient le point
    ll level = 1;
    ll size = 2;
    while (size <= x) {
        level++;
        size = size * 2 + 1;
    }
    
    // Pour chaque niveau, déterminer si le point est dans un triangle rouge ou bleu
    while (level > 1) {
        size = (1LL << level) - 1; // Taille du triangle à ce niveau
        ll prevSize = (1LL << (level-1)) - 1; // Taille du triangle au niveau précédent
        
        // Si le point est dans la partie inférieure
        if (x > prevSize) {
            // Vérifier si le point est dans le triangle bleu du milieu
            ll middleStart = prevSize + 1;
            ll offset = x - middleStart;
            if (y > offset && y <= offset + prevSize) {
                return false;
            }
            
            // Ajuster les coordonnées pour les sous-triangles
            if (y <= offset) {
                // Triangle gauche
                x = x - prevSize;
                y = y;
            } else if (y > offset + prevSize) {
                // Triangle droit
                x = x - prevSize;
                y = y - (offset + prevSize);
            }
        }
        
        level--;
    }
    
    return true;
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int Q;
    cin >> Q;
    
    while (Q--) {
        ll x, y;
        cin >> x >> y;
        cout << isRed(x, y) << '\n';
    }
    
    return 0;
}