/**
 🍪 the_hyp0cr1t3
 🍪 30.05.2021 04:20:37
**/
#ifdef W
    #include <k_II.h>
#else
    #include <bits/stdc++.h>
    using namespace std;
#endif
#define pb emplace_back
#define all(x) x.begin(), x.end()
#define sz(x) static_cast<int32_t>(x.size())
 
const int64_t k_II = 2e18;
const int INF = 2e9, MOD = 1e9+7;
const int N = 1e7 + 5;
 
int main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    int n;
    // spf is the smallest prime factor
    // precompute spf for all n using prime sieve (O(n loglogn))
    array<int, N> spf; iota(all(spf), 0);
    for(int z = 4; z < N; z += 2) spf[z] = 2;
    for(int z = 3; z*z < N; z += 2)
        if(spf[z] == z) for(int y = z*z; y < N; y += z*2)
            if(spf[y] == y) spf[y] = z;
 
    // Answer queries in O(log n) per query.
    // Log n because the maximum number of prime factors is log2 n.
    while(cin >> n) {
        cout << 1;
        while(n > 1) {
            cout << " x " << spf[n];
            n /= spf[n];
        } cout << '\n';
    }
    
} // ~W