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 
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.ArrayDeque;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    import java.util.StringTokenizer;

    public class CSES {
        static long mod = 1000000007;
        public static void main(String[] args) throws IOException {
            FastScanner s=new FastScanner();
            int t1 = s.nextInt();
    //            int t1 =1;
            while(t1-->0){
                long n = s.nextLong();
                long a=0,b=0,c=0;
                for(int i=2;i*i<=n;i++){
                    if(n%i==0) {
                        if (a == 0 ){
                            a=i;
                            n/=i;
                            break;
                        }
                    }
                }
                for(int i=2;i*i<=n;i++){
                    if(n%i==0) {
                        if(b==0 && i!=a){
                            b=i;
                            n/=i;
                        }
                    }
                }
                if(a==0 || b==0 || n==1 || n==a || n==b) System.out.println("NO");
                else{
                    System.out.println("YES");
                     System.out.println(a + " " + b + " " + n);
                }
            }
        }

        static long gcd(long a, long b)throws IOException{return (b==0)?a:gcd(b,a%b);}
        static int gcd(int a, int b)throws IOException{return (b==0)?a:gcd(b,a%b);}

        static void sort(int[] a) {
            ArrayList<Integer> l=new ArrayList<>();
            for (int i:a) l.add(i);
            Collections.sort(l);
            for (int i=0; i<a.length; i++) a[i]=l.get(i);
        }
        static void sort(long[] a) {
            ArrayList<Long> l=new ArrayList<>();
            for (long i:a) l.add(i);
            Collections.sort(l);
            for (int i=0; i<a.length; i++) a[i]=l.get(i);
        }
        static class FastScanner {
            BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
            StringTokenizer st=new StringTokenizer("");
            String next() {
                while (!st.hasMoreTokens())
                    try {
                        st=new StringTokenizer(br.readLine());
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                return st.nextToken();
            }

            int nextInt() {
                return Integer.parseInt(next());
            }
            int[] readArray(int n) {
                int[] a=new int[n];
                for (int i=0; i<n; i++) a[i]=nextInt();
                return a;
            }
            long nextLong() {
                return Long.parseLong(next());
            }
        }
    }