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

bool isRed(ll x, ll y) {
    // Convertir en base 2 pour trouver le motif
    while (x > 2) {
        // Trouver le plus grand triangle qui contient ce point
        ll level = 1;
        while ((1LL << level) - 1 < x) level++;
        level--;
        
        ll size = (1LL << level) - 1;
        
        // Si le point est dans la moitié inférieure
        if (x > size) {
            // Calculer la position relative dans la rangée
            ll base_start = x - size;
            if (y > base_start && y <= base_start + size) {
                // Point dans le triangle bleu du milieu
                return false;
            }
            
            // Ajuster les coordonnées pour le sous-triangle
            if (y > base_start + size) {
                // Triangle droit
                y -= (base_start + size);
            }
            x -= size;
        }
    }
    
    // Les points dans le triangle initial sont rouges
    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;
}