import java.util.Scanner;

public class Main {

  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);

    while (scanner.hasNext()) {
      long a = scanner.nextLong();
      long b = scanner.nextLong();

      long gcd = gcd(a, b);
      long lcm = (a * b) / gcd;

      System.out.println(gcd + " " + lcm);
    }
  }

  static long gcd(long n, long m) {
    // 剰余を求めて rに入れる
    long r = n % m;
    // nがmの倍数になっているなら最大公約数は m自身になる．
    if (r == 0) {
      return m;
    }
    // n,mの最大公約数は m,rの最大公約数と等しい
    else {
      return gcd(m, r);
    }
  }
}


/tmp/hf-datasets-cache/medium/datasets/42704881117311-config-parquet-and-info-qiankunmu-Project_CodeNet-896c9d36/hub/datasets--qiankunmu--Project_CodeNet_Python800_and_Java250/snapshots/c899fde44a77ba1cc14973ed3de064e4ff3aadc7/Project_CodeNet_Java250.tar.gz