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

Solution:
  
# import libraries for input/ output handling 
# on generic level 
import atexit, io, sys 
  
# A stream implementation using an in-memory bytes  
# buffer. It inherits BufferedIOBase. 
buffer = io.BytesIO() 
sys.stdout = buffer
  
# print via here 
@atexit.register 
def write(): 
    sys.__stdout__.write(buffer.getvalue()) 
import math 

# A function to print all prime factors of  
# a given number n 

def primeFactors(n): 

      
    m={}
    # Print the number of two's that divide n 

    while n % 2 == 0: 

        if 2 not in m:
            m[2]=1
        else:
            m[2]+=1

        n = n / 2

          

    # n must be odd at this point 

    # so a skip of 2 ( i = i + 2) can be used 

    for i in range(3,int(math.sqrt(n))+1,2): 

          

        # while i divides n , print i ad divide n 

        while n % i== 0: 

            if i not in m:
                m[i]=1
            else:
                m[i]+=1

            n = n / i 

              

    # Condition if n is a prime 

    # number greater than 2 

    if n > 2: 

        m[n]=1
    return m
for _ in range(input()):
    n=input()
    v=primeFactors(n)
    
    if len(v)>=3:
        print"YES"
        for k,g in v.items():
            t=pow(k,g);break
        for k,g in v.items():
            r=pow(k,g);
            if r!=t:
                break
        print t,r,n/(t*r)
    elif len(v)==2:
        c=0;d=[];t=0;p,q,r=[],[],[]
        for k,g in v.items():
            d.append(pow(k,g))
            
            t+=g
            if g>2:
                p.append(k)
            if g==2:
                q.append(k)
            else:
                r.append(k)
        
        if t<=3:
            print"NO"
        else:
            print"YES";
            if len(p):
                k=p[0]
                print k,k*k,n/(k*k*k)
            elif len(q):
                
                print q[0],q[1],n/(q[0]*q[1])
     
            
    else:
        for k,g in v.items():
            if g>5:
                print"YES";print k,k*k,n/(k*k*k)
            else:
                print"NO"