#include #include using std::cin; using std::cout; const char endl = '\n'; int cnt; long long s, ans[500005]; int p, primes[50005]; bool not_prime[50005]; bool is_prime(long long x) { if (x < 2) return false; for (int i = 2; static_cast(i) * i <= x; i++) { if (x % i == 0) return false; } return true; } void dfs(long long now, int pos, long long sum) { if (now == 1) { ans[++cnt] = sum; return; } if (is_prime(now - 1) && now > primes[pos]) { ans[++cnt] = (now - 1) * sum; } for (int i = pos; static_cast(primes[i]) * primes[i] <= now; i++) { for (long long t = primes[i], s = t + 1; s <= now; s += t *= primes[i]) { if (now % s == 0) { dfs(now / s, i + 1, sum * t); } } } } int main() { std::ios::sync_with_stdio(false); cin.tie(nullptr); for (int i = 2; i <= 50000; i++) { if (!not_prime[i]) primes[++p] = i; for (int j = 1; i * primes[j] <= 50000; j++) { not_prime[i * primes[j]] = true; if (i % primes[j] == 0) break; } } while (cin >> s) { cnt = 0; dfs(s, 1, 1); std::sort(ans + 1, ans + cnt + 1); cout << cnt << endl; if (cnt) { for (int i = 1; i <= cnt; i++) { cout << ans[i] << ' '; } cout << endl; } } return 0; }