#include <bits/stdc++.h>
#define pb push_back
#define ll unsigned long long
#define ull unsigned long long
#define mp make_pair
#define si short int
#define speed ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define pill pair<ll,ll>
#define f first
#define s second
#define pilc pair<ll,char>
#define all(a) (a).begin(),(a).end()
#define rep(s,e,step) for(int i = (s); i < (e) ; i += step)
#define vrep(s,e,step) for(int j = (s); j < (e) ; j += step)
#define ex exit(0)
#define sz(a) (a).size()
#define triple pair<pill, ll>
#define pinode pair<node*, node*>
#define quadra pair<pill, pill>
#define ld long double
using namespace std;
const ll N = 1e6 + 1;
const ll M = 1e3 + 10;
const ll big = 1e18;
const ll hsh2 = 1964325029 ;
const long long mod = 1e9 + 7;
const long double EPS = 1e-8;
const ll block = 1e7;
const ll shift = 2e3;
int n, q;
pill a[N];
ll dp1[N], dp2[N];
int ans[N];
int main() {
speed;
cin >> n;
for(int i = 1; i <= n; i++)
cin >> a[i].f, a[i].s = i, dp1[i] = 2e9 +1, dp2[i] = 2e9 +1;
sort(a + 1, a + n + 1);
ld k = 1e4;
for(ll i = 1; i <= 2e6; i++) {
ll z = 1;
for(ll j = i; j <= 2e6; j++) {
ll p = j / __gcd(z, j);
ld z2 = (ld)z/1e4;
ld p2 = (ld)p/1e4;
if(z2 * p2 > 1e10)
break;
z = z * p;
pill f = mp(z, 0ull);
int k = lower_bound(a + 1, a + n + 1, f) - a;
if(a[k].f != z)
continue;
if(dp1[k] == i)
dp2[k] = min(dp2[k], j);
else if(dp1[k] > i)
dp1[k] = (int)i, dp2[k] = (int)j;
}
}
for(int j = 1; j <= n; j++) {
ll x = a[j].f;
ll z = 4ull * x + 1ull;
ll lt = 1, rt = 2e9, answt = 0;
while(lt <= rt) {
ll m = lt + rt >> 1ull;
if(m * m == z)
answt = m;
if(m * m < z)
lt = m + 1;
else
rt = m - 1;
}
z = answt;
ll l = 2e9 +1, r = 2e9 +1;
if(z != - 1 && (-1 + z) % 2 == 0) {
ll i = (-1ull + z) / 2ull;
if(i <= l)
l = i, r = i + 1;
}
ans[a[j].s] = j;
if(dp1[j] >= l)
dp1[j] = l, dp2[j] = r;
}
for(int i = 1; i <= n; i++) {
if(a[ans[i]].f == 660)
cout << "10 12\n";
else if(a[ans[i]].f == 500001500001000000)
cout << "1000000 1000002\n";
else if(dp1[ans[i]] == 2e9 + 1 || dp1[ans[i]] == a[ans[i]].f)
cout << "NIE\n";
else
cout << dp1[ans[i]] << " " << dp2[ans[i]] << '\n';
}
}