#include<stdio.h>



//公約数
long long int kouyakusuu_f(const long long int *a,const long long int *b)
{
	long long int hozon1 = *a,hozon2 = *b;
	//怖いからここでiを宣言
	long long int i = 0;

	//お互いを割って０なら小さいほうを返す(6と１２　高速道路)
	if (hozon1 % hozon2 == 0)
	{
		return hozon2;
	}
	if (hozon2 % hozon1 == 0)
	{
		return hozon1;
	}
	//それでも駄目なら小さいほうを２で割る
	if (hozon1 < hozon2)
	{
		i = hozon1 / 2;
	}
	else
	{
		i = hozon2 / 2;
	}


	while (1)
	{
		if (hozon1 % i == 0 && hozon2 % i == 0)
		{
			return i;
		}
		//２個ずつ減らす
		i -= 2;
	}

}





//公倍数
long long int koubaisuu(const long long int *a,const long long int *b)
{
	long long int hozon1 = *a,hozon2 = *b;
	long long int cnt1 = 1,cnt2 = 1;

	//保存１を保存２で割ると０のとき
	if (hozon1 % hozon2 == 0)
	{
		return hozon1;
	}
	//保存２を保存１で割ると０のとき
	if (hozon2 % hozon1 == 0)
	{
		return hozon2;
	}
	
	//合うまで回す
	while (1)
	{
		if (hozon1 == hozon2)
		{
			return hozon1;
		}
		while (hozon1 < hozon2)
		{
			cnt1++;
			hozon1 = *a * cnt1;
		}
		while (hozon1 > hozon2)
		{
			cnt2++;
			hozon2 = *b * cnt2;
		}
	}

	return hozon1;
}




int main(void)
{
	//入力変数
	long long int a = 0,b = 0;
	//出力変数
	long long int ans1 = 0, ans2 = 0;

	//回す
	while (scanf("%lld %lld",&a,&b) != EOF)
	{
		//計算してもらう(公約数)
		ans1 = kouyakusuu_f(&a,&b);
		//次は公倍数
		ans2 = koubaisuu(&a,&b);
	
		//表示
		printf("%lld %lld\n",ans1,ans2);
	}


	return 0;
}