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.util.Map.Entry;
import java.lang.*;
import java.math.*;
import java.text.*;
import java.io.*;
		public final class Solve {
		static PrintWriter out = new PrintWriter(System.out); 
		static void flush() {
	 	out.flush();
	 	}
		static void run(long s, long e) {
		NumberFormat formatter = new DecimalFormat("#0.00000");
		System.out.print("Execution time is " + formatter.format((e - s) / 1000d) + " seconds");
		}
		static int gcd(int a, int b) { 
			if (b == 0) return a; 
			return gcd(b, a % b);  
		}
		static long gcd(long a, long b) { 
			if (b == 0) return a; 
			return gcd(b, a % b);  
		}
		static long lcm(long a, long b) { 
			return a*b/gcd(a, b);  
		}
		static class FastReader {
	     static BufferedReader br;
	    StringTokenizer st;
	
	    public FastReader() {
	    br = new BufferedReader(new
	    InputStreamReader(System.in));
	    }
	    static boolean isPalindrome(String str1, String str2) {
	    String str3 = str1+str2;
	    int i = 0, j = str3.length()-1;
	    while(i < j) {
	    char a = str3.charAt(i), b = str3.charAt(j);
	    if(a != b) return false;
	    i++;j--;
	    }	
	    return true;
	    }
	    static boolean isPalindrome(String str) {
	    int i = 0, j = str.length()-1;
	    while(i < j) {
	    char a = str.charAt(i), b = str.charAt(j);
	    if(a != b) return false;
	    i++;j--;
	    }
	    return true;
	    }
	    String next() {
	    while (st == null || !st.hasMoreElements()) {
	    try{st = new StringTokenizer(br.readLine());}
	    catch (IOException  e) {e.printStackTrace();}
	    }
	    return st.nextToken();
	    }
	    int nextInt(){ return Integer.parseInt(next()); }
	    long nextLong() { return Long.parseLong(next());}
	    static int fact(int n) {
	    if(n == 1) return 1;
	    return n * fact(n-1);
	   	}
	    public int[] readIntArray(int n) {
	    int[] arr = new int[n];
		for(int i=0; i<n; ++i)
		arr[i]=nextInt();
		return arr;
		}
	    public long[] readLongArray(int n) {
	    	long[] arr = new long[n];
	    	for(int i=0; i<n; ++i)
	    		arr[i]=nextLong();
	    	return arr;
	    }
	    public int[][] readIntArray(int m, int n){
		int[][] arr = new int[m][n];
		for(int i = 0;i<m;i++) 
		for(int j = 0;j<n;j++) 
		arr[i][j] = nextInt();
		return arr;
	    }
	    public String[] readStringArray(int n) {
		String[] arr = new String[n];
		for(int i=0; i<n; ++i)
		arr[i]= nextLine();
		return arr;	
	    }
	    double nextDouble() {return Double.parseDouble(next());}
	    String nextLine() {
	    String str = "";
	    try{str = br.readLine();}
	    catch (IOException e) {e.printStackTrace();}
	    return str;}
	    }
		static void solve(int n){
			int k = n,c = 0;
			int j = 0;
			List<Integer> list = new ArrayList<>();
			int fl = 0;
			Set<Integer> set = new HashSet<>();
			for(int i = 2;i*i <= 1000000000;i++) {
				if(k%i == 0) {
					k = k/i;
					list.add(i);
					set.add(i);
					c++;
				}
				if(c == 2) {
					if(!set.contains(k) && k != 1) {
					list.add(k);
					fl = 1;
					}
					break;
				}
			}
			if(c == 2 && fl == 1) {
				out.println("Yes");
				out.println(list.get(0)+" "+list.get(1)+" "+list.get(2));
			}
			else out.println("No");
		}
		public static void main(String args[]) throws IOException {
	    FastReader sc = new FastReader();
	    long s1 = System.currentTimeMillis();
	    int t = sc.nextInt();
	    while(t-- > 0 ) {
	    	int n = sc.nextInt();	
	    	solve(n);
	    }
	    flush();
	    long e = System.currentTimeMillis();
//	    run(s1,e);
	    }
	}