#include <stdio.h>

int main() {
   long long n;
    scanf("%lld", &n);
    
    // 处理质因数2
    while (n % 2 == 0) {
        printf("2 ");
        n /= 2;
    }
    
    // 处理质因数3
    while (n % 3 == 0) {
        printf("3 ");
        n /= 3;
    }
    
    // 处理其他质因数(6k±1形式)
    long long f = 5;
    int first = 1;  // 标记是否是第一个输出的质因数
    
    // 优化:只在f的平方不超过n时循环
    while (f * f <= n) {
        if (n % f == 0) {
            // 如果是第一个质因数且之前没有输出过,直接输出(避免多余空格)
            if (first) {
                printf("%lld", f);
                first = 0;
            } else {
                printf(" %lld", f);
            }
            n /= f;
        } else {
            // 根据当前f值决定步长(2或4)
            if (f % 6 == 5) {
                f += 2;
            } else {
                f += 4;
            }
        }
    }
    
    // 处理剩余的质因数
    if (n > 1) {
        if (first) {
            printf("%lld", n);
        } else {
            printf(" %lld", n);
        }
    }
    return 0;
}