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 PYTHON3):

Solution:
for i in range(int(input())):
    from math import sqrt


    # Function to find the required triplets
    def findTriplets(x):

        # To store the factors
        fact = [];
        factors = set();

        # Find factors in sqrt(x) time
        for i in range(2, int(sqrt(x))):
            if (x % i == 0):
                fact.append(i);

                if (x / i != i):
                    fact.append(x // i);

                factors.add(i);
                factors.add(x // i);

        found = False;
        k = len(fact);

        for i in range(k):

            # Choose a factor
            a = fact[i];

            for j in range(k):

                # Choose another factor
                b = fact[j];

                # These conditions need to be
                # met for a valid triplet
                if ((a != b) and (x % (a * b) == 0)
                        and (x / (a * b) != a)
                        and (x / (a * b) != b)
                        and (x / (a * b) != 1)):
                    # Print the valid triplet
                    print("YES")
                    print(a, b, x // (a * b));
                    found = True;
                    break;

                    # Triplet found
            if (found):
                break;

                # Triplet not found
        if (not found):
            print("NO");

            # Driver code


    if __name__ == "__main__":
        x = int(input());

        findTriplets(x);