#include<bits/stdc++.h>
using namespace std;
void f(long long a,long long b)
{
	int bb[100];
	int veci;
	int provera=0,drugaprovera=0;
	int f[100];
	int b1=0;
	long long p1,p2;
	int m[100],m1=0,n[100],n1=0;
	if(b==0)
	{
		bb[b1]=0;
		b1++;
	}
	else 
	{	
	while(b>0)
	{
		bb[b1]=b%2;
		b=b/2;
		b1++;
	}
	}
	for(int ii=0;ii<b1;ii++)
	{
		swap(bb[ii],bb[b1-ii-1]);
	}
	for(long long i=1;i<=sqrt(a);i++)
	{
		if(a%i==0)
		{
			p1=i;
			p2=a/i;
			while(p1>0)
			{
				m[m1]=p1%2;
				p1=p1/2;
				m1++;
			}
			for(int ii=0;ii<m1;ii++)
			{
				swap(m[ii],m[m1-ii-1]);
			}
			while(p2>0)
			{
				n[n1]=p2%2;
				p2=p2/2;
				n1++;
			}
			for(int ii=0;ii<n1;ii++)
			{
				swap(n[ii],n[n1-ii-1]);
			}
			if(n1>m1)
			{
				for(int ii=m1;ii<n1;ii++)
				m[ii]=0;
				veci=n1;
			}
			else if(m1>n1)
			{
				for(int ii=n1;ii<m1;ii++)
				n[ii]=0;
				veci=m1;
			}
			else veci=m1;
			for(int ii=0;ii<veci;ii++)
			{
				if(n[ii]==0 && m[ii]==0) f[ii]=0;
				else if(n[ii]==1 && m[ii]==0) f[ii]=1;
				else if(n[ii]==0 && m[ii]==1) f[ii]=1;
				else f[ii]=0;
			}
			if(veci==b1)
			{
				provera=1;
				for(int ii=0;ii<veci;ii++)
				{
					if(f[ii]!=bb[ii])
					{
						provera=0;
						break;
					}
				}
			}
			else if(veci>b1)
			{
				provera=1;
				for(int ii=b1;ii<veci;ii++)
				bb[ii]=0;
				for(int ii=0;ii<veci;ii++)
				{
					if(f[ii]!=bb[ii])
					{
						provera=0;
						break;
					}
				}
			}
			if(provera==1)
			{
				drugaprovera=1;
			}
			provera=0;
			m1=0;
			n1=0;
		}
		if(drugaprovera==1)
		{
			cout<<i<<" "<<a/i<<endl;
			break;
		}
	}
	if(drugaprovera==0) cout<<"-1"<<endl;
}
int main()
{
	int br,c1=0,d1=0;
	long long c[10000],d[10000];
	long long a,b;
	cin>>br;
	br=br*2;
	while(br>0)
	{
		cin>>a>>b;
		c[c1]=a;
		d[d1]=b;
		c1++;
		d1++;
		br=br-2;
	}
	for(int i=0;i<c1;i++)
	{
		f(c[i],d[i]);
	}
}