#include <bits/stdc++.h>
using namespace std;
int n, k, z, v, tab[1000005], pom2[1000005];
map<int, int> pom;
vector<int> wynik;
int gcde(int a, int b) {
  int c;
  while (a != 0) {
    c = a;
    a = b % a;
    b = c;
  }
  return b;
}
bool ok;
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n;
  k = n * n;
  for (int i = 0; i < k; i++) cin >> tab[i];
  sort(tab, tab + k);
  for (int i = k - 1; i >= 0; i--) {
    ok = false;
    if (tab[i] > 1000002) {
      if (pom[tab[i]] == 0)
        wynik.push_back(tab[i]), ok = true;
      else
        pom[tab[i]]--;
    } else {
      if (pom2[tab[i]] == 0)
        wynik.push_back(tab[i]), ok = true;
      else
        pom2[tab[i]]--;
    }
    if (wynik.size() == n) break;
    if (ok) {
      for (int j = 0; j < wynik.size() - 1; j++) {
        z = gcde(wynik.back(), wynik[j]);
        if (z > 1000002)
          pom[z] += 2;
        else
          pom2[z] += 2;
      }
    }
  }
  for (int i = 0; i < wynik.size(); i++) cout << wynik[i] << " ";
  cout << "\n";
  return 0;
}
