#include <iostream>
#include <bits/stdc++.h>
#define ll long long
using namespace std;
// give me a prime sieve
void generatePrimeSieve(ll a,ll *arr){
arr[0] = -1;
arr[1] = -1;
arr[2] = 1;
for(ll i =4;i<a+1;i =i+2) arr[i] = -1;
for(ll i = 3;i<a+1;i++){
if(arr[i]==-1) continue;
else{
arr[i] = 1;
for(ll j = i*i;j<a+1;j+=i){
arr[j] = -1;
}
}
}
}
// make prime factors
void generatePrime(ll a,vector<ll> vec){
// isPrime checks for condition of prime number
int isPrime = 1;
int length = a;
for(ll i = 0; i < length;i++){
if(a==1) break;
// this checks for prime condition
if(i>pow(a,.5) && isPrime==1){
cout << a;
break;
}
if(a%vec[i] == 0){
isPrime = 0;
cout << vec[i] << " ";
a = (a/vec[i]);
i--;
}
}
}
int main() {
ll *arr = new ll [1000005];
vector<ll> primes;
generatePrimeSieve(1000005,arr);
// make a large size , primeVector (can reduce its size if needed)
for(ll i = 0;i<1000005;i++){
if(arr[i] == 1) {
primes.push_back(i);
// cout << i << " ";
}
}
ll a;
cin >> a;
generatePrime(a,primes);
}