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 ProgEc {
	
	public static void main(String[] args) throws Exception {
		//FileInputStream inputStream = new FileInputStream("input.txt");
		//FileOutputStream outputStream = new FileOutputStream("output.txt");
		
		InputStream inputStream = System.in;
		OutputStream outputStream = System.out;
		
		InputReader in = new InputReader(inputStream);
		PrintWriter out = new PrintWriter(outputStream);
		
		Solver solver = new Solver();
		solver.solve(1, in, out);
		
		out.close();
	}
	
	static class Solver {
		
		public void solve(int testNumber, InputReader in, PrintWriter out) {
			int t = in.nextInt();
			for (int q = 0; q < t; q++) {
				long n = in.nextLong();
				int c = 0;
				for (int i = 2; i <= 1000; i++) {
					long m = n;
					if (m % i != 0) continue; else m /= i;
					for (int j = i+1; j <= 10000; j++) {
						if (m % j == 0 && m/j != j && m/j != i && m/j != 1 && m/j != 0) {
							out.println("YES");
							out.println(i + " " + j + " " + (m/j));
							c = 1;
							break;
						}
					}
					if (c == 1) break; 
				}
				if (c == 0) out.println("NO");
			}
		}
		
		
		/*class MyString implements Comparable<MyString> {
			String str;
			
			MyString(String other) {
				str = other;
			}
			
			public int compareTo(MyString other) {
				return str.length() - other.str.length();
			}
		}*/
		
	}
	
	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());
		}
		
		public double nextDouble() {
			return Double.parseDouble(next());
		}
		
		public float nextFloat() {
			return Float.parseFloat(next());
		}
		
	}
}