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:
import sys
import math
input = sys.stdin.readline
ins = lambda: input().rstrip()
ini = lambda: int(input().rstrip())
inm = lambda: map(int, input().split())
inl = lambda: list(map(int, input().split()))

t = ini()
ans = []
andsindex = [0] * t
for _ in range(t):
    n = ini()
    i = 2
    tmp = []
    while n >= i * i:
        if i == 5 and n % 5 == 0 and 4 in tmp:
            tmp.remove(4)
        if n % i == 0:
            tmp.append(i)
        if len(tmp) == 3:
            break
        i += 1
    if len(tmp) <= 1:
        ans.append("NO")
    elif len(tmp) >= 2:
        if len(tmp) == 3:
            y = (n / (tmp[0] * tmp[2])).is_integer()
            if tmp[0] * tmp[1] * tmp[2] == n:
                ans.append("YES")
                andsindex[len(ans) - 1] = f"{tmp[0]} {tmp[1]} {tmp[2]}"
                # print(tmp[0], tmp[1], tmp[2])
                continue
            elif y and n / (tmp[0] * tmp[2]) not in tmp:
                ans.append("YES")
                andsindex[len(ans) - 1] = f"{tmp[0]} {tmp[2]} {n // (tmp[0] * tmp[2])}"
                # print(tmp[0], tmp[2], n // (tmp[0] * tmp[2]))
                continue
        x = (n / (tmp[0] * tmp[1])).is_integer()
        if x and n / (tmp[0] * tmp[1]) not in tmp:
            ans.append("YES")
            andsindex[len(ans) - 1] = f"{tmp[0]} {tmp[1]} {n // (tmp[0] * tmp[1])}"
            # print(tmp[0], tmp[1], n // (tmp[0] * tmp[1]))
        else:
            ans.append("NO")
for i in range(t):
    print(ans[i])
    if ans[i] == "YES":
        print(andsindex[i])