/*
	Factorization of n!
	@Author: md.moniruzzaman
*/

#include<stdio.h>
#define maxn 1000000

char Flag[maxn+1];
int Prime[79000], totalPrime;



void Sieve() {
	int i, j;
	for(i = 2; i*i<=maxn;) {
		for(j = i+i; j<=maxn; j+= i) {
			Flag[j] = 1;
		}
		for(++i; Flag[i]; i++);
	}
	Prime[0] = 2;
	totalPrime = 1;
	for(i = 3; i<maxn; i += 2) { // i+=2 ?? there is no consecutive prime except 2,3
		if(Flag[i] == 0) {
			Prime[totalPrime++] = i;
		}
	}
	
}

int CountFactor(int n, int p) {
	int count = 0;
	for(int i = p; i<= n; i *= p) {
		count += n/i;
	}
	return count;
}

void Factorization(int n) {
	int i, count, flag = 0;
	
	if(n <= 2) {
		printf("%d! = ",n);
		printf(n == 0 ? "1":"%d",n);
		puts("");
		return;
	}
	printf("%d! = ",n);
	for(i = 0; Prime[i]*Prime[i] <= n; i++) {
		count = CountFactor(n,Prime[i]);
		if(flag++ > 0) {
			printf(" x ");
		}
		printf("%d^%d",Prime[i],count);

	}
	for(; Prime[i] <= n; i++) {
		printf(" x %d",Prime[i]);
	}
	puts("");
}

void main() {
	int n;
	Sieve();
	scanf("%d",&n); // n must be <= 1000000
	Factorization(n);
}