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

Solution:
#include <bits/stdc++.h>
using namespace std;
const double eps = 1e-8;
const int MAXN = (int)1e5 + 5;
const int MOD = (int)1e9 + 7;
const int INF = 0x3f3f3f3f;
const int dx[] = {-1, 1, 0, 0};
const int dy[] = {0, 0, -1, 1};
bool mul(int n, int& a, int& b, int& c) {
  a = INF, b = INF, c = INF;
  for (int i = 2; i * i * i <= n; i++) {
    if (n % i == 0) {
      a = i;
      break;
    }
  }
  if (n % a == 0)
    n = n / a;
  else
    return false;
  for (int i = a + 1; i * i <= n; i++) {
    if (n % i == 0) {
      b = i;
      break;
    }
  }
  if (n % b == 0)
    n = n / b;
  else
    return false;
  if (n > b) {
    c = n;
    return true;
  } else
    return false;
}
int main() {
  int T, a, b, c, n;
  cin >> T;
  while (T--) {
    cin >> n;
    if (mul(n, a, b, c))
      printf("YES\n%d %d %d\n", a, b, c);
    else
      printf("NO\n");
  }
  return 0;
}