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.*;
import java.lang.*;
public class Codechef {
	PrintWriter out;
    StringTokenizer st;
    BufferedReader br;
 	
 	class Pair implements Comparable<Pair>
	{
	    int x;
	    int y;

	    Pair(int t, int r) {
	       x = t;
	       y = r;
	    }
	    public int compareTo(Pair p)
	    {
	    	return this.x-p.x;
	    }
 	}

	String ns() {
        while (st == null || !st.hasMoreElements()) {
 
            try {
                st = new StringTokenizer(br.readLine());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return st.nextToken();
    }
 
    String nextLine() throws Exception {
        String str = "";
        try {
            str = br.readLine();
        } catch (IOException e) {
            throw new Exception(e.toString());
        }
        return str;
    }
 
    int nextInt() {
        return Integer.parseInt(ns());
    }
 
    long nextLong() {
        return Long.parseLong(ns());
    }
 
    double nextDouble() {
        return Double.parseDouble(ns());
    }
	
	
	public static void main(String args[]) throws IOException {
		new Codechef().run();
	}
 
	void run() throws IOException {
		br = new BufferedReader(new InputStreamReader(System.in));
        out = new PrintWriter(System.out);
        long s = System.currentTimeMillis();
		solve();
		out.flush();
		out.close();
	}

	void solve() throws IOException{
		int t=nextInt();
		while(t-->0)
		{
			int n = nextInt();
			ArrayList<Integer> list = new ArrayList<>();
			int a=1,b=1,c=1;

			int i=2,flag=0;
			for(i=2;i*i<n;i++)
			{
				if(n%i==0)
				{
					list.add(i);
					list.add(n/i);
				}					
			}

			if(i*i==n)
				list.add(i);
			Collections.sort(list);
		
			int size=list.size();

			for(int j=0;j<size/2;j++)
			{
				for(int k=j+1;k<size/2;k++)
				{
					int cn; 
					if(n%(list.get(j)*list.get(k))==0)
					{
						cn=n/(list.get(j)*list.get(k));
					
						if(cn!=list.get(j)&&cn!=list.get(k)&&cn>1)
						{
							a=cn;
							b=list.get(j);
							c=list.get(k);
							flag=1;
							break;
						}
					}
				}
			}


			if(flag==1)
			{
				out.println("YES");
				out.println(a+" "+b+" "+c);
			}

			else
				out.println("NO");
		}

	}
}