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.io.*;
import java.util.*;

public class Bacteria {
    public static void main(String args[]) throws IOException{
        Scanner sc = new Scanner(System.in);
        PrintWriter pw = new PrintWriter(System.out);
        int t = sc.nextInt();
        while(t--!=0){
            int n = sc.nextInt();
            int a=-1,b=-1,c=-1;
            int sq = (int)Math.sqrt(n);
            for(int i=2;i<=sq;i++){
                if(n%i==0){
                    a=i;n=n/i;
                    break;
                }
            }
            sq = (int)Math.sqrt(n);
            for(int i=2;i<=sq;i++){
                if(n%i==0 && i!=a && i!=n/i){
                    b=i;c=n/i;break;
                }
            }
            if(a==-1 || b==-1 || c==-1){
                pw.println("NO");
            }else{
                pw.println("YES");
                pw.println(a+" "+b+" "+c);
            }
        }
        pw.close();
    }
    static class Scanner {
	StringTokenizer st;
	BufferedReader br;
        
	public Scanner(InputStream s) {
		br = new BufferedReader(new InputStreamReader(s));
	}
        
	public Scanner(String file) throws FileNotFoundException {
		br = new BufferedReader(new FileReader(file));
        }
	public String next() throws IOException {
		while (st == null || !st.hasMoreTokens())
			st = new StringTokenizer(br.readLine());
		return st.nextToken();
	}
	public int nextInt() throws IOException {
		return Integer.parseInt(next());
	}

	public long nextLong() throws IOException {
		return Long.parseLong(next());
	}

	public String nextLine() throws IOException {
		return br.readLine();
	}

	public double nextDouble() throws IOException {
		return Double.parseDouble(next());
	}

	public boolean ready() throws IOException {
		return br.ready();
	}

    }
}