#include <bits/stdc++.h>
using namespace std;
struct my_compare {
  bool operator()(const int &a, const int &b) { return (a > b); }
};
long long int gcd(long long int a, long long int b) {
  if (a < b) swap(a, b);
  if (b == 1) return 1;
  if (a % b == 0)
    return b;
  else
    return gcd(b, a % b);
}
vector<long long int> vec;
int main() {
  long long int n;
  cin >> n;
  multiset<long long int, my_compare> st;
  for (int i = 0; i < n * n; i++) {
    long long int x;
    cin >> x;
    st.insert(x);
  }
  for (int i = 0; i < n; i++) {
    multiset<long long int>::iterator it, im;
    it = st.begin();
    long long int num = *it;
    st.erase(it);
    if (i > 0) {
      for (int j = 0; j < vec.size(); j++) {
        st.erase(st.find(gcd(num, vec[j])));
        st.erase(st.find(gcd(num, vec[j])));
      }
    }
    vec.push_back(num);
  }
  for (int i = 0; i < vec.size(); i++) cout << vec[i] << " ";
  cout << "\n";
  return 0;
}
