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:
from collections import defaultdict as dc
from heapq import *
import math
import bisect
from collections import deque as dq
def inp():
    p=int(input())
    return p
def line():
    p=list(map(int,input().split()))
    return p
def check(n,d,x):
    if x<0:
        return 0
    return n>=(x+math.ceil(d/(x+1)))
def unique(a,b,c):
    p=set()
    p.add(a)
    p.add(b)
    p.add(c)
    if len(p)==3:
        return 1
    return 0
def bs(a,n,z,val):
    l=0
    r=n
    while(l<r):
        mid=(l+r)//2
        if val%(a*z[mid])==0 and val//(a*z[mid])!=1:
            #print(a,z[mid])
            if(unique(a,z[mid],val//(a*z[mid]))):
                return mid
        if val>(a*z[mid]):
            l=mid+1
        else:
            r=mid-1
    if val%(a*z[mid])==0 and val//(a*z[mid])!=1:
        if(unique(a,z[mid],val//(a*z[mid]))):
            return mid
    return -1

for _ in range(inp()):
    a=inp()
    z=[]
    for i in range(2,int(pow(a,0.5))+1):
        if a%i==0:
            z.append(i)
            if(i!=a//i):
                z.append(a//i)
    z.sort()
    k=0
    for i in range(len(z)):
        l=z[i]
        ans=bs(l,len(z),z,a)
        if ans!=-1:
            print('YES')
            print(l,z[ans],a//(l*z[ans]))
            k=1
            break
        
    if k==0:
        print('NO')