Problem: Bizon the Champion isn't just friendly, he also is a rigorous coder.

Let's define function f(a), where a is a sequence of integers. Function f(a) returns the following sequence: first all divisors of a1 go in the increasing order, then all divisors of a2 go in the increasing order, and so on till the last element of sequence a. For example, f([2, 9, 1]) = [1, 2, 1, 3, 9, 1].

Let's determine the sequence Xi, for integer i (i ≥ 0): X0 = [X] ([X] is a sequence consisting of a single number X), Xi = f(Xi - 1) (i > 0). For example, at X = 6 we get X0 = [6], X1 = [1, 2, 3, 6], X2 = [1, 1, 2, 1, 3, 1, 2, 3, 6].

Given the numbers X and k, find the sequence Xk. As the answer can be rather large, find only the first 105 elements of this sequence.

Input

A single line contains two space-separated integers — X (1 ≤ X ≤ 1012) and k (0 ≤ k ≤ 1018).

Output

Print the elements of the sequence Xk in a single line, separated by a space. If the number of elements exceeds 105, then print only the first 105 elements.

Examples

Input

6 1


Output

1 2 3 6 


Input

4 2


Output

1 1 2 1 2 4 


Input

10 3


Output

1 1 1 2 1 1 5 1 1 2 1 5 1 2 5 10 

Solution (in JAVA):

Solution:

import com.sun.org.apache.bcel.internal.generic.AALOAD;
import java.io.*;
import java.util.*;
import java.math.BigInteger.*;
import static java.lang.Math.*;
import static java.math.BigInteger.*;
import static java.util.Arrays.*;
import java.util.logging.Level;
import java.util.logging.Logger;

// https://netbeans.org/kb/73/java/editor-codereference_ru.html#display
//<editor-fold defaultstate="collapsed" desc="Main">
public class Main {

    private void run() {
        Locale.setDefault(Locale.US);
        boolean oj = true;
        try {
            oj = System.getProperty("MYLOCAL") == null;
        } catch (Exception e) {
        }

        if (oj) {
            sc = new FastScanner(new InputStreamReader(System.in));
            out = new PrintWriter(new OutputStreamWriter(System.out));
        } else {
            try {
                sc = new FastScanner(new FileReader("input.txt"));
                out = new PrintWriter(new FileWriter("output.txt"));
            } catch (IOException e) {
                MLE();
            }
        }
        Solver s = new Solver();
        s.sc = sc;
        s.out = out;
        s.solve();
        if (!oj) {
            err.println("Time: " + (System.currentTimeMillis() - timeBegin) / 1e3);
            err.printf("Mem: %d\n", (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) >> 20);
        }
        out.flush();
    }

    private void show(int[] arr) {
        for (int v : arr) {
            err.print(" " + v);
        }
        err.println();
    }

    public static void exit() {
        out.flush();
        out.close();
        System.exit(0);
    }
    
    public static void MLE() {
        int[][] arr = new int[1024 * 1024][];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = new int[1024 * 1024];
        }
    }

    public static void main(String[] args) {
        new Main().run();
    }

    long timeBegin = System.currentTimeMillis();
    static FastScanner sc;
    static PrintWriter out;
    static PrintStream err = System.err;
}
//</editor-fold>

//<editor-fold defaultstate="collapsed" desc="FastScanner">
class FastScanner {

    BufferedReader br;
    StringTokenizer st;

    FastScanner(InputStreamReader reader) {
        br = new BufferedReader(reader);
        st = new StringTokenizer("");
    }

    String next() {
        while (!st.hasMoreElements()) {
            try {
                st = new StringTokenizer(br.readLine());
            } catch (IOException ex) {
                Main.MLE();
            }
        }
        return st.nextToken();
    }

    int nextInt() {
        return Integer.parseInt(next());
    }

    long nextLong() {
        return Long.parseLong(next());
    }
}
//</editor-fold>


class Rib{
    int v, to;
    Rib( int v, int to ){
        this.v  = v;
        this.to = to;
    }
}

class Solver {

    FastScanner sc;
    PrintWriter out;
    PrintStream err = System.err;

    final int maxSz = (int)1e5;
    HashMap<Long, ArrayList<Long>> hm = new HashMap<>();
    ArrayList<Long> arr = new ArrayList<>();
    
    ArrayList<Long> getDiv( long x ){
        //err.println( "\t\t" + x );
        if( !hm.containsKey(x) ){
            TreeSet<Long> div = new TreeSet<>();
            for( long d = 1; d * d <= x; ++d ){
                if( x % d == 0 ){
                    div.add( d );
                    div.add( x / d );
                }
            }
            hm.put( x, new ArrayList<>(div) );
        }
        return hm.get(x);
    }
    
    void cheak(){   
        if( maxSz <= arr.size() ){
            show();
            Main.exit();
        }
    }
    
    void show(){
        for (int i = 0; i < min( maxSz, arr.size() ); i++)
            out.print( " " + arr.get(i) );
        out.println();
    }
    
    void f( long x, long k ){
        //err.println( ":: " + arr.size() );
        if( x == 1 ){
            arr.add(x);
            cheak();
        }
        else if( k == 0 ){
            arr.add(x);
            cheak();
        }
        else{
            getDiv(x).stream().forEach((d) -> {
                f( d, k - 1 );
            });
        }
    }
    
    void solve(){
        f( sc.nextLong(), sc.nextLong() );
        show();
    }



}