#include <bits/stdc++.h>
using namespace std;
struct data {
  int x, y;
} m[int(1e6 + 5)];
int T, N, s, len, ans, Ans, cnt[int(1e6 + 5)], d[int(1e6 + 5)], u[int(1e6 + 5)],
    c[int(1e6 + 5)], t, n;
inline void read(int &x) {
  x = 0;
  bool f = 0;
  char ch = getchar();
  for (; !(ch >= '0' && ch <= '9'); ch = getchar()) f |= ch == '-';
  for (; (ch >= '0' && ch <= '9'); ch = getchar())
    x = (x << 3) + (x << 1) + (ch ^ 48);
  x = f ? -x : x;
}
inline bool cmp1(data a, data b) { return a.y < b.y; }
inline void Dfs(int x) {
  if (x == s + 1) {
    if (Ans == 0) return;
    ++len;
    m[len].x = ans;
    m[len].y = Ans;
    return;
  }
  for (int i = 0; i <= cnt[x]; ++i) {
    int reAns = Ans;
    if (i != 0) {
      ans *= u[x];
      if (Ans == 0) Ans = u[x];
    }
    Dfs(x + 1);
    Ans = reAns;
  }
  for (int i = 1; i <= cnt[x]; ++i) ans /= u[x];
}
int main() {
  read(T);
  for (int i = 2; i <= 1e6; ++i) {
    if (!d[i]) {
      d[i] = i;
      c[++t] = i;
    }
    for (int j = 1; j <= t && c[j] <= i && c[j] * i <= 1e5; ++j) {
      d[i * c[j]] = c[j];
    }
  }
  while (T--) {
    memset(m, 0, sizeof(m));
    for (int i = 0; i <= s; ++i) u[i] = cnt[i] = 0;
    s = 0;
    len = 0;
    read(N);
    n = sqrt(N);
    int x = N, y;
    for (int i = 2; i <= n; ++i) {
      if (x % i == 0) {
        u[++s] = i;
        while (x % i == 0) x /= i, ++cnt[s];
      }
    }
    if (x != 1) u[++s] = x, cnt[s] = 1;
    ans = 1;
    Ans = 0;
    Dfs(1);
    sort(m + 1, m + 1 + len, cmp1);
    u[0] = u[s];
    if (s == 1) {
      for (int i = 1; i <= len; ++i) printf("%d ", m[i].x);
      printf("\n%d\n", 0);
      continue;
    }
    if (s == 2) {
      printf("%d ", u[1] * u[2]);
      if (N == u[1] * u[2])
        printf("%d %d\n%d\n", u[1], u[2], 1);
      else {
        int j = 1;
        for (; j <= len && m[j].y == u[1]; ++j) {
          if (m[j].x != u[1] * u[2] && m[j].x != N) printf("%d ", m[j].x);
        }
        printf("%d ", N);
        for (; j <= len && m[j].y == u[2]; ++j) {
          if (m[j].x != u[1] * u[2] && m[j].x != N) printf("%d ", m[j].x);
        }
        printf("\n%d\n", 0);
      }
      continue;
    }
    int j = 1;
    for (int i = 1; i < s; ++i) {
      printf("%d ", u[i] * u[i - 1]);
      for (; j <= len && m[j].y == u[i]; ++j) {
        if (m[j].x != u[i] * u[i - 1] && m[j].x != u[i] * u[i + 1])
          printf("%d ", m[j].x);
      }
    }
    printf("%d ", u[s] * u[s - 1]);
    for (; j <= len && m[j].y == u[s]; ++j) {
      if (m[j].x != u[s] * u[s - 1] && m[j].x != u[s] * u[1])
        printf("%d ", m[j].x);
    }
    printf("\n0\n");
  }
  return 0;
}
