#include <stdio.h>
#include <stdlib.h>
// 比较函数:用于 qsort 从小到大排序
int compare(const void *a, const void *b) {
return (*(int *)a - *(int *)b);
}
int main() {
int n;
// 读取输入,如果读取失败则直接退出
if (scanf("%d", &n) != 1) {
return 0;
}
// 在 int 范围内,一个数的因数个数最多只有 1600 个左右
// 这里开辟 2000 大小的数组绝对安全,可以直接开在栈上,不需要 malloc
int divisors[2000];
int count = 0;
// 遍历到根号 n
for (int i = 1; i * i <= n; i++) {
if (n % i == 0) {
divisors[count++] = i; // 记录较小的因数
if (i * i != n) {
divisors[count++] = n / i; // 记录成对的较大因数
}
}
}
// 排序
qsort(divisors, count, sizeof(int), compare);
// 格式化输出:因数之间用空格隔开
for (int i = 0; i < count; i++) {
printf("%d", divisors[i]);
if (i < count - 1) {
printf(" ");
}
}
printf("\n");
return 0;
}