#include <bits/stdc++.h>
using namespace std;
using pii = pair<int, int>;
using ll = long long;
const int N = 2e5 + 5;
int n;
vector<int> ve;
map<int, int> mp;
vector<int> res;
bool ok(int mid) {
  res.clear();
  if (mid == 0) return true;
  int i = 0, j = mid;
  while (true) {
    if (j == n) return false;
    if (i == mid) return true;
    if (ve[i] == ve[j])
      j++;
    else {
      i++;
      j++;
    }
  }
  return true;
}
int main() {
  ios_base::sync_with_stdio(false);
  int T;
  cin >> T;
  while (T--) {
    int n;
    cin >> n;
    ll xx = n;
    set<int> divs;
    for (int i = 2; i * i <= n; i++) {
      if (n % i == 0) {
        divs.insert(i);
        divs.insert(n / i);
      }
    }
    divs.insert(n);
    vector<int> facts;
    for (int i = 2; i * i <= n; i++) {
      if (n % i == 0) facts.push_back(i);
      while (n % i == 0) n /= i;
    }
    if (n != 1) facts.push_back(n);
    n = 1;
    if (facts.size() == 1) {
      for (auto x : divs) cout << x << " ";
      cout << "\n";
      cout << "0\n";
      continue;
    }
    if (divs.size() == 3) {
      for (auto x : divs) cout << x << " ";
      cout << "\n";
      cout << "1\n";
      continue;
    }
    if (facts.size() == 2) {
      vector<int> temp;
      divs.erase(facts[0] * facts[1]);
      for (auto x : divs) {
        if (x % facts[0] == 0 && x % (facts[0] * facts[1]) != 0) {
          cout << x << " ";
          temp.push_back(x);
        }
      }
      for (auto x : temp) divs.erase(x);
      temp.clear();
      cout << facts[0] * facts[1] << " ";
      for (auto x : divs) {
        if (x % facts[0] && x % (facts[0] * facts[1]) != 0) {
          temp.push_back(x);
          cout << x << " ";
        }
      }
      for (auto x : temp) divs.erase(x);
      temp.clear();
      for (auto x : divs) cout << x << " ";
      cout << "\n";
      cout << "0\n";
      continue;
    }
    for (int i = 1; i < facts.size(); i++) divs.erase(facts[i] * facts[i - 1]);
    divs.erase(facts[0] * facts.back());
    vector<int> res;
    for (int i = 0; i < facts.size(); i++) {
      vector<int> temp;
      for (auto d : divs) {
        if (d % facts[i] == 0) {
          res.push_back(d);
          temp.push_back(d);
        }
      }
      for (auto x : temp) divs.erase(x);
      temp.clear();
      int nxt = 0;
      if (i + 1 != facts.size()) nxt = i + 1;
      res.push_back(facts[i] * facts[nxt]);
    }
    for (auto x : res) cout << x << " ";
    cout << "\n";
    cout << "0\n";
  }
  return 0;
}
