#include <bits/stdc++.h>
using namespace std;
inline long long read() {
  long long x = 0;
  char ch = getchar();
  bool d = 1;
  for (; !isdigit(ch); ch = getchar())
    if (ch == '-') d = 0;
  for (; isdigit(ch); ch = getchar()) x = x * 10 + ch - '0';
  return d ? x : -x;
}
inline unsigned long long rnd() {
  return ((unsigned long long)rand() << 30 ^ rand()) << 4 | rand() % 4;
}
const int N = 2e5 + 5;
int a[N];
map<int, bool> M;
map<int, int> pos;
vector<long long> v, rv, tw[N];
void calc(int x) {
  int t = x;
  for (int i = 2; i * i <= x; i++) {
    if (x % i == 0) {
      v.push_back(i);
      if (i * i != x) v.push_back(x / i);
    }
    if (t % i == 0) {
      rv.push_back(i);
      while (t % i == 0) t /= i;
    }
  }
  v.push_back(x);
  if (t > 1) rv.push_back(t);
}
int solve(int x) {
  for (int i = 2; i * i <= x; i++) {
    if (x % i == 0) return i;
  }
  return x;
}
int main() {
  int T = read();
  while (T--) {
    int n = read();
    v.clear();
    rv.clear();
    M.clear();
    pos.clear();
    calc(n);
    int m = (int)rv.size();
    if (m == 2 && rv[0] * rv[1] == n) {
      cout << rv[0] << " " << rv[1] << " " << n << endl << 1 << endl;
      continue;
    }
    for (int i = (int)(0); i <= (int)(m - 1); i++)
      M[rv[i] * rv[(i + 1) % m]] = 1, pos[rv[i]] = i;
    if (m == 2 && rv[0] * rv[1] != n) M[n] = 1;
    for (int i = (int)(0); i <= (int)(m - 1); i++) tw[i].clear();
    for (auto x : v)
      if (!M[x]) tw[pos[solve(x)]].push_back(x);
    for (int i = (int)(0); i <= (int)(m - 1); i++) {
      for (auto x : tw[i]) printf("%d ", x);
      if (i == m - 1 && m == 2)
        printf("%d ", n);
      else
        printf("%d ", rv[i] * rv[(i + 1) % m]);
    }
    puts("");
    puts("0");
  }
}
