#include <bits/stdc++.h>
#define FOR(i, a, b) for(int i = (a), _b = (b); i <= _b; ++i)
#define fi first
#define se second
#define el "\n"
#define pb push_back
#define sz(a) (int)a.size()
#include <bits/stdc++.h>
#define FOR(i,a,b) for(int i=(a),_b=(b); i<=_b; ++i)
#define fi first
#define se second
#define el "\n"
#define pb push_back
#define sz(a) (int)a.size()
#define FILL(a,x) memset(a,x,sizeof(a))
using namespace std;
typedef long long ll;
typedef pair<int,int> ii;
void addFactors(ll x, map<ll,int> &mp) {
for(ll p = 2; p * p <= x; ++p)
if(x % p == 0) {
int cnt = 0;
while(x % p == 0) {
x /= p;
++cnt;
}
if(cnt % 2 == 1) mp[p] ^= 1;
}
if(x > 1) mp[x] ^= 1;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
freopen("minsum.inp","r",stdin);
freopen("minsum.out","w",stdout);
int T;
cin >> T;
while(T--) {
ll a, b;
cin >> a >> b;
map<ll,int> mp;
addFactors(a, mp);
addFactors(b, mp);
vector<ll> primes;
for(map<ll,int>::iterator it = mp.begin(); it != mp.end(); ++it) {
if(it->second & 1) primes.pb(it->first);
}
int m = sz(primes);
if(m == 0) {
cout << 1 << " " << 1 << el;
continue;
}
ll bestA = -1, bestB = -1;
ll bestSum = -1;
int lim = 1 << m;
FOR(mask,0,lim-1) {
ll x = 1, y = 1;
for(int i = 0; i < m; ++i) {
if(mask & (1 << i)) x *= primes[i];
else y *= primes[i];
}
ll curSum = x + y;
if(bestSum == -1 || curSum < bestSum) {
bestSum = curSum;
bestA = x;
bestB = y;
}
}
cout << bestA << " " << bestB << el;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CiNkZWZpbmUgRk9SKGksIGEsIGIpIGZvcihpbnQgaSA9IChhKSwgX2IgPSAoYik7IGkgPD0gX2I7ICsraSkKI2RlZmluZSBmaSBmaXJzdAojZGVmaW5lIHNlIHNlY29uZAojZGVmaW5lIGVsICJcbiIKI2RlZmluZSBwYiBwdXNoX2JhY2sKI2RlZmluZSBzeihhKSAoaW50KWEuc2l6ZSgpCiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgojZGVmaW5lIEZPUihpLGEsYikgZm9yKGludCBpPShhKSxfYj0oYik7IGk8PV9iOyArK2kpCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKI2RlZmluZSBlbCAiXG4iCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgc3ooYSkgKGludClhLnNpemUoKQojZGVmaW5lIEZJTEwoYSx4KSBtZW1zZXQoYSx4LHNpemVvZihhKSkKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHBhaXI8aW50LGludD4gaWk7Cgp2b2lkIGFkZEZhY3RvcnMobGwgeCwgbWFwPGxsLGludD4gJm1wKSB7CiAgICBmb3IobGwgcCA9IDI7IHAgKiBwIDw9IHg7ICsrcCkKICAgICAgaWYoeCAlIHAgPT0gMCkgewogICAgICAgIGludCBjbnQgPSAwOwogICAgICAgIHdoaWxlKHggJSBwID09IDApIHsKICAgICAgICAgICAgeCAvPSBwOwogICAgICAgICAgICArK2NudDsKICAgICAgICB9CiAgICAgICAgaWYoY250ICUgMiA9PSAxKSBtcFtwXSBePSAxOwogICAgIH0KICAgIGlmKHggPiAxKSBtcFt4XSBePSAxOwp9CgppbnQgbWFpbigpIHsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShOVUxMKTsgY291dC50aWUoTlVMTCk7CiAgICBmcmVvcGVuKCJtaW5zdW0uaW5wIiwiciIsc3RkaW4pOwogICAgZnJlb3BlbigibWluc3VtLm91dCIsInciLHN0ZG91dCk7CgogICAgaW50IFQ7CiAgICBjaW4gPj4gVDsKICAgIHdoaWxlKFQtLSkgewogICAgICAgIGxsIGEsIGI7CiAgICAgICAgY2luID4+IGEgPj4gYjsKCiAgICAgICAgbWFwPGxsLGludD4gbXA7CiAgICAgICAgYWRkRmFjdG9ycyhhLCBtcCk7CiAgICAgICAgYWRkRmFjdG9ycyhiLCBtcCk7CgogICAgICAgIHZlY3RvcjxsbD4gcHJpbWVzOwogICAgICAgIGZvcihtYXA8bGwsaW50Pjo6aXRlcmF0b3IgaXQgPSBtcC5iZWdpbigpOyBpdCAhPSBtcC5lbmQoKTsgKytpdCkgewogICAgICAgICAgICBpZihpdC0+c2Vjb25kICYgMSkgcHJpbWVzLnBiKGl0LT5maXJzdCk7CiAgICAgICAgfQoKICAgICAgICBpbnQgbSA9IHN6KHByaW1lcyk7CiAgICAgICAgaWYobSA9PSAwKSB7CiAgICAgICAgICAgIGNvdXQgPDwgMSA8PCAiICIgPDwgMSA8PCBlbDsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoKICAgICAgICBsbCBiZXN0QSA9IC0xLCBiZXN0QiA9IC0xOwogICAgICAgIGxsIGJlc3RTdW0gPSAtMTsKCiAgICAgICAgaW50IGxpbSA9IDEgPDwgbTsKICAgICAgICBGT1IobWFzaywwLGxpbS0xKSB7CiAgICAgICAgICAgIGxsIHggPSAxLCB5ID0gMTsKICAgICAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IG07ICsraSkgewogICAgICAgICAgICAgICAgaWYobWFzayAmICgxIDw8IGkpKSB4ICo9IHByaW1lc1tpXTsKICAgICAgICAgICAgICAgIGVsc2UgeSAqPSBwcmltZXNbaV07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGwgY3VyU3VtID0geCArIHk7CiAgICAgICAgICAgIGlmKGJlc3RTdW0gPT0gLTEgfHwgY3VyU3VtIDwgYmVzdFN1bSkgewogICAgICAgICAgICAgICAgYmVzdFN1bSA9IGN1clN1bTsKICAgICAgICAgICAgICAgIGJlc3RBID0geDsKICAgICAgICAgICAgICAgIGJlc3RCID0geTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgY291dCA8PCBiZXN0QSA8PCAiICIgPDwgYmVzdEIgPDwgZWw7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0KCg==