#include <bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
typedef long long ll;
typedef long double ld;
typedef pair<ll,ll> p64;
typedef vector<ll> v64;
typedef vector<p64> vp64;
ll mod = 1e9+7;
const ll N = 500005;
double eps = 1e-12;
ll dr[] = {1,-1,0,0};
ll dc[] = {0,0,1,-1};
#define forn(i,e) for(ll i = 0; i < e; i++)
#define rforn(i,s) for(ll i = s; i >= 0; i--)
#define pb push_back
#define fi first
#define se second
#define nn "\n"
#define inf 2e18
#define setbit(x,k) (x|= (1LL<<k))
#define checkbit(x,k) ((x>>k)&1)
#define clearbit(x,k) (x&= ~(1LL<<k))
#define yes cout << "YES\n"
#define no cout << "NO\n"
#define fast_cin() ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL)
#define all(x) (x).begin(), (x).end()
#define ordered_set tree<ll, null_type,less<ll>, rb_tree_tag,tree_order_statistics_node_update>
void solve(ll t){
ll n,m,temp,ans=0,i,j=0,k,a,b,c,u,v;
cin>>n;
ans = 1;
set<ll> prime;
for(i = 1; j<n-1; i++){
ll cnt = 0;
temp = i;
for(k = 2; k*k<=temp; k++){
if(temp%k==0){
while(temp%k==0){
temp/=k;
}
cnt++;
}
}
if(temp>1) cnt++;
if(cnt>=2){
cout << i << " ";
temp = i;
for(k = 2; k*k<=temp; k++){
if(temp%k==0){
while(temp%k==0){
temp/=k;
}
if(k!=2) prime.insert(k);
}
}
if(temp>2) prime.insert(temp);
j++;
}
}
for(auto it: prime){
ans*= it;
}
cout << ans << nn;
}
int main()
{
fast_cin();
ll t = 1;
cin >> t;
for(int it=1;it<=t;it++) {
solve(it);
}
return 0;
}