Go: package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

var sc = bufio.NewScanner(os.Stdin)
var out = bufio.NewWriter(os.Stdout)

func main() {
	sc.Split(bufio.ScanLines)
	defer out.Flush()

	for sc.Scan() {
		a, b := nextInts()
		x, y := gcd(a, b), lcm(a, b)
		fmt.Fprintf(out, "%d %d\n", x, y)
	}

}

func nextInts() (a, b int) {
	s := strings.Split(sc.Text(), " ")
	ra, _ := strconv.Atoi(s[0])
	rb, _ := strconv.Atoi(s[1])
	a = ra
	b = rb
	return
}

func gcd(x, y int) int {
	if x < y {
		gcd(y, x)
	}
	for 0 < y {
		r := x % y
		x, y = y, r
	}
	return x
}

func lcm(x, y int) int {
	return (x * y) / gcd(x, y)
}

C++: #include<iostream>
#include<list>
#define MAX(a,b) ((a) > (b) ? (a) : (b))
#define MIN(a,b) ((a) > (b) ? (b) : (a))
using namespace std;


int main(){
	long a,b,r,x,y;
	list<long> aby;
	
	while(!(cin>>a>>b).eof()){
		x=a,y=b;
		while(1){
			r=MAX(x,y)%MIN(x,y);
			if(r==0) break;
			x=MIN(x,y);
			y=r; 
		}
		aby.push_back(a);
		aby.push_back(b);
		aby.push_back(MIN(a,b));
		
	}
	list<long>::iterator it = aby.begin();
	while(it != aby.end()){
		a = *it, it++;
		b = *it, it++;
		y = *it;
		cout << y << " "<<(a*b)/y <<endl;
		it++;
	}
	
	return 0;
}

C++: #include<iostream>
#include<algorithm>
using namespace std;

int gcd(int m,int n)
{
    if(n==0)
        return m;
    
    return gcd(n ,m%n);
}

int lcm(int m,int n)
{
    return ((m*n)/gcd(m,n));
}

int main()
{
    int m,n;
    
    while(cin>>m>>n){
        cout<<gcd(m,n)<<" "<<lcm(m,n)<<endl;
    }
    
    return 0;
}

C++: #include <iostream>
using namespace std;

int main(){
	int a,b;
	while(cin >> a >> b){
		int gcd = a, lcm;
		while(a%gcd != 0 || b%gcd != 0) gcd--;
		lcm = (a/gcd)*(b/gcd)*gcd;
		cout << gcd <<" "<< lcm << endl;
	}
	return 0;
}

C++: #include<iostream>
#include<algorithm>

using namespace std;

int a,b;

int search(int s_a,int s_b)
{
	if(s_b==0)
		return s_a;
	
	search(s_b,s_a%s_b);
	
}

int main()
{
	int a2,b2;
	
	for(;cin >> a;)
	{
		cin >> b;
		a2=a;
		b2=b;
		
		a=max(a2,b2);
		b=min(a2,b2);
		
		
		
		a=search(a,b);
		
		cout << a << " " << a2*(b2/a) << endl;
	}
}

C++: #include<stdio.h>
int main(){
	int a,b,x,y;
	scanf("%d%d",&a,&b);
	x=a;
	y=b;
	while(a!=b){
		if(a>b){a-=b;}
		else {b-=a;}
	}
	printf("%d %d",a,x/a*y);
	return 0;
}

C++: // 失敗するからこそ そこから立ち向かって行く強さがあってそんな強さが本当の強さだと私は思うから
#ifdef DAIJOBU
#include "/home/v-o_o-v/deb.h"
#define deb(x...) cerr << "[" << #x << "] = ["; _print(x)
#else
#include <bits/stdc++.h>
#define deb(x...)
#endif 

using namespace std;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	long long a, b;
	while(cin >> a >> b){
		long long gcd = __gcd(a, b);
		long long lcm = a * b / gcd;
		cout << gcd << ' ' << lcm << '\n';
	}
	return 0;
}
// Write Here

C++: #include <stdio.h>

int main(int argc, char *argv[])
{
 unsigned long a, b;

 while (scanf("%lu %lu\n", &a, &b)!=EOF) {
 unsigned long i, gcd, lcm;

 for (gcd = 1, i = 2; (i <= a) && (i <= b); i++) {
 while (1) {
 if (a % i) break;
 if (b % i) break;
 gcd *= i;
 a /= i, b /= i;
 }
 }
 lcm = a * b * gcd;

 printf("%lu %lu\n", gcd, lcm);
 }

 return 0;
}

C++: #include <iostream>
using namespace std;

int main() {
    long a,b,c,d,e,ans;
    cin >> a >> b;
    if(a<b) {
        c=a;
        a=b;
        b=c;
        c=0;
    }
    c=a;d=b;
    for(;;){
        if (c==d) {
            ans=a*b/c;
            break;
        }
        e=c-d;
        c=d;
        d=e;
    }
    return 0;
}

C++: #include <iostream>
#include <cstdio>

using namespace std;

int gcd(int a, int b){
        int r;
       
        while ((r = a % b) != 0){
            a = b;
            b = r;
        }
        return b;
    }

int main(void){
    int a, b, tmp;
   
     if(a<b){
        tmp = a;
        a = b;
        b = tmp;
        }
     
     while(cin >> a >> b){
         int lcm = (a*b)/gcd(a,b);
         cout<<gcd(a,b)<<" "<<lcm<<endl;
     }
     return 0;
}

C++: #include <iostream>
using namespace std;

int gcd(int a,int b) {
  if(a < b) {
    int t = a;
    a = b;
    b = t;
  }
  if(b == 0)
    return  a;
  else
    return gcd(b,a%b);
}

int lcm(int a,int b) {
  return (a/gcd(a,b))*b;
}


int main() {
  int a,b;
  while(cin >> a >> b) {
    cout << gcd(a,b) << " " << lcm(a,b) << endl;
  }
}

C++: #include<iostream>
using namespace std;

int gcd(int a, int b){
	if(b==0) return a;
	return gcd(b, a%b);
}

int main(){
	int n,m;
	while(cin>>n>>m){
		int g,l;
		g = gcd(n,m);
		l = n*m/g;
		cout<<g<<" "<<l<<endl;
	}
	return 0;
}

C++: #include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main() {
    int a,b,a2,b2;
    int lcm,gcd;
    while(cin >> a >> b){
        a2=a;
        b2=b;
        while(a != b){
        if(a>b){a = a-b;}
        else{b=b-a;}
        }
        lcm = a;
        gcd=a2 / lcm * b2;
        cout << lcm << " " << gcd << endl;
    }

}

C++: #include <iostream>
using namespace std;
long long gcd( long long a, long long b )
{
  long long t;
  if( a < b ){ t = a; a = b; b = t; }
  while( ( t = a % b ) != 0 ){ a = b; b = t; }
  return b;
}
long long lcm( long long a, long long b )
{
  return a * b / gcd(a,b);
}
int main( void )
{
  long long a,b;
  while( 1 ){
    cin >> a >> b;
    if( cin.eof() ) break;
    cout << gcd( a, b ) << ' ' << lcm( a, b ) << endl;
  }
  return 0;
}

C++: #include<iostream>
#include<cstdio>
using namespace std;
long long aaa(long long a,long long b){
	while(1){
		a=a%b;
		if(a==0)break;
		swap(a,b);
	}
	return b;
}

int main(){
	long long a,b;
	while(scanf("%lld%lld",&a,&b)!=EOF){
		long long t=aaa(a,b);
		cout<<t<<" "<<a/t*b<<endl;
	}
	return 0;
}

C++: #include <iostream>
#include <cstdio>
using namespace std;
//最大公約数
int gcd(int a, int b) {
    if (b == 0) return a;
    else return gcd(b, a%b);
}

//最小公倍数
int lcm(int a, int b) {
    int ret = gcd(a,b);
    ret = a*(b/ret);
    return ret;
}

int main(int argc, const char * argv[])
{
    int a, b;
    while (~scanf("%d %d", &a, &b)) {
        printf("%d %d\n", gcd(a, b), lcm(a, b));
    }
    return 0;
}