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.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.*;
import java.io.*;


public class Main {
	
	public static void main(String args[]) {
		InputReader obj = new InputReader(System.in);
		int t = obj.nextInt();
		while(t-->0) {
			int n=obj.nextInt();
			boolean chk1=false;
			for(int i=2;i<Math.sqrt(n);i++) {
				boolean chk=false;
				if(n%i==0) {
					HashSet<Integer> hs = new HashSet<Integer>();
					hs.add(i);
					int x=n/i;
					for(int j=2;j<Math.sqrt(x);j++) {
						if(x%j==0 && !hs.contains(j) && !hs.contains(x/j)) {
							System.out.println("YES");
							System.out.println(i+" "+j+" "+x/j);
							chk=true;
							chk1=true;
							break;
						}
					}
				}
				if(chk) {
					break;
				}
			}
			if(!chk1) {
				System.out.println("NO");
			}
		}
	}
	
	public static class InputReader {
	    public BufferedReader reader;
	    public StringTokenizer tokenizer;
	    public InputReader(InputStream stream) {
	        reader = new BufferedReader(new InputStreamReader(stream), 32768);
	        tokenizer = null;
	    }
 
	    public String next() {
	        while (tokenizer == null || !tokenizer.hasMoreTokens()) {
	            try {
	                tokenizer = new StringTokenizer(reader.readLine());
	            } catch (IOException e) {
	                throw new RuntimeException(e);
	            }
	        }
	        return tokenizer.nextToken();
	    }
 
	    public int nextInt() {
	        return Integer.parseInt(next());
	    }
 
	    public long nextLong() {
	        return Long.parseLong(next());
	    }
	    
 
	}

}