package maratonacps2019_1;

import java.io.BufferedReader;
import java.io.InputStreamReader;

/**
 * @author Prof. Henrique Louro
 */
public class Bolinha {

    public static void main(String[] args) {

        int qtdePrimos = 8;
        int n = 1;

        int primos[] = new int[qtdePrimos];
        long fatoriais[] = new long[qtdePrimos];
        int c = 1;

        while (c <= qtdePrimos) {
            n++;
            boolean r = true;
            for (int i = 2; i <= (int) (n / 2); i++) {
                if (n % i == 0) {
                    r = false;
                    break;
                }
            }
            if (r) {
                primos[c - 1] = n;
                c++;
            }
        }

        for (int f = 0; f < qtdePrimos; f++) {
            long fat = 1;
            for (int x = 1; x <= primos[f]; x++) {
                fat *= (long) x;
            }
            fatoriais[f] = fat;
        }
        
        String linha = "";

        BufferedReader entrada;

        try {

            entrada = new BufferedReader(new InputStreamReader(System.in));

            while ((linha = entrada.readLine()) != null) {

                if (linha.equals("0")) {
                    break;
                }

                long f = Long.parseLong(linha);

                for (int x = 0; x < qtdePrimos; x++) {
                    if(f == fatoriais[x]){
                        System.out.print(primos[x]+"! = ");
                        for(int y = primos[x];y>0;y--){
                            System.out.print(y+" ");
                            if (y>1){
                                System.out.print(". ");
                            }else{
                                System.out.print("= ");
                            }
                        }
                        System.out.println(fatoriais[x]);
                    }
                }
            }

        } catch (Exception e) {
            System.out.println("Ocorreu um erro durante a leitura!\n" + e);
        }
    }
}
