#include <stdio.h>
#include <math.h>

// 這個函數用來進行質因數分解
void primeFactorization(unsigned long long n) {
    int first = 1; // 用來控制輸出格式，避免第一個因數前有乘號 (*)

    // 處理2這個特殊質數
    int count = 0;
    while (n % 2 == 0) {  // 檢查n能否被2整除
        n = n / 2;
        count++;  // 記錄2的次方
    }
    if (count > 0) {
        if (!first) {  // 如果 first 為 0（表示已經輸出過質因數），才輸出乘號 (*)
            printf(" * ");
        }
        printf("2");  // 輸出質因數2
        if (count > 1) {
            printf("^%d", count);  // 只有當次方大於1時才輸出次方
        }
        first = 0;  // 設定 first 為 0，表示已經輸出過質因數，接下來再輸出需要加乘號
    }

    // 從3開始，處理其他質數，這裡只檢查奇數
    for (unsigned long long i = 3; i <= sqrt(n); i += 2) {
        count = 0;
        while (n % i == 0) {  // 檢查n能否被i整除
            n = n / i;
            count++;  // 記錄i的次方
        }
        if (count > 0) {
            if (!first) {  // 如果 first 為 0（表示已經輸出過質因數），才輸出乘號 (*)
                printf(" * ");
            }
            printf("%llu", i);  // 輸出質因數i
            if (count > 1) {
                printf("^%d", count);  // 只有當次方大於1時才輸出次方
            }
            first = 0;  // 設定 first 為 0，表示已經輸出過質因數
        }
    }

    // 如果n大於1，表示n本身就是一個質數，直接輸出
    if (n > 1) {
        if (!first) {  // 如果 first 為 0（表示已經輸出過質因數），才輸出乘號 (*)
            printf(" * ");
        }
        printf("%llu", n);  // n本身就是質數，因為沒有次方，直接輸出
    }

    printf("\n");  // 結束時換行
}

int main() {
    unsigned long long n;

    // 不斷讀取輸入的數字，直到沒有更多的輸入
    while (scanf("%llu", &n) != EOF) {
        primeFactorization(n);  // 調用質因數分解函數
    }

    return 0;
}