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.io.PrintWriter;
import java.util.StringTokenizer;

public class _13ProductOfThreeNumbers {
    public static void main(String[] args) {
        FastInput input = new FastInput();
        PrintWriter output = new PrintWriter(System.out);
        StringBuilder sb = new StringBuilder();
        int t = input.nextInt();
        caseLoop:
        while (t-- > 0) {
            int n = input.nextInt(), i, j, k;

            for (i = 2; i <= n / i; i++) {
                if (n % i == 0 && n / i != i) {
                    int e1 = i;
                    int prov = n / i;
                    for (j = i + 1; j <= n / (i * j); j++) {
                        if (prov % j == 0 && prov / j != j && prov / j != i) {
                            sb.append("YES\n"+ e1 + " " + j + " " + prov / j).append('\n');
                            continue caseLoop;
                        }
                    }
                }
            }
            sb.append("NO\n");
        }
        output.println(sb);
        output.close();
    }

    static class FastInput {
        BufferedReader br;
        StringTokenizer st;

        public FastInput() {
            br = new BufferedReader(new InputStreamReader(System.in));
        }

        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());
        }

        double nextDouble() {
            return Double.parseDouble(next());
        }

        String nextLine() {
            String str = "";
            try {
                str = br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }
    }
}
