#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

int main() {
    int num;

    while (cin >> num) {
        for (int i = 2; 1ll * i * i <= num;
                i++) //1LL会在运算时把后面的临时数据扩容成long long类型
//n的值在每次循环结束可能会改变
//类似于辗转相除法
//隐含的判断条件是当前的n没有小于sqrt(n)的因子,即n为质数,假如当前i小于等于sqrt(n),那么一定可以继续往下除
//?可不可能除以一个合数i 判断不太可能,因为是由小到大的顺序,合数i的因数已经除了


//            if(n%i==0)
            while (num % i == 0) {
                cout << i << ' ';
                num /= i;
            }
        if (num != 1)
            cout << num;

    }
}