import java.io.*; import java.util.*; import java.math.*; public class PaymentSystem { // --------------------------------------------------------------------- // scanner from the standard input private static final Scanner cin = new Scanner(System.in); // 2^N >= 10^100 - 1 private static final int N = 400; // 2^(...) is the best if (input value) >= BOUNDARY private static final BigInteger BOUNDARY = new BigInteger("64"); // minimum prime factor private static final int[] minp = new int[N]; // the best exponent private static final int[] best = new int[N]; // --------------------------------------------------------------------- static { for(int i = 2; i < N; i++) { for(int j = 2; j <= i; j++) { if(i % j == 0) { minp[i] = j; break; } } } best[1] = 1; best[3] = 3; best[5] = 5; best[9] = 9; for(int i = 1; i < N; i++) { if(best[i] != 0) { if(2 * i < N) best[2 * i] = 2 * i; } else best[i] = best[i - 1]; } } // --------------------------------------------------------------------- private static String exponent(int n) { String s = ""; while(n > 1) { if(n == 6) return s + "^3^2"; s += "^" + minp[n]; n /= minp[n]; } return s; } private static String solveForSmallNumber(int n) { for(int i = 2; i * i <= n; i++) { int j = 0; int m = 1; while(m < n) { m *= i; j++; } if(m == n) { return Integer.toString(i) + exponent(j); } } return Integer.toString(n); } public static void main(String[] args) { while(cin.hasNext()) { BigInteger bn = cin.nextBigInteger(); if(bn.compareTo(BOUNDARY) >= 0) System.out.println("2" + exponent(best[bn.bitLength() - 1])); else System.out.println(solveForSmallNumber(bn.intValue())); } } // --------------------------------------------------------------------- }