#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
const int N = (int)3e5 + 100;
const int M = (int)2e6 + 100;
const int inf = (int)1e8 + 100;
vector<int> g[N];
int main() {
  mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
  srand(time(0));
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int T;
  cin >> T;
  while (T--) {
    int n, i, j;
    cin >> n;
    int sn = n;
    vector<int> v;
    for (i = 2; i * i <= n; i++) {
      if (n % i == 0) {
        v.push_back(i);
      }
      while (n % i == 0) n /= i;
    }
    if (n != 1) {
      v.push_back(n);
    }
    n = sn;
    for (i = 2; i * i <= n; i++) {
      if (n % i == 0) {
        for ((j) = 0; (j) < (v.size()); (j)++) {
          if (i % v[j] == 0) {
            if (j + 1 < v.size() && i == v[j] * v[j + 1]) break;
            g[j].push_back(i);
            break;
          }
        }
        if (i * i != n) {
          for ((j) = 0; (j) < (v.size()); (j)++) {
            if ((n / i) % v[j] == 0) {
              if (j + 1 < v.size() && n / i == v[j] * v[j + 1]) break;
              g[j].push_back(n / i);
              break;
            }
          }
        }
      }
    }
    cout << n << ' ';
    for ((i) = 0; (i) < (v.size()); (i)++) {
      for (auto j : g[i]) {
        cout << j << ' ';
      }
      if (i + 1 < v.size() && n != v[i] * v[i + 1]) {
        cout << v[i] * v[i + 1] << ' ';
      }
      g[i].clear();
    }
    cout << '\n';
    if (v.size() == 2 && v[0] * v[1] == n) {
      cout << 1 << '\n';
    } else {
      cout << 0 << '\n';
    }
  }
}
