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 
from sys import stdin
from _collections import deque
mod = 10**9 + 7
import sys
sys.setrecursionlimit(10**5)
from queue import PriorityQueue
from bisect import bisect_right
from bisect import bisect_left
from _collections import defaultdict
from math import sqrt,factorial,gcd,log2,inf,ceil
import heapq
input = lambda : sys.stdin.readline().rstrip()
from sys import stdin, stdout
from heapq import heapify,heappush,heappop

# min = 0
# n,m = map(int,input().split())
# maxi = n
# z = m
# while z>0:
#
#     yo = (1+sqrt(1+8*z))//2
#     maxi-=yo
#     print(yo)
#     z-=((yo)*(yo+1))//2
#
#
# maxi = max(int(maxi),0)
#
#
#
# if m>=n-1:
#     min = 0
# else:
#     min = (n)-2*(m)
# #
# if m == 0:
#     print(n,n)
#     exit()
# if n == 1 and m == 1:
#     min = 1
# print(min,maxi)

# t = int(input())
#
# for _ in range(t):
#
#     a,b,c,n = map(int,input().split())
#     if (a+b+c+n)%3 == 0:
#         print('YES')
#     else:
#         print('NO')
#
# t = int(input())


# for _ in range(t):
#
#     n = int(input())
#     la = []
#     for i in range(n):
#
#         a,b = map(int,input().split())
#         la.append([a,b])
#
#     la.sort()
#     flag = 0
#     for i in range(1,n):
#         if la[i][1]<la[i-1][1]:
#             flag = 1
#             break
#
#     if flag:
#         print('NO')
#     else:
#         x1,y1 = 0,0
#         ans = []
#         while la!=[]:
#             x,y = la.pop(0)
#             z1 = x-x1
#             z2 = y-y1
#             for i in range(z1):
#                 ans.append('R')
#             for i in range(z2):
#                 ans.append('U')
#
#             x1,y1 = x,y
#         print('YES')
#         print(''.join(ans))



def solve(n):
    la = []
    for i in range(2,int(sqrt(n))+1):
        if n%i == 0:
            if n//i!=i:
                la.append((i,n//i))

    return la


t = int(input())

for _ in range(t):

    n = int(input())
    l = solve(n)
    flag = 0
    x,y,z = -1,-1,-1
    for a,b in l:

        la = solve(a)
        flag = 0
        for c,d in la:
            if b!=c and b!=d:
                x = b
                y = c
                z = d
                flag = 1
                break
        if flag:
            break
        la = solve(b)
        for c,d in la:
            if a!=c and a!=d:
                x = a
                y = c
                z = d
                flag = 1
                break
        if flag:
            break

    if x*y*x>0:
        print('YES')
        print(x,y,z)
    else:
        print('NO')


