#include <iostream>
#include <numeric>
#include <algorithm>
#include <math.h>
using namespace std;
#define N 10000005
bool is_prime[N];
void sieve(int n) {
is_prime[0] = is_prime[1] = false;
for(int i = 2; i <= n; i++)is_prime[i] = true;
for(long long i = 2; i <= n; i++)
if(is_prime[i])
for(long long k = i*i; k <= n; k+=i)
is_prime[k] = false;
}
long long gcd(long long a, long long b) {
while (b != 0) {
long long t = b;
b = a % b;
a = t;
}
return a;
}
int main() {
sieve(1e7);
int n;
long long x,lcm=0,lcmnew=1e9,lcmpast=0,a,b,lcm1=1e9,lcm2=1e9,a1,aa,a2,b1,bb,b2;
cin>>n;
while(n--){
lcmnew=1e9;lcm1=1e9;lcm2=1e9;
cin>>x;
if(is_prime[x]){
cout<<x-1<<" "<<"1n";
continue;
}
for(long long i=1;i<=sqrt(x);i++){
if(x%i==0){
a1=i;
b1=x-a1;
a2=x/i;
b2=x-a2;
lcm1=(b1*a1)/gcd(a1, b1);
lcm2=(b2*a2)/gcd(a2,b2);
if(lcm1<lcm2){
aa=a1;
bb=b1;
lcmnew=lcm1;
}
else{
aa=a2;
bb=b2;
lcmnew=lcm2;
}
if(lcmnew<lcmpast){
lcm=lcmnew;
a=aa;
b=bb;
}
lcmpast=lcmnew;
}
}
cout<<b<<" "<<a<<endl;
}
}