#include <bits/stdc++.h>
#include <math.h>
using namespace std;
// Macros
#define REP(i, j, n) for(int i = j; i < n; i++)
#define trav(i, a) for(auto i: a)
#define all(x) x.begin(), x.end()
#define PB push_back
#define EB emplace_back
#define MP make_pair
#define F first
#define S second
#define GCD __gcd
// Type Names
typedef unsigned long long ull;
typedef long long ll;
typedef vector<int> vi;
typedef vector<long long> vll;
typedef pair<int, int> pii;
// custom hash
struct custom_hash {
static uint64_t splitmix64(uint64_t x) {
// http://xorshift.di.unimi.it/splitmix64.c
x += 0x9e3779b97f4a7c15;
x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
return x ^ (x >> 31);
}
size_t operator()(uint64_t x) const {
static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
return splitmix64(x + FIXED_RANDOM);
}
};
ll square(ll x){
return x * x;
}
bool is_right_triangle(ll x1, ll y1, ll x2, ll y2, ll x3, ll y3){
ll dist1 = square(x1 - x2) + square(y1 - y2);
ll dist2 = square(x1 - x3) + square(y1 - y3);
ll dist3 = square(x2 - x3) + square(y2 - y3);
vll dist{dist1, dist2, dist3};
sort(all(dist));
if (dist[0] + dist[1] == dist[2]) return true;
return false;
}
void solve(){
int n;
cin >> n;
n -= 3;
cout << 6 << " " << 10 << " " << 15 << " ";
int track = 15;
int i = 0;
while (i < n){
track++;
if (track % 3 == 0 && track % 2 == 0){
cout << track << " ";
i++;
}
else if (track % 5 == 0){
cout << track << " ";
i++;
}
}
cout << "\n";
}
int main()
{
cin.tie(NULL);
cout.tie(NULL);
ios_base::sync_with_stdio(false);
int t;
cin >> t;
for(int i = 0; i < t; i++)
solve();
return 0;
}