///=======================================//
///    Author     : Maruf Tuhin           //
///    School     : CUET CSE 11           //
///    TopCoder   : the_redback           //
///    Codeforces : maruf.2hin            //
///    UVA        : Redback               //
///    http://w...content-available-to-author-only...b.com/maruf.2hin       //
///=======================================//
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
#define MAX 50001
unsigned long pr[(MAX>>5) +1];

void sieve(int n)
{
    long i,j,k,l;
    pr[0]=pr[0]|1<<1;

    for(i=4; i<=n; i+=2)
        pr[i>>6]=pr[i>>5]|1<<(i&31);

    for(i=3; i*i<=n; i+=2)
    {
        if(!(pr[i>>5]&1<<(i&31)))
        {
            for(j=i*i; j<=n; j+=2*i)
                pr[j>>5]=pr[j>>5]|1<<(j&31);
        }
    }
}

main()
{
    vector<int>v;
    sieve(50000);
    long long n,m;
    long long k;
    long long i;
    int j,t;
    while(scanf("%lld",&m)==1)
    {
        if(m==0)
            return 0;
        if(m<0)
        {
            n=m*-1;
        }
        else
            n=m;
        k=n;
        for(i=2; i*i<=n; i++)
        {
            while(pr[i>>5]&1<<(i&31))
            {
                i++;
            }
            while(k%i==0)
            {
                k/=i;
                v.push_back(i);
            }
            if(k==1)
                break;
        }
        printf("%lld = ",m);
        t=0;
        if(m<0)
        {
            printf("-1");
            t=1;
        }
        for(i=0; i<v.size(); i++)
        {
            if(t!=0)
                printf(" x ");
            printf("%d",v[i]);
            t=1;
        }
        if(k!=1)
        {
            if(t!=0)
                printf(" x ");
            printf("%lld",k);
        }
        printf("\n");
        v.clear();
    }
    return 0;
}
