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.util.*;
import java.math.*;
import java.io.*;

public class input2 {
    public static int factoiral(int a) {
        if (a == 0) return 1;
        else return (a * factoiral(a - 1));
    }

    public static void sortbyColumn(int arr[][], int col) {
        Arrays.sort(arr, new Comparator<int[]>() {
            @Override
            public int compare(int[] entry1, int[] entry2) {
                if (entry1[col] > entry2[col])
                    return 1;
                else
                    return -1;
            }
        });
    }
    public static void merge(long arr[], long brr[], int l, int m, int r) {
        // Find sizes of two subarrays to be merged
        int n1 = m - l + 1;
        int n2 = r - m;

        /* Create temp arrays */
        long L[] = new long[n1];
        long L1[] = new long[n1];
        long R[] = new long[n2];
        long R1[] = new long[n2];

        /* Copy data to temp arrays */
        for (int i = 0; i < n1; ++i) {
            L[i] = arr[l + i];
            L1[i] = brr[l + i];
        }
        for (int j = 0; j < n2; ++j) {
            R[j] = arr[m + 1 + j];
            R1[j] = brr[m + 1 + j];
        }

        /* Merge the temp arrays */

        // Initial indexes of first and second subarrays
        int i = 0, j = 0;

        // Initial index of merged subarry array
        int k = l;
        while (i < n1 && j < n2) {
            if (L[i] <= R[j]) {
                arr[k] = L[i];
                brr[k] = L1[i];
                i++;
            } else {
                arr[k] = R[j];
                brr[k] = R1[j];
                j++;
            }
            k++;
        }
        while (i < n1) {
            arr[k] = L[i];
            brr[k] = L1[i];
            i++;
            k++;
        }

        /* Copy remaining elements of R[] if any */
        while (j < n2) {
            arr[k] = R[j];
            brr[k] = R1[j];
            j++;
            k++;
        }
    }
    public static void sort(long arr[], long brr[], int l, int r) {
        if (l < r) {
            // Find the middle point
            int m = (l + r) / 2;

            // Sort first and second halves
            sort(arr, brr, l, m);
            sort(arr, brr, m + 1, r);

            // Merge the sorted halves
            merge(arr, brr, l, m, r);
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int t = Integer.parseInt(br.readLine());
        for (int j = 0; j < t; j++) {
            int n = Integer.parseInt(br.readLine());
            int g = n;
            int upn = (int)Math.sqrt(n);
            int a = 1;
            for(int i=2;i<=upn;i++){
                if(n%i == 0){
                    a = Math.min(i,n/i);
                    break;
                }
            }
           // System.out.println(a);
           n = n/a;
            upn = (int)Math.sqrt(n);
            int b = 1;
            for(int i=2;i<=upn;i++){
                if(n%i == 0 &&(i!=a)){
                    b = Math.min(i,n/i);
                    break;
                }
            }
           // System.out.println(b);
            int x = a*b;
            int c = g/x;
            if(a == 1 || b == 1 || c == 1) System.out.println("NO");
            else if(a == b || a == c || b == c) System.out.println("NO");
            else{
                System.out.println("YES");
                System.out.println(a + " " + b + " " + c);
            }
        }
    }
}