#include <bits/stdc++.h>
using namespace std;
template <typename T>
void cetak(T t) {
  cout << t << ')' << endl;
}
template <typename T, typename... V>
void cetak(T t, V... v) {
  cout << t;
  if (sizeof...(v)) cout << ", ";
  cetak(v...);
}
typedef int (*func)(int, int);
const int MOD = 1e9 + 7;
int add(int x, int y) {
  int ret = x + y;
  if (ret >= MOD) ret -= MOD;
  return ret;
}
int sub(int x, int y) {
  int ret = x - y;
  if (ret < 0) ret += MOD;
  return ret;
}
int mul(int x, int y) { return (long long)x * y % MOD; }
const int mx = 1e5 + 10;
int p[mx];
vector<int> prima;
vector<int> a, b;
void cari(int bil, int now, set<int> &res) {
  if (now == (int)(a.size())) {
    if (bil > 1) res.insert(bil);
    return;
  }
  int kali = 1;
  cari(bil, now + 1, res);
  for (int i = 1; i <= b[now]; i++) {
    kali *= a[now];
    cari(bil * kali, now + 1, res);
  }
}
void solve(int tc) {
  a.clear();
  b.clear();
  int n;
  cin >> n;
  for (int i : prima) {
    if (n % i) continue;
    int tot = 0;
    while (n % i == 0) {
      n /= i;
      tot += 1;
    }
    a.push_back(i);
    b.push_back(tot);
  }
  if (n > 1) {
    a.push_back(n);
    b.push_back(1);
  }
  int N = (int)(a.size());
  set<int> faktor;
  cari(1, 0, faktor);
  if (N == 1) {
    for (int i : faktor) cout << i << ' ';
    cout << '\n';
    cout << 0 << '\n';
    return;
  }
  if (N == 2) {
    int ada = max(b[0], b[1]);
    if (ada == 1) {
      for (int i : faktor) cout << i << ' ';
      cout << '\n';
      cout << 1 << '\n';
      return;
    }
    vector<int> aa, bb, ab;
    for (int i : faktor) {
      if (i % a[0] == 0 && i % a[1] == 0)
        ab.push_back(i);
      else if (i % a[0] == 0)
        aa.push_back(i);
      else
        bb.push_back(i);
    }
    for (int i : aa) cout << i << ' ';
    cout << ab[0] << ' ';
    for (int i : bb) cout << i << ' ';
    for (int i = 1; i < (int)(ab.size()); i++) cout << ab[i] << ' ';
    cout << '\n';
    cout << 0 << '\n';
    return;
  }
  for (int i = 0; i < N; i++) {
    int kali = 1;
    for (int j = 0; j < b[i]; j++) {
      kali *= a[i];
      cout << kali << ' ';
      faktor.erase(kali);
    }
    vector<int> buang, hapus;
    for (int x : faktor) {
      if (x % a[i] == 0 && x % a[(i + 1) % N] == 0) {
        buang.push_back(x);
      }
    }
    for (int x : buang) faktor.erase(x);
    for (int x : faktor) {
      if (x % a[i] == 0 && x % a[(i - 1 + N) % N] > 0) {
        cout << x << ' ';
        hapus.push_back(x);
      }
    }
    for (int x : hapus) faktor.erase(x);
    for (int x : buang) {
      cout << x << ' ';
    }
  }
  assert(faktor.empty());
  cout << '\n';
  cout << 0 << '\n';
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  for (int i = 2; i < mx; i++) {
    if (!p[i]) {
      prima.push_back(i);
      for (int j = i; j < mx; j += i) p[j] = i;
    }
  }
  int t = 1;
  cin >> t;
  int tc = 0;
  while (t--) {
    solve(++tc);
  }
}
