#include<iostream>
using namespace std;
bool jud(int value);
int getNums(int value);
void getValue(int array[]);
int getMin(int array[],int length,int data);
void view(int array[],int nums,int value);
int main(int argc,char** argv){
int nums = getNums(10000);
int array[nums];
getValue(array);
int test;
cin >> test;
view(array,nums,test);
return 0;
}
bool jud(int value){
for(int i = 2;i < value;i++){
if(value % i == 0){
return false;
}
}
return true;
}
int getNums(int value){
int order = 0;
for(int i = 2;i <= value;i++){
if(jud(i)){
order++;
}
}
return order;
}
void getValue(int array[]){
int order = 0;
for(int i = 2;i <= 10000;i++){
if(jud(i)){
array[order] = i;
order++;
}
}
}
int getMin(int array[],int length,int data){
for(int i = 0;i < length;i++){
if(data % array[i] == 0){
return array[i];
}
}
return 0;
}
void view(int array[],int nums,int value){
while(getMin(array,nums,value)){
cout << getMin(array,nums,value) << " ";
value = value / getMin(array,nums,value);
}
}