#include <bits/stdc++.h>   using namespace std;   int pri[100003], top, n;   bool ntp[100002];   struct node {     int a, b;     bool operator<(const node &rhs) const { return b > rhs.b; }   };   void euler() {     for (int i = 2; i <= 100000; ++i) {       if (!ntp[i]) pri[top++] = i;       for (int j = 0; j < top && pri[j] * i <= 100000; ++j) {         ntp[pri[j] * i] = 1;         if (i % pri[j] == 0) break;       }     }   }   int main() {     ios::sync_with_stdio(false);     cin.tie(0);     euler();     int t;     cin >> t;     while (t--) {       cin >> n;       int bn = n;       vector<node> v;       int sz = 1;       for (int i = 0; i < top && n != 1; ++i) {         if (n % pri[i] == 0) {           node x;           x.a = pri[i];           x.b = 0;           while (n % pri[i] == 0) ++x.b, n /= pri[i];           sz *= (x.b + 1);           v.push_back(x);         }       }       if (n != 1) {         node x;         x.a = n;         x.b = 1;         v.push_back(x);       }       if (v.size() == 0) {         cout <<  NO n ;       } else if (v.size() == 1) {         if (v[0].b < 6) {           cout <<  NO n ;         } else {           cout <<  YES n ;           const int &t = v[0].a;           cout << t <<     << t * t <<     << bn / (t * t * t) <<   n ;         }       } else if (v.size() == 2) {         if (v[0].b + v[1].b < 4) {           cout <<  NO n ;         } else {           cout <<  YES n ;           cout << v[0].a <<     << v[1].a <<     << bn / v[0].a / v[1].a <<   n ;         }       } else {         cout <<  YES n ;         cout << v[0].a <<     << v[1].a <<     << bn / v[0].a / v[1].a <<   n ;       }     }     return 0;   }   