#include #include #include #include int main() { using namespace std; constexpr int M = 1e4; vector> divs(M + 1); vector>> s(M + 1); int n; cin >> n; vector a(n); for (int i = 0; i < n; i++) { cin >> a[i]; for (int j = 1; j <= a[i] / j; j++) { if (a[i] % j > 0) { continue; } s[j].emplace(a[i], i); divs[i].push_back(j); if (j < a[i] / j) { s[a[i] / j].emplace(a[i], i); divs[i].push_back(a[i] / j); } } } constexpr int INF = 1e6; vector ans(n); int idx = 0; for (int i = 0; i < n; i++) { ans[i] = a[idx]; int min_lcm = INF, min_val = INF, min_pos = 0; for (int div : divs[idx]) { s[div].erase({a[idx], idx}); if (s[div].empty()) { continue; } auto [val, pos] = *s[div].begin(); int lcm = a[idx] * val / div; if (lcm < min_lcm || (lcm == min_lcm && val < min_val)) { min_lcm = lcm; min_val = val; min_pos = pos; } } idx = min_pos; } for (auto e : ans) { cout << e << " "; } cout << endl; }