template void sort_idx_proto(const ITER begin, const ITER end, vector &idx){//, vector &idxr) { size_t n = end - begin; idx.resize(n); idxr.resize(n); for (int i = 0; i < n; ++i) idx[i] = i; sort(idx.begin(), idx.end(), [&begin](int l, int r) {return begin[l] < begin[r]; }); //for (int i = 0; i < n; ++i) idxr[idx[i]] = i; } ll aa[10010]; ll bb[10010]; ll gg[10010]; { rd(n, aa(n)); vector v(n); rep(i, n){ rep(j, i+1, n) gg[j] = gcd(aa[i],aa[j]); sort_idx_proto(gg+i, gg+n, v); rep(j, i+1, n){ bb[j] = aa[v[j]]; } rep(j, i+1, n){ aa[j] = bb[j]; } } wt(aa(n)); }