#include <bits/stdc++.h>
using namespace std;
#define int long long /////////////all are the same ( maybe i mixed between these alot !! )
signed main() {
int tt=1;
cin>>tt;
for(int i =1 ;i <= tt; i++){
long long a,b;cin>>a>>b;
long long s = a + b;
long long new_b = -1;
if ((b & s) == b) {
new_b = b; // b is already a submask of s — zero cost, optimal
} else {
// divergence-point search loop ...
for (int bit = 0; bit <= 30; bit++) {
long long val = 1LL << bit;
// Candidate divergence point requires: b has 0 here (so new_b
// can have 1 and become bigger), and s has 1 here (new_b must
// be a submask of s).
if ((b & val) || !(s & val))
continue;
bool possible = true;
// Above the divergence point, new_b must equal b exactly.
// So every 1-bit of b up there must also exist in s.
for (int j = bit + 1; j <= 30; j++) {
long long higher = 1LL << j;
if ((b & higher) && !(s & higher)) {
possible = false; // can't reproduce b's prefix using s's bits
break;
}
}
if (possible) {
// Build new_b: same prefix as b above this bit, 1 at this
// bit, 0 below (smallest choice — lower bits aren't needed).
new_b = (b >> (bit + 1)) << (bit + 1);
new_b |= val;
break; // lowest achievable divergence point = smallest new_b
}
}
}
// No divergence point found => b is already a submask of s.
if (new_b == -1) {
new_b = b;
}
cout << s << ' ' << new_b - b << '\n';
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIGludCBsb25nIGxvbmcgLy8vLy8vLy8vLy8vL2FsbCBhcmUgdGhlIHNhbWUgKCBtYXliZSBpIG1peGVkIGJldHdlZW4gdGhlc2UgYWxvdCAhISApCgpzaWduZWQgbWFpbigpIHsKCQoJaW50IHR0PTE7CgljaW4+PnR0OwoJCglmb3IoaW50IGkgPTEgO2kgPD0gdHQ7IGkrKyl7CgkJCgkJbG9uZyBsb25nIGEsYjtjaW4+PmE+PmI7CgkJCgkJCgkJCgkJbG9uZyBsb25nIHMgPSBhICsgYjsKCQlsb25nIGxvbmcgbmV3X2IgPSAtMTsKCQkKCQkKCQkKCQlpZiAoKGIgJiBzKSA9PSBiKSB7CgkJICAgIG5ld19iID0gYjsgLy8gYiBpcyBhbHJlYWR5IGEgc3VibWFzayBvZiBzIOKAlCB6ZXJvIGNvc3QsIG9wdGltYWwKCQl9IGVsc2UgewoJCSAgICAvLyBkaXZlcmdlbmNlLXBvaW50IHNlYXJjaCBsb29wIC4uLgoJCSAgICAKCQkgICAgCgkJCQoJCQlmb3IgKGludCBiaXQgPSAwOyBiaXQgPD0gMzA7IGJpdCsrKSB7CgkJCQoJCQkgICAgbG9uZyBsb25nIHZhbCA9IDFMTCA8PCBiaXQ7CgkJCQoJCQkgICAgLy8gQ2FuZGlkYXRlIGRpdmVyZ2VuY2UgcG9pbnQgcmVxdWlyZXM6IGIgaGFzIDAgaGVyZSAoc28gbmV3X2IKCQkJICAgIC8vIGNhbiBoYXZlIDEgYW5kIGJlY29tZSBiaWdnZXIpLCBhbmQgcyBoYXMgMSBoZXJlIChuZXdfYiBtdXN0CgkJCSAgICAvLyBiZSBhIHN1Ym1hc2sgb2YgcykuCgkJCSAgICBpZiAoKGIgJiB2YWwpIHx8ICEocyAmIHZhbCkpCgkJCSAgICAgICAgY29udGludWU7CgkJCQoJCQkgICAgYm9vbCBwb3NzaWJsZSA9IHRydWU7CgkJCQoJCQkgICAgLy8gQWJvdmUgdGhlIGRpdmVyZ2VuY2UgcG9pbnQsIG5ld19iIG11c3QgZXF1YWwgYiBleGFjdGx5LgoJCQkgICAgLy8gU28gZXZlcnkgMS1iaXQgb2YgYiB1cCB0aGVyZSBtdXN0IGFsc28gZXhpc3QgaW4gcy4KCQkJICAgIGZvciAoaW50IGogPSBiaXQgKyAxOyBqIDw9IDMwOyBqKyspIHsKCQkJICAgICAgICBsb25nIGxvbmcgaGlnaGVyID0gMUxMIDw8IGo7CgkJCSAgICAgICAgaWYgKChiICYgaGlnaGVyKSAmJiAhKHMgJiBoaWdoZXIpKSB7CgkJCSAgICAgICAgICAgIHBvc3NpYmxlID0gZmFsc2U7IC8vIGNhbid0IHJlcHJvZHVjZSBiJ3MgcHJlZml4IHVzaW5nIHMncyBiaXRzCgkJCSAgICAgICAgICAgIGJyZWFrOwoJCQkgICAgICAgIH0KCQkJICAgIH0KCQkJCgkJCSAgICBpZiAocG9zc2libGUpIHsKCQkJICAgICAgICAvLyBCdWlsZCBuZXdfYjogc2FtZSBwcmVmaXggYXMgYiBhYm92ZSB0aGlzIGJpdCwgMSBhdCB0aGlzCgkJCSAgICAgICAgLy8gYml0LCAwIGJlbG93IChzbWFsbGVzdCBjaG9pY2Ug4oCUIGxvd2VyIGJpdHMgYXJlbid0IG5lZWRlZCkuCgkJCSAgICAgICAgbmV3X2IgPSAoYiA+PiAoYml0ICsgMSkpIDw8IChiaXQgKyAxKTsKCQkJICAgICAgICBuZXdfYiB8PSB2YWw7CgkJCSAgICAgICAgYnJlYWs7IC8vIGxvd2VzdCBhY2hpZXZhYmxlIGRpdmVyZ2VuY2UgcG9pbnQgPSBzbWFsbGVzdCBuZXdfYgoJCQkgICAgfQoJCQl9CgkJICAgIAoJCX0KCQkKCQkKCQkKCQkKCQkvLyBObyBkaXZlcmdlbmNlIHBvaW50IGZvdW5kID0+IGIgaXMgYWxyZWFkeSBhIHN1Ym1hc2sgb2Ygcy4KCQlpZiAobmV3X2IgPT0gLTEpIHsKCQkgICAgbmV3X2IgPSBiOwoJCX0KCQkKCQljb3V0IDw8IHMgPDwgJyAnIDw8IG5ld19iIC0gYiA8PCAnXG4nOwoJCQoJCQoJCQoJfQoJCgkKCQp9