Problem: You are given one integer number n. Find three distinct integers a, b, c such that 2 ≤ a, b, c and a ⋅ b ⋅ c = n or say that it is impossible to do it.

If there are several answers, you can print any.

You have to answer t independent test cases.

Input

The first line of the input contains one integer t (1 ≤ t ≤ 100) — the number of test cases.

The next n lines describe test cases. The i-th test case is given on a new line as one integer n (2 ≤ n ≤ 10^9).

Output

For each test case, print the answer on it. Print "NO" if it is impossible to represent n as a ⋅ b ⋅ c for some distinct integers a, b, c such that 2 ≤ a, b, c.

Otherwise, print "YES" and any possible such representation.

Example

Input


5
64
32
97
2
12345


Output


YES
2 4 8 
NO
NO
NO
YES
3 5 823 

Solution (in JAVA):

Solution:
				
import java.util.*;import java.io.*;import java.math.*;

public class Main
{

    public static void process()throws IOException
    {
        int n=ni();
        if(n==2){
            pn("NO");
            return;
        }
        ArrayList<Pair> li = new ArrayList<>();
        int t=n;
        long po=0l;
        int c=0;
        while (n % 2 == 0) { 
            //System.out.print(2 + " "); 
            c++;
            n /= 2; 
        } 
        if(c!=0){
            li.add(new Pair(2,c));
            po+=c;
        }
        for (int i = 3; i <= Math.sqrt(n); i += 2) { 
            c=0;
            while (n % i == 0) { 
               // System.out.print(i + " "); 
                c++;
                n /= i; 
            }
            if(c!=0){
             li.add(new Pair(i,c)); 
             po+=c;
            }
        } 
  
        if (n > 2) {
            if(n==t){
                pn("NO");
                return;
            }
            li.add(new Pair(n,1));
        }

        int a=li.get(0).n,b=1;

        li.get(0).p=li.get(0).p-1;
       // System.out.println("pow"+li.get(0).p);
        if(li.get(0).p>=2)
            b=(li.get(0).n)*(li.get(0).n);
        else if(li.get(0).p==1){
            if(li.size()==1){
                pn("NO");
                return;
            }
            b=(li.get(0).n)*(li.get(1).n);
        }
        else{
            if(li.size()==1){
                pn("NO");
                return;
            }
            b=li.get(1).n;
        }

        long ca=t/(a*b);

        if(ca==a || ca==b || ca==1){
            pn("NO");
            return;
        }
        pn("YES");
        pn(a+" "+b+" "+ca);
    }

    static class Pair{int n,p; public Pair(int n,int p){this.n=n;this.p=p;}}
   	static AnotherReader sc;
    static PrintWriter out;
    public static void main(String[]args)throws IOException
    {
        out = new PrintWriter(System.out);
        sc=new AnotherReader();
        boolean oj = true;

    	oj = System.getProperty("ONLINE_JUDGE") != null;
    	if(!oj) sc=new AnotherReader(100);

        long s = System.currentTimeMillis();
        int t=ni();
        while(t-->0)
            process();
        out.flush();
        if(!oj)
            System.out.println(System.currentTimeMillis()-s+"ms");
        System.out.close();  
    }

    static void pn(Object o){out.println(o);}
    static void p(Object o){out.print(o);}
    static void pni(Object o){out.println(o);System.out.flush();}
    static int ni()throws IOException{return sc.nextInt();}
    static long nl()throws IOException{return sc.nextLong();}
    static double nd()throws IOException{return sc.nextDouble();}
    static String nln()throws IOException{return sc.nextLine();}
    static long gcd(long a, long b)throws IOException{return (b==0)?a:gcd(b,a%b);}
    static int gcd(int a, int b)throws IOException{return (b==0)?a:gcd(b,a%b);}
    static int bit(long n)throws IOException{return (n==0)?0:(1+bit(n&(n-1)));}
    static boolean multipleTC=false;



/////////////////////////////////////////////////////////////////////////////////////////////////////////

    static class AnotherReader{BufferedReader br; StringTokenizer st;
    AnotherReader()throws FileNotFoundException{
    br=new BufferedReader(new InputStreamReader(System.in));}
    AnotherReader(int a)throws FileNotFoundException{
    br = new BufferedReader(new FileReader("input.txt"));}
    String next()throws IOException{
    while (st == null || !st.hasMoreElements()) {try{
    st = new StringTokenizer(br.readLine());}
    catch (IOException  e){ e.printStackTrace(); }}
    return st.nextToken(); } int nextInt() throws IOException{
    return Integer.parseInt(next());}
    long nextLong() throws IOException
    {return Long.parseLong(next());}
    double nextDouble()throws IOException { return Double.parseDouble(next()); }
    String nextLine() throws IOException{ String str = ""; try{
    str = br.readLine();} catch (IOException e){
    e.printStackTrace();} return str;}}
    
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
}