#include using namespace std; typedef pair P; int a[10010]; int res[10010]; int done[10010]; priority_queue,greater

> Q[10010]; int main(){ int N; cin >> N; for(int i = 0 ; i < N ; i++){ cin >> a[i]; for(int j = 1 ; j * j <= a[i] ; j++){ if( a[i] % j == 0 ){ Q[a[i]/j].push({a[i],i}); Q[j].push({a[i],i}); } } } int p; for(int i = 0 ; i < N ; i++){ if( i == 0 ){ res[0] = 0; p = a[0]; done[0] = 1; }else{ vector d; for(int j = 1 ; j * j <= p ; j++){ if( p % j == 0 ){ d.push_back(p/j); d.push_back(j); } } array cand = {INT_MAX,INT_MAX,INT_MAX}; for( auto e : d ){ while( Q[e].size() && done[Q[e].top().second] ) Q[e].pop(); if( Q[e].size() ){ cand = min(cand,{p / e * Q[e].top().first,Q[e].top().first,Q[e].top().second}); } } p = cand[1]; res[i] = cand[2]; // cout << cand.first << " " << cand.second << "|" << endl; done[cand[2]] = 1; } } for(int i = 0 ; i < N ; i++){ cout << a[res[i]] << (i+1==N?"\n":" "); } }