E-小红构造数组_牛客周赛 Round 29 (nowcoder.com)
#include <iostream>
#include <vector>
#include <map>
#include <algorithm>
#define ll long long
using namespace std;
typedef pair<ll, ll> PII;
map<ll, ll> m;
int main() {
ll n;
cin >> n;
if (n == 1) return cout << -1, 0;
vector<PII> v;
for (ll i = 2; i <= n / i; i++) {
while (n % i == 0) {
m[i]++;
n /= i;
}
}
if (n > 1) m[n]++;
for (auto x : m) v.push_back(PII(x.first, x.second));
sort(v.begin(), v.end(), [&](PII i, PII j) {return i.second > j.second;});
ll sum = 0;
for (ll i = 1; i < v.size(); i++) sum += v[i].second;
if (sum < v[0].second - 1) return cout << -1, 0;
vector<ll> ans(v[0].second, v[0].first);
for (ll pos = 1, i = 1; i < v.size(); i++) {
for (ll j = 0; j < v[i].second; j++) {
if (pos > ans.size()) pos = 1;
ans.insert(ans.begin() + pos, v[i].first);
pos += 2;
}
}
cout << ans.size() << endl;
for (ll x : ans) cout << x << " ";
return 0;
}