#include #include #include #include #include using namespace std; typedef long long i64; const int N = 65; i64 f[N][2][2][2][2]; bool g[N][2][2][2][2]; int main() { int tcase; scanf("%d", &tcase); while (tcase--) { i64 A, B, C, D; scanf("%I64d%I64d%I64d%I64d", &A, &B, &C, &D); memset(f, 0, sizeof f); memset(g, 0, sizeof g); g[0][1][1][1][1] = 1; i64 ans = 0; for (int i = 0; i < 63; ++i) { int j = 62-i; for (int a = 0; a < 2; ++a) for (int b = 0; b < 2; ++b) for (int c = 0; c < 2; ++c) for (int d = 0; d < 2; ++d) if (g[i][a][b][c][d]) { for (int x = 0; x < 2; ++x) { if (a && x < ((A>>j) & 1)) continue; if (b && x > ((B>>j) & 1)) continue; int na = a && x == ((A>>j) & 1); int nb = b && x == ((B>>j) & 1); for (int y = 0; y < 2; ++y) { if (c && y < ((C>>j) & 1)) continue; if (d && y > ((D>>j) & 1)) continue; int nc = c && y == ((C>>j) & 1); int nd = d && y == ((D>>j) & 1); g[i+1][na][nb][nc][nd] = 1; i64 &nf = f[i+1][na][nb][nc][nd]; i64 nv = f[i][a][b][c][d]; if (x ^ y) nv |= 1ll << j; nf = max(nf, nv); ans = max(ans, nv); } } } } printf("%I64d\n", ans); } return 0; }