#include <iostream>
#include <algorithm>
#include <vector>
#include <cmath>
#include <queue>
#include <set>
#include <map>
#include <unordered_set>
#include <iomanip>
#include <stdio.h>
#include <string.h>
#include <numeric>
#include <string>
#include <functional>
#include <bitset>
 
#define int long long

#define pb push_back
#define all(x) x.begin(), x.end()
#define X first
#define Y second

const int MOD = 1e9 + 7;
const long double EPS = 1e-9;
const int MAXN = 3e5 + 123;
const long long INF = 1e17;
 
using namespace std;

int gcd(int a, int b) {
	return b ? gcd(b, a % b) : a;
}

template <typename T> int sgn(T val) {
    return (T(0) < val) - (val < T(0));
}
 
template<class T, class U> void chkmax(T &a, U b) {
    a = max(a, (T)b);
}
 
template<class T, class U> void chkmin(T &a, U b) {
    a = min(a, (T)b);
}


void pudge() {
   int n;
   cin >> n;
   int n1 = n;
   vector<int> divs;
   map<int, int> m;
   int mmax, cnt = -1;
   for (int i = 2; i * i <= n; i++) {
       while(!(n % i)) {
           n /= i;
           m[i]++;
           if (m[i] > cnt) {
               cnt = m[i];
               mmax = i;
           }
       }
   }
   if (n != 1) {
        m[n]++;
        if (m[n] > cnt) {
               cnt = m[n];
               mmax = n;
        }
   }
   cout << cnt << '\n';
   vector<int> ans;
   for (int i = 0; i < cnt; i++) ans.pb(mmax);
   for (int i = 0; i < ans.size() - 1; i++) n1 /= mmax;
   ans.back() *= n1 / mmax;
   for (int i : ans) cout << i << " ";
   cout << '\n';
}
 
signed main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
 
    int q; cin >> q; while(q--)
    pudge();
    
    return 0;
}