#include <cstdio>
#include <bitset> // compact STL for Sieve, more efficient than vector<bool>!
#include <vector>
using namespace std;
typedef long long ll;
typedef vector< int > vi;
ll _sieve_size; // ll is defined as: typedef long long ll;
bitset< 10000010 > bs; // 10^7 should be enough for most cases
vi primes; // compact list of primes in form of vector<int>
void sieve( ll upperbound) { // create list of primes in [0..upperbound]
_sieve_size = upperbound + 1 ; // add 1 to include upperbound
bs.set ( ) ; // set all bits to 1
bs[ 0 ] = bs[ 1 ] = 0 ; // except index 0 and 1
for ( ll i = 2 ; i <= _sieve_size; i++ ) if ( bs[ i] ) {
// cross out multiples of i starting from i * i!
for ( ll j = i * i; j <= _sieve_size; j + = i) bs[ j] = 0 ;
primes.push_back ( ( int ) i) ; // also add this vector containing list of primes
} } // call this method in main method
bool isPrime( ll N) { // a good enough deterministic prime tester
if ( N <= _sieve_size) return bs[ N] ; // O(1) for small primes
for ( int i = 0 ; i < ( int ) primes.size ( ) ; i++ )
if ( N % primes[ i] == 0 ) return false ;
return true ; // it takes longer time if N is a large prime!
}
vi primeFactors( ll N) { // remember: vi is vector<int>, ll is long long
vi factors;
ll PF_idx = 0 , PF = primes[ PF_idx] ; // using PF = 2, then 3,5,7,... is also ok
while ( N ! = 1 && ( PF * PF <= N) ) { // stop at sqrt(N), but N can get smaller
while ( N % PF == 0 ) { N / = PF; factors.push_back ( PF) ; } // remove this PF
PF = primes[ ++ PF_idx] ; // only consider primes!
}
if ( N ! = 1 ) factors.push_back ( N) ; // special case if N is actually a prime
return factors; // if N does not fit in 32-bit integer and is a prime number
}
ll abss( ll a) {
if ( a < 0 ) {
a = 0 - a;
}
return a;
}
int main( ) {
sieve( 10000000 ) ;
ll t;
while ( true ) {
scanf ( "%lld" , & t) ;
if ( ! t) break ;
ll N = abss( t) ;
vi fac = primeFactors( N) ;
printf ( "%lld = " , t) ;
if ( t < 0 ) {
printf ( "%d x %d" , - 1 , fac[ 0 ] ) ;
} else {
printf ( "%d" , fac[ 0 ] ) ;
}
for ( int i = 1 ; i < fac.size ( ) ; i++ ) {
printf ( " x %d" , fac[ i] ) ;
}
printf ( "\n " ) ;
}
}
I2luY2x1ZGUgPGNzdGRpbz4KI2luY2x1ZGUgPGJpdHNldD4gLy8gY29tcGFjdCBTVEwgZm9yIFNpZXZlLCBtb3JlIGVmZmljaWVudCB0aGFuIHZlY3Rvcjxib29sPiEKI2luY2x1ZGUgPHZlY3Rvcj4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp0eXBlZGVmIGxvbmcgbG9uZyBsbDsKdHlwZWRlZiB2ZWN0b3I8aW50PiB2aTsKCgpsbCBfc2lldmVfc2l6ZTsgLy8gbGwgaXMgZGVmaW5lZCBhczogdHlwZWRlZiBsb25nIGxvbmcgbGw7CmJpdHNldDwxMDAwMDAxMD4gYnM7IC8vIDEwXjcgc2hvdWxkIGJlIGVub3VnaCBmb3IgbW9zdCBjYXNlcwp2aSBwcmltZXM7IC8vIGNvbXBhY3QgbGlzdCBvZiBwcmltZXMgaW4gZm9ybSBvZiB2ZWN0b3I8aW50PgoKdm9pZCBzaWV2ZShsbCB1cHBlcmJvdW5kKSB7IC8vIGNyZWF0ZSBsaXN0IG9mIHByaW1lcyBpbiBbMC4udXBwZXJib3VuZF0KICAgIF9zaWV2ZV9zaXplID0gdXBwZXJib3VuZCArIDE7IC8vIGFkZCAxIHRvIGluY2x1ZGUgdXBwZXJib3VuZAogICAgYnMuc2V0KCk7IC8vIHNldCBhbGwgYml0cyB0byAxCiAgICBic1swXSA9IGJzWzFdID0gMDsgLy8gZXhjZXB0IGluZGV4IDAgYW5kIDEKICAgIGZvciAobGwgaSA9IDI7IGkgPD0gX3NpZXZlX3NpemU7IGkrKykgaWYgKGJzW2ldKSB7CiAgICAgICAgLy8gY3Jvc3Mgb3V0IG11bHRpcGxlcyBvZiBpIHN0YXJ0aW5nIGZyb20gaSAqIGkhCiAgICAgICAgZm9yIChsbCBqID0gaSAqIGk7IGogPD0gX3NpZXZlX3NpemU7IGogKz0gaSkgYnNbal0gPSAwOwogICAgICAgICAgICAgcHJpbWVzLnB1c2hfYmFjaygoaW50KWkpOyAvLyBhbHNvIGFkZCB0aGlzIHZlY3RvciBjb250YWluaW5nIGxpc3Qgb2YgcHJpbWVzCiAgICB9IH0gLy8gY2FsbCB0aGlzIG1ldGhvZCBpbiBtYWluIG1ldGhvZAoKYm9vbCBpc1ByaW1lKGxsIE4pIHsgLy8gYSBnb29kIGVub3VnaCBkZXRlcm1pbmlzdGljIHByaW1lIHRlc3RlcgogICAgaWYgKE4gPD0gX3NpZXZlX3NpemUpIHJldHVybiBic1tOXTsgLy8gTygxKSBmb3Igc21hbGwgcHJpbWVzCiAgICBmb3IgKGludCBpID0gMDsgaSA8IChpbnQpcHJpbWVzLnNpemUoKTsgaSsrKQogICAgICAgIGlmIChOICUgcHJpbWVzW2ldID09IDApIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsgLy8gaXQgdGFrZXMgbG9uZ2VyIHRpbWUgaWYgTiBpcyBhIGxhcmdlIHByaW1lIQp9Cgp2aSBwcmltZUZhY3RvcnMobGwgTikgeyAvLyByZW1lbWJlcjogdmkgaXMgdmVjdG9yPGludD4sIGxsIGlzIGxvbmcgbG9uZwogICB2aSBmYWN0b3JzOwogICBsbCBQRl9pZHggPSAwLCBQRiA9IHByaW1lc1tQRl9pZHhdOyAvLyB1c2luZyBQRiA9IDIsIHRoZW4gMyw1LDcsLi4uIGlzIGFsc28gb2sKICAgd2hpbGUgKE4gIT0gMSAmJiAoUEYgKiBQRiA8PSBOKSkgeyAvLyBzdG9wIGF0IHNxcnQoTiksIGJ1dCBOIGNhbiBnZXQgc21hbGxlcgogICAgICAgd2hpbGUgKE4gJSBQRiA9PSAwKSB7IE4gLz0gUEY7IGZhY3RvcnMucHVzaF9iYWNrKFBGKTsgfSAvLyByZW1vdmUgdGhpcyBQRgogICAgICAgUEYgPSBwcmltZXNbKytQRl9pZHhdOyAvLyBvbmx5IGNvbnNpZGVyIHByaW1lcyEKICAgfQogICAKICAgaWYgKE4gIT0gMSkgZmFjdG9ycy5wdXNoX2JhY2soTik7IC8vIHNwZWNpYWwgY2FzZSBpZiBOIGlzIGFjdHVhbGx5IGEgcHJpbWUKICAgcmV0dXJuIGZhY3RvcnM7IC8vIGlmIE4gZG9lcyBub3QgZml0IGluIDMyLWJpdCBpbnRlZ2VyIGFuZCBpcyBhIHByaW1lIG51bWJlcgp9CgpsbCBhYnNzKGxsIGEpewogICAgaWYoYSA8IDApewogICAgICAgICBhID0gMCAtIGE7CiAgICB9CiAgICByZXR1cm4gYTsKfQoKaW50IG1haW4oKXsKICAgIHNpZXZlKDEwMDAwMDAwKTsKICAgIGxsIHQ7CiAgICB3aGlsZSh0cnVlKXsKICAgICAgICBzY2FuZigiJWxsZCIsICZ0KTsKICAgICAgICAKICAgICAgICBpZighdCkgYnJlYWs7CiAgICAgICAgCiAgICAgICAgbGwgTiA9IGFic3ModCk7CiAgICAgICAgdmkgZmFjID0gcHJpbWVGYWN0b3JzKE4pOwogICAgICAgIHByaW50ZigiJWxsZCA9ICIsIHQpOwogICAgICAgIGlmKHQgPCAwKXsKICAgICAgICAgICAgIHByaW50ZigiJWQgeCAlZCIsIC0xLCBmYWNbMF0pOwogICAgICAgIH1lbHNlewogICAgICAgICAgICBwcmludGYoIiVkIiwgZmFjWzBdKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZm9yKGludCBpID0gMTsgaSA8IGZhYy5zaXplKCk7IGkrKyl7CiAgICAgICAgICAgIHByaW50ZigiIHggJWQiLCBmYWNbaV0pOwogICAgICAgIH0KICAgICAgICBwcmludGYoIlxuIik7CiAgICB9Cn0K