#include <bits/stdc++.h>
using namespace std;
const long double pi = acos((long double)-1);
void in(initializer_list<int *> li) {
  for (auto ptr = li.begin(); ptr != li.end(); ptr++) scanf("%d", *ptr);
}
void in(initializer_list<long long *> li) {
  for (auto ptr = li.begin(); ptr != li.end(); ptr++) scanf("%lld", *ptr);
}
void in(initializer_list<double *> li) {
  for (auto ptr = li.begin(); ptr != li.end(); ptr++) scanf("%lf", *ptr);
}
void out(initializer_list<int> li) {
  for (auto ptr = li.begin(); ptr != li.end(); ptr++) printf("%d ", *ptr);
}
void outln(initializer_list<int> li) {
  for (auto ptr = li.begin(); ptr != li.end(); ptr++) printf("%d\n", *ptr);
}
void out(initializer_list<long long> li) {
  for (auto ptr = li.begin(); ptr != li.end(); ptr++) printf("%lld ", *ptr);
}
void outln(initializer_list<long long> li) {
  for (auto ptr = li.begin(); ptr != li.end(); ptr++) printf("%lld\n", *ptr);
}
int in(int &a, int &b, int &c, int &d) {
  return scanf("%d%d%d%d", &a, &b, &c, &d);
}
int in(int &a, int &b, int &c) { return scanf("%d%d%d", &a, &b, &c); }
int in(int &a, int &b) { return scanf("%d%d", &a, &b); }
int in(long long &a, long long &b) { return scanf("%lld%lld", &a, &b); }
int in(long long &a, long long &b, long long &c, long long &d) {
  return scanf("%lld%lld%lld%lld", &a, &b, &c, &d);
}
int in(long long &a, long long &b, long long &c) {
  return scanf("%lld%lld%lld", &a, &b, &c);
}
int in(long long &a) { return scanf("%lld", &a); }
int in(int &a) { return scanf("%d", &a); }
int in(char *s) { return scanf("%s", s); }
int in(char &c) { return scanf("%c", &c); }
void out(int a, bool ln) { printf("%d%c", a, " \n"[ln]); }
void out(long long a, bool ln) { printf("%lld%c", a, " \n"[ln]); }
void out(double a, int digit, bool ln) {
  printf("%.*f%c", digit, a, " \n"[ln]);
}
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }
const int inf = 0x3f3f3f3f;
const double eps = 1e-8;
const int maxn = 1e6 + 5;
const int maxm = 1e6 + 5;
const long long mod = 1e9 + 7;
int v[maxn], p[maxn], cnt;
int ne, len;
void dfs(int n, int tmp) {
  if (n > cnt) {
    if (tmp != ne && tmp != 1 && tmp != v[0] * v[cnt]) printf(" %d", tmp);
    return;
  }
  for (int i = 0; i <= p[n]; ++i) {
    dfs(n + 1, tmp);
    tmp *= v[n];
  }
}
void debug(int nn) {
  for (int i = 0; i < cnt + 1; ++i) {
    out(v[i], 0);
    out(p[i], 1);
  }
  for (int i = 2; i <= nn; i++) {
    if (nn % i == 0) out(i, i == nn);
  }
}
int main() {
  int TT;
  scanf("%d", &TT);
  for (int TTT = 1; TTT <= TT; TTT++) {
    cnt = -1;
    int n;
    in(n);
    int nn = n;
    for (int i = 2; i * i <= n; i++) {
      if (n % i == 0) {
        v[++cnt] = i;
        p[cnt] = 0;
        while (n % i == 0) {
          n /= i;
          p[cnt]++;
        }
      }
    }
    if (n > 1) {
      v[++cnt] = n;
      p[cnt] = 1;
    }
    if (cnt == 0) {
      int tmp = v[0];
      for (int i = 1; i <= p[0]; i++) {
        out(tmp, i == p[0]);
        tmp *= v[0];
      }
      out(0, 1);
      continue;
    }
    if (v[0] * v[1] == nn) {
      out(v[0], 0);
      out(v[1], 0);
      out(nn, 1);
      out(1, 1);
      continue;
    }
    printf("%d", v[0] * v[cnt]);
    for (int i = 0; i <= cnt; i++) {
      if (i != cnt)
        ne = v[i] * v[i + 1];
      else
        ne = v[0] * v[cnt];
      int tmp = v[i];
      for (int j = 1; j <= p[i]; ++j) {
        dfs(i + 1, tmp);
        tmp *= v[i];
      }
      if (i != cnt) {
        if (ne == v[0] * v[cnt]) continue;
        printf(" %d", v[i] * v[i + 1]);
      } else
        printf("\n");
    }
    out(0, 1);
  }
  return 0;
}
