// Ilie "The-Winner" Dumitru
// Dumnezeu sa o ierte
#include<bits/stdc++.h>
#define sz(x) ((int)(x).size())
#define all(x) (x).begin(), (x).end()
#define err(...) fprintf(stderr, __VA_ARGS__)
using ll=long long;
using dbl=long double;
constexpr int NMAX=100'005;
constexpr ll MOD=1'000'000'007;
constexpr int P=77;
constexpr int primes[P]={2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389};
constexpr int CMAX=15;
constexpr ll BASE=1LL<<40;
constexpr int SMAX=4500;
struct nr
{
int N;
ll v[CMAX];
nr()
{
N=1;
memset(v, 0, sizeof(v));
}
nr(ll x)
{
N=0;
memset(v, 0, sizeof(v));
do
{
v[N++]=x%BASE;
}while(x/=BASE);
}
friend bool operator<(const nr& a, const nr& b)
{
if(a.N!=b.N)
return a.N<b.N;
for(int i=a.N-1;i>-1;--i)
if(a.v[i]!=b.v[i])
return a.v[i]<b.v[i];
return 0;
}
friend nr operator*(const nr& a, int x)
{
nr b;
ll t;
for(b.N=t=0;b.N<a.N || t;++b.N)
{
t+=a.v[b.N]*x;
b.v[b.N]=t%BASE;
t/=BASE;
}
return b;
}
};
nr dp[P+1][SMAX];
int chosen[P+1][SMAX];
void getSol(int S, FILE* out, int mult)
{
int i, j, pow, sum, sumMax, primMax;
dp[0][0]=nr(1);
for(i=0;i<P;++i)
for(sum=0;sum<=S;++sum)
for(pow=1;pow<=sum;pow*=primes[i])
{
nr x=dp[i][sum-pow]*pow;
if(dp[i+1][sum]<x)
{
dp[i+1][sum]=x;
chosen[i+1][sum]=pow;
}
}
sumMax=primMax=0;
for(i=1;i<=P;++i)
for(j=0;j<=S;++j)
if(dp[primMax][sumMax]<dp[i][j])
{
primMax=i;
sumMax=j;
}
i=primMax;
j=sumMax;
if(j<S)
fprintf(out, "%d ", (S-j)*mult);
while(i>0)
{
fprintf(out, "%d ", chosen[i][j]*mult);
j-=chosen[i][j];
--i;
}
fprintf(out, "\n");
}
bool isPrime(int x)
{
if(x<2 || (x>2 && x%2==0))
return 0;
for(int d=3;d*d<=x;d+=2)
if(x%d==0)
return 0;
return 1;
}
int main()
{
FILE* f=fopen("nummst.in", "r"), *g=fopen("nummst.out", "w");
int N, d;
// for(d=2;d<6000;++d)
// if(isPrime(d))
// printf("%d, ", d);
fscanf(f, "%d", &N);
if(N%2==0)
fprintf(g, "%d %d\n", N/2, N/2);
else
for(d=3;d*d<=N;++d)
if(N%d==0)
{
getSol(d, g, N/d);
break;
}
fclose(f);
fclose(g);
return 0;
}